Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 标准偏差_Python_Scipy - Fatal编程技术网

Python 标准偏差

Python 标准偏差,python,scipy,Python,Scipy,我试图计算一些分布的标准偏差,并从两条路径得到两个不同的结果。这对我来说没有多大意义-有人能解释一下为什么会发生这种情况吗 scipy.stats.binom(189, 100/189).std() 6.8622115305451707 scipy.stats.tstd([1]*100 + [0]*89) 0.50047821327986164 为什么这两个数字不相等?最基本的原因是,这里取的是两个完全不同事物的标准差。我认为你误解了scipy.stats.binom的功能。发件人: bin

我试图计算一些分布的标准偏差,并从两条路径得到两个不同的结果。这对我来说没有多大意义-有人能解释一下为什么会发生这种情况吗

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)=选择(n,k)*p**k*(1-p)**(n-k)

对于{0,1,…,n}中的k

binom将n和p作为形状参数

当您执行
binom(189100/189)
时,您正在创建一个可以接受0到189之间任何值的分发。毫不奇怪,此分布的方差比您正在使用的其他样本数据大得多,这些样本数据的值限制为零或一

看起来您想要的是
scipy.stats.binom(1100/189.std()
。但是,您仍然不能期望得到与样本数据完全相同的值,因为
binom.std
正在计算总体分布的标准偏差,而另一个版本(
scipy.stats.tstd([1]*100+[0]*89)
)只计算样本的标准偏差。如果增加样本的大小(例如,do
scipy.stats.tstd([1]*1000+[0]*890)
),样本标准偏差将接近从
binom.std
获得的值


您还可以使用
scipy.std
numpy.std
而不是
scipy.stats.tstd
来获取总体(非样本)std
scipy.stats.tstd
没有用于选择自由度的
ddof
选项,并且始终计算有意义的样本
std

。有没有办法在不创建值的情况下获得与tstd相同的值?从我读到的内容来看,结果应该与scipy.stats.binom(1100/189).std()相关,如果是这样的话…@viraptor:请参阅我编辑过的答案。你不能得到完全相同的值,因为在一种情况下,你计算的是“真实”分布std,而在另一种情况下,你只能得到一个小样本的std。但是如果你增加样本量,这些值会越来越接近。@BrenBarn:我不确定你的“真实”与“样本”论点是否正确。这真的只是个自由度的问题<代码>scipy.stats.binom(1100./189).std()==0.49915244084955573==numpy.std([1]*100+[0]*89)。OTOH,
scipy.stats.tstd([1]*100+[0]*89)==0.50047821327986164==numpy.std([1]*100+[0]*89,ddof=1)
@DSM:是的,这就是我的意思,但你是对的,我没有说清楚。我的意思是,
tstd
正在计算样本(而非总体)std。我编辑了我的答案,以包含一些关于这方面的信息,并提到
scipy.std
,作为替代。我认为这样读起来更好。否则,听起来我们不希望结果完全相同,除非是在大样本范围内。不幸的是,我已经给了你+1,所以我不能再这样做了。^)