我有一个向量a
a = [86 100 41 93 75 61 76 92 88 97]
我想要计算std
和mean
自己:
>> 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
?
答案 0 :(得分:8)
试试这个:
var = sum(a.^2)/(length(a)-1) - (length(a))*mean(a)^2/(length(a)-1)
var =
335.2111
var
计算为(无偏)样本,而非人口方差。
如需完整说明,请阅读here。
来自matlab文档,
VAR将Y标准化为N-1,其中N是样本大小。这是个 X是人口方差的无偏估计 绘制,只要X由独立,相同分布组成 样品
<强>但强>
Y = VAR(X,1)归一化N并产生第二个矩 关于它的意思的样本。 VAR(X,0)与VAR(X)相同。
这样
>> var(a,1)
ans =
301.6900
答案 1 :(得分:2)
无偏差的样本方差由下式给出:
>> 1/(length(a)-1) * sum((a-mean(a)).^2)
ans =
335.2111