资讯动态

面板数据中介效应与调节效应:Stata固定效应操作全流程

发布时间:2026/10/15 12:20:27 来源:尧图企业网站定制
简介面向社会科学与经济学研究者的Stata面板数据中介效应、调节效应操作演示资料包适合高等院校师生与科研人员使用系统涵盖面板数据基础、中介变量传递机制及调节变量交互项检验等核心内容。资源共269个文件以96个ado扩展命令、80个hlp与54个sthlp帮助文档、19个mata程序及11个mlib库文件为主体附有dta示例数据和do命令脚本压缩包仅1.26MB便于直接加载运行。目前已有24380人学习下载。该资料包在演示操作的同时整合了reghdfe、estout、coefplot等常用外部命令读者可结合示例数据一步步复现结果理解如何利用mediate命令评估中介效应显著性并通过交互项系数判断调节效应存在与否从而建立从模型设定、命令执行到结果解读的完整分析路径适合希望快速掌握面板数据计量分析实操的中级用户。1. 中介效应与调节效应面板数据实证里最容易被低估的两个环节拿到一份面板数据跑 OLS 回归人人都熟但一旦加上中介效应和调节效应很多人的 Stata 操作就开始走样要么把横截面数据的做法直接套到面板上要么对固定效应下的交互项解释出错。这份资源是一套完整的 Stata 命令演示覆盖面板数据下中介效应的三步检验、Sobel 与 Bootstrap 验证以及调节效应的交互项设置、去中心化和分组回归。适合正在写实证论文、做经管课题以及想快速把手里的面板数据跑出可靠结论的从业者。它解决的不是「命令能不能跑通」而是「跑出来的结果能不能在论文里站得住」。2. 建模前的关键两步面板结构声明与固定/随机效应取舍2.1 面板数据为什么要先 xtset 再回归面板数据的特点是一个个体被重复观测多次所以误差项在个体内部天然相关。如果不先声明面板结构Stata 会把每个观测当作独立样本标准误被人为缩小显著结果很可能是假的。常见做法是先用xtset声明个体维度和时间维度再进入后续分析。xtset id year xtdescribe执行后xtdescribe会输出面板的平衡性、每个个体被观测的次数等信息。这一步不用看显著性重点检查样本是否严重非平衡如果大量个体只有两期数据后续的固定效应模型自由度会很低中介效应的间接系数容易被估计得极不稳定。我一般会再跑一条duplicates report id year确认没有重复的个体—时间组合否则xtset会直接报错或者悄悄覆盖数据。2.2 Hausman 检验固定还是随机别拍脑袋中介效应和调节效应的系数估计都建立在面板模型之上固定效应和随机效应结果可能差异很大尤其是 X 对 M 的那条路径。检验逻辑很直接如果个体效应与解释变量不相关随机效应更有效如果相关随机效应估计就有偏必须用固定效应。xtreg y x ctrl1 ctrl2, fe estimates store fe_model xtreg y x ctrl1 ctrl2, re estimates store re_model hausman fe_model re_modelhausman输出的 p 值如果小于 0.05说明个体效应与解释变量相关固定效应更稳妥。这里有个细节容易被忽略Hausman 检验对标准误的设定敏感如果在主回归里使用了聚类稳健标准误常见做法是在hausman命令后加, sigmamore或者基于xtreg, re的聚类版本做检验。否则出现「检验支持固定效应但回归结果和随机效应差异不大」的情况往往就是因为标准误不一致导致检验失真。2.3 聚类稳健标准误不设置等于白跑显著性面板数据里同一体的不同期扰动项通常相关普通标准误假设它们独立这会导致 t 值虚高。尤其是中介效应第二步回归中 X 对 M 的系数如果显著性本身就是「虚假繁荣」后期算出的间接效应置信区间根本没有意义。xtreg m x ctrl1 ctrl2, fe vce(cluster id)vce(cluster id)表示按个体聚类调整标准误这是当前期刊审稿里的主流要求。需要说明的是聚类数一般不应少于 30~40 个否则聚类稳健标准误本身也不可靠如果你的面板只有十几个个体更现实的做法是报告普通标准误并做多种设定对照不建议强行聚类。3. 中介效应操作三步回归法的 Stata 落地3.1 三步检验流程先总效应、再 X→M、最后 XM→Y面板数据的中介效应检验最通用的是三步回归法先检验 X 对 Y 的总效应再检验 X 对 M 的效应最后把 X 和 M 同时放入回归看 M 是否显著且 X 的效应下降。每一步都建议用固定效应模型并保持控制变量一致避免「换模型导致系数不可比」的翻车现场。xtreg y x ctrl1 ctrl2, fe vce(cluster id) est store m1 xtreg m x ctrl1 ctrl2, fe vce(cluster id) est store m2 xtreg y x m ctrl1 ctrl2, fe vce(cluster id) est store m3 est tab m1 m2 m3, b(%9.3f) se(%9.3f) stats(N r2_a)三次回归的控制变量完全相同X 的编码也必须一致。多数学者会先关注第二步 X 对 M 的系数是否显著再关注第三步 M 对 Y 的系数。如果第二步不显著而第三步 M 显著中介效应不成立如果第二步显著而第三步 M 不显著说明可能是「遮掩效应」或者 M 与 Y 的关系被其他变量吸收。这都是正常结果不需要为了凑结论而换用随机效应模型。3.2 系数乘积的显著性Sobel 检验与 z 值手工算三步法只说明了「系数有变化」但间接效应 a×b 是否显著还需要显式检验。Sobel 检验是传统做法原理是构造间接效应的标准误用 z 检验判断 a×b 是否显著异于零。* 假设从回归结果中手动提取数值 scalar a _b[x] scalar sa _se[x] scalar b _b[m] scalar sb _se[m] * Sobel 标准误 sqrt(b^2 * sa^2 a^2 * sb^2) scalar se_ab sqrt((b^2)*(sa^2) (a^2)*(sb^2)) scalar z_ab (a*b) / se_ab di Sobel z z_ab这段代码假设你已经把第二步和第三步的回归结果存储起来。实际操作中更稳妥的做法是先执行xtreg m x, fe然后用estimates store保存再在第三步后通过est restore切回前一个模型提取系数。直接_b[x]取数容易取错模型建议养成「用到哪个模型先 restore 哪个」的习惯。Sobel 检验的局限是假设 a×b 的抽样分布服从正态分布这在样本量不大时往往不成立后面会讲到如何用 Bootstrap 弥补这一缺陷。3.3 直接调用 sgmediation参数与输出对照如果你不想手动三步跑Stata 里有外部命令sgmediation可以一次性给出系数分解结果。需要先安装扩展命令包联网状态下执行findit sgmediation按提示安装即可。sgmediation y, mv(m) iv(x) cv(ctrl1 ctrl2) vce(robust)命令中mv()指定中介变量iv()指定核心自变量cv()指定控制变量vce(robust)对应稳健标准误。输出会直接给出间接效应、直接效应和总效应的估计值以及 Sobel、Aroian 和 Goodman 三种检验的 z 值。一个必须承认的坑是sgmediation默认运行的是混合回归模型不直接支持面板固定效应。如果你用的是面板数据更严谨的做法是保留前面手动三步回归的命令只在稳健性检验时把sgmediation的结果作为参考。否则对方辩友一句话就能让你的中介效应结果报废。4. 调节效应操作交互项、去中心化与虚拟调节变量4.1 连续调节变量用 c.x##c.m 而不是生成的交互项面板数据中的调节效应最核心的操作是构造交互项。很多教程会让你手动生成gen inter x * m但在固定效应模型里手动生成的交互项容易与个体固定效应产生共线性问题而且你还要自己处理中心化。Stata 的因子变量语法能同时完成交互项构造和系数分解推荐直接使用。xtreg y c.x##c.m ctrl1 ctrl2, fe vce(cluster id)c.x##c.m会自动生成 x、m 以及 x×m 三个项。模型估计出来后需要关注的核心是交互项的系数它代表调节效应的大小和方向。如果交互项显著说明 m 对 x→y 的关系有调节作用。但系数大小本身不能直接解释为「每增加一个单位的 mx 的边际效应改变多少」因为边际效应还取决于 x 的取值。要回答「x 的边际效应如何随 m 变化」需要配合margins命令做边际效应估计这个会在最后一章展开。4.2 去中心化能做什么主效应解释与多重共线性做调节效应时不少经验贴都会建议对 x 和 m 先去中心化再求交互项理由是可以降低交互项与主效应之间的多重共线性。严格说去中心化不会改变交互项的回归系数和显著性但它能改善主效应系数的解释性当交互项存在时x 的系数表示 m0 时的边际效应去中心化后m0 变成了 m 的均值主效应解释为「在平均调节水平下的 x 效应」这种解释在论文里更容易讲通。* 生成去中心化变量 center x m, prefix(c_) xtreg y c.c_x##c.c_m ctrl1 ctrl2, fe vce(cluster id)这里使用了外部命令center如果不想依赖扩展包可以自己写gen c_x x - mean_x。需要明确的是中心化只在解释主效应时起作用不影响交互项系数、t 值和模型拟合优度。如果你发现中心化前后交互项的结果变化很大基本可以判断原模型有严重共线性或者数据录入有错误而不是中心化本身造成了什么「魔法改变」。4.3 虚拟调节变量与分组检验参照组的选择当调节变量是虚拟变量比如是否改制、是否数字化操作方法会有些不同。最直接的是用分组回归按调节变量的取值分组分别跑 x 对 y 的回归观察两组的系数差异。分组回归的优点是直观缺点是无法直接报告「差异是否显著」还是需要交互项来完成统计检验。xtreg y c.x##i.group ctrl1 ctrl2, fe vce(cluster id)i.group会把虚拟变量化成 0/1 基准组交互项c.x#1.group的系数代表调节带来的额外效应。这里的坑在于如果 group 不随时间变化它在固定效应模型里会被个体固定效应完全吸收Stata 会自动省略 group 的主效应项只保留交互项。这不是程序错误而是固定效应的必然结果。解释交互项系数时有一个经典误区——看到系数为负就以为「调节作用反向」实际上这个负号只是相对参照组而言。要确认方向必须画出边际效应图或者做分组的预测值对比不能只看单个数。5. 常见问题排查面板中介调节最容易翻车的四个点5.1 第二步回归完全不显著还没检查面板结构就开始改变量现象三步检验法里第二步 X 对 M 的回归 p 值高达 0.6于是立刻怀疑是 M 的测量有问题或者更换控制变量结果越调越乱。原因大概率是 M 在个体内的时间变异非常小固定效应模型只利用组内变异识别参数组内变异不足时标准误会非常大系数再大也显著不了。解决先跑xtsum m查看 m 的组内标准差和组间标准差如果组内标准差不足组间标准差的十分之一说明 M 基本不随时间变化固定效应模型天然不适合这条路径。此时可以考虑随机效应模型作为主分析或者把 M 的测量指标换成分辨率更高的变量而不是在控制变量上做文章。5.2 Bootstrap 报错聚类数太少导致抽样失败现象执行 Bootstrap 检验中介效应时Stata 返回insufficient observations to compute bootstrap standard errors或类似提示。原因Bootstrap 是有放回地抽取样本当聚类数量太少时抽出的样本中某些组被抽中次数为 0导致该次估计无法收敛。解决最简单的修法是加大抽样次数到 500 或 1000并设置随机种子保证可复现set seed 2024 bootstrap r(ind_eff), reps(1000) cluster(id): xtreg y x m, fe vce(cluster id)如果仍然报错说明聚类数小于 20此时 Bootstrap 的结果本身就不可靠。替代方案是改用似然比检验或者直接报告 Sobel 检验结果并在论文里注明样本限制。千万不要把报错理解为「程序不行」是数据结构不支持你这样做。5.3 交互项系数符号反了其实是基准组被吸收现象调节效应交互项系数显著为负于是写论文下结论「该虚拟变量负向调节主效应」。但画出图后却发现调节组和非调节组的斜率差异其实很小负号完全是因为参照组的选取问题。原因当虚拟调节变量在固定效应中被吸收时Stata 估计的交互项是以个体内部变异来识别解释逻辑与横截面模型不太一样。解决建议在画图前先做一组辅助回归把调节变量的主效应也放进去用随机效应模型对比一下然后直接用margins画边际效应图根据图形的交叉方式判断调节方向再回到交互项系数组织语言。凡是交互项系数方向和图形方向对不上的一律以图形和分组预测值为准。5.4 固定效应下的组内去中心化与普通去中心化冲突现象手动生成中心化变量后跑xtreg, fe发现主效应系数比不去中心化时差很多甚至符号都变了。原因固定效应模型本身已经做了组内去中心化你再手工对变量做整体均值去中心化相当于进行了两次变换改变了解释变量的相对变异结构。解决在xtreg, fe中不需要手动中心化直接使用因子变量c.x##c.m即可如果希望主效应更容易解释可以采用组内均值中心化对每个个体的时间序列求均值后减去但这只适用于解释层面不改变交互项显著性。建议不要同时使用center命令和xtreg, fe这是很多新手最容易犯的组合错误。6. 结果验证的快速技巧三步自查与一张保命图一个中介或调节结果能站住脚至少需要经过三关自查。第一关是替换模型设定把固定效应换成随机效应、把聚类标准误换成普通标准误看核心结论是否变向。如果换一种标准误就由显著变不显著说明效应本身很弱需要在论文里如实说明。第二关是检验时间效应的干扰加入i.year后重新跑一遍很多中介效应其实是X和M共同随时间趋势变化带来的伪相关加入时间固定效应后效应消失这类结果不建议写进结论。第三关是 Bootstrap 置信区间用bootstrap直接估计间接效应的置信区间比 Sobel 检验更稳健。* 以三步法为基础的间接效应 Bootstrap 验证 set seed 2024 capture program drop boot_mediation program define boot_mediation, rclass xtreg m x ctrl1, fe scalar a _b[x] xtreg y x m ctrl1, fe scalar b _b[m] return scalar ind_eff a * b end bootstrap r(ind_eff), reps(1000) cluster(id): boot_mediation estat bootstrap, bc percentile这段代码的核心是自编程序先跑 X→M 回归再跑 XM→Y 回归把两个系数乘积返回为间接效应bootstrap命令完成重复抽样estat bootstrap输出偏差校正和百分位置信区间。注意程序里的两次xtreg需要在每次抽样中重新执行如果数据中存在缺失值抽样样本可能出现某些组观测不足而报错解决方法是抽样前先drop缺失样本。Bootstrap 的好处是它对 a×b 的分布不作正态假设适合中小样本代价是计算时间长1000 次重复可能跑几分钟属正常现象。最后一张保命图是调节效应的边界效果图。不管交互项系数是否显著我都建议跑一遍xtreg y c.x##c.m ctrl1 ctrl2, fe vce(cluster id) margins, dydx(x) at(m(1(1)5)) marginsplot, yline(0)这张图展示了调节变量 m 取不同水平时x 对 y 的边际效应及其置信区间。它比交互项系数更能直观说明调节作用是否存在区间边界——比如 m 低时不显著m 高时才显著这种效应形态论文里写起来会非常扎实。从那以后我每次做面板中介和调节都会强制走一遍 Bootstrap 验证加边界效应图确认没有一组设定会推翻核心结论再继续写文档。这套操作流程在这份资源里都是逐步演示过的拿到手跟着过一遍能少走很多我当年走过的弯路。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑