我需要通过卡方获得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]))
当我尝试使用卡方值表(例如来自此网站https://www.medcalc.org/manual/chi-square-table.php)获取p值时,结果会有所不同。 在此示例中,使用自由度= 1(ddof = 0)的python p值为0.35739509,但使用表p值为0.01。 你能解释为什么结果不同吗?
答案 0 :(得分:2)
函数chisquare
执行Chi-squared hypothesis test但该表与Chi-square distribution有关。
如果您要使用发布,则需要使用scipy.stats.chi2
。特别是,要从表中复制值:
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
。