2014-02-11 2 views
1

Я пытаюсь рассчитать некоторые значения p с помощью scipy.stats.chi2.cdf, как показано ниже. Но функция возвращает 0.stats.scipy.chi2 возвращает значение 0.0

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

Может что-нибудь сказать мне, если есть другой модуль для использования, или, если есть параметр, который я пропускаю, что позволит ему вычислить р-значения этого мало, я могу каким-то образом установите код для возврата минимального ненулевого значения P?

Приветствие

ответ

6

Вы можете использовать функцию выживания вместо (1-КОРА):

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

И мы можем проверить этот результат, используя аналитический КОР:

>>> 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

Спасибо, я буду сделайте небольшой бенчмаркинг, чтобы узнать, какой из них быстрее. Наверное, скудный, но ты никогда не знаешь! Cheers –

+0

@DavyKavanagh: почти наверняка один из них. Мне просто нужен был способ проверить, давало ли я то, что я думал, что это дает. : ^) – DSM

Смежные вопросы