跳到内容

第 12 卷 / 第 5 章 / 第 2 课

5.2 检验选择、功效与多重比较:分析计划先于结果 ​

统计软件把许多检验缩成一行函数调用。分析单位、比较结构和误差模型仍要自己选,决策规则也应在结果到来前写好。

本课目标 ​

  • 根据结果类型、设计和依赖结构选择方法;
  • 同时报告原始尺度效应、标准化效应和区间;
  • 用功效分析连接样本量与最小有意义效应;
  • 控制多重比较、选择性报告和可选停止。

1. 检验方法由研究设计决定 ​

场景常见起点关键前提或替代
两独立组连续指标Welch t 检验独立单位;长尾时看稳健/置换方法
同一单位前后测配对 t 检验配对差值为分析对象
二分类结果比例差/score 检验、logistic 模型保留分子分母;小样本需调整
多组连续结果ANOVA/回归先定义总体比较与后续 contrasts
计数或率Poisson/负二项模型exposure、过度离散
重复测量/集群cluster-robust、GEE、混合模型聚类数量与层级结构
生存时间Kaplan–Meier/Cox 等非信息性删失;Cox 另需比例风险假设

这张表不是自动选择器。随机分配、缺失、协变量调整和测量误差都会影响方法。

2. 配对数据不要拆成独立组 ​

同一队伍在新旧方案下各完成一次任务,应该分析每对差值:

di=Yi,new−Yi,old.

配对利用单位内相关性,通常降低噪声。用独立 t 检验会忽略配对,并可能损失功效。

下面的配对示例使用 NumPy 和 SciPy 1.11 及以上版本,本课代码按顺序运行。它估计平均配对变化,为 -1.6 分钟;前后差异不会自动变成处理效应,时间趋势、学习和顺序效应仍需通过设计区分。

反过来,把并不一一对应的记录强行按时间最近配对,会引入选择偏差。配对规则属于设计,最好在观察结果前固定。

python
import numpy as np
from scipy import stats

old = np.array([12., 14., 13., 15., 16.])
new = np.array([11., 12., 13., 12., 14.])
if old.shape != new.shape or not np.isfinite(old).all() or not np.isfinite(new).all():
    raise ValueError("Pairs must align and have an explicit missing-value policy")
differences = new - old
paired_result = stats.ttest_rel(new, old)
print(differences.mean(), paired_result.confidence_interval())

3. 效应量先报告原始尺度 ​

text
平均时长差:-4.2 分钟
完成率差:+3.1 个百分点
相对风险:1.08

原始尺度能直接对应业务成本和最小有意义差异。Cohen's d 等标准化效应便于跨尺度比较,但依赖标准差;群体异质性改变时,d 也会变化。

“0.2/0.5/0.8 是小中大”只是特定背景下的粗略惯例,不应替代领域阈值。对于安全事件,极小相对变化也可能重要;对高波动体验指标,更大变化才值得发布。

4. 最小有意义效应连接决策 ​

收集数据前先区分两个量。最小有意义效应是决策阈值:比它小的效应不足以改变行动。最小可检测效应(MDE)是某个设计在指定功效和显著性水平下能够检测的效应。样本量太小时,有意义的改善也可能检不出;给两者起同一个名字不会让实验更灵敏。

样本量取决于:

  • 显著性水平;
  • 目标功效 1−β;
  • 基线率或方差;
  • MDE;
  • 分配比例;
  • 集群、重复测量和流失;
  • 多重比较计划。

功效是在指定真实效应和模型下拒绝零假设的概率,不是研究成功的无条件保证。对等量的两个独立组,可用双侧正态近似做下面的样本量规划:

python
from math import ceil
from scipy.stats import norm

alpha, target_power = 0.05, 0.80
sigma, target_mde = 10.0, 2.0  # minutes
n_per_group = ceil(
    2 * (norm.ppf(1 - alpha / 2) + norm.ppf(target_power)) ** 2
    * sigma ** 2 / target_mde ** 2
)
print(n_per_group)  # 393 independent observations per group

这里假设两组共同标准差为 10 分钟,目标是检测 2 分钟差异。393 是每组人数,不是总人数。这是连续均值的近似规划;t 分布设计、比例、流失、聚类或多次查看都需要相应计算。规划参数应来自相关历史数据,而不是期待中的结果。

5. 结果后功效通常不提供新信息 ​

把观测效应代回公式计算“observed power”,通常只是 p 值的变形,不能解释不显著结果。更有用的是:

  • 预先功效与样本量设计;
  • 报告估计区间覆盖哪些有意义效应;
  • 做敏感性分析;
  • 若目标是排除大效应,使用区间或等效性设计。

6. 多重比较改变错误率 ​

对 100 个真实零假设,若每项检验的假阳性率恰为 5%,假阳性个数的期望为 5。检验独立时,至少一个假阳性的概率为 1−0.95100,约 99.41%;存在依赖时,这个概率会改变,不能只看期望个数推算。

常见控制目标:

  • FWER:出现任何一个假阳性的概率,如 Bonferroni/Holm;
  • FDR:所有拒绝中假发现的期望比例,如 Benjamini–Hochberg。

选择取决于后果。安全阻断可能重视 FWER;大规模探索筛选可能使用 FDR。校正集合必须预先定义,不能只把不喜欢的检验排除在 family 外。

FDR 是 E[V/max(R,1)],其中 V 为错误拒绝数,R 为总拒绝数;它不是某个发现为假的概率。有效 p 值下,Holm 可在任意依赖下控制 FWER;通常的 BH 保证要求独立或适当的正依赖,其他依赖结构需要有依据的方法,例如 BY。SciPy FDR 文档列出了 BH 与 BY 的条件。

python
p_values = np.array([0.001, 0.01, 0.03, 0.20])
bonferroni = np.minimum(1.0, len(p_values) * p_values)
bh = stats.false_discovery_control(p_values, method="bh")
print(bonferroni)  # [0.004, 0.04, 0.12, 0.8]
print(bh)          # [0.004, 0.02, 0.04, 0.2]
print(1 - (1 - 0.05) ** 100)  # approximately 0.9941, assuming independence

以 5% 为门槛,Bonferroni 拒绝前两项,BH 拒绝前三项。两者控制的错误目标不同,拒绝更多不能证明 BH 在所有场合都更合适。

7. 可选停止会膨胀错误率 ​

每天查看普通 p 值,一显著就停止,并不保持固定样本 t 检验的 5% 错误率。可使用:

  • 预定固定样本量与结束时间;
  • group sequential 设计与 alpha spending;
  • always-valid inference / sequential 方法;
  • 明确 futility 与 safety 停止规则。

业务监控可以天天看描述指标,但确认性决策要遵守预定分析规则。

8. 协变量调整应预先指定 ​

随机实验中,基线协变量调整可提高精度;调整后的模型仍需匹配随机化单位与聚类结构。看到结果后尝试许多协变量组合,再挑显著模型,会引入 researcher degrees of freedom。

报告未调整与预设调整结果,并说明缺失协变量处理。随机化保证的是处理分配机制,不保证每个有限样本所有协变量完全平衡。

9. 一份可审计的报告 ​

text
问题与 estimand
样本来源、排除和时间窗口
分配/抽样单位与依赖结构
主指标与 MDE
预设检验、单/双侧、alpha
点估计、95% CI、原始尺度效应
p 值与多重比较方法
缺失、流失和协议偏离
敏感性与分组分析(标记探索性)
业务决策及仍未确定的范围

不要只输出“显著/不显著”。例如区间 [-1.0, 7.2] 个百分点同时容纳轻微损害和有意义收益,正确结论是当前精度不足,而不是“没有效果”。

10. 置换检验也要遵守设计 ​

置换检验通过在零假设下交换标签建立参考分布。只有可交换性成立时才有效:集群随机实验应在集群层置换,配对设计在配对内交换,分层随机应在层内置换。

标签置换检验的是分配机制或可交换性所支持的零假设。仅有均值相等,不会让方差不同的两个总体自动可交换。随机化检验、学生化统计量与受限置换适用于不同设计,零假设和重抽样方式要一起确定。

“非参数”不等于没有假设。置换单位错了,p 值同样会过于乐观。

常见误区 ​

  • 数据不正态就一律换 Mann–Whitney:它检验的分布关系不总等同均值或中位数差。
  • 标准化效应有统一大小标准:业务意义取决于原始尺度和后果。
  • 看结果后计算功效能解释不显著:区间和预先设计更有用。
  • 只要逐个 p<0.05 就行:多重比较与可选停止会放大假阳性。

练习 ​

  1. 为独立、配对和集群三种设计分别确定分析单位。
  2. 给一个完成率实验定义 MDE,并列出样本量计算所需输入。
  3. 比较 Holm 与 BH 控制的错误目标。
  4. 把一份只有 p 值的报告改写为可审计模板。

小结 ​

检验是研究设计的延伸,不是数据列类型的自动函数。效应尺度、MDE、功效、多重比较和停止规则必须在结果之前确定;最终报告要展示不确定范围,而不是只给显著性标签。

下一章用线性回归组织多个变量之间的条件关系。第一步会区分预测与因果解释,避免把一个高 R2 模型当成机制证明。

Built with VitePress | Software Systems Atlas