Math-01.显著性检验-07.卡方检验

卡方检验(chi-square test,$\chi^2$ test)比较观测频数期望频数的差异,用于拟合优度(是否服从某分布)与列联表独立性(两分类变量是否相关),统计量在大样本下近似 卡方分布

段末注释列联表(contingency table)为交叉分类的频数矩阵;拟合优度检验单变量分布假设。

系列01 总论 | 分布:26.卡方


1. 检验问题(D1)

图 1 卡方检验直观

类型 $H_0$
拟合优度 各类比例等于 $p_i$
独立性 行变量与列变量独立
同质性 多组比例相等

2. 数据条件(D2)

条件 说明
分类 / 分箱 计数数据
期望频数 一般要求 $E_i \ge 5$(或至少 80% 格 $\ge 5$)
独立 各观测独立
小 $2\times2$ 期望过小 → Fisher 精确

3. 检验统计量(D3–D4)

图 2 χ² 统计量

$$
\chi^2 = \sum_{i=1}^{k} \frac{(O_i - E_i)^2}{E_i}
$$

  • 拟合优度:$df = k - 1 - p$($p$ 为估计参数个数)
  • $r \times c$ 列联表:$df = (r-1)(c-1)$

$H_0$ 下 $\chi^2 \sim \chi^2_{df}$(渐近)。


4. 适用场景(D5–D7)

图 3 适用场景

场景 用法
孟德尔比例 拟合优度
处理 vs 响应(分类) 独立性
测序碱基组成 vs 期望 拟合优度
多组阳性率 同质性 / 列联表

5. 局限与误用(D8)

图 4 局限

问题 应对
期望 $<5$ 合并类别 / Fisher 精确
配对分类 McNemar
连续变量未分箱 先分箱或 KS/t
大 $n$ 必显著 报告 Cramér’s $V$
参数估计未减 $df$ 正确计算自由度

6. 示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np
from scipy import stats

# 拟合优度:观测 vs 均匀四类
obs = np.array([32, 18, 25, 25])
exp = np.full(4, obs.sum() / 4)
chi2, p = stats.chisquare(obs, exp)
print(f"Goodness-of-fit chi2={chi2:.2f}, p={p:.4f}")

# 2x2 独立性
table = np.array([[45, 5], [12, 38]])
chi2, p, dof, expected = stats.chi2_contingency(table)
print(f"Independence chi2={chi2:.2f}, df={dof}, p={p:.4f}")
print("Expected:\n", expected)

# Fisher 精确(小样本)
odds, p_f = stats.fisher_exact(table)
print(f"Fisher exact p={p_f:.4f}")

# Cramér's V
n = table.sum()
v = np.sqrt(chi2 / (n * (min(table.shape) - 1)))
print(f"Cramer's V={v:.3f}")

7. 小结

  • $\chi^2$ 检验:计数数据核心;拟合优度 + 列联表独立性。
  • 注意期望频数与 $df$;小样本 $2\times2$ 用 Fisher 精确

系列导航04 F | 16 超几何


参考文献

  1. scipy.stats.chi2_contingency
-------------本文结束感谢您的阅读-------------