跳到主要内容

假设检验、效应量与多重比较

样本均值比目标高了 4,这个偏差是抽样波动能解释的,还是足以拒绝“总体均值等于目标”的假设?即使拒绝了,4 是否值得采取行动?假设检验回答前一个问题;效应量和实际决策门槛帮助回答后一个。抽样、标准误和区间覆盖率的基础见统计与概率。

先把问题写成检验​

NIST 对统计检验的说明从一对假设出发:原假设 H0H_0 给出要检验的说法,备择假设 H1H_1 指明哪些偏离值得检出。检验还需要一个概括数据的统计量,以及它在 H0H_0 和抽样假设成立时的参考分布。

以总体均值 μ\mu 为例:

事先提出的问题原假设备择假设哪些结果更极端
均值是否改变?H0:μ=500H_0:\mu=500H1:μ≠500H_1:\mu\ne500两个方向的偏离
均值是否升高?H0:μ≤500H_0:\mu\le500H1:μ>500H_1:\mu>500较大的正偏离
均值是否降低?H0:μ≥500H_0:\mu\ge500H1:μ<500H_1:\mu<500较大的负偏离

在看数据前选定问题、显著性水平 α\alpha、样本量或停止规则。对于这里的单侧正态均值检验,在原假设边界 μ=500\mu=500 计算尾概率,可控制整个单侧原假设下的错误率。

NIST 对 p 值的定义是:在原假设成立时,统计量达到观测值那么极端或更极端的概率。“极端”取决于事先选定的备择方向。通常在 p≤αp\le\alpha 时拒绝 H0H_0;否则不拒绝。

美国统计学会的说明强调了 p 值与模型之间的关系:p 值的条件是原假设和统计模型。它不等于“原假设为真的概率”,也不等于这次拒绝出错的概率。若要给假设本身分配概率,需要另一套模型,例如贝叶斯更新中的先验与似然。

完整例子:均值从 500 偏到 504​

设有 25 个独立、同分布的正态观测,样本均值为 xˉ=504\bar x=504;总体标准差 σ=10\sigma=10 在这个假设例子中已知。检验 H0:μ=500H_0:\mu=500 对 H1:μ≠500H_1:\mu\ne500,取 α=0.05\alpha=0.05。NIST 的单总体均值检验在标准差已知时使用:

SE=σn=1025=2,Z=Xˉ−μ0SE.SE=\frac{\sigma}{\sqrt n}=\frac{10}{\sqrt{25}}=2, \qquad Z=\frac{\bar X-\mu_0}{SE}.

在 H0H_0 下,Z∼N(0,1)Z\sim N(0,1);观测值为 z=2z=2。若 Φ\Phi 是标准正态累积分布函数,双侧 p 值为

p=PH0(∣Z∣≥2)=2[1−Φ(2)]≈0.045500.p=P_{H_0}(|Z|\ge2)=2[1-\Phi(2)]\approx0.045500.

在 H0:μ=500H_0:\mu=500 成立的上述模型中,重复抽取 25 个观测,约 4.55% 的样本会产生至少这么大的绝对标准化偏差。因此在 5% 水平拒绝 μ=500\mu=500。这项计算使用给定的样本摘要;504 是示例输入,并非实际测量结果。

若事先的问题是“是否升高”,上尾 p 值为 1−Φ(2)≈0.0227501-\Phi(2)\approx0.022750。这次恰好是双侧值的一半,因为观测方向与备择一致,而且参考分布对称。若事先问“是否降低”,这组数据的下尾 p 值约为 0.977250。看见正偏差之后再挑上尾,会改变原来的检验规则;对称连续零分布下,每次挑较小的单侧 p 值并与 0.05 比较,实际双侧错误率是 0.10。

用置信区间看同一结果​

对相同模型,使用 NIST 给出的已知总体标准差的均值区间:

xˉ±z0.975SE=504±1.959964×2≈[500.080,507.920].\bar x\pm z_{0.975}SE =504\pm1.959964\times2 \approx[500.080,507.920].

500 在区间之外,与双侧 5% 检验的拒绝相符。NIST 对检验与区间的对应说明使用的也是已知总体标准差的模型。这种对应必须匹配模型、标准误、双侧方向和置信水平;单侧检验对应单侧界限。95% 指区间方法在重复抽样中的覆盖率。

若 σ\sigma 未知,用样本标准差 ss 替代它需要计入估计误差。对独立同分布的正态观测,在 H0H_0 下,(Xˉ−μ0)/(s/n)(\bar X-\mu_0)/(s/\sqrt n) 服从 tn−1t_{n-1},应同时改用 t 分布的 p 值和区间。非正态总体的近似依据见中心极限定理;增加样本量不能修复依赖或抽样偏差。

错误率、功效与实际效应​

NIST 的定量统计说明区分统计显著性和实际意义,并定义以下错误与功效:

量重复抽样中的含义
第一类错误H0H_0 为真时拒绝它;有效的水平 α\alpha 检验将其概率控制在 α\alpha 以内
第二类错误概率 β\beta在某个指定的真实备择下,未拒绝 H0H_0 的概率
功效 1−β1-\beta在那个备择下,拒绝 H0H_0 的概率

本例的原始效应估计是 504−500=4504-500=4,按总体标准差标准化后是 4/10=0.44/10=0.4。若采取行动需要均值至少升高 5,点估计尚未达到门槛,升高量的区间 [0.080,7.920][0.080,7.920] 也没有把它限定在 5 以上。显著地偏离零和达到实际门槛是两个判断。

功效要针对指定的真实效应计算。沿用已知标准差的模型,若真实升高量为 δ=4\delta=4,则检验统计量服从 N(λ,1)N(\lambda,1),其中 λ=δn/σ\lambda=\delta\sqrt n/\sigma。令 c=z1−α/2c=z_{1-\alpha/2},双侧功效为

Pδ(∣Z∣>c)=Φ(−c−λ)+1−Φ(c−λ).P_\delta(|Z|>c)=\Phi(-c-\lambda)+1-\Phi(c-\lambda).

n=25n=25 时约为 0.516005;事先改用 n=100n=100 时约为 0.979327,真实效应仍是 4。功效是研究设计在指定效应下的检出概率,不能读成观测结果为真的概率。不拒绝也不能据此认定等效;要论证等效,需要事先设定可接受的差异范围并使用相应程序,见 NIST 等效检验指南第 5 节。样本量公式解释了区间精度的规划;检测指定效应还需要功效、方向和错误率。

下面的标准库代码复算检验、区间和功效:

import math
from statistics import NormalDist

def normal_sf(z):
# Compute the upper tail directly to avoid cancellation near 1.
return 0.5 * math.erfc(z / math.sqrt(2))


normal = NormalDist()
n, xbar, mu0, sigma, alpha = 25, 504.0, 500.0, 10.0, 0.05
se = sigma / math.sqrt(n)
z = (xbar - mu0) / se
p_upper = normal_sf(z)
p_two = 2 * normal_sf(abs(z))
critical = normal.inv_cdf(1 - alpha / 2)
lo, hi = xbar - critical * se, xbar + critical * se
print(f"SE={se:.3f}, z={z:.3f}")
print(f"p_upper={p_upper:.6f}, p_two={p_two:.6f}")
print(f"95% CI=[{lo:.3f}, {hi:.3f}]")
print(f"shift={xbar - mu0:.3f}, standardized={(xbar - mu0) / sigma:.3f}")
for size in (25, 100):
shift = 4.0 / (sigma / math.sqrt(size))
power = normal_sf(critical + shift) + normal_sf(critical - shift)
print(f"n={size}, power_at_shift_4={power:.6f}")

输出:

SE=2.000, z=2.000
p_upper=0.022750, p_two=0.045500
95% CI=[500.080, 507.920]
shift=4.000, standardized=0.400
n=25, power_at_shift_4=0.516005
n=100, power_at_shift_4=0.979327

多个比较要一起控制什么​

若 20 个原假设都为真,各自做第一类错误率恰为 0.05 的独立检验,则至少误拒绝一个的概率为

1−(1−0.05)20≈0.641514.1-(1-0.05)^{20}\approx0.641514.

这个乘法要求检验独立;共用测试任务可能使模型比较相互依赖,因此需要论证独立性。仍然需要定义比较族:哪些模型、指标和子组共同支撑这次结论,而不是事后只留下显著的比较。

Benjamini 与 Hochberg 的原论文提出 FDR,并指出所有原假设都为真时它与 FWER 相等。

控制目标定义回答的问题
族错误率 FWERP(V≥1)P(V\ge1)这一族中出现至少一个错误拒绝的概率有多大?
错误发现率 FDRE[V/max⁡(R,1)]E[V/\max(R,1)]多次重复中,被拒绝假设里错误拒绝的比例平均是多少?

其中 VV 是错误拒绝数,RR 是总拒绝数,R=0R=0 时比例记为零。有真实效应时,FDR 允许某些错误发现来提高检出能力;控制在 5% 不保证这一次的发现中至多 5% 是错的。

Bonferroni 与 BH 的小例子​

对事先定义的 mm 个检验,Bonferroni 不等式给出一个直接办法:每个检验用 α/m\alpha/m,或用调整值 min⁡(1,mpi)\min(1,mp_i) 与 α\alpha 比较。只要每个原始 p 值有效,FWER 就不超过 α\alpha,无需检验独立;这是对错误事件使用概率和上界的结果。

SciPy 的错误发现控制文档保留了依赖条件:Benjamini–Hochberg(BH)在独立或满足正回归依赖(PRDS)的检验下控制 FDR;Benjamini–Yekutieli(BY)对一般依赖也有保证,但更保守。相关并不自动意味着满足 PRDS。

BH 把 p 值从小到大排序为 p(1),…,p(m)p_{(1)},\ldots,p_{(m)},找满足 p(k)≤kq/mp_{(k)}\le kq/m 的最大 kk,拒绝前 kk 个;没有满足者就不拒绝。这个固定样本规则也列于 Johari 等人的论文第 7.2 节。排序后的调整值为

p(i)BH=min⁡(1,min⁡j≥imjp(j)).p^{BH}_{(i)}=\min\left(1,\min_{j\ge i}\frac{m}{j}p_{(j)}\right).

设五个事先确定的比较得到以下示例 p 值。在 FWER 或 FDR 目标均为 0.05 时:

比较原始 p 值Bonferroni 调整值BH 调整值
A0.0010.0050.005
B0.0120.0600.030
C0.0180.0900.030
D0.0410.2050.05125
E0.2001.0000.200

Bonferroni 拒绝 A;BH 拒绝 A、B、C。BH 的排序门槛为 0.01、0.02、0.03、0.04、0.05,最大满足位置是第三个。两种方法控制的目标不同,选择哪一个应取决于能否接受一组发现中存在错误,而不能取决于哪种给出的显著结果更多。

下面用标准库实现上述有限列表的调整,并把 BH 结果放回输入顺序。它要求输入为非空、有效的 p 值列表。

ps = [0.001, 0.012, 0.018, 0.041, 0.200]
m = len(ps)
order = sorted(range(m), key=ps.__getitem__)
bh = [0.0] * m
running = 1.0
for rank in range(m, 0, -1):
index = order[rank - 1]
running = min(running, m * ps[index] / rank)
bh[index] = running
bonferroni = [min(1.0, m * p) for p in ps]
print("Bonferroni:", [round(p, 6) for p in bonferroni])
print("BH:", [round(p, 6) for p in bh])
print("reject at 0.05:", sum(p <= 0.05 for p in bonferroni),
sum(p <= 0.05 for p in bh))
print(f"20 independent true nulls, FWER={1 - 0.95**20:.6f}")

输出:

Bonferroni: [0.005, 0.06, 0.09, 0.205, 1.0]
BH: [0.005, 0.03, 0.03, 0.05125, 0.2]
reject at 0.05: 1 3
20 independent true nulls, FWER=0.641514

调整 p 值不自动调整区间。若要让这一族的区间同时覆盖,可对每个参数构造置信水平为 1−α/m1-\alpha/m 的区间,Bonferroni 保证同时覆盖率至少为 1−α1-\alpha。BH 控制的是错误发现比例,不能把被拒绝假设各自的普通 95% 区间当作同时覆盖保证。

模型选择和反复查看结果​

Cawley 与 Talbot 的研究指出,有限样本上的模型选择指标也会被过拟合,随后用同一批数据报告性能会产生选择偏差。比较量化版本、提示词、上下文设置和多个指标时,选出最好的配置再按“事先只比较了这一对”计算 p 值,会漏掉选择过程。

模型在同一批任务上比较时,不确定性估计需要保留任务配对关系;若任务按项目聚集,也要保留这种分组。统计与概率介绍了相应的抽样单位、任务损失差和配对 bootstrap。

再区分选择与停止。每增加一批任务就重新做普通检验,并在 p<0.05p<0.05 时停止,最终 p 值失去原来的固定样本错误率保证。Johari 等人对持续监测的研究说明了这种影响,并构造了在其统计假设下允许数据依赖停止的 always-valid p 值。仅仅计算很多次普通 p 值不能获得这种性质。

把这些区别用到本地模型评测时,可以这样安排一次比较:

  1. 先固定配置、主要指标、实际改进门槛、比较族和错误控制目标。
  2. 在开发任务上选择配置;用未参与选择的新测试任务评估冻结后的候选。采用嵌套交叉验证时,把整个选择过程放进内层。
  3. 事先固定测试样本量;需要中途决策时,采用明确的序贯方法并保留其适用条件。
  4. 一起报告样本单位、效应估计、区间、原始和调整后的 p 值,以及比较与停止规则。

多重比较调整的起点是有效的原始 p 值。对选择过的数据或随结果而定的停止规则,最后给赢家套一次 BH,无法补回缺失的检验设计。

探索关联打开关联网络