设总体的所有个体可按两种不同的标志进行分类,常常希望通过随机抽样检验这两种标志是否相互独立。为解决此类问题,通常将取得的样本
(
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
u⋅v≤n),按指标统计分属不同标志分类的频数
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=1∑vfij,
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}
f⋅j=i=1∑ufij,
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=nfi⋅nf⋅j,1≤i≤u,1≤j≤v.
与分布拟合检验相仿,当假设
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}
nfi⋅⋅nf⋅j应当比较接近,亦即差异平方和
∑
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=1∑uj=1∑v(fij−nfi⋅f⋅j)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=1∑uj=1∑vfi⋅f⋅j/n(fij−fi⋅f⋅j/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((u−1)(v−1))分布。于是当
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((u−1)(v−1)),满足则接受假设,否则拒绝假设。
可见,联列表中相互独立性检验问题是分布拟合检验问题的特例:频数序列为
f
i
j
f_{ij}
fij,假设分布概率序列换成
f
i
⋅
f
⋅
j
n
\frac{f_{i\cdot}f_{\cdot j}}{n}
nfi⋅f⋅j,
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+v−2。故仍然可以利用scipy.stats的chisquare函数进行计算。需要注意的是,要把表示
f
i
j
f_{ij}
fij和
f
i
⋅
⋅
f
⋅
j
f_{i\cdot}\cdot f_{\cdot j}
fi⋅⋅f⋅j的
u
×
v
u\times v
u×v的矩阵,转换成含有
u
v
uv
uv个元素的数组。
例1为了了解某种药品对于某种疾病的疗效是否与患者的年龄有关,共抽查了300名患者。将疗效分成“显著”、“一般”、“较差”三个等级;将年龄分成“儿童”、“中青年”、“老年”三个等级,得到如下联列表
儿童 | 中青年 | 老年 | |
---|---|---|---|
显著 | 58 | 38 | 32 |
一般 | 2 | 44 | 45 |
较差 | 23 | 18 | 14 |
要在显著水平
α
=
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学,读正版书好。
返回《导引》