概率统计Python计算:假设检验应用——联列表中相互独立性的检验

在这里插入图片描述
设总体的所有个体可按两种不同的标志进行分类,常常希望通过随机抽样检验这两种标志是否相互独立。为解决此类问题,通常将取得的样本 ( X 1 , X 2 , ⋯   , X n ) (X_1,X_2,\cdots,X_n) (X1,X2,,Xn)按第一种标志分成 u u u个类,按第二种标志分成 v v v个类( u ⋅ v ≤ n u\cdot v\leq n uvn),按指标统计分属不同标志分类的频数 f i j f_{ij} fij:为样本中第一种标志属于第 i i i类且第二种标志属于第 j j j类的数据个数。这样构成如下的联列表

1 ⋯ \cdots j j j ⋯ \cdots v v v
1 f 11 f_{11} f11 ⋯ \cdots f 1 j f_{1j} f1j ⋯ \cdots f 1 v f_{1v} f1v
⋮ \vdots ⋯ ⋯ \cdots\cdots ⋯⋯
i i i f i 1 f_{i1} fi1 ⋯ \cdots f i j f_{ij} fij ⋯ \cdots f i v f_{iv} fiv
⋮ \vdots ⋯ ⋯ \cdots\cdots ⋯⋯
u u u f u 1 f_{u1} fu1 ⋯ \cdots f u j f_{uj} fuj ⋯ \cdots f u v f_{uv} fuv

根据联列表,记 f i ⋅ = ∑ j = 1 v f i j f_{i\cdot}=\sum\limits_{j=1}^vf_{ij} fi=j=1vfij i = 1 , 2 , ⋯   , u i=1,2,\cdots,u i=1,2,,u f ⋅ j = ∑ i = 1 u f i j f_{\cdot j}=\sum\limits_{i=1}^uf_{ij} fj=i=1ufij j = 1 , 2 , ⋯   , v j=1,2,\cdots,v j=1,2,,v。两个标志相互独立的假设可表为
H 0 : f i j n = f i ⋅ n f ⋅ j n , 1 ≤ i ≤ u , 1 ≤ j ≤ v . H_0: \frac{f_{ij}}{n}=\frac{f_{i\cdot}}{n}\frac{f_{\cdot j}}{n},1\leq i\leq u,1\leq j\leq v. H0:nfij=nfinfj,1iu,1jv.
分布拟合检验相仿,当假设 H 0 H_0 H0为真时, f i j n \frac{f_{ij}}{n} nfij f i ⋅ n ⋅ f ⋅ j n \frac{f_{i\cdot}}{n}\cdot\frac{f_{\cdot j}}{n} nfinfj应当比较接近,亦即差异平方和 ∑ i = 1 u ∑ j = 1 v ( f i j − f i ⋅ f ⋅ j n ) 2 \sum\limits_{i=1}^u\sum\limits_{j=1}^v\left(f_{ij}-\frac{f_{i\cdot}f_{\cdot j}}{n}\right)^2 i=1uj=1v(fijnfifj)2很小。构造统计量
χ 2 = ∑ i = 1 u ∑ j = 1 v ( f i j − f i ⋅ f ⋅ j / n ) 2 f i ⋅ f ⋅ j / n \chi^2=\sum\limits_{i=1}^u\sum\limits_{j=1}^v\frac{\left(f_{ij}-f_{i\cdot}f_{\cdot j}/n\right)^2}{f_{i\cdot}f_{\cdot j}/n} χ2=i=1uj=1vfifj/n(fijfifj/n)2
则可证明当 n n n很大且 H 0 H_0 H0为真时, χ 2 \chi^2 χ2近似服从 χ 2 ( ( u − 1 ) ( v − 1 ) ) \chi^2((u-1)(v-1)) χ2((u1)(v1))分布。于是当 n n n很大时,为在显著水平 α \alpha α下检验假设 H 0 : H_0: H0:“两个标志相互独立”,只需检验上述统计量是否满足 χ 2 < χ α 2 ( ( u − 1 ) ( v − 1 ) ) \chi^2<\chi^2_{\alpha}((u-1)(v-1)) χ2<χα2((u1)(v1)),满足则接受假设,否则拒绝假设。
可见,联列表中相互独立性检验问题是分布拟合检验问题的特例:频数序列为 f i j f_{ij} fij,假设分布概率序列换成 f i ⋅ f ⋅ j n \frac{f_{i\cdot}f_{\cdot j}}{n} nfifj i = 1 , 2 , ⋯   , u , j = 1 , 2 , ⋯   , v i=1,2,\cdots,u,j=1,2,\cdots,v i=1,2,,u,j=1,2,,v r r r u + v − 2 u+v-2 u+v2。故仍然可以利用scipy.stats的chisquare函数进行计算。需要注意的是,要把表示 f i j f_{ij} fij f i ⋅ ⋅ f ⋅ j f_{i\cdot}\cdot f_{\cdot j} fifj u × v u\times v u×v的矩阵,转换成含有 u v uv uv个元素的数组。
例1为了了解某种药品对于某种疾病的疗效是否与患者的年龄有关,共抽查了300名患者。将疗效分成“显著”、“一般”、“较差”三个等级;将年龄分成“儿童”、“中青年”、“老年”三个等级,得到如下联列表

儿童中青年老年
显著583832
一般24445
较差231814

要在显著水平 α = 0.05 \alpha=0.05 α=0.05下检验假设“药品疗效与患者年龄相互独立”。
解: 下列代码完成本例计算

from scipy.stats import chisquare           #导入chisquare
import numpy as np                          #导入numpy
alpha=0.05                                  #显著水平
f=np.array([[58, 38, 32],                   #联列表
            [28, 44, 45],
            [23, 18, 14]])
(u, v)=f.shape                              #联列表结构
n=f.sum()                                   #样本容量
fi, fj=margDist(f)                          #边缘分布
fij=fi*fj/n                                 #假设概率序列
_, pvalue=chisquare(f.reshape(u*v,),        #计算假设检验p值
                       fij.reshape(u*v,),
                       ddof=u+v-2)
print('H0 is %s'%(pvalue>=alpha))

程序的第3~6行按题面设置各项数据。第7行获取联列表结构行数u和列数v。第8行获取样本容量n。第9行调用函数margDist(详见博文《离散型2-维随机向量的联合分布律及边缘分布》),计算边缘分布序列fi和fj。第10行计算假设分布概率序列fij。第11~13行调用chisqaure函数计算检验p值。注意传递给参数f_obs和f_exp的是矩阵f和fij的扁平化结果:调用各自的reshape(u*v,),将矩阵转换成数组。运行程序,输出

H0 is False.

表示拒绝假设。即在显著水平 α = 0.05 \alpha=0.05 α=0.05下认为疗效与患者年龄有关。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好
返回《导引》

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值