实证方法教程 / moderation

调节效应

把作用路径、调节项和异质性拆开看

这节课解决什么用于解释主效应为什么成立、在哪些群体更强、是否通过某条路径传导。
先准备哪些变量因变量 / 核心解释变量
会看到哪张表moderation_results.csv
论文里怎么克制解释写成补充解释:它支持某种机制,但不自动证明完整因果链。

调节效应是什么?

调节效应问的是 X 对 Y 的影响是否会随着 Z 的不同而改变。它回答的是“在什么条件下更强”,不是回答 X 为什么影响 Y。

先用一句话理解

把调节想成音量旋钮。X 是音乐,Z 不是音乐的来源,但它会让声音更大或更小;在回归里,这个旋钮就是交互项 X×Z。

什么时候用

判断项教科书式判断
适合用在理论认为某个条件、群体或环境会改变核心关系强度。
先不要用在只是尝试很多分组找显著差异,缺少事前理论。
最关键的前提交互项含义要清楚,连续调节变量最好中心化或说明取值范围。
读表顺序先看交互项,再用边际效应或分组图解释。
论文表述边界交互项显著说明斜率差异,不等于每组内部都显著。

把它和相近方法分清楚

容易混淆的对象怎么区分初学者记法
中介效应解释 X 通过什么路径影响 Y。回答为什么。
调节效应解释 X 对 Y 的影响何时更强或更弱。回答在什么条件下。
异质性分组分组分别估计系数。最好用交互项检验组间差异。

核心直觉和模型公式

交互项模型

调节效应通常写成:

\[Y_i=\beta X_i+\delta Z_i+\theta(X_i\times Z_i)+\boldsymbol{\gamma}'\mathbf{W}_i+\varepsilon_i\]

θ 是调节效应的核心,它表示 Z 改变 X→Y 斜率的程度。

公式里的符号怎么读

符号含义在本页怎么理解
X核心解释变量主关系的来源。
Z调节变量改变 X 对 Y 影响强度的条件。
X×Z交互项检验斜率是否随 Z 改变。
β基准斜率当 Z 为基准值时 X 的影响。
θ调节系数Z 每变化一单位,X 的斜率如何变化。

专业使用口径

调节效应不能只贴交互项星号,必须把交互项翻译成边际效应。

口径专业写法
理论条件说明为什么 Z 会改变 X→Y。
变量处理连续 Z 可中心化,分类 Z 要说明基准组。
边际效应用图或简单斜率说明不同 Z 下的 X 效应。
组间差异交互项检验的是差异,不是某组内部显著性。

一步一步做:从问题到结果的五步

步骤这一页具体做什么做到什么程度才算读懂
1. 写出调节假设先说明 Z 为什么会改变 X 的影响。不要事后找分组。
2. 构造交互项把 X 和 Z 相乘,分类变量要明确基准组。变量编码会影响解释。
3. 估计模型同时放入 X、Z 和 X×Z。不能只放交互项。
4. 解释边际效应计算不同 Z 下 X 的影响。θ 的符号只是第一步。
5. 画图或分组对照用边际效应图帮助读者理解。图不能替代正式检验。

结果怎么读:先读口径,再读数字

本页案例读表时,先记住这个口径:main_effect = x;0.8890927936731797。

读表顺序本页怎么读不要这样读
先看交互项θ 是否支持调节方向。不要只看分组内部星号。
再看边际效应不同 Z 下 X 的影响如何变化。不要把 θ 直接当某组效应。
然后看主效应有交互项时,X 和 Z 主效应是基准条件下的效应。不能按无交互模型解释。
最后看理论一致性调节方向是否符合机制。事后解释要克制。

初学者最容易错在哪里

误读为什么错
把中介和调节混写错。中介问为什么,调节问何时更强。
只看各组是否显著错。异质性要检验组间差异。
不放主效应错。交互模型应包含 X 和 Z 主项。
不解释边际效应不够。交互项系数本身不直观。

先看这个案例的结论

  • main_effect = x;0.8890927936731797。
  • interaction = x_x_moderator;0.0602742235960366。
  • 这些数字来自页面里的结果表;写论文时先解释数值含义,再讨论理论含义。

变量要求和案例口径

字段口径
数据CSMAR 风格 A 股企业创新面板
原始样本196 家上市公司,2015-2020 年,约 1200 个公司-年观测;各方法有效样本以本页输出表 N 为准
因变量patent_count;回归页通常使用 ln(1 + patent_count)
核心解释变量dfi_index,数字普惠金融指数;部分案例输出展示的是标准化后的 dfi_index
控制变量roa、lev、size、growth、cashflow、tobinq、top1、dual、board、indep、soe、age
输出文件moderation_results.csv
角色要求因变量、核心解释变量
依赖包无额外 Stata 社区包要求

实际代码

下面是本页案例里的最小 Stata 代码。它的作用是帮助你看清变量怎么进入模型、结果文件怎么生成,而不是要求你在网页里手动运行。

import delimited "$DATA_PATH", clear varnames(1) encoding(UTF-8)
gen ln_patent1 = ln(1 + patent_count)
egen firm_id = group(stkcd)
xtset firm_id year

global y ln_patent1
global count_y patent_count
global x dfi_index
global controls roa lev size growth cashflow tobinq top1 dual board indep soe age
gen post = year >= 2018
bysort firm_id: egen pre_dfi = mean(cond(year < 2018, dfi_index, .))
quietly summarize pre_dfi, detail
gen treat = pre_dfi >= r(p50)
gen did = treat * post
gen high_patent = patent_count > 2
gen running_dfi = dfi_index - 260
gen rdd_treat = running_dfi >= 0

xtreg $y c.$x##c.cashflow $controls i.year, fe vce(cluster firm_id)
export delimited using "$JOB_DIR/moderation_results.csv", replace

实际输出表

这张表是本方法页配套案例的输出结果,用来把前面的公式、变量口径和代码对应到实际数字。

modeltermcoefsepvalueNR2statusmoderator
main_effectx0.88909279367317970.0262894733339399745.962239655454535e-53960.9993316184504455estimatedmoderator
interactionx_x_moderator0.06027422359603660.0023282918238930511.7788411395539061e-43960.9993316184504455estimatedmoderator

案例图

这是一张由同一份案例数据生成的页面内诊断图。

调节效应 的共用案例输出图。
调节效应 的共用案例输出图。

论文里怎么写

本文在共用企业面板样本上报告调节效应,核心输出见 moderation_results.csv。结果解释时同时关注样本口径、变量构造、系数方向、标准误和适用前提,避免只凭单个 p 值完成方法选择。

检查清单

  • 调节变量应当在理论上改变 X 对 Y 的斜率,而不是另一个普通控制变量。
  • 交互项显著后要解释不同调节水平下的边际效应,不能只解释交互项符号。
  • 连续调节变量最好配合边际效应图或简单斜率,避免读者看不懂系数含义。

返回教程库 · 查看共用案例