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

0x9*_*x90 7 statistics matlab

我有一个矢量 a

a = [86 100 41 93 75 61 76 92 88 97]
Run Code Online (Sandbox Code Playgroud)

我要计算stdmean通过自己:

>> mean(a)

ans =

   80.9000

>> std(a)^2

ans =

  335.2111
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我得到错误的方差:

>> avg = mean(a)

avg =

   80.9000

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

var =

  301.6900
Run Code Online (Sandbox Code Playgroud)

我在这里想念什么?

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

Buc*_*orn 8

试试这个:

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


var =

  335.2111
Run Code Online (Sandbox Code Playgroud)

var 计算为(无偏)样本,而不是人口方差.

有关完整说明,请参阅此处.

从matlab文档中,

VAR将Y归一化为N-1,其中N是样本大小.只要X由独立的,相同分布的样本组成,这就是绘制X的总体方差的无偏估计.

Y = VAR(X,1)归一化N并产生样本的第二个矩与其平均值.VAR(X,0)与VAR(X)相同.

以便

>> var(a,1)

ans =

  301.6900
Run Code Online (Sandbox Code Playgroud)