Python统计分析-卡方检验

  • Post author:
  • Post category:python


卡方检验是一种用途很广的计数资料的假设检验方法。它属于非参数检验的范畴,主要是比较两个及两个以上样本率( 构成比)以及两个分类变量的关联性分析。其根本思想就是在于比较理论频数和实际频数的吻合程度或拟合优度问题。

卡方检验的基本思想:

卡方检验是以



χ

2

\chi^2







χ










2












分布为基础的一种常用假设检验方法,它的基本假设H0是:观察频数与期望频数没有差别。

该检验的基本思想是:首先假设H0成立,基于此前提计算出



χ

2

\chi^2







χ










2












值,它表示观察值与理论值之间的偏离程度。根据



χ

2

\chi^2







χ










2












分布及自由度可以确定在H0假设成立的情况下获得当前统计量及更极端情况的概率P。如果P值很小,说明观察值与理论值偏离程度太大,应当拒绝原假设,表示比较资料之间有显著差异;否则就不能拒绝无效假设,尚不能认为样本所代表的实际情况和理论假设有差别。




χ

2

=

(

A

E

)

2

E

\chi ^2 = \sum\frac{(A-E)^2}{E}







χ










2











=

























E
















(


A





E



)










2































=



i

=

1

k

(

A

i

E

i

)

2

E

i

\sum\limits_{i = 1}^k\frac{(A_i-E_i)^2}{E_i}















i


=


1


















k
































E










i
































(



A










i






















E










i



















)










2































=



i

=

1

k

(

A

i

n

p

i

)

2

n

p

i

\sum\limits_{i = 1}^k\frac{(A_i-np_i)^2}{np_i}















i


=


1


















k































n



p










i
































(



A










i





















n



p










i



















)










2































(i=1,2,3,…,k)

其中,



A

i

A_i







A










i





















为i水平的观察频数,



E

i

E_i







E










i





















为i水平的期望频数,n为总频数,



p

i

p_i







p










i





















为i水平的期望频率。

例1:从某中学随机抽取两个班,调查他们对待文理分科的态度,结果,甲班37人赞成,27人反对;乙班39人赞成,21人反对,这两个班对待文理分科的态度是否有显著差异(α= .05)?

可以画一个



2

2

2*2






2













2





的行



*












列双向表 (2*2 crosstabs)

班级 赞成 反对
甲班 37 27
乙班 39 21
from  scipy.stats import chi2_contingency
import numpy as np
kf_data = np.array([[37,27], [39,21]])
kf = chi2_contingency(kf_datad)
print('chisq-statistic=%.4f, p-value=%.4f, df=%i expected_frep=%s'%kf)
# chisq-statistic=0.4054, p-value=0.5243, df=1 expected_frep=[[39.22580645 24.77419355][36.77419355 23.22580645]]

结论: 因为p值=0.5243>0.05, 故接受原假设, 认为这两个班对待文理分科的态度无显著差别。

例2:探究死亡年龄和居住地、性别是否有关?

可以画一个



r

c

r*c






r













c





的行



*












列双向表 (r*c crosstabs)

old ruralMale ruralFemale urbanMale urbanFemale
50-54 11.7 8.7 15.4 8.4
55-59 18.1 11.7 24.3 13.6
60-64 26.9 20.3 37 19.3
65-69 41 30.9 54.6 35.1
70-74 66 54.3 71.1 50
from  scipy.stats import chi2_contingency
import numpy as np
kf_data = np.array([[11.7,8.7,15.4,8.4], [18.1,11.7,24.3,13.6],
              [26.9,20.3,37,19.3],[41,30.9,54.6,35.1],
              [66,54.3,71.1,50]])
kf = chi2_contingency(kf_data)
print('chisq-statistic=%.4f, p-value=%.4f, df=%i expected_frep=%s'%kf)
# chisq-statistic=2.9208, p-value=0.9961, df=12 expected_frep=[[11.70042044  8.998674   14.46649418  9.03441138][17.92123221 13.78303687 22.15795602 13.8377749 ][27.39804334 21.07155563 33.87516171 21.15523933][42.77800776 32.90012937 52.89107374 33.03078913][63.90229625 49.14660414 79.00931436 49.34178525]]

结论: 因为p值=0.9961>0.05, 故接受原假设, 认为死亡年龄和居住地、性别无显著差别。



版权声明:本文为qq_38214903原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。