前面的文章一直在讲"某某检验等价于回归"。这一篇要讲一个不完全等价的情况。
配对t检验(paired t-test)不等价于普通的简单线性回归。但它等价于另一种回归——带个体固定效应的回归(fixed effects regression)。这种"不完全等价"反而能帮你理解回归框架的灵活性。
配对t检验在做什么?
配对设计:每个受试者接受两种处理(或前后测量两次),你关心的是两种处理下结果是否有差异。比如:10个人吃药前和吃药后的血压变化。
配对t检验的做法是:对每个人算差值 $D_i = Y_{i,\rm after} - Y_{i,\rm before}$,然后对差值做单样本t检验,$H_0: \mu_D = 0$。
before <- c(130, 142, 128, 135, 140, 132, 138, 129, 136, 133)
after <- c(125, 138, 126, 130, 135, 128, 134, 125, 131, 130)
t.test(after, before, paired = TRUE)
Paired t-test
data: after and before
t = -13.038, df = 9, p-value = 3.787e-07
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
-4.811372 -3.388628
sample estimates:
mean difference
-4.1
为什么普通回归不行?
如果你不管配对结构,直接把前后数据当独立样本做成组t检验:
t.test(after, before, var.equal = TRUE)
Two Sample t-test
data: after and before
t = -2.0014, df = 18, p-value = 0.06066
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-8.4039 0.2039
sample estimates:
mean of x mean of y
130.2 134.3
你会发现t值和p值都跟配对检验不一样——通常配对检验的p值更小(因为它消除了个体间差异的干扰)。
同样的,如果你跑一个"处理前后"的虚拟变量回归:
$$ Y = \beta_0 + \beta_1 \cdot \rm{after} + \varepsilon $$$\beta_1$ 的t检验等价于上面的独立样本t检验,不是配对t检验。因为这个回归把同一个人的前后两次测量当成两个独立的观测,忽略了个体间的相关性。
配对设计的核心是:同一个人的两次测量不是独立的。张三的血压无论吃药前后都可能比李四高——如果不控制这个"张三效应",个体差异就会淹没处理效应。
个体固定效应回归
解决方案:给每个人加一个单独的截距。这就是个体固定效应模型(individual fixed effects model):
$$ Y_{it} = \alpha_i + \beta \cdot \rm{after}_{it} + \varepsilon_{it} $$其中 $\alpha_i$ 是第 $i$ 个人的固定效应(一个只属于他/她的截距项),$\rm{after}_{it}$ 是"是否为处理后测量"的虚拟变量,$\beta$ 是我们关心的处理效应。
现在有 $n$ 个人,每个人测了两次($T=2$)。模型有 $n$ 个 $\alpha_i$ 和一个 $\beta$,共 $n+1$ 个参数——看起来比观测数 $2n$ 还多?其实用组内差分(within transformation)就可以消掉 $\alpha_i$。
对每个人取两次测量的差值:
$$ \begin{aligned} Y_{i,\rm after} - Y_{i,\rm before} &= (\alpha_i + \beta \cdot 1 + \varepsilon_{i,\rm after}) - (\alpha_i + \beta \cdot 0 + \varepsilon_{i,\rm before}) \\ &= \beta + (\varepsilon_{i,\rm after} - \varepsilon_{i,\rm before}) \end{aligned} $$$\alpha_i$ 被消掉了。对差值做回归(其实就是求差值的均值),$\hat\beta = \overline{D}$,恰好是差值的样本均值。对 $\beta$ 的t检验就是配对t检验。
所以:
配对t检验 = 对差值做单样本t检验 = $T=2$ 时的个体固定效应回归
三种写法,同一个结果。
一个数值验证
before <- c(130, 142, 128, 135, 140, 132, 138, 129, 136, 133)
after <- c(125, 138, 126, 130, 135, 128, 134, 125, 131, 130)
n <- length(before)
Y <- c(before, after)
after_var <- rep(c(0, 1), each = n)
id <- factor(rep(1:n, 2))
summary(lm(Y ~ after_var + id))
Call:
lm(formula = Y ~ after_var + id)
Residuals:
Min 1Q Median 3Q Max
-1.05 -0.45 0.00 0.45 1.05
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 129.5500 0.5215 248.426 < 2e-16 ***
after_var -4.1000 0.3145 -13.038 3.79e-07 ***
id2 12.5000 0.7032 17.777 2.56e-08 ***
id3 -0.5000 0.7032 -0.711 0.495056
id4 5.0000 0.7032 7.111 5.60e-05 ***
id5 10.0000 0.7032 14.221 1.79e-07 ***
id6 2.5000 0.7032 3.555 0.006164 **
id7 8.5000 0.7032 12.088 7.23e-07 ***
id8 -0.5000 0.7032 -0.711 0.495056
id9 6.0000 0.7032 8.533 1.32e-05 ***
id10 4.0000 0.7032 5.689 0.000299 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.7032 on 9 degrees of freedom
Multiple R-squared: 0.9904, Adjusted R-squared: 0.9797
F-statistic: 92.49 on 10 and 9 DF, p-value: 7.791e-08
after_var 系数的 t 值和 p 值与配对t检验完全一致。
为什么这件事重要?
因为它展示了回归框架的灵活性。
如果配对t检验等价于普通回归,那我们只能说"哦,又是一个特例"。但配对t检验不等价于普通回归——它需要固定效应。这说明:不是所有统计方法都天然地装在简单回归的壳子里,但几乎所有方法都可以通过扩展回归模型(加固定效应、加随机效应、加协变量、改变误差结构……)来等价表达。
t检验是回归。ANOVA是回归。配对t检验是回归(加个体固定效应)。Pearson相关是回归(标准化后)。甚至很多看起来跟回归毫无关系的非参数方法,也可以通过特定的变换和权重矩阵纳入回归框架。
统一不是把复杂问题简化,而是让你看清:复杂的表面之下,数学结构惊人地一致。
从配对到更一般
个体固定效应模型不只适用于 $T=2$ 的情形。如果每个人测量了多次($T > 2$),固定效应回归依然有效——它可以看成是"每个人的时间序列减去自己的均值"之后再跑回归。在面板数据(panel data)分析中,这是最基本的技术之一。
所以配对t检验不是终点,是一扇通向更广阔方法世界的门。
这扇门用传统t检验的框架是打不开的——因为你只能算差值,只能做 $T=2$。但回归框架天然支持任意 $T$、任意协变量、任意误差结构。
写到这里我突然意识到一件事:这可能就是为什么有些老师不爱在基础课上讲"回归统一一切"——因为你一旦说了,学生就会追问"那配对t检验呢?那非参数检验呢?“然后你就得解释固定效应、随机效应、广义线性模型……这一展开,一学期的课都不够用。
所以基础课选择"不讲"是有道理的。但作为学完了基础课的人,回头补上这一块拼图,感觉还是挺好的。