2014-02-11 55 views
1

我想用scipy.stats.chi2.cdf来计算一些p值,如下所示。但是,函数返回0。stats.scipy.chi2返回值0.0

from scipy import stats 
1-stats.chi2.cdf(332.185545938, 18.8967858326) 
0.0 

什么能告诉我,如果有另一模块来使用,或者,如果有一个参数,我很想念,将允许它来计算p值这个小,我可以以某种方式设置代码返回最小的非零P值?

干杯

回答

6

您可以用生存函数,而不是(1-CDF):

>>> from scipy import stats 
>>> 1 - stats.chi2.cdf(332.185545938, 18.8967858326) 
0.0 
>>> stats.chi2.sf(332.185545938, 18.8967858326) 
4.1718344487607692e-59 

而且我们可以用分析CDF检查结果如下:

>>> import mpmath 
>>> mpmath.mp.dps = 100 
>>> def chi2_cdf(k,x): return mpmath.gammainc(x/2.0,0,k/2.0)/mpmath.gamma(x/2.0) 
>>> chi2_cdf(332.185545938, 18.8967858326) 
mpf('0.9999999999999999999999999999999999999999999999999999999999582816555123918223004416138082464542159504946') 
>>> float(1-_) 
4.171834448760817e-59 
+0

谢谢,我会做一点基准测试,看哪一个更快。可能是scipy的一个,但你永远不知道!干杯 –

+0

@DavyKavanagh:几乎可以肯定是'scipy'。我只是需要一些方法来检查它是否给予了我认为给予的东西。 :^) – DSM