Scipy标准偏差

vir*_*tor 3 python scipy

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

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

scipy.stats.tstd([1]*100 + [0]*89)
0.50047821327986164
Run Code Online (Sandbox Code Playgroud)

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

Bre*_*arn 6

基本原因是你在那里采取两个完全不同的标准偏差.我觉得你误解了什么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之间的任何值.这种分布不出所料地具有比您正在使用的其他样本数据更大的方差,其限制为零或一的值.

它看起来像你想要的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.stdnumpy.std代替来获取人口(非样本)标准scipy.stats.tstd.scipy.stats.tstd没有ddof选项让您选择自由度,并始终计算样本std.