卡方检验

注意 :在统计分析阶段的假设检验中也提及到了卡方检验,那是针对 " 单个总体方差的检验 " ;本章中的卡方检验是针对 " 分类变量的比较
卡方检验的主要用途
两个率或两个构成比比较的卡方检验
多个率或多个构成比比较的卡方检验
分类资料的相关分析
卡方检验的基本原理
H
0
:
观察频数与期望频数没有差别
其原理为考察基于
H
0
的理论频数分布和实际频数分布间的差异大
小,据此求出相应的
P
值
案例:
所有受访家庭会按照家庭年收入被分为低收入家庭和高收入家
庭两类,现希望考察不同收入级别的家庭其轿车拥有率是否相同

基于
H
0
成立,即观察频数和期望频数无差别,也就是两组变量
(家庭收入级别与是否拥有轿车)相互不产生影响,两组变量不相
关,如果检验
P
值很高,则接受
H
0
;如果检验
P
值很低,则检验不通
过,观察频数和期望频数有差别,两组变量相关。

卡方统计量
卡方统计量的计算公式:

其中
A
为实际频数,
E
为期望频数(理论频数)。
卡方统计量的理解:
当观察频数与期望频数完全一致时,卡方值为
0
观察频数与期望频数越接近,两者之间的差异越小,卡方值越小
观察频数与期望频数差异越大,卡方值越大
卡方值的大小也和自由度有关
卡方检验的
statsmodels
实现
案例:
所有受访家庭会按照家庭年收入被分为低收入家庭和高收入家
庭两类,现希望考察不同收入级别的家庭其轿车拥有率是否相同

statsmodels
中首先需要建立对应的列联表对象
class
statsmodels.stats.contingency_tables.Table(
table
shift_zeros = True : 如果有单元格频数为0,则所
有单元格频数一律+0.5防止计算溢出
)
Table
类的方法
:
test_nominal_association()
无序分类行、列变量的独立性检验
配对卡方检验
McNemar's
检验(配对卡方检验)用于分析
两个相关率的变化是否
有统计学意义
案例:
用
A
、
B
两种方法检查已确诊的某种疾病患者
140
名,
A
法检出
91
名
(65%)
,
B
法检出
77
名
(55%)
,
A
、
B
两法一致的检出
56
名
(40%)
,
问哪种方法阳性检出率更高?

分析思路:
H
0
:
两种方法阳性检出率无差别,即
b
单元格
=c
单元格
8
对同一个体,分别有两次不同的测量,并最终构成了两组数据,
因此研究框架是自身配对设计
求出各对的差值,然后考察样本中差值的分布是否按照
H
0
假设
的情况对称分布
主对角线上的样本,两种检验方法的结论相同
非主对角线上的单元格才携带检验方法的差异信息
根据
H
0
得到
b
、
c
两格的理论数均为
(b+c)/2,
对应的配对检验统计
量,经过化简后是:

一般在 b + c < 40 时,需用确切概率法进行检验,或者进行校正
代码实现
statsmodels.stats.contingency_tables
中常用的配对卡方的分析使
用:
1
tbl.SquareTable
用于分析行列变量类别相同的对称结构方表
(近似结果)
2
tbl.mcnemar
用于分析配对四格表(确切概率结果)
用
SquareTable
类分析
import numpy as np
import statsmodels.stats.contingency_tables as
tbl
# 必须为方阵结构数据
table = tbl.SquareTable(np.array([[56, 35],
[21, 28]]))
print(table.summary()) # 打印汇总信息
print(table.symmetry()) # 只打印symmetry
用
mcnemar
类分析
import statsmodels.stats.contingency_tables as
tbl
table = tbl.mcnemar(pd.DataFrame([[56, 35],
[21, 28]]))
print(table.pvalue) # 确切概率结果