4

我正在尝试计算某些分布的标准偏差,并不断从两条路径获得两个不同的结果。这对我来说没有多大意义 - 有人可以解释为什么会这样吗?

scipy.stats.binom(189, 100/189).std()
6.8622115305451707

scipy.stats.tstd([1]*100 + [0]*89)
0.50047821327986164

为什么这两个数字不相等?

4

1 回答 1

7

基本原因是你在那里取了两个完全不同的东西的标准偏差。我认为你误解了什么scipy.stats.binom。从文档中

binom 的概率质量函数为:

binom.pmf(k) = choose(n,k) * p**k * (1-p)**(n-k)

对于 {0,1,...,n} 中的 k。

binom 将 n 和 p 作为形状参数。

当您这样做时binom(189, 100/189),您正在创建一个可以取 0 到 189 之间的任何值的分布。不出所料,此分布的方差比您正在使用的其他样本数据大得多,后者仅限于 0 或 1 的值。

它看起来像你想要的scipy.stats.binom(1, 100/189).std()。但是,您仍然不能期望与您从样本数据中获得的值完全相同,因为它binom.std正在计算整体分布的标准偏差,而另一个版本 ( scipy.stats.tstd([1]*100 + [0]*89)) 仅计算样本的标准偏差. 如果您增加样本的大小(例如, do scipy.stats.tstd([1]*1000 + [0]*890)),样本标准偏差将接近您从中获得的值binom.std

您还可以使用scipy.stdornumpy.std代替scipy.stats.tstd. scipy.stats.tstd没有ddof让您选择自由度的选项,并且始终计算一个 sample std

于 2012-12-02T05:16:17.417 回答