使用python卡方和卡方值表得出的不同结果

使用python卡方和卡方值表得出的不同结果,python,statistics,chi-squared,Python,Statistics,Chi Squared,我需要通过卡方检验得到p值。 我的节目是: from scipy.stats import chisquare c = chisquare([10,4,7,5],ddof=[0,1,2,3]) print(c) 结果是: Power_divergenceResult(statistic=3.2307692307692308, pvalue=array([ 0.35739509, 0.19881419, 0.07226674, nan])) 当我尝试使用卡方值表(例如,

我需要通过卡方检验得到p值。 我的节目是:

from scipy.stats import chisquare

c = chisquare([10,4,7,5],ddof=[0,1,2,3])

print(c)
结果是:

Power_divergenceResult(statistic=3.2307692307692308, pvalue=array([ 0.35739509,  0.19881419,  0.07226674,         nan]))
当我尝试使用卡方值表(例如,从这个站点)获得p值时,结果是不同的。 在本例中,使用自由度为1(ddof=0)的python p值为0.35739509,但使用表p值为0.01。
您能解释一下为什么结果不同吗?

函数
chisquare
执行,但表格是关于

如果您想使用您需要使用的发行版。特别是,要复制表中的值,请执行以下操作:

import scipy as sp

p = 0.1
df = 5

x = sp.stats.chi2.ppf(1-p, df=df)
print(x)  # 9.23635689978
要得到给定x和自由度的p值:

p = 1 - sp.stats.chi2.cdf([10,4,7,5], df=[0,1,2,3])
print(p)  
# [        nan  0.04550026  0.03019738  0.17179714]

注意,该表将p定义为概率密度函数上从x到无穷大的积分。scipy中的累积密度函数是从0到x的积分。因此,
p=1-cdf

要得到p值,我到底要做什么?@LOGA scipy:您需要将
x
df
传递到
cdf
函数,并取1减去结果(参见第二个代码示例)。表:在与df相对应的行中查找与x最接近的值,并从列顶部获取p值。(我已经更新了示例以使用您问题中的值。)为什么它仍然返回四个值?df=1时,python返回[nan………]四个输入值->四个输出值。df=1返回nan是什么意思?首先我要计算这个列表的平方比[10,4,7,5],然后我要用平方比计算p值。它将显示意义的分布是否不同于[6.5,6.5,6.5,6.5,6.5](当所有意义的p值相等时)。我只需要一个p值来比较,如果它大于0.5,那么这个数字列表的分布不好,或者小于0.5,那么它就有好的分布。