05多重检验与研究偏倚

理解 FWER、FDR 和常见 p 值校正方法,并识别 p-hacking、选择性报告与文件抽屉问题。

2025-08-05
StatisticsMultiple TestingFDRP HackingResearch Integrity
本章目录 · 6

单次检验的显著性水平不能自动保护一整组检验。与此同时,如果分析方案不断调整直到出现显著结果,即使最后只报告一个 p 值,实际尝试次数也已经扩大了假阳性风险。

多次检验为何增加错误

若 20 个独立检验的 H0H_0 都为真,每次使用 α=0.05\alpha=0.05,至少出现一次假阳性的概率为:

1(10.05)200.641-(1-0.05)^{20} \approx 0.64
查看图片多重检验中的错误累积
多重检验中的错误累积

因此需要先定义哪些检验属于同一个问题家族,以及希望控制哪一种错误。

FWER 与 FDR

  • 家族错误率(FWER):一组检验中至少出现一个 I 型错误的概率;
  • 假发现率(FDR):所有被判为显著的结果中,假阳性所占比例的期望。

FWER 控制更严格,适合任何一个假阳性都代价很高的场景;FDR 允许少量假发现,以换取大规模筛选中的发现能力。

常用校正方法

方法 控制目标 特点
Bonferroni FWER 简单、严格,检验很多时功效低
Holm FWER 逐步校正,通常优于直接 Bonferroni
Benjamini–Hochberg FDR 适合组学等大量检验
Benjamini–Yekutieli FDR 对依赖结构更保守

R 中使用 p.adjust()

p_values <- c(0.003, 0.2, 0.04, 0.12, 0.001, 0.9)

p.adjust(p_values, method = "bonferroni")
p.adjust(p_values, method = "holm")
p.adjust(p_values, method = "BH")

校正后的 p 值仍需与预先设定的显著性或 FDR 水平比较。分析表中应同时保留原始和校正后的 p 值,并写明方法。

联合检验与逐项检验

当问题关注多个相关结局的整体均值差异时,联合检验有时比逐个 t 检验更符合问题。例如 Hotelling's T2T^2 同时考虑多个连续变量及其相关结构:

library(Hotelling)

june <- subset(
  airquality,
  Month == 6,
  select = c(Ozone, Solar.R, Wind, Temp)
)

july <- subset(
  airquality,
  Month == 7,
  select = c(Ozone, Solar.R, Wind, Temp)
)

hotelling.test(june, july)

联合检验回答“整体是否不同”,不会自动指出哪个变量不同。问题若关注每个结局,仍需要相应估计和多重性处理。

p-hacking

p-hacking 指反复尝试模型、结局、亚组、排除规则或检验方向,直到得到显著结果,再把这条路径当作预先计划的分析报告。

典型表现包括:

  • 结果不显著后不断更换方法;
  • 查看数据后才决定主要结局或单侧方向;
  • 尝试许多亚组,只报告显著的一组;
  • 把探索中偶然发现的模式写成验证性结论;
  • 隐去其他模型和阴性结果。

问题不在于探索本身,而在于把探索性发现当成经过独立验证的证据。

文件抽屉与发表偏倚

如果显著结果更容易发表,文献中就会高估效应。即使真实效应为零,许多独立团队重复研究也可能偶然产生少数显著结果;若只有这些结果可见,读者会得到错误印象。

应对方法包括:

  • 预注册研究问题、主要结局和分析方案;
  • 明确区分验证性与探索性分析;
  • 报告所有预设分析与重要偏离;
  • 保存代码、数据处理步骤和模型版本;
  • 鼓励阴性结果、注册报告和完整结果公开;
  • 系统综述中评估发表偏倚。

多重校正解决显式的一组检验,透明研究流程解决未记录的分析自由度。两者不能互相替代。