matlab中已知协方差矩阵怎样算相关系数? 20
已知协方差矩阵,计算相关系数可以按图中的公式进行。
R就是相关系数矩阵,C为协方差矩阵。
>> a=rand(5,5)
a =
0.9501 0.7621 0.6154 0.4057 0.0579
0.2311 0.4565 0.7919 0.9355 0.3529
0.6068 0.0185 0.9218 0.9169 0.8132
0.4860 0.8214 0.7382 0.4103 0.0099
0.8913 0.4447 0.1763 0.8936 0.1389
>> C=cov(a)
C =
0.0878 0.0129 -0.0526 -0.0253 -0.0276
0.0129 0.1022 -0.0229 -0.0739 -0.0993
-0.0526 -0.0229 0.0819 -0.0037 0.0515
-0.0253 -0.0739 -0.0037 0.0774 0.0624
-0.0276 -0.0993 0.0515 0.0624 0.1079%%协方差矩阵
>> R=corrcoef(a)
R =
1.0000 0.1364 -0.6207 -0.3063 -0.2836
0.1364 1.0000 -0.2503 -0.8309 -0.9454
-0.6207 -0.2503 1.0000 -0.0460 0.5478
-0.3063 -0.8309 -0.0460 1.0000 0.6822
-0.2836 -0.9454 0.5478 0.6822 1.0000%%相关系数矩阵
可以看出相关系数矩阵是是对称阵。它的计算结果R(1,2)是第一列和第二列的相关系数;R(1,3)是第一列和第三列的相关系数;R(2,3)是第二列和第三列的相关系数;R(1,2)和R(2,1)都是第一列和第二列的相关系数所以是相等的。
第i行与第j行的相关系数为:
r(i,j)=c(i,j)/sqrt(c(i,i)*c(j,j))
若要求整个矩阵可用循环实现
[m,n]=size(c);
for i=1:m
for j=1:n
r(i,j)=c(i,j)/sqrt(c(i,i)*c(j,j));
end
end
s = diag(C);
if (any(s~=1))
C = C ./ sqrt(s * s');
end