我正在尝试使用scipy.stats.chi2.cdf计算一些p值,如下所示。但该函数返回0。
from scipy import stats
1-stats.chi2.cdf(332.185545938, 18.8967858326)
0.0
可以告诉我是否有另一个模块可供使用,或者如果有一个我缺少的参数可以让它计算这么小的p值,我能以某种方式设置代码以返回最小的非零值p值
干杯
答案 0 :(得分: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