Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Matlab将相关矩阵转化为协方差矩阵_Matlab_Correlation_Covariance - Fatal编程技术网

用Matlab将相关矩阵转化为协方差矩阵

用Matlab将相关矩阵转化为协方差矩阵,matlab,correlation,covariance,Matlab,Correlation,Covariance,我想把相关矩阵变成协方差矩阵 1.0000 0.3365 0.4388 0.4396 0.5050 0.4772 0.4897 0.4899 0.4686 0.2556 0.3365 1.0000 0.3812 0.4656 0.3437 0.4274 0.4658 0.3631 0.4377 0.2638 0.4388 0.3812 1.0000 0.502

我想把相关矩阵变成协方差矩阵

  1.0000    0.3365    0.4388    0.4396    0.5050    0.4772    0.4897    0.4899    0.4686    0.2556
  0.3365    1.0000    0.3812    0.4656    0.3437    0.4274    0.4658    0.3631    0.4377    0.2638
  0.4388    0.3812    1.0000    0.5027    0.5141    0.4792    0.5199    0.5133    0.5382    0.2985
  0.4396    0.4656    0.5027    1.0000    0.4809    0.5638    0.7221    0.5246    0.5728    0.3295
  0.5050    0.3437    0.5141    0.4809    1.0000    0.4681    0.5366    0.5732    0.5068    0.2948
  0.4772    0.4274    0.4792    0.5638    0.4681    1.0000    0.6093    0.6499    0.5707    0.2813
  0.4897    0.4658    0.5199    0.7221    0.5366    0.6093    1.0000    0.5797    0.6428    0.3079
  0.4899    0.3631    0.5133    0.5246    0.5732    0.6499    0.5797    1.0000    0.5936    0.2971
  0.4686    0.4377    0.5382    0.5728    0.5068    0.5707    0.6428    0.5936    1.0000    0.3435
  0.2556    0.2638    0.2985    0.3295    0.2948    0.2813    0.3079    0.2971    0.3435    1.0000
导入一些数据,我发现协方差(sigma_a)

它返回

0.1211    0.0231    0.0422    0.0278    0.0411    0.0354    0.0289    0.0366    0.0343    0.0165
0.0231    0.0788    0.0283    0.0242    0.0199    0.0248    0.0219    0.0199    0.0253    0.0140
0.0422    0.0283    0.1282    0.0339    0.0432    0.0366    0.0321    0.0399    0.0420    0.0216
0.0278    0.0242    0.0339    0.0554    0.0261    0.0294    0.0312    0.0269    0.0297    0.0164
0.0411    0.0199    0.0432    0.0261    0.0849    0.0289    0.0271    0.0371    0.0317    0.0173
0.0354    0.0248    0.0366    0.0294    0.0289    0.0728    0.0293    0.0400    0.0339    0.0149
0.0289    0.0219    0.0321    0.0312    0.0271    0.0293    0.0454    0.0276    0.0309    0.0135
0.0366    0.0199    0.0399    0.0269    0.0371    0.0400    0.0276    0.0726    0.0356    0.0162
0.0343    0.0253    0.0420    0.0297    0.0317    0.0339    0.0309    0.0356    0.0715    0.0198
0.0165    0.0140    0.0216    0.0164    0.0173    0.0149    0.0135    0.0162    0.0198    0.0927
然后我找到了相关矩阵(rho)

它返回

  1.0000    0.2365    0.3388    0.3396    0.4050    0.3772    0.3897    0.3899    0.3686    0.1556
  0.2365    1.0000    0.2812    0.3656    0.2437    0.3274    0.3658    0.2631    0.3377    0.1638
  0.3388    0.2812    1.0000    0.4027    0.4141    0.3792    0.4199    0.4133    0.4382    0.1985
  0.3396    0.3656    0.4027    1.0000    0.3809    0.4638    0.6221    0.4246    0.4728    0.2295
  0.4050    0.2437    0.4141    0.3809    1.0000    0.3681    0.4366    0.4732    0.4068    0.1948
  0.3772    0.3274    0.3792    0.4638    0.3681    1.0000    0.5093    0.5499    0.4707    0.1813
  0.3897    0.3658    0.4199    0.6221    0.4366    0.5093    1.0000    0.4797    0.5428    0.2079
  0.3899    0.2631    0.4133    0.4246    0.4732    0.5499    0.4797    1.0000    0.4936    0.1971
  0.3686    0.3377    0.4382    0.4728    0.4068    0.4707    0.5428    0.4936    1.0000    0.2435
  0.1556    0.1638    0.1985    0.2295    0.1948    0.1813    0.2079    0.1971    0.2435    1.0000
我知道matlab中有一个函数corrcov()可以找到相关矩阵。。。所以我试着

 corrcov(sigma_a) 
我比较了结果,corrcov(sigma_a)和rho产生了相同的相关矩阵。 然而,我想改变所有的成对相关性,精确到+0.1。我是这样做的

rho_u = (rho + .1) - .1*eye(10); 
我得到了下面的相关矩阵

  1.0000    0.3365    0.4388    0.4396    0.5050    0.4772    0.4897    0.4899    0.4686    0.2556
  0.3365    1.0000    0.3812    0.4656    0.3437    0.4274    0.4658    0.3631    0.4377    0.2638
  0.4388    0.3812    1.0000    0.5027    0.5141    0.4792    0.5199    0.5133    0.5382    0.2985
  0.4396    0.4656    0.5027    1.0000    0.4809    0.5638    0.7221    0.5246    0.5728    0.3295
  0.5050    0.3437    0.5141    0.4809    1.0000    0.4681    0.5366    0.5732    0.5068    0.2948
  0.4772    0.4274    0.4792    0.5638    0.4681    1.0000    0.6093    0.6499    0.5707    0.2813
  0.4897    0.4658    0.5199    0.7221    0.5366    0.6093    1.0000    0.5797    0.6428    0.3079
  0.4899    0.3631    0.5133    0.5246    0.5732    0.6499    0.5797    1.0000    0.5936    0.2971
  0.4686    0.4377    0.5382    0.5728    0.5068    0.5707    0.6428    0.5936    1.0000    0.3435
  0.2556    0.2638    0.2985    0.3295    0.2948    0.2813    0.3079    0.2971    0.3435    1.0000
但是,当我尝试将调整后的相关矩阵作为协方差矩阵时,cov()并没有生成正确的矩阵。我试过

b = cov(rho_u);
为什么呢?还有别的办法吗?或者有没有办法调整一下我的做法

 rho = inv(sqrt(diag(diag(sigma_a))))*sigma_a*inv(sqrt(diag(diag(sigma_a)))); 
所以它做了相反的事情(rho找到了相关矩阵)来得到协变矩阵

根据我对下面答案的理解,那么rho_u的协方差矩阵将通过,做

sigma = sqrt(var(rho_u));
D = diag(sigma); 
sigma_u = D*rho_u*D

这是什么意思?我有点困惑,我应该把方差带到哪些变量。我认为这意味着rho_?

MATLAB函数
cov
并没有定义为将相关矩阵转换为协方差矩阵,正如其文档所述

因此,简单地将相关矩阵馈送到
cov()
将不起作用。您需要计算协方差矩阵的是变量的方差(您可以从数据中计算,但没有在此处发布)

因此,在您的示例中,使用您发布的
10x10
相关矩阵
rho
,并使用一些随机数作为标准偏差

sigma = rand(size(rho(:,1)));
D = diag(sigma);         % Make the sigmas appear on the diagonal of an 10x10 matrix
(当然,您必须插入输入数据中的计算值)。然后,可以通过以下方式计算协方差矩阵:

S = D*rho*D

考虑通过前面的问题来标记答案,点击前面的代码>✔在答案的左侧。您也可以通过单击
在答案的左侧。这将奖励志愿者他们应得的奖励,并帮助未来的访问者确定答案的有用性。如果这些答案不能解决您的问题,请在答案下发表评论,解释问题,让回答者知道这一点。谢谢
sigma = rand(size(rho(:,1)));
D = diag(sigma);         % Make the sigmas appear on the diagonal of an 10x10 matrix
S = D*rho*D