我正在尝试计算某些分布的标准偏差,并从两条路径中获得两个不同的结果。这对我来说没有多大意义 - 有人可以解释为什么会这样吗?
scipy.stats.binom(189, 100/189).std()
6.8622115305451707
scipy.stats.tstd([1]*100 + [0]*89)
0.50047821327986164
为什么这两个数字不相等?
答案 0 :(得分:6)
基本原因是你在那里采取了两个完全不同的标准偏差。我认为你误解了scipy.stats.binom
的作用。来自the documentation:
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之间的任何值。此分布不出所料地具有比您正在使用的其他样本数据大得多的差异,这仅限于值为零或一。
看起来你想要的是scipy.stats.binom(1, 100/189).std()
。但是,您仍然不能指望与样本数据完全相同的值,因为binom.std
计算整体分布的标准差,而另一个版本(scipy.stats.tstd([1]*100 + [0]*89)
)仅计算样本的标准偏差。如果您增加样本的大小(例如,执行scipy.stats.tstd([1]*1000 + [0]*890)
),则样本标准偏差将接近您从binom.std
获得的值。
您还可以使用scipy.std
或numpy.std
代替scipy.stats.tstd
来获取人口(非样本)标准。 scipy.stats.tstd
没有ddof
选项可让您选择自由度,并始终计算样本std
。