我正在尝试计算某些分布的标准偏差,并不断从两条路径获得两个不同的结果。这对我来说没有多大意义 - 有人可以解释为什么会这样吗?
scipy.stats.binom(189, 100/189).std()
6.8622115305451707
scipy.stats.tstd([1]*100 + [0]*89)
0.50047821327986164
为什么这两个数字不相等?
基本原因是你在那里取了两个完全不同的东西的标准偏差。我认为你误解了什么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.std
ornumpy.std
代替scipy.stats.tstd
. scipy.stats.tstd
没有ddof
让您选择自由度的选项,并且始终计算一个 sample std
。