我试图计算一些分布的标准差,并从两条路径中得到两个不同的结果。这对我来说没什么意义--有人能解释一下为什么会发生这种事吗?
scipy.stats.binom(189, 100/189).std()
6.8622115305451707
scipy.stats.tstd([1]*100 + [0]*89)
0.50047821327986164为什么这两个数字不相等?
发布于 2012-12-02 05:16:17
最基本的原因是你取了两种完全不同的东西的标准差。我想你误解了scipy.stats.binom的工作。来自文献资料
binom的概率质量函数是:
binom.pmf(k) = choose(n,k) * p**k * (1-p)**(n-k)对于k {0,1,.,n} 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))只计算样本的标准差。如果您增加了样本的大小(例如,做scipy.stats.tstd([1]*1000 + [0]*890)),那么样本标准差将接近您从binom.std获得的值。
您还可以使用scipy.std或numpy.std而不是scipy.stats.tstd来获取人群(而不是样本)性病。scipy.stats.tstd没有允许您选择自由度的ddof选项,并且总是计算示例std。
https://stackoverflow.com/questions/13666576
复制相似问题