同一实验中对 $m$ 个假设 分别做显著性检验时,即使每个检验都用 $\alpha=0.05$,至少出现 1 次假阳性 的整体概率会随 $m$ 增大而上升。多重比较校正(multiple comparison correction)控制族系错误率(family-wise error rate,FWER)或错误发现率(false discovery rate,FDR),是 ANOVA 事后比较、全基因组扫描、多基因 DE 分析的必备步骤。
段末注释:FWER 为「$m$ 个检验中至少 1 个 I 类错误」的概率;FDR 为被拒绝假设中假阳性所占期望比例。
1. 为什么需要校正(D1)

设 $m$ 个独立检验,每次 I 类错误率 $\alpha$,且 $H_0$ 全为真:
$$
P(\text{至少 1 次假阳性}) = 1 - (1-\alpha)^m
$$
| $m$ | $\alpha=0.05$ 时族系假阳性概率 |
|---|---|
| 1 | 5% |
| 10 | 40% |
| 20 | 64% |
| 100 | 99.4% |
典型场景:ANOVA 显著后的两两 t 检验、RNA-seq 数千基因、酶库多个位点同时筛选。
2. 控制目标:FWER vs FDR(D2)
| 指标 | 含义 | 严格程度 | 典型方法 |
|---|---|---|---|
| FWER | $P(\ge 1$ 假阳性$)$ | 最严 | Bonferroni、Holm、Tukey |
| FDR | 期望假阳性 / 拒绝数 | 较松,适合探索 | Benjamini–Hochberg(BH) |
| per-comparison | 单次检验 $\alpha$ | 不控制族系 | 无校正(易膨胀) |
选型直觉:
- 确认性实验、少量比较 → FWER(Bonferroni / Holm)
- 高通量筛选、可接受少量假阳性 → FDR(BH)
3. 常用校正方法(D3–D4)

3.1 Bonferroni(FWER)
将单次显著性水平改为:
$$
\alpha’ = \frac{\alpha}{m}
$$
或等价地,调整 p 值:$p_i^{\mathrm{adj}} = \min(m \cdot p_i,, 1)$。
保守:假设检验独立时控制 FWER;$m$ 大时功效低。
3.2 Holm–Bonferroni(逐步下降,FWER)
- 将 $p_{(1)} \le p_{(2)} \le \cdots \le p_{(m)}$ 排序
- 找最小 $k$ 使 $p_{(k)} > \alpha / (m-k+1)$
- 拒绝 $p_{(1)},\ldots,p_{(k-1)}$
比 Bonferroni 功效更高,仍控制 FWER。
3.3 Benjamini–Hochberg(FDR)
- 排序 $p_{(1)} \le \cdots \le p_{(m)}$
- 找最大 $k$ 使 $p_{(k)} \le \dfrac{k}{m}\alpha$
- 拒绝前 $k$ 个假设
在独立或正相关 p 值下控制 FDR $\le \alpha$。
3.4 ANOVA 事后:Tukey HSD
04 F 检验 ANOVA 显著后,Tukey 诚实显著差异(Honestly Significant Difference,HSD)在所有两两比较上控制 FWER,优于未校正的逐对 t。
4. 方法对比(D5–D6)
| 方法 | 控制 | 功效 | 适用 |
|---|---|---|---|
| 无校正 | — | 最高 | 仅 1 次预设比较 |
| Bonferroni | FWER | 低 | $m$ 小、确认性 |
| Holm | FWER | 中 | 通用 FWER |
| BH | FDR | 较高 | RNA-seq、组学 |
| Tukey HSD | FWER(两两) | 专为 ANOVA | 多组均值事后 |
依赖结构:检验高度相关时 Bonferroni 更保守;BH 在正相关下仍有效。
5. 适用场景(D7)

| 场景 | 推荐 |
|---|---|
| ANOVA 后 3+ 组两两比较 | Tukey HSD |
| 预设 $m$ 个假设($m<20$) | Holm 或 Bonferroni |
| RNA-seq / 蛋白组 DE | BH FDR(如 q=0.05) |
| 全库酶突变多位点筛选 | BH 或 Bonferroni(视确认性) |
| 单次 primary endpoint | 不需族系校正 |
6. 局限与误用(D8)

| 误用 | 后果 |
|---|---|
| 扫 $m$ 个基因不校正 | 大量假阳性 |
| ANOVA 显著后逐对 t 不校正 | 假阳性膨胀 |
| $m$ 极大仍用 Bonferroni | 几乎无拒绝(功效过低) |
| 把 FDR 当 FWER | 仍会有一定比例假阳性 |
| 数据窥探后只报显著 | p-hacking |
| 忽略检验间相关 | 方法选择不当 |
报告规范:说明比较次数 $m$、校正方法、调整后 p 或 q 值。
7. 解读(D9–D10)
| 输出 | 含义 |
|---|---|
| $p_{\mathrm{adj}}$(Bonferroni/Holm) | 调整后仍 $< \alpha$ → 在 FWER 意义下显著 |
| q 值(FDR) | 该假设 FDR 的上界;$q<0.05$ 常用作阈值 |
| 拒绝数 | BH 下期望假阳性 $\le \alpha \times \text{拒绝数}$ |
8. 示例代码
1 | import numpy as np |
9. 小结
- 做 $m>1$ 次检验 必须考虑族系错误;FWER(Bonferroni/Holm/Tukey)vs FDR(BH)按场景选型。
- ANOVA 事后用 Tukey;组学筛选用 BH。
- 报告校正方法与调整后 p/q,避免 p-hacking。
参考文献
- Benjamini Y., Hochberg Y. Controlling the False Discovery Rate. JRSS-B 1995.
- statsmodels multipletests