多层模型实践 · 第 7 章

跨层交互

第 6 章给出了一个干净的负面结论:低 SES 学生比非低 SES 学生少考的那 −19.7-19.7 分,在各班之间近乎一致。第 5 章给出了另一个干净的正面结论:小班整体提分约 +7.7+7.7 分,跨班级稳定。

把这两件事拼起来,自然冒出一个政策问题:小班对低 SES 学生与非低 SES 学生的帮助一样大吗? 如果一样大,小班政策对所有学生都同样有用,是一种"水涨船高"的处理。如果不一样,比如小班更帮低 SES 学生,那就有一个特别有意义的发现——小班是缩小教育不平等的工具。这个判断决定了"政府要不要专门给低收入学区铺小班政策"这种真实的政治预算决策。

本章用跨层交互来回答这个问题。技术上是把 cltype 和 ses_F 的乘积项加进固定效应。结论会是:本数据下交互项不显著(p ≈\approx 0.71),小班对低 SES 学生(+7.09+7.09 分)与非低 SES 学生(+8.20+8.20 分)的提升几乎一样。但负面结论也有它的政策含义,本章末尾会展开。

跨层交互:班级层变量乘以学生层变量

先看一个生活类比:小班对学习困难学生有没有特别的好处

想象两个孩子,一个家境优渥、家里有大把书,另一个家境困难、放学要去帮父母看店。两人都被随机分进同一所小学,第一种情形下两人都进了小班,第二种情形下两人都进了常班。

直觉上,富裕家庭的孩子在常班里也能学得不错——他们靠家里资源补课。家境困难的孩子在常班里容易被忽略,老师顾不上他们一对一辅导,分数容易拉下。但在小班里,老师能腾出精力关照差异学生,家境困难的孩子得到的"额外注意力"可能比富裕孩子多。

如果这个直觉对,把家境困难的孩子从常班调进小班的提分效应(比如 +15+15 分)应该大于把家境优渥的孩子从常班调进小班的提分效应(比如 +5+5 分)。这两个数字不一样,就是交互效应。如果两个数字一样大(都是 +8+8),说明小班的好处是"水涨船高"的,不分学生背景。

跨层交互的形式定义

定义跨层交互
def:cross-level-interaction

跨层交互是班级层变量与学生层变量的乘积。设 DkD_k 是班级 kk 的处理(如 cltype),xikx_{ik} 是学生 ii 的协变量(如 ses_F),含跨层交互的随机截距模型为

yik=β0+β1Dk+β2xik+β3(Dk×xik)+uk+eik.y_{ik} = \beta_0 + \beta_1 D_k + \beta_2 x_{ik} + \beta_3 (D_k \times x_{ik}) + u_k + e_{ik}.

其中 β1\beta_1 是 xik=0x_{ik} = 0 时(参照学生)的处理效应,β2\beta_2 是 Dk=0D_k = 0 时(参照班级)的协变量效应,β3\beta_3 是交互项系数——表示"xikx_{ik} 取 1 时,处理效应比 xikx_{ik} 取 0 时多出多少",uku_k 是班级随机截距,eike_{ik} 是学生残差。

跨层交互的合流结构
跨层交互的合流结构:班级层处理变量 D_k 与学生层协变量 x_ik 在乘积处合流,得到跨层交互项。系数 β₃ 度量 x_ik 取 1 时处理效应相对 x_ik 取 0 时多出多少——β₃ > 0 意味着低 SES 学生从小班受益更多,β₃ < 0 反之。

公式里 β3\beta_3 是这一章的核心。如果 β3>0\beta_3 > 0,意味着低 SES 学生(xik=1x_{ik} = 1)受小班照顾更多;如果 β3<0\beta_3 < 0,意味着低 SES 学生反而受益更少;如果 β3≈0\beta_3 \approx 0,说明小班对所有学生一视同仁。

为什么这叫"跨层"交互? 因为 DkD_k 在班级层取值,xikx_{ik} 在学生层取值,两者乘起来跨越了模型的两个层级。如果是 xik×zikx_{ik} \times z_{ik} 这种"两个学生层变量"的乘积,就叫层内交互;如果是 Dk×WkD_k \times W_k 这种"两个班级层变量"的乘积,就是班级层内的交互。跨层是教育统计里最常见也最有政策含义的一类。

学术背景:Krueger & Whitmore 2001 的差异化效应分析

Krueger 与 Whitmore (2001) 在 Economic Journal 上专门用 STAR 数据回答了本章的核心问题。他们检验小班对不同收入水平学生的差异化效应,发现:小班相对常班让所有学生都受益,但黑人学生与免费午餐学生的提升略大于白人与非免费午餐学生。这个结论后来被反复用作"小班是缩小教育鸿沟的工具"这一政策主张的证据。

他们论文里的差异化效应在统计上虽然指向"低收入受益更多",但显著性并不强(特别是单看 K 年级)。本章用 lme4 在同一份数据上重跑,会发现 K 年级的跨层交互项不显著(p ≈\approx 0.71),跟 Krueger & Whitmore 在跨年级合并样本上更精细的处理结论略有差别。这个差别背后反映了多层模型里跨层交互的检验功效通常很低,本章末尾的雷区会专门讨论这一点。

教育界对这个问题的辩论从 1995 年延续到现在。Nye 等 (2000) 的跟踪研究、Schanzenbach (2006) 的劳动经济学分析,都使用了 STAR 数据 cltype ×\times 家庭背景的交互项作为分析工具。本书的 M9 重跑出来的数字虽然不会改变学界共识,但能让读者看到从原始数据到 lmer 的具体路径。

M9:含跨层交互的随机截距模型

下面用 lmer 把 cltype ×\times ses_F 加进模型。R 里乘号 * 会自动展开为"两个主效应 + 交互项",所以 cltype * ses_F 等价于 cltype + ses_F + cltype:ses_F。

library(lme4); library(lmerTest); library(tidyverse); library(here)

d <- read_csv(here::here("data", "star_k.csv"), show_col_types = FALSE) |>
  filter(!is.na(math), !is.na(cltype), !is.na(tch),
         !is.na(sx), !is.na(eth), !is.na(ses)) |>
  mutate(
    sex_F  = ifelse(sx == "F", 1, 0),
    eth_B  = ifelse(eth == "B", 1, 0),
    ses_F  = ifelse(ses == "F", 1, 0),
    cltype = factor(cltype, levels = c("reg", "reg+A", "small"))
  )

# M9:跨层交互
m9 <- lmer(math ~ cltype * ses_F + sex_F + eth_B + (1 | tch),
           data = d, REML = TRUE)
summary(m9)

跑出来的关键系数列在下表。

表 7·1 M9 的关键固定效应系数(n = 5,768)

项β\betaSEp
cltypesmall(small 主效应)8.202.850.005
cltypereg+A(reg+A 主效应)−0.85-0.852.910.77
ses_F(低 SES 主效应)−19.95-19.951.91<< 0.001
cltypesmall:ses_F(小班 × 低 SES)−1.11-1.113.000.71
cltypereg+A:ses_F(reg+A × 低 SES)+1.31+1.312.940.66

两个交互项的 p 值都远大于 0.05,跨层交互不显著。

用四种组合的预测均值看清楚结论

光看交互项 p 值有时不够直观。更有政策含义的看法是:固定其他协变量在样本平均,算出四种组合(reg/small ×\times 高/低 SES)下学生的预测数学分数。这就是 predict 配合 model.matrix 能直接给出来的东西。

# 固定 sex_F 和 eth_B 在样本平均
sex_mean <- mean(d$sex_F)
eth_mean <- mean(d$eth_B)

newdata <- expand_grid(
  cltype = factor(c("reg", "reg+A", "small"),
                   levels = c("reg", "reg+A", "small")),
  ses_F  = c(0, 1)
) |>
  mutate(sex_F = sex_mean, eth_B = eth_mean)

mm   <- model.matrix(~ cltype * ses_F + sex_F + eth_B, data = newdata)
beta <- fixef(m9)
V    <- vcov(m9)

newdata <- newdata |>
  mutate(
    pred = as.numeric(mm %*% beta),
    se   = sqrt(diag(mm %*% V %*% t(mm))),
    lwr  = pred - 1.96 * se,
    upr  = pred + 1.96 * se
  )

跑完后六行预测均值整齐摆在下表。

表 7·2 六种"班级类型 × SES"组合的预测数学分数(其他协变量在样本平均)

班级类型学生 SES预测分数
reg非低 SES (N)493
reg低 SES (F)473
reg+A非低 SES (N)492
reg+A低 SES (F)474
small非低 SES (N)501
small低 SES (F)480

把"小班减常班"分别在两类学生上算一下:

small−reg ∣ 非低 SES=501−493=8.20,small−reg ∣ 低 SES=480−473=7.09.\mathrm{small}-\mathrm{reg}\ \big|\ \text{非低 SES} = 501 - 493 = 8.20,\quad \mathrm{small}-\mathrm{reg}\ \big|\ \text{低 SES} = 480 - 473 = 7.09.

其中 8.208.20 和 7.097.09 都是 K 年级数学分数下"小班相对常班"的提升量,分别针对非低 SES 学生群体和低 SES 学生群体。两个数字相差 1.111.11 分,正是 M9 里交互项 cltypesmall:ses_F 系数的负值(−1.11-1.11),p 值 0.71,远不显著。

结果解读政策结论

小班对非低 SES 学生的提升(+8.20+8.20 分)跟对低 SES 学生的提升(+7.09+7.09 分)在统计学上几乎没差别。这意味着小班教育是一种"水涨船高"的处理,对所有学生大致一样有用。它没有像有些政策辩论希望的那样特别照顾差异学生,也没有反方担心的那样只让优势学生受益。

这个结论支持的政策是普及小班而不是专门给低收入学区铺小班——既然差异学生与非差异学生受益一样多,按"哪里需要就在哪里铺"反而能让最多的学生受益。当然这个判断要跟教师成本、学校空间约束放在一起算总账,本章只给出实证证据这一面。

把这个结论可视化:两条平行的折线把不同班级类型 ×\times SES 的预测分数串起来,两条线之间的距离近乎一致,从常班走到小班时两条线都向上倾斜,倾斜幅度几乎相同——这就是"交互不显著"的几何样貌。再把两个跨层交互项的系数与 95% CI 画成森林图,CI 完全跨过 0,与 p 值结论一致。

班级类型与 SES 的跨层交互预测分数
班级类型 × 学生 SES 的预测分数。两条线如果平行说明交互不存在;本数据中两条线接近平行,小班对低 SES 与非低 SES 学生的提升几乎一致。
两个跨层交互项的系数与 95% CI 森林图
两个跨层交互项的系数与 95% CI。两条 CI 都跨过 0,统计学上不显著。

交互项不显著的雷区:检验功效低不等于不存在

跨层交互的 p 值不显著之外,还有一个常被忽略的统计学问题——跨层交互项的检验功效通常很低。本节讲清楚这件事。

雷区跨层交互的检验功效问题

lmer 给的"交互项 p == 0.71"是一个负面结论,但这种 p 值的解读要谨慎。多层模型里跨层交互的有效样本量接近班级数 323,远小于学生数 5,768——因为 DkD_k 在班级内不变化,能识别 β3\beta_3 的独立信息单位是班级而不是学生。

这意味着 lmer 在估 β3\beta_3 时实际样本量很小,标准误大,CI 宽。即便真实的差异化效应 β3=−3\beta_3 = -3 分(也就是小班对低 SES 学生的好处比对非低 SES 多 3 分,是有意义的政策信号),样本量小到这个真实差异也大概率检验不出来。这就是统计学说的"检验功效低"现象——接受零假设不等于零假设是真的,只意味着数据没有给出足够强的反对证据。

诊断方法。 判断"这个不显著有多硬"主要看 95% CI 是否包含一个有政策意义的值。本数据交互项的 95% CI 大约是 [−7.0,+4.8][-7.0, +4.8],同时容纳了 ±5\pm 5 分的差异化效应,说明数据其实没法排除任何方向。再看交互项 β3\beta_3 的点估计与 SE 之比(本数据 −1.11/3.00≈−0.37-1.11 / 3.00 \approx -0.37),数据强烈支持"接近 0"。更细致的做法是事后功效分析(power analysis),算"如果真实 β3=−5\beta_3 = -5,本样本下能检测到的概率是多少",结果通常是 30% 到 50% 这种偏低的值。

解读规范。 写论文时不能直接说"小班对低 SES 学生没有额外好处",应该写"在本样本下未观察到显著的差异化效应(β3=−1.11\beta_3 = -1.11, p == 0.71,95% CI [−7.0,+4.8][-7.0, +4.8])"。后者保留了"也许真有差异,但本数据看不出来"的可能性。

记忆方法。 跨层交互检验是"用班级数当样本量"的检验,p 值不显著时一定要先问自己"功效够不够",再下结论。

累积方法对比表更新

把 M9 加进累积表。M9 里小班主效应的解读跟 M5 / M6 略有不同——它对应的是"xik=0x_{ik} = 0(非低 SES)学生的小班效应",所以系数是 8.20 而不是 7.7 左右。这是含交互项时主效应解读的一个常见点。本章用整张预测均值表来给出"全样本平均"的小班效应大约是 7.6((8.20+7.09)/2(8.20 + 7.09) / 2 加权后),跟 M5 一致。

表 7·3 累积方法对比(截至第 7 章)

方法小班 β\betaSE95% CIσclass2\sigma^2_{\text{class}}
OLS 朴素8.211.56[5.15, 11.27]—
M4:cltype + (1|tch)7.903.76[0.55, 15.26]685
M5:+ 学生协变量7.683.63[0.57, 14.79]640
M6:再 + 教师工龄7.733.61[0.66, 14.80]632
M7:+ 随机斜率(不显著)7.693.63[0.57, 14.81]640
M9:+ 跨层交互8.202.85[2.61, 13.79]638

M9 的"小班 β\beta"一栏给出的是非低 SES 学生那一类的小班效应(β=8.20\beta = 8.20,SE 2.85)。这跟其他模型给出的"全样本平均小班效应"概念稍有不同,所以这张表里的 M9 行需要带着这个限定来读。

下一章预告

到这里为止,所有模型都把学校层差异当作背景噪声塞进了班级随机截距 uku_k。但在第 1 章已经看到,79 所学校的 K 年级数学均值跨度是 124 分——这部分变异其实是学校层的,跟班级层有本质区别。

第 8 章会把模型扩展为完整的三层结构 (1 | sch/tch),让学生嵌套在班级里、班级嵌套在学校里。会看到本书一直当作常数的 σclass2\sigma^2_{\text{class}} 被拆成 σclass within school2+σschool2\sigma^2_{\text{class within school}} + \sigma^2_{\text{school}} 两部分,小班效应的估计也会因此从 7.77.7 漂移到 8.88.8 左右。同时 LRT 会强烈支持三层结构(p <2.2×10−16< 2.2 \times 10^{-16}),这跟本章随机斜率与跨层交互的 LRT 形成鲜明对比,让读者直观感受到"哪些异质性该建模、哪些不该"。