将相关矩阵更改为协方差矩阵Matlab

时间:2018-11-07 07:21:53

标签: matlab correlation covariance

我正在尝试将相关矩阵更改为协方差矩阵...

导入一些数据,我发现了协方差(sigma_a)

sigma_a = (sigma_d + (mu_d'+1)*(mu_d+1)).^N - (mu_d'+1).^N *(mu_d+1).^N;

哪个返回...

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)

rho = inv(sqrt(diag(diag(sigma_a))))*sigma_a*inv(sqrt(diag(diag(sigma_a))));  

哪个返回...

  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_u?

1 个答案:

答案 0 :(得分:2)

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

cov(X), if X is a vector, returns the variance.  For matrices, where 
each row is an observation, and each column a variable, cov(X) is the 
covariance matrix.

因此,仅将相关矩阵输入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
相关问题