08t 检验与替代方法

区分单样本、独立样本和配对 t 检验,并根据方差、分布和研究设计选择 Welch、秩和、置换或 bootstrap 方法。

2025-08-04
StatisticsT TestWelch TestWilcoxonBootstrap
本章目录 · 9

t 检验围绕均值及其标准误进行推断。选择哪一种 t 检验,首先取决于样本之间是独立还是配对,而不是数据表里有几列。

三种基本设计

设计 问题 R 调用
单样本 样本均值是否等于给定值 t.test(x, mu = value)
两独立样本 两个独立总体的均值是否不同 t.test(y ~ group)
配对样本 同一对象两次测量的平均差是否为零 t.test(before, after, paired = TRUE)

配对检验分析的是每对观测的差值。若忽略配对,既浪费设计信息,也会使用错误的标准误。

单样本检验

x <- c(4.8, 5.1, 5.4, 4.9, 5.2, 5.0)
t.test(x, mu = 5)

零假设为总体均值等于 5。输出中的置信区间描述与数据相容的总体均值范围。

独立样本:默认使用 Welch

set.seed(123)
df <- data.frame(
  group = rep(c("A", "B"), each = 30),
  value = c(rnorm(30, 5, 1), rnorm(30, 5.7, 1.5))
)

t.test(value ~ group, data = df)

R 默认执行 Welch 两样本 t 检验,不要求两组方差相等。只有研究设计和数据支持共同方差假设时,才设置:

t.test(value ~ group, data = df, var.equal = TRUE)

不应仅因为方差齐性检验“不显著”就自动切换到 Student t 检验;方差检验本身也受样本量影响,Welch 通常是稳妥默认值。

配对检验

before <- c(132, 145, 138, 151, 140)
after <- c(125, 139, 136, 143, 135)

t.test(before, after, paired = TRUE)

应检查 beforeafter 的顺序确实一一对应。配对数据缺失时,也必须明确哪些完整配对进入分析。

假设与诊断

t 检验的关键条件包括:

  • 观测之间符合设计规定的独立性;
  • 均值是合理的目标参数;
  • 单样本和配对检验中的值或差值没有严重异常;
  • 小样本下,相关分布不能严重偏离正态;
  • Student 两样本检验额外假设方差相等。

正态性不是通过一次 Shapiro 检验机械决定。应同时查看分布、离群点、样本量和研究设计。

报告效应,而不只报告 p 值

result <- t.test(value ~ group, data = df)

result$estimate
result$conf.int
result$statistic
result$parameter
result$p.value

正式结果应包括两组描述统计、均值差、95% 置信区间、t 值、自由度和 p 值。标准化效应量可补充不同量纲间的比较,但不能取代原始单位中的差异。

Wilcoxon 秩和与符号秩检验

独立两组可以使用秩和检验:

wilcox.test(value ~ group, data = df)

配对数据使用符号秩检验:

wilcox.test(before, after, paired = TRUE)

秩检验并不简单等同于“中位数检验”。它比较分布位置或配对差的秩结构,具体解释仍依赖分布形状。

置换检验

在独立性零假设下随机重排组标签,可构造均值差的经验零分布:

observed <- with(df, mean(value[group == "B"]) - mean(value[group == "A"]))

permuted <- replicate(5000, {
  shuffled <- sample(df$group)
  mean(df$value[shuffled == "B"]) - mean(df$value[shuffled == "A"])
})

mean(abs(permuted) >= abs(observed))

置换方案必须尊重设计;配对或分层研究不能随意打乱全部标签。

Bootstrap 区间

Bootstrap 通过对观测重抽样估计统计量的不确定性:

mean_diff <- function(data, index) {
  d <- data[index, ]
  with(d, mean(value[group == "B"]) - mean(value[group == "A"]))
}

library(boot)
fit <- boot(df, statistic = mean_diff, R = 2000)
boot.ci(fit, type = c("perc", "bca"))

重抽样单位同样必须匹配设计。重复测量、家庭或中心聚类数据不能按单行当作独立样本抽取。

方法选择应从研究设计和目标参数出发:关心均值时 t/Welch 与均值差区间通常最直接;分布严重偏斜或目标是秩位置时考虑秩方法;复杂抽样下可使用符合设计的置换或 bootstrap。