方差var、协方差cov、协方差矩阵(浅谈)-(二)_函数var
(2012-05-06 16:57:13)
标签:
方差matlabvar杂谈 |
分类: matlab |
函数名称: var
函数功能:求解方差
函数用法:var(X)
注:var(X,W)
下面详细介绍秘籍:
.........................................................
对于X是向量时,把向量中每个元素看做一个样本
var(X)或者var(X,0)函数输出这个向量中元素的样本方差的无偏估计值,var(X,1)输出的是样本方差
例1:
>> a = [1 6 1 4];
>> aa = var(a)
aa =
>> a_var = var(a,1)
a_var =
>> (sum((a-mean(a)).^2))/(length(a))
ans =
............................................................
对于X是矩阵时
把每行看做一个观察值,每列看做一个变量,函数输出一个行向量,每个元素计算的是该列的方差
例2:
>> X= [1 6 6;4 2 5;7 2 3]
X =
>> XX=var(X)
XX =
>>
ans =
>> X_var = var(X,1)
X_var =
>>
(sum((X-repmat(mean(X),3,1)).^2))/(size(X,1))
ans =
——————————————————————————————
对于var(X ,0 ,dim) 或者 var(X ,1 ,dim) 前面已说 0 对应 除以N-1;
1对应除以N;
下面以 var(X ,0 ,dim) 为例进行试验验证:
参考结果:默认为1情况↑(往上看)
>> var(X ,0 ,2)
ans =
>> Y = X';
>> var(Y)
ans =
...............................................................
对于 var(X,W)、var(X,W,dim) 中W为向量的情况:
把W看做X中对应观察值发生的次数(或者说概率也行)处理,为了清除,现粘贴matlab部分源代码(笔者好心已加注释)如下:
function y = var(x,w,dim)
%
%
%
%
%
逐行验证:
>> clear
>> x= [1 6 6;4 2 5;7 2 3]
x =
>> w = [1 2 3];
>> dim = 1 ;
>> n = size(x ,dim)
n =
>> wresize = ones(1,max(ndims(x),dim))
wresize =
>> wresize(dim) = n
wresize =
>> w = reshape(w ./ sum(w), wresize)
w =
>> x0 = bsxfun(@times, w, x)
x0 =
>> x = bsxfun(@minus, x, sum(x0,
dim));
>>
y =
>> var (x,w)
ans =
你要是还感觉晕的话(http://www/uc/myshow/blog/misc/gif/E___6706EN00SIGG.gif),下面以第一列为例说明W作用
>> X= [1 6 6;4 2 5;7 2 3];
>> a =
X(:,1);
>> b = w ./
sum(w);
>>
a0=a.*b;
>>
a1=sum(a0);
>> a2=a -a1;
>> c =
w.*(a2.^2)
>> sum(c)
ans =
注意: 需要注意的是,这种情况下求出的是样本的统计方差(也就是除以N的那种,因为式中w ./ sum(w)),并非样本方差无偏估计值
当然对于var(X,W,dim)中dim=1(对每列求方差)dim=2(对每行求方差)也可以进行验证,由于方式基本与之前的相同,在此不再赘述