Scipy标准偏差

时间:2012-12-02 05:06:11

标签: python scipy

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

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

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

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

1 个答案:

答案 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.stdnumpy.std代替scipy.stats.tstd来获取人口(非样本)标准。 scipy.stats.tstd没有ddof选项可让您选择自由度,并始终计算样本std