如何在Matlab中计算样本方差和总体方差?

7

我有一个向量 a

a = [86 100 41 93 75 61 76 92 88 97]

我希望自己计算stdmean

>> mean(a)

ans =

   80.9000

>> std(a)^2

ans =

  335.2111

但是当我这样做时,方差计算错误:
>> avg = mean(a)

avg =

   80.9000

>> var = sum(a.^2)/length(a) - avg^2

var =

  301.6900

我在这里错过了什么?

为什么sum(a.^2)/length(a) - avg^2 != std(a)^2

2个回答

8

试试这个:

var = sum(a.^2)/(length(a)-1) - (length(a))*mean(a)^2/(length(a)-1)


var =

  335.2111

var计算的是(无偏)样本方差,而不是总体方差。

完整的解释可以在这里阅读。

从matlab文档中可以看到,

VAR将Y标准化为N-1,其中N是样本大小。只要X由独立同分布的样本组成,这是总体方差的无偏估计。

但是

Y = VAR(X,1)将其标准化为N,并产生关于其均值的样本二阶矩。VAR(X,0)与VAR(X)相同。

所以

>> var(a,1)

ans =

  301.6900

2

无偏样本方差的计算公式为:

>> 1/(length(a)-1) * sum((a-mean(a)).^2)

ans =

  335.2111

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接