虽然stats.chisqprob()和1-stats.chi2.cdf()对于小的卡方值来说是可比较的,但是对于大的卡方值来说,前者更可取。后者不能提供比机器epsilon小的p值,并且会给出接近机器epsilon的非常不准确的答案。如其他人所示,两种方法得出的小卡方值具有可比性:>>>from scipy.stats import chisqprob, chi2
>>>chisqprob(3.84,1)
0.050043521248705189
>>>1 - chi2.cdf(3.84,1)
0.050043521248705147
使用1-chi2.cdf()在这里分解:>>>1 - chi2.cdf(67,1)
2.2204460492503131e-16
>>>1 - chi2.cdf(68,1)
1.1102230246251565e-16
>>>1 - chi2.cdf(69,1)
1.1102230246251565e-16
>>>1 - chi2.cdf(70,1)
0.0
而chisqprob()为更大范围的卡方值提供了准确的结果,生成的p值几乎与大于零的最小浮点值一样小,直到它太下溢:>>>chisqprob(67,1)
2.7150713219425247e-16
>>>chisqprob(68,1)
1.6349553217245471e-16
>>>chisqprob(69,1)
9.8463440314253303e-17
>