第 8 章

假设检验

用数据说话:P值、显著性与统计决策的科学框架

01

核心概念

零假设 H₀ 与备择假设 H₁

假设检验从两个对立陈述开始。零假设 H₀ 通常表示"无效果""无差异"或"现状成立";备择假设 H₁ 表示研究者希望证实的命题。

H₀: μ = μ₀    vs    H₁: μ ≠ μ₀(双尾)

例如,检验新药是否有效:H₀: 新药与安慰剂无差异;H₁: 新药有效(均值不同)。

关键洞察

假设检验的逻辑是"反证法":先假设 H₀ 成立,然后计算在此假设下观测到当前样本(或更极端样本)的概率。如果这个概率很小,就拒绝 H₀。

显著性水平 α

显著性水平 α 是我们事先设定的阈值,表示"多小的概率算小"。常用 α = 0.05(5%)。

α 实际上是第一类错误的概率上限:当 H₀ 实际为真时,错误拒绝 H₀ 的最大允许概率。

P 值

P 值(p-value)是在 H₀ 成立的假设下,获得当前样本结果或更极端结果的概率。

P 值 = P(观测到更极端的数据 | H₀ 为真)
P 值的正确理解

P 值不是"H₀ 为真的概率",也不是"结果由随机机会导致的概率"。它仅仅度量了数据与 H₀ 之间的不一致程度。P = 0.03 表示如果 H₀ 为真,只有 3% 的机会看到这么极端的数据。

第一类错误与第二类错误

统计决策可能出现两种错误:

H₀ 为真H₀ 为假
拒绝 H₀第一类错误(α)正确决策(功效 1-β)
不拒绝 H₀正确决策第二类错误(β)

α 和 β 此消彼长:降低 α 会使 β 升高。增大样本量可以同时降低两者。

检验功效 Power

功效(Power = 1 - β)是在 H₀ 实际为假时正确拒绝 H₀ 的概率。一般要求功效至少达到 0.80(80%)。

功效受三个因素影响:效应大小(差异越大越容易检测)、样本量 n(越大功效越高)、显著性水平 α(越宽松功效越高)。

t 检验与 z 检验

当 σ 未知且样本来自正态总体(或 n 较大)时,使用 t 检验

t = (X̄ - μ₀) / (s/√n) ~ t(n-1)

当 σ 已知或 n 很大时,可用 z 检验

z = (X̄ - μ₀) / (σ/√n) ~ N(0,1)

双尾检验与单尾检验

双尾检验检测"是否不同"(H₁: μ ≠ μ₀),拒绝域分布在两侧。单尾检验检测"是否更大/更小"(H₁: μ > μ₀ 或 μ < μ₀),拒绝域集中在一侧。

单尾检验在方向确定时功效更高,但若实际效应方向与假设相反,则完全无法检测。一般推荐使用双尾检验,除非有强有力的先验理由。

图 8.1:双尾检验的拒绝域与 P 值示意
02

计算方法

假设检验的一般步骤

  1. 建立假设:明确 H₀ 和 H₁,选择单尾或双尾
  2. 选择检验:根据条件和检验目标选择 t 检验、z 检验等
  3. 确定 α:通常取 0.05,医学或高风险领域可取 0.01
  4. 计算检验统计量:根据样本数据计算 t 或 z
  5. 计算 P 值:或查表确定临界值
  6. 做出决策:P < α 则拒绝 H₀,否则不拒绝
  7. 结论表述:结合实际背景解释统计结果

双样本检验

比较两组均值差异时,使用双样本 t 检验:

t = (X̄₁ - X̄₂) / √(s₁²/n₁ + s₂²/n₂)

若假设两总体方差相等,可使用合并方差估计。

03

工程应用

新药有效性检验

III期临床试验中,将患者随机分为治疗组和安慰剂组。通过双样本 t 检验比较两组主要疗效指标。若 P < 0.05 且疗效具有临床意义,则可向监管机构申请上市批准。这是假设检验最严格的应用场景之一。

A/B 测试前置

互联网公司通过 A/B 测试比较两个版本的产品(如新按钮颜色)。使用双样本 z 检验比较点击率,设定 α = 0.05。检验前需计算所需样本量以保证 80% 功效,避免"样本不足导致检测不到真实差异"。

生产线质量监控

工厂定期抽检产品尺寸。使用单样本 t 检验判断均值是否偏离目标值。若 P < 0.01,触发停机检查。这种实时监控是六西格玛质量管理的核心工具。

材料强度达标检验

建筑钢材要求抗拉强度 ≥ 400 MPa。供应商提供质检报告:n = 30,X̄ = 410 MPa,s = 15 MPa。使用单尾 t 检验 H₀: μ = 400 vs H₁: μ > 400。若 P < 0.05,可接受该批材料。

04

例题精讲

例题 8.1:单样本 t 检验

某饮料标称容量为 500 ml。质检部门抽取 25 瓶,测得平均容量 495 ml,样本标准差 8 ml。在 α = 0.05 下,检验该批产品是否短斤少两。

解答

H₀: μ = 500    H₁: μ ≠ 500(双尾)

t = (495 - 500) / (8/√25) = -5 / 1.6 = -3.125

df = 24,查 t 表或计算得双尾 P ≈ 0.0046

P = 0.0046 < 0.05,拒绝 H₀

结论:有显著证据表明该批饮料平均容量不等于 500 ml,存在短斤少两问题。

例题 8.2:双样本比较

比较两种催化剂对反应产率的影响。催化剂 A:n₁ = 20,X̄₁ = 82%,s₁ = 5%;催化剂 B:n₂ = 20,X̄₂ = 78%,s₂ = 4%。在 α = 0.05 下检验两者是否有显著差异。

解答

H₀: μ₁ = μ₂    H₁: μ₁ ≠ μ₂

假设方差不相等(Welch 检验):

SE = √(5²/20 + 4²/20) = √(1.25 + 0.8) = √2.05 ≈ 1.432

t = (82 - 78) / 1.432 = 4 / 1.432 ≈ 2.793

近似 df ≈ 36,双尾 P ≈ 0.008

P < 0.05,拒绝 H₀。催化剂 A 的产率显著高于 B。

例题 8.3:错误类型分析

某病毒检测试剂盒:灵敏度 95%(真阳性率),特异度 98%(真阴性率)。现对发病率 1% 的人群筛查。 (a) 若检测结果为阳性,实际患病的概率是多少? (b) 这对应第一类还是第二类错误框架?

解答

设患病率为 1%,即 P(患病) = 0.01。

真阳性 = 0.01 × 0.95 = 0.0095

假阳性 = 0.99 × 0.02 = 0.0198

P(患病|阳性) = 0.0095 / (0.0095 + 0.0198) ≈ 32.4%

(b) 假阳性 = 错误拒绝 H₀(H₀: 未患病),属于第一类错误

尽管试剂盒"准确率"很高,但由于疾病罕见,大多数阳性仍是假阳性。这是贝叶斯定理的经典应用。

例题 8.4:单尾检验与决策

某电子元件要求平均寿命 ≥ 1000 小时。抽取 16 件测试,X̄ = 1050 小时,s = 80 小时。在 α = 0.05 下检验是否达标。

解答

H₀: μ = 1000    H₁: μ > 1000(单尾,只关心是否达标)

t = (1050 - 1000) / (80/4) = 50 / 20 = 2.5

df = 15,单尾 P = P(T₁₅ > 2.5) ≈ 0.012

P = 0.012 < 0.05,拒绝 H₀

结论:有显著证据表明平均寿命超过 1000 小时,该批产品达标。

若误用双尾检验,P ≈ 0.024,虽同样拒绝 H₀,但单尾检验在此场景更合理、功效更高。

05

MATLAB 实践

MATLAB 统计工具箱提供了完整的假设检验函数,可自动计算检验统计量和 P 值。

函数用途示例
ttest(x, mu0)单样本 t 检验[h, p] = ttest(data, 100)
ttest2(x, y)双样本 t 检验[h, p] = ttest2(groupA, groupB)
ztest(x, mu0, sigma)单样本 z 检验[h, p] = ztest(data, 50, 10)
sampsizepwr样本量/功效计算n = sampsizepwr('t', ...)
MATLAB 代码:单样本与双样本 t 检验
% 例题 8.1:单样本 t 检验 data = normrnd(495, 8, 25, 1); % 模拟数据 [h, p, ci, stats] = ttest(data, 500); fprintf('t = %.3f, P = %.4f\n', stats.tstat, p); if h == 1 fprintf('拒绝 H0:产品容量显著不等于 500ml\n'); else fprintf('不拒绝 H0\n'); end % 例题 8.2:双样本 t 检验 groupA = normrnd(82, 5, 20, 1); groupB = normrnd(78, 4, 20, 1); [h, p] = ttest2(groupA, groupB, 'Vartype', 'unequal'); fprintf('双样本检验 P = %.4f\n', p);
MATLAB 代码:检验功效与样本量
% 计算检验功效 mu0 = 100; mu1 = 105; sigma = 15; n = 25; alpha = 0.05; % 使用 sampsizepwr 计算功效 pwr = sampsizepwr('t', [mu0, sigma], mu1, [], n, 'Alpha', alpha); fprintf('n=%d 时,检测出差异的功效 = %.2f%%\n', n, pwr*100); % 计算达到 80% 功效所需样本量 n_needed = sampsizepwr('t', [mu0, sigma], mu1, 0.80, [], 'Alpha', alpha); fprintf('要达到 80%% 功效,需要 n = %d\n', n_needed); % 功效曲线 n_range = 5:5:100; powers = arrayfun(@(n) sampsizepwr('t', [mu0,sigma], mu1, [], n), n_range); figure; plot(n_range, powers, 'LineWidth', 2, 'Color', '#6b4c9a'); hold on; yline(0.8, '--', 'Color', '#2e8b7d'); xlabel('样本量 n'); ylabel('功效'); title('检验功效随样本量的变化'); grid on;
MATLAB 代码:P 值可视化
% 可视化 t 分布下的 P 值 df = 15; t_obs = 2.5; x = linspace(-4, 4, 500); y = tpdf(x, df); figure; hold on; plot(x, y, 'LineWidth', 2, 'Color', '#6b4c9a'); % 填充双尾拒绝域 x_tail = x(x >= t_obs); y_tail = tpdf(x_tail, df); fill([x_tail, fliplr(x_tail)], [y_tail, zeros(size(y_tail))], ... '#2e8b7d', 'FaceAlpha', 0.4, 'EdgeColor', 'none'); x_tail2 = x(x <= -t_obs); y_tail2 = tpdf(x_tail2, df); fill([x_tail2, fliplr(x_tail2)], [y_tail2, zeros(size(y_tail2))], ... '#2e8b7d', 'FaceAlpha', 0.4, 'EdgeColor', 'none'); xline(t_obs, 'r--', 'LineWidth', 1.5); xline(-t_obs, 'r--', 'LineWidth', 1.5); text(t_obs, max(y)*0.8, sprintf('t=%.2f', t_obs), 'Color', 'r'); xlabel('t'); ylabel('PDF'); title(sprintf('t 分布 (df=%d) 与双尾 P 值', df)); grid on;
图 8.2:标准正态分布下的拒绝域(α = 0.05,双尾)
← 上一章:置信区间 下一章:相关与回归 →