2014-02-11 69 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