随笔-295  评论-26  文章-1  trackbacks-0

 a=[-1,1,2;-2,3,1;4,0,9]
for i=1:size(a,2) 
    for j=1:size(a,2) 
        c(i,j)=sum((a(:,i)-mean(a(:,i))).*(a(:,j)-mean(a(:,j))))/(size(a,1)-1);
    end 
end

c =

   10.3333   -4.1667    3.0000

   -4.1667    2.3333   -1.5000

    3.0000   -1.5000    1.0000 

复制代码

 c为求得的协方差矩阵,在matlab以矩阵a的每一列为变量,对应的每一行为样本。这样在矩阵a中就有3个列变量分别为a(:,1), a(:,2), a(:,3)。

 在协方差矩阵c中,每一个元素c(i,j)为对第i列与第j列的协方差,例如c(1,2) = -4.1667为第一列与第二列的协方差。

 

 拿c(1,2)的求解过程来说

 c(1,2)=sum((a(:,1)-mean(a(:,1))).*(a(:,2)-mean(a(:,2))))/(size(a,1)-1);

 1. a(:,1)-mean(a(:,1)),第一列的元素减去该列的均值得到

   -1.3333

   -2.3333

    3.6667

2,  a(:,2)-mean(a(:,2)),第二列的元素减去该列的均值得到

   -0.3333

    1.6667

   -1.3333

3, 再将第一步与第二部的结果相乘

   -1.3333        -0.3333           0.4444

   -2.3333  .*     1.6667  =     -3.8889

    3.6667         -1.3333          -4.8889

 

4, 再将结果求和/size(a,1)-1 得 -4.1667,该值即为c(1,2)的值。

 

再细看一下是不是与协方差公式:Cov(X,Y) = E{ [ (X-E(X) ] [ (Y-E(Y) ] } 过程基本一致呢,只是在第4步的时候matlab做了稍微的调整,自由度为n-1,减少了一行的样本值个数。

>> a=[-1,1,2;-2,3,1;4,0,9]
a =
    -1     1     2
    -2     3     1
     4     0     9
>> cov(a)
ans =
   10.3333   -4.1667   14.0000
   -4.1667    2.3333   -5.5000
   14.0000   -5.5000   19.0000
>> dim1=a(:,1)
dim1 =
    -1
    -2
     4
>> dim2=a(:,2)
dim2 =
     1
     3
     0
>> dim3=a(:,3)
dim3 =
     2
     1
     9
>> dim1-mean(dim1)
ans =
   -1.3333
   -2.3333
    3.6667
>> dim2-mean(dim2)
ans =
   -0.3333
    1.6667
   -1.3333
>> m=dim1-mean(dim1)
m =
   -1.3333
   -2.3333
    3.6667
>> m=dim2-mean(dim2)
m =
   -0.3333
    1.6667
   -1.3333
>> m=dim1-mean(dim1)
m =
   -1.3333
   -2.3333
    3.6667
>> n=dim2-mean(dim2)
n =
   -0.3333
    1.6667
   -1.3333
>> m.*n
ans =
    0.4444
   -3.8889
   -4.8889
>> size(a,1)
ans =
     3
>> sum(m.*n)
ans =
   -8.3333
>> ans/2
ans =
   -4.1667









大盘预测 国富论
posted on 2015-08-26 19:06 华梦行 阅读(251) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: