【问题标题】:Why is MATLAB calculation of standard deviation different than a hand calculation?为什么 MATLAB 计算标准偏差与手动计算不同?
【发布时间】:2015-08-27 00:51:20
【问题描述】:

Matlab:

>> std( [3 2 2 3] )
ans =
    0.5774

Layman 根据Google 对标准差的解释:

Mean of {3,2,2,3} = 2.5
Deviation from mean for each value = {0.5, 0.5, 0.5, 0.5}
Square of deviation from mean = {0.25, 0.25, 0.25, 0.25}
Mean of the squares = 0.25
Square root of 0.25 = 0.5
Therefore Standard Deviation of {3,2,2,3} = 0.5

我搞砸了什么?我愚蠢地期望这两个数字一致。

【问题讨论】:

  • 因未能阅读您的 Intro Stats 教科书而陷入困境 :-)。可以在此处(或 webZ 上的其他地方)找到使用无偏估计器的原因
  • 我正在浏览 khanacademy.com 上的基本统计数据包。我现在模糊地记得这一点,但由于那里的问题中没有提到它,所以它没有弹出。希望稍后会介绍。

标签: matlab standard-deviation


【解决方案1】:

Matlab std 计算 corrected standard deviation。来自help std

std 通过 (N-1) 对 Y 进行归一化,其中 N 是样本大小。这是 总体方差的无偏估计量的 sqrt 从 画出哪个 X,只要 X 由独立的、相同的 分发样本。

所以你有

Square of deviation from mean = {0.25, 0.25, 0.25, 0.25}

那么您不会计算偏差的实际均值,而是sqrt(sum([0.25 0.25 0.25 0.25])/3)。通常,sum(square of deviation)/(N-1) 表示长度为 N 的向量。

更新:正如Leonid Beschastny 指出的,你可以用matlab 来计算未校正的标准差。再次,来自help std

Y = std(X,1) 通过 N 归一化并产生第二个的平方根 样本关于其均值的时刻。 std(X,0) 与 std(X) 相同。

【讨论】:

  • 值得一提的是,std 可用于计算校正和未校正的标准差,例如std(A, 1) 将计算 A 的未校正标准差。
  • @LeonidBeschastny 感谢您的洞察力,我将其添加到我的答案中。希望你不要介意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多