简介这份资源面向使用Stata开展实证研究的高校师生与科研人员聚焦面板数据中中介效应与调节效应的完整操作演示适合已掌握基础回归、希望进阶到机制检验与边界条件分析的研究者。压缩包共269个文件约1.26MB以ado命令文件为主辅以hlp、sthlp帮助文档及mata、mlib底层库文件另含少量dta示例数据与do脚本覆盖reghdfe、estout、coefplot、xtabond2等常用外部命令的安装与调用。已有24365人学习下载热度较高。资源围绕面板数据结构、中介变量传递作用、调节变量交互项检验等核心知识点展开读者可据此完成从数据导入、模型设定到结果解读的全流程练习理解中介效应量与置信区间的计算逻辑掌握连续变量与分类变量交互项的写法并借助帮助文档排查命令报错提升实证分析的规范性与可信度。1. 面板数据里做中介和调节为什么总有人把交互项和中介路径搞反面板数据的中介效应和调节效应是实证论文里出现频率极高、但翻车率同样极高的两块内容。我见过太多人把调节效应写成“加个交互项就完事”也见过有人把中介效应做成三步回归就敢下结论结果被审稿人一句“Baron-Kenny 在面板结构下不成立”打回重做。这个标题讲的就是在 Stata 里面对一份带个体维度和时间维度的面板数据怎么把中介效应和调节效应分别跑对、跑稳、跑出能写进论文的结果。它适合正在写毕业论文、投期刊、做政策评估的实证研究者也适合从截面数据转到面板数据、发现原来那套命令不好使的从业者。核心难点不在命令本身而在于面板数据有固定效应和随机效应的选择问题中介路径里的系数会随效应设定变化调节效应的交互项在去均值之后解释也会变。这篇笔记按“先分清两类效应 → 再分别落地 → 最后避坑”的顺序展开命令可以直接抄参数我会逐个说明。2. 先把中介和调节分清楚面板结构下的模型设定差异2.1 中介效应和调节效应到底在问什么不同的问题中介效应问的是“X 通过什么渠道影响 Y”也就是 X → M → Y 这条路径是否成立M 是传导机制。调节效应问的是“X 对 Y 的影响在什么条件下更强或更弱”也就是 W 是否改变了 X 对 Y 的斜率W 是边界条件。这两个问题在计量上是完全不同的设定中介模型里 M 是内生变量需要估计间接效应调节模型里交互项 X×W 是核心解释变量需要关注主效应和交互项的联合显著性。很多人翻车的第一个点就是把中介变量 M 和调节变量 W 混着用。比如研究“数字化水平对企业绩效的影响”如果问“创新能力是不是中间渠道”那是中介如果问“这个影响在国有企业里是不是更强”那是调节。两者可以同时存在叫有调节的中介但那是进阶内容先把基础的两类分别跑对。在面板数据里这个问题会更复杂。因为面板有个体固定效应中介变量 M 如果随时间变化不大固定效应会把它的大部分变异吸收掉导致中介路径估计不出来。这是截面数据里不会遇到的坑。2.2 面板数据做中介固定效应还是随机效应先做检验再决定面板中介的第一步不是跑命令而是确定用固定效应FE还是随机效应RE。常见做法是先跑 Hausman 检验* 假设数据已 xtset id year * 先跑固定效应模型 xtreg y x controls, fe estimates store fe_model * 再跑随机效应模型 xtreg y x controls, re estimates store re_model * Hausman 检验 hausman fe_model re_model逻辑说明Hausman 检验的原假设是“随机效应估计量是一致的”如果 p 值小于 0.05拒绝原假设选固定效应否则选随机效应。参数上xtreg前必须xtset声明面板结构fe和re分别对应固定和随机效应。注意hausman命令要求两个模型用同一批样本如果样本量不一致会报错这时候要检查缺失值处理。选完效应类型之后中介效应的估计才有意义。如果选固定效应中介变量 M 的组内变异必须足够大否则 M 的系数会不显著这不是方法错了是数据本身不支持。我一般会先算一下 M 的组内标准差和组间标准差组内占比太低就考虑换随机效应或者换中介变量。2.3 调节效应在面板里的设定交互项要不要去中心化调节效应的核心是交互项 X×W。在面板固定效应模型里交互项的设定有两种常见做法一种是直接生成x_w x * w然后放进xtreg另一种是先对 X 和 W 做去中心化减去均值再相乘。去中心化的目的是降低主效应和交互项之间的共线性让主效应的系数更容易解释。* 方法一直接生成交互项 gen x_w x * w xtreg y x w x_w controls, fe * 方法二去中心化后生成交互项 center x w, prefix(c_) // 需要安装 center 命令 gen c_x_w c_x * c_w xtreg y c_x c_w c_x_w controls, fe逻辑说明方法一简单直接但主效应系数 x 的含义是“当 w0 时 x 对 y 的影响”如果 w 的取值远离 0这个解释会很别扭。方法二去中心化后主效应系数 x 的含义变成“当 w 处于均值时 x 对 y 的影响”更符合实际解释习惯。参数上center命令需要先ssc install center安装prefix(c_)指定生成的新变量前缀。注意去中心化不改变交互项的系数和显著性只改变主效应的解释。如果你的论文里主效应不是重点两种方法结果一样如果主效应要单独解释建议去中心化。3. 中介效应的 Stata 落地从三步回归到 Bootstrap 间接效应3.1 传统三步回归在面板里的写法与局限Baron-Kenny 三步回归是最经典的中介检验方法步骤是第一步X 对 Y 回归系数显著第二步X 对 M 回归系数显著第三步X 和 M 同时对 Y 回归M 的系数显著X 的系数下降或变得不显著。在面板里每一步都要用xtreg而不是reg。* 第一步X 对 Y xtreg y x controls, fe estimates store step1 * 第二步X 对 M xtreg m x controls, fe estimates store step2 * 第三步X 和 M 同时对 Y xtreg y x m controls, fe estimates store step3逻辑说明三步回归的优点是直观、好写缺点是检验力低尤其是间接效应 a×b 的显著性没有直接检验。在面板数据里固定效应会吸收不随时间变化的个体差异如果 M 的组内变异小第二步的系数很容易不显著导致中介效应检验失败。这不是中介不存在是方法本身在面板结构下不够灵敏。我一般会把三步回归作为初步探索真正下结论还是用 Bootstrap 间接效应检验。三步回归的结果可以放在论文里作为辅助但核心结论要基于 Bootstrap。3.2 用 Bootstrap 估计间接效应面板里的实现方式Bootstrap 间接效应的思路是反复抽样每次计算 a×b然后看这个乘积的置信区间是否包含 0。在 Stata 里可以用bootstrap前缀配合自定义程序实现也可以用medeff或sgmediation这类命令。面板数据里我一般用bootstrap手动实现因为可以控制聚类和抽样方式。* 定义计算间接效应的程序 capture program drop med_panel program define med_panel, rclass xtreg m x controls, fe scalar a _b[x] xtreg y x m controls, fe scalar b _b[m] return scalar indirect a * b end * Bootstrap 抽样聚类到个体 bootstrap indirectr(indirect), reps(1000) cluster(id) idcluster(newid): med_panel逻辑说明med_panel程序里先跑 M 对 X 的回归拿到系数 a再跑 Y 对 X 和 M 的回归拿到系数 b返回 a×b。bootstrap前缀做 1000 次抽样cluster(id)指定聚类到个体idcluster(newid)生成新的个体标识用于每次抽样。参数上reps(1000)是抽样次数一般至少 1000 次论文里常用 5000 次。cluster(id)是关键面板数据里个体内部相关不聚类会低估标准误。跑完之后用estat bootstrap, all看偏差校正后的置信区间。如果置信区间不包含 0间接效应显著。注意 Bootstrap 在面板里比较慢1000 次可能要跑几分钟5000 次更久建议先用 200 次试跑确认程序没问题再正式跑。3.3 面板中介的效应设定固定效应中介和随机效应中介的取舍面板中介还有一个容易忽略的问题中介变量 M 和结果变量 Y 的效应设定可以不同。常见做法是 M 和 Y 都用固定效应但如果 M 的组内变异很小固定效应会吃掉大部分信息导致 a 路径不显著。这时候可以考虑 M 用随机效应、Y 用固定效应的混合设定。* 混合设定M 用随机效应Y 用固定效应 xtreg m x controls, re scalar a _b[x] xtreg y x m controls, fe scalar b _b[m] display 间接效应 a * b逻辑说明这种混合设定的理由是M 作为中介变量如果它的个体差异本身是机制的一部分比如企业创新能力中的长期积累部分用随机效应保留组间变异更合理而 Y 用固定效应控制个体异质性。参数上re和fe分别对应随机和固定效应display直接计算乘积。注意这种混合设定在理论上需要论证不能随便混。我一般会在论文里说明M 的组间变异占总变异比例较高且理论上个体差异是机制的一部分因此 M 采用随机效应。如果审稿人质疑可以补充 M 用固定效应的结果作为稳健性检验。4. 调节效应的 Stata 落地交互项、简单斜率与图形呈现4.1 交互项的生成与回归从中心化到结果解读调节效应的核心命令是生成交互项并放进回归。前面提到去中心化的好处这里给一个完整的操作流程* 去中心化 foreach v in x w { quietly summarize v gen c_v v - r(mean) } * 生成交互项 gen c_x_w c_x * c_w * 回归 xtreg y c_x c_w c_x_w controls, fe estimates store mod_model逻辑说明foreach循环对 x 和 w 分别去中心化r(mean)是上一步summarize的均值。c_x_w是去中心化后的交互项。回归结果里c_x的系数是 w 处于均值时 x 对 y 的影响c_x_w的系数是 w 每变化一个单位x 对 y 影响的改变量。参数上quietly抑制summarize的输出让结果更干净。解读时注意如果c_x_w显著为正说明 w 越大x 对 y 的正向影响越强显著为负则相反。如果主效应c_x不显著但交互项显著说明 x 对 y 的影响完全取决于 w这时候不能直接说“x 对 y 没有影响”要说“x 对 y 的影响在 w 的某些取值下显著”。4.2 简单斜率检验在特定 w 取值下看 x 的边际效应交互项显著只说明调节存在但具体在 w 的哪些取值下 x 对 y 显著需要做简单斜率检验。常见做法是在 w 的均值、均值±1 个标准差处计算 x 的边际效应。* 在 w 的均值、均值±1SD 处计算简单斜率 summarize c_w scalar sd_w r(sd) * 均值处 lincom c_x c_x_w * 0 * 均值1SD 处 lincom c_x c_x_w * sd_w * 均值-1SD 处 lincom c_x c_x_w * (-sd_w)逻辑说明lincom是线性组合检验c_x c_x_w * 0就是 w 处于均值去中心化后均值为 0时 x 的边际效应。sd_w是 w 的标准差lincom会给出系数、标准误和置信区间。参数上scalar sd_w r(sd)把标准差存下来方便后面调用。如果三个位置的简单斜率都显著且符号一致说明调节是“增强型”的如果符号相反说明 w 高到一定程度后 x 的影响反转这是“削弱型”或“反转型”调节。论文里一般会报告这三个点的简单斜率再配一张调节效应图。4.3 调节效应图用 margins 和 marginsplot 画出交互模式Stata 里画调节效应图最方便的是margins配合marginsplot。思路是固定 w 的几个取值计算 x 对 y 的预测值然后画线。* 用 margins 计算预测值 margins, at(c_x(-1 0 1) c_w(-1 0 1)) atmeans * 画图 marginsplot, xdimension(c_x) noci /// title(调节效应图) /// xtitle(自变量 X) ytitle(预测的 Y) /// legend(order(1 低 W 2 中 W 3 高 W))逻辑说明margins的at(c_x(-1 0 1) c_w(-1 0 1))指定在 x 和 w 的 -1、0、1 处计算预测值atmeans表示其他变量固定在均值。marginsplot的xdimension(c_x)表示 x 轴用 c_xnoci表示不画置信区间画了会更乱。参数上legend(order(1 低 W 2 中 W 3 高 W))自定义图例让读者一眼看出三条线对应 w 的低中高。如果三条线斜率不同说明调节存在如果斜率相近说明调节效应弱。图里一般还会加scheme(s1mono)变成黑白图适合期刊要求。5. 避坑与排查面板中介调节里最容易翻车的五个点5.1 固定效应吃掉中介变量变异a 路径不显著现象跑xtreg m x controls, fe时x 的系数不显著但用reg m x controls跑截面回归时显著。原因固定效应吸收了个体不随时间变化的差异如果 M 的组内变异很小x 对 M 的影响就被淹没在噪声里。解决先算 M 的组内和组间标准差组内占比低于 30% 就要警惕。可以换随机效应跑 M 的方程或者在论文里说明 M 的个体差异是机制的一部分用随机效应更合理。如果审稿人坚持固定效应可以补充组内变异不足的说明或者换一个组内变异更大的中介变量。5.2 交互项和主效应共线性导致系数符号反转现象不加交互项时 x 对 y 显著为正加了交互项后 x 的系数变成负的交互项显著为正。原因这是典型的共线性问题主效应系数在加入交互项后含义变了不再是“x 对 y 的平均影响”而是“w0 时 x 对 y 的影响”。如果 w 的取值远离 0这个系数就会很别扭。解决对 x 和 w 去中心化后再生成交互项主效应系数就变成“w 处于均值时 x 对 y 的影响”符号一般不会反转。如果去中心化后还是反转检查 w 的分布看 0 是不是在合理范围内。5.3 Bootstrap 间接效应不显著但三步回归显著现象三步回归里 a 和 b 都显著但 Bootstrap 的间接效应置信区间包含 0。原因三步回归的检验力低a 和 b 分别显著不代表 a×b 显著。Bootstrap 直接检验乘积更严格。解决以 Bootstrap 结果为准。如果 Bootstrap 不显著说明间接效应证据不足不能下中介成立的结论。可以尝试增加 Bootstrap 次数到 5000 次或者检查是否有异常值影响。如果还是不显著考虑换中介变量或换模型设定。5.4 调节效应图三条线平行但交互项显著现象交互项 p 值小于 0.05但marginsplot画出来的三条线看起来平行。原因交互项显著说明斜率有差异但差异可能很小图上看不出来。另外如果 y 轴范围太大微小的斜率差异会被压缩。解决先看简单斜率检验的结果如果三个点的简单斜率确实不同且显著图平行只是视觉问题。可以调整 y 轴范围或者用marginsplot的yline选项加参考线。如果简单斜率也不显著那交互项的显著性可能是假阳性检查样本量和异常值。5.5 面板中介调节里忘记聚类标准误现象系数显著但审稿人要求聚类标准误后变得不显著。原因面板数据里同一个体的观测值相关不聚类会低估标准误导致 t 值虚高。解决所有回归都加vce(cluster id)Bootstrap 里加cluster(id)。注意xtreg的fe和re默认已经处理了个体层面的相关但如果是混合效应或者手动 Bootstrap必须显式聚类。我一般会在论文里报告聚类标准误的结果并在脚注里说明聚类层级。6. 进阶技巧把中介和调节放进同一个框架以及稳健性检验的写法有调节的中介是中介和调节的结合核心是看间接效应 a×b 是否随调节变量 W 变化。在 Stata 里可以用sem命令或者手动分步实现。手动分步的思路是先按 W 的高低分组分别跑中介效应比较间接效应的大小。分组标准可以用中位数、均值±1SD 或者三分位。* 按 W 的中位数分组 summarize w, detail gen w_group (w r(p50)) * 分组跑 Bootstrap 间接效应 * 低 W 组 bootstrap indirectr(indirect), reps(1000) cluster(id): med_panel if w_group 0 * 高 W 组 bootstrap indirectr(indirect), reps(1000) cluster(id): med_panel if w_group 1逻辑说明r(p50)是中位数w_group是 0/1 分组变量。分组跑 Bootstrap 后比较两组的间接效应置信区间如果一组显著另一组不显著说明有调节的中介存在。参数上if w_group 0是条件抽样只对低 W 组做 Bootstrap。稳健性检验方面我一般会做三件事一是换效应设定固定效应换随机效应二是换 Bootstrap 次数1000 换 5000三是换聚类层级个体换省份或行业。如果三个稳健性检验结果一致结论就比较可靠。如果某个检验下结论变了要在论文里说明原因不能藏着。最后说一个我自己的习惯每次跑完中介调节我都会把关键系数和置信区间记在一个单独的 do 文件里标注数据版本和日期。因为面板数据的中介调节对样本和设定很敏感过两周再跑可能结果就变了没有记录根本对不上。这个习惯帮我省了很多后悔药。希望帮到你。本文还有配套的精品资源点击获取