机制检验:中介效应、因果中介与渠道识别
Mechanism Analysis:不仅要证明 X 影响 Y,还要解释"X 通过什么路径影响 Y"。本节系统讲 Baron-Kenny 三步法、Sobel 检验、Bootstrap 中介、Imai 因果中介分析、渠道检验与调节效应,并诚实地说明"统计中介 ≠ 因果机制"。
sgmediation、mediation、boottest、estout、reghdfe)。01 机制检验要回答什么问题
基准回归告诉你 X 影响 Y(总效应 $c$),但这只是"是什么"。机制分析(mechanism / channel analysis)要回答的是"怎么影响、通过什么路径影响":政策 X 究竟是改变了企业的融资约束($M_1$)、还是改变了劳动配置($M_2$)、还是改变了创新激励($M_3$),进而影响了结果 Y?一个论文如果只报告总效应而不打开"黑箱"(black box),审稿人往往会问:你怎么知道是这个机制,而不是那个机制在起作用?
机制分析有两套互补的语言:中介分析(mediation)关心"X 通过 M 传递到 Y 的那部分效应有多大";渠道/调节分析(channel / moderation)关心"X 对 Y 的效应在什么条件下更强或更弱"。前者把 M 当作被 X 改变的中间变量,后者把某个环境变量 Z 当作放大或抑制 X→Y 的"开关"。两者都需要经济学理论先验,而不是跑一堆变量谁显著就用谁。
经济学顶刊越来越强调:机制检验必须由理论先验驱动。先从模型推导出"X 应该通过 M 影响 Y",再用数据检验;而不是把所有能想到的变量都当中介跑一遍,谁显著写谁。后者是典型的 specification search。
02 中介效应模型的形式化
经典中介模型由三个方程构成。设 $X$ 为核心解释变量(处理),$M$ 为中介变量,$Y$ 为被解释变量:
系数含义:$a$ 是 X 对中介 M 的效应(a path);$b$ 是控制 X 后 M 对 Y 的效应(b path);$c'$ 是加入 M 后 X 对 Y 的直接效应(direct effect);$c$ 是 X 对 Y 的总效应(total effect)。间接效应(indirect effect)= 经由 M 传递的部分 = $a \times b$。在线性、无交互、无遗漏的假设下,总效应满足分解:
即"总效应 = 直接效应 + 间接效应"。中介效应占总效应的比例为 $ab/c$,常被报告为"X 经由 M 解释了百分之多少的总效应"。
03 Baron-Kenny 三步法与 Sobel 检验
Baron & Kenny (1986) 三步法是最经典的中介检验流程,依次估计三条路径:
但三步法只看系数显著性,并没有直接检验"间接效应 $a\times b$ 是否显著不为零"。为此 Sobel 检验构造间接效应 $a\hat{b}$ 的近似标准误:
其中 $s_a, s_b$ 分别是 $\hat{a}, \hat{b}$ 的标准误。在大样本下 $Z_{Sobel}$ 近似服从正态分布,$|Z|>1.96$ 即认为间接效应在 5% 水平显著。
Sobel 检验假设间接效应 $a\hat{b}$ 服从正态分布,但 $a\times b$ 是两个正态变量的乘积,分布往往有偏(尤其小样本时)。因此现代做法优先使用 Bootstrap 中介(见下节),它不依赖正态假设。
04 Bootstrap 中介与因果中介分析
Bootstrap 中介(Preacher & Hayes 系列)通过有放回地重复抽样,直接构造间接效应 $a\times b$ 的经验分布与置信区间,不需要正态假设,是当前社科与实证经济学更推荐的做法。若 95% Bootstrap 置信区间不包含 0,则间接效应显著。
更进一步,因果中介分析(Causal Mediation Analysis, Imai, Keele & Tingley 2010)把中介问题提升到潜在结果框架,区分出:
- 平均因果中介效应 ACME(Average Causal Mediation Effect):经由 M 传递的因果部分;
- 平均直接效应 ADE(Average Direct Effect):不经过 M 的部分;
- 总效应 TE = ACME + ADE。
Imai 等人指出,即便 X 是随机分配的,M 与 Y 之间仍可能存在未观测混杂(因为 M 通常不是随机分配的),所以传统中介只能给出"关联上的中介",要上升到"因果中介"需要序列可忽略性(sequential ignorability)假设,并做敏感度分析。这一点是本节最重要的诚实立场。
* ===== 04.1 Baron-Kenny 三步法 =====
* 第一步:总效应 c
reg Y X $Xctrl, vce(cluster id)
est store step1
* 第二步:a 路径 X -> M
reg M X $Xctrl, vce(cluster id)
est store step2
scalar a = _b[X]
* 第三步:同时纳入 X 与 M
reg Y X M $Xctrl, vce(cluster id)
est store step3
scalar bp = _b[M]
scalar cp = _b[X]
esttab step1 step2 step3, se star(* 0.1 ** 0.05 *** 0.01)
* ===== 04.2 Sobel 检验(手工)=====
scalar sa = _se[X] // a 的标准误(第二步回归后)
* 注意:bp、cp 来自第三步;重新跑第二步取 se
reg M X $Xctrl, vce(cluster id)
scalar a=_b[X], sa=_se[X]
reg Y X M $Xctrl, vce(cluster id)
scalar b=_b[M], sb=_se[M]
scalar indirect = a*b
scalar se_ab = sqrt(b^2*sa^2 + a^2*sb^2)
scalar Z_sobel = indirect/se_ab
disp "间接效应 a*b = " indirect
disp "Sobel Z = " Z_sobel
* ===== 04.3 Bootstrap 中介(推荐,不依赖正态)=====
* ssc install mediation (或使用 Hayes 的 medeff/medsem)
* 方法A:medeff 做 Bootstrap 间接效应
medeff (regress M X $Xctrl) (regress Y X M $Xctrl), treat(X) mediate(M) sims(1000)
* 方法B:连乘间接效应 + Bootstrap 置信区间
bootstrap r(indirect), reps(1000) seed(20240101): ///
mediation_boot, xvar(X) mvar(M) yvar(Y)
* ===== 04.4 Imai 因果中介分析 + 敏感度分析 =====
* 安装:net install st0289.pkg (或 ssc install med4way)
* 回归中介模型与结果模型,估计 ACME / ADE / TE
regress M X $Xctrl
est store m_mod
regress Y X M $Xctrl
est store y_mod
* 输出 ACME(间接)、ADE(直接)、总效应及其比例
mediation, treat(X) mediate(M) sims(1000)
* 敏感度分析:rho 取何值时间接效应不再显著
medsens, rho(-0.5(0.05)0.5)
05 渠道检验:分组回归与交互项
当中介变量难以直接观测、或理论上更适合用"效应差异"来识别渠道时,常用渠道检验(channel test)而非中介模型。逻辑是:如果 X 通过某个渠道 M 起作用,那么在"渠道更容易被激活"的子样本里,X→Y 的效应应当显著更强。
两种做法:
(1) 分组回归(split-sample):按渠道强度把样本分成"强渠道组"与"弱渠道组",分别估计 X→Y,比较两组系数大小。例如检验"融资约束渠道",就按企业融资约束高低分两组:高融资约束组里政策效应应更大。
(2) 交互项法:直接加入 X 与渠道变量 M 的交互项,系数为正则说明渠道放大了效应。交互项模型见下节。
* ===== 05.1 渠道检验:分组回归 =====
* 按融资约束(SA指数)中位数分高/低两组
xtile SA_group = SA_index, nq(2)
reghdfe Y X $Xctrl if SA_group==1, absorb(id year) vce(cluster id) // 低约束组
est store ch_low
reghdfe Y X $Xctrl if SA_group==2, absorb(id year) vce(cluster id) // 高约束组
est store ch_high
esttab ch_low ch_high, keep(X) se star(* 0.1 ** 0.05 *** 0.01) ///
mtitles("低融资约束" "高融资约束")
* ===== 05.2 渠道检验:交互项法 =====
gen X_by_channel = X * SA_index
reghdfe Y X SA_index X_by_channel $Xctrl, absorb(id year) vce(cluster id)
* 交互项 X_by_channel 显著 => 渠道强度调节了 X 的效应
06 调节效应 Moderation
调节效应(moderation)与中介不同:调节变量 $Z$ 不被 X 影响,而是影响 X→Y 这条关系的强弱或方向。模型为:
其中 $\beta_1$ 是 $Z=0$ 时 X 的效应;$\beta_2$ 是 Z 每增加一单位、X→Y 斜率的变化(调节效应);$X$ 对 $Y$ 的总偏效应为 $\partial Y/\partial X=\beta_1+\beta_2 Z$。报告调节效应时,常画简单斜率图(simple slope plot):在 Z 取 ±1 标准差时画出 X→Y 的斜率及其置信区间。
* ===== 06.1 调节效应:交互项(连续Z)=====
* 对连续Z中心化,减少共线性
center SA_index, prefix(c_)
gen X_x_cZ = X * c_SA_index
reghdfe Y X c_SA_index X_x_cZ $Xctrl, absorb(id year) vce(cluster id)
* ===== 06.2 画简单斜率图(Z = 均值±1SD)=====
* ssc install marginsplot
margins, dydx(X) at(c_SA_index=(-1 0 1)) // 标准化Z取 -1,0,+1
marginsplot, title("Moderation: effect of X at different Z") ///
yline(0)
* ===== 06.3 分组虚拟变量 D 的交互(异质性调节)=====
gen XxD = X * D
reghdfe Y X D XxD $Xctrl, absorb(id year) vce(cluster id)
07 机制变量的选取原则
机制变量 M 的好坏,直接决定机制检验是否可信。选取时应遵循以下原则:
- 理论先验优先:M 必须来自正式模型或文献,能说清"为什么 X 会先改变 M、M 再改变 Y"。不能因为某个变量恰好显著就把它封为机制。
- 时序正确:M 必须发生在 X 之后、Y 之前,即 $X \to M \to Y$ 的时间顺序成立。用同期甚至前置变量当中介,逻辑上不成立。
- 避免"坏控制"(bad control):M 不能是 X 的结果同时又直接决定 Y 的" collider ",否则把它放进回归会引入偏误。
- 测量可信:M 要有公认的度量(如用 SA 指数、KZ 指数度量融资约束),并在稳健性中换一个度量。
- 与总效应方向一致:若 a 路径与 b 路径符号相反,间接效应可能为负(遮掩效应 suppression effect),需要特别解释,不能简单说"存在中介"。
08 逐步流程
09 论文案例与常见误区
常见误区
这是机制分析最大的误区。Baron-Kenny 三步法只是相关性链条:M 与 Y 之间很可能存在未观测混杂(M 不是随机分配的)。即使 a、b 都显著,也不能断言"X 通过 M 因果地影响了 Y"。正确表述是"数据与 X→M→Y 这一机制一致",并尽量用 Imai 因果中介 + 敏感度分析来加固。
用与 X 同期、甚至早于 X 的变量当中介,逻辑链不成立;或者把本身由 Y 反向决定的变量放进 Y 方程,制造 collider 偏误。机制变量必须满足 X→M→Y 的真实时间顺序。
在几十个候选变量里挑显著的当机制,本质是 p-hacking。机制变量必须由理论先验限定在少数几个,且换度量后结论要一致。
看 a、b 分别显著并不能直接证明 a×b 显著。必须同时报告 Sobel Z 或 Bootstrap 置信区间,否则"中介效应"的统计依据是不完整的。
调节效应 $\beta_3$ 显著只说明"X→Y 关系随 Z 变化",但读者需要知道在 Z 的典型取值下 X→Y 的斜率与置信区间。必须用 margins, at(Z=(p10 p50 p90)) + marginsplot 画简单斜率图。
Angrist-Pischke (2009) 警告:如果 M 本身由 D 决定,把 M 同时放进 Y 方程会把 D 的效应"稀释"成直接效应,总效应被低估。机制分析中 M 是后定变量(post-treatment),不能作为控制变量进入基准回归——它只能在专门的中介分析中作为 M 出现。
进阶资料
- Imai, Keele & Yamamoto (2010), Psychological Methods — 因果中介与敏感度分析。
- Baron & Kenny (1986), JPSP — 中介与调节的概念区分。
- Preacher & Hayes (2008) — Bootstrap 间接效应的非参数做法。
- Stata 命令:
medeff、medsens、mediation、margins / marginsplot。