最近在用matlab ,一直搞不懂cov()函数怎么算出来了。从网上查了一下,结合一些程序例子总结如下:
x =
6 9 3 4
5 4 2 1
6 7 7 8
7 8 9 10
>>cov(x)
ans =
0.6667 1.3333 2.3333 3.0000
1.3333 4.6667 3.0000 5.0000
2.3333 3.0000 10.9167 13.0833
3.0000 5.0000 13.0833 16.2500
归纳起来为:cov对角线是相应列的方差,非对角线列是相应列的协方差,你是4*4的原始方阵,所以就是4*4的矩阵。
1.先来验证cov 对角线是相应列方差:
>>var(x(:,1))
ans =
0.6667
>>var(x(:,2))
ans =
4.6667
>>var(x(:,3))
ans =
10.9167
>>var(x(:,4))
ans =
16.2500
>> diag(cov(x))
ans =
0.6667
4.6667
10.9167
16.2500
>>
从上面结果可以看出cov对角线就是每一列方差。
2.下面来验证非对角线列是相应列的协方差
D(X+Y)=D(X)+D(Y)+2COV(X,Y)
因此 COC(X,Y)=(D(X+Y)-D(X)-D(Y))/2 (a)
我们来验证cov(X,Y)(4,3)
据a式
>> (var(x(:,3)+x(:,4))-var(x(:,3))-var(x(:,4)))/2
ans =
13.0833
>>值正好等于cov(X,Y)(4,3), cov(X,Y)(3,4)。
3.疑问
cov(X,Y)=EXY - EX*EY
但是我按这种方法算,不对。如下:
>> mean(x(:,4).*x(:,3))-mean(x(:,4)).*mean(x(:,3))
ans =
9.8125
≠ 13.0833
有大牛知道为什么不? 谢谢了。