我已经计算是分布有1个自由度的卡方检验统计,并想找出P值,这对应于使用python。
我是一个Python和数学/统计新手,所以我想我想在这里是从SciPy的χ2的分布概率denisty功能。 然而,当我用这个像这样:
from scipy import stats
stats.chi2.pdf(3.84 , 1)
0.029846
然而,一些使用Google并讨论一些同事谁知道数学而不是蟒蛇说应该是0.05。
有任何想法吗? 欢呼声中,戴维
我已经计算是分布有1个自由度的卡方检验统计,并想找出P值,这对应于使用python。
我是一个Python和数学/统计新手,所以我想我想在这里是从SciPy的χ2的分布概率denisty功能。 然而,当我用这个像这样:
from scipy import stats
stats.chi2.pdf(3.84 , 1)
0.029846
然而,一些使用Google并讨论一些同事谁知道数学而不是蟒蛇说应该是0.05。
有任何想法吗? 欢呼声中,戴维
快速复习这里:
概率密度函数:把它看成一个点值; 如何密集的是在给定点的概率是多少?
累积分布函数:这是功能最多的概率给定点的质量; 有多大比例分配的谎言在这一点上的一面?
在你的情况,你拿了PDF,对此你有正确的答案。 如果你尝试1 - CDF:
>>> 1 - stats.chi2.cdf(3.84, 1)
0.050043521248705147
PDF CDF
要计算给定chisquared和零假设,和自由度也可以调用的概率chisqprob
:
>>> from scipy.stats import chisqprob
>>> chisqprob(3.84, 1)
0.050043521248705189
注意:
chisqprob已经过时! stats.chisqprob被弃用SciPy的0.17.0或更新; 使用stats.distributions.chi2.sf代替
虽然stats.chisqprob()和1- stats.chi2.cdf()出现了小的卡方值相媲美,对于大的卡方值,前者是优选的。 后者不能提供比机器精度小的p值,并会给接近机器精度非常不准确的答案。 如图所示由他人,可比值产生用于与所述两种方法的小卡方值:
>>>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
>>>chisqprob(70,1)
5.9304458500824782e-17
>>>chisqprob(500,1)
9.505397766554137e-111
>>>chisqprob(1000,1)
1.7958327848007363e-219
>>>chisqprob(1424,1)
1.2799986253099803e-311
>>>chisqprob(1425,1)
0.0
更新:如前所述,chisqprob()已经废弃了SciPy的版本0.17.0或更新开始。 高精确度的卡方值现在可以通过scipy.stats.distributions.chi2.sf()获得的,例如:
>>>from scipy.stats.distributions import chi2
>>>chi2.sf(3.84,1)
0.050043521248705189
>>>chi2.sf(1424,1)
1.2799986253099803e-311
你的意思做:
>>> 1 - stats.chi2.cdf(3.84, 1)
0.050043521248705147
其他一些解决方案已被弃用。 使用scipy.stats.chi2
生存函数。 这是一样的1 - cdf(chi_statistic, df)
例:
from scipy.stats import chi2
p_value = chi2.sf(chi_statistic, df)
如果您想了解数学,样品的p值,X(固定的),是
P [P(X)<= P(X)] = P [M(X)> = M(X)] = 1 - G(M(X)^ 2)
哪里,
因此,如果你的计算的固定观察的p值,x,那么您计算M(X)(广义Z值)和1-G(M(X)^ 2)。
例如,它的公知的是如果X是从一个单变量取样(K = 1)的正态分布,并且具有Z值= 2(它是从所述平均值2点标准差),则p值是约0.046(参照z分数表)
In [7]: from scipy.stats import chi2
In [8]: k = 1
In [9]: z = 2
In [10]: 1-chi2.cdf(z**2, k)
Out[10]: 0.045500263896358528