资讯动态

面板数据中介检验与调节效应:Stata固定效应与Bootstrap实操指南

发布时间:2026/10/16 12:51:34 来源:尧图企业网站定制
简介面向面板数据实证研究者的 Stata 操作资源包聚焦中介效应与调节效应的完整分析流程。资源结合数据基础、模型设定与命令实操覆盖 mediate 命令实现中介检验、交互项与 i. 前缀处理调节效应以及结果解读要点适合经济学、社会科学领域需要处理面板数据的中级用户。压缩包共 269 个文件以 ado 程序文件、hlp 帮助文档、sthlp 语法文件为主另含 mata 矩阵运算模块、mlib 库及少量 dta 示例数据和 do 操作脚本大小仅 1.26MB方便本地快速部署扩展命令。目前已有 24380 人学习下载。通过对照包内命令文档与示例数据读者可快速掌握面板数据中介、调节效应的 Stata 实现路径避免因命令选项误用导致结果偏误提升实证研究的规范性与可复现性。1. 面板数据里的中介效应和调节效应Stata命令到底怎么跑才不是玄学中介效应、调节效应在面板数据里怎么用Stata跑通网上教程大多拿截面数据的例子一笔带过。真到自己动手xtset、固定效应、交互项中心化、Bootstrap检验每一步都可能翻车。这篇笔记要拆的是一套面板场景下可复现的Stata操作演示从面板声明、固定效应判断到中介三步法与Sobel/Bootstrap再到调节效应的交互项构造和边际效应绘图最后是五个最容易踩的坑。适合正在做面板论文、想一次性把中介调节流程跑通的硕博生和科研岗。下面统一用y表示被解释变量、x表示核心解释变量、m表示中介变量或调节变量跑你自己的数据时替换成实际变量名即可。2. 先把面板数据立起来xtset 声明与固定/随机效应选择2.1 xtset 面板声明id、time与平衡性检查打开面板数据第一步是xtset。常见错误是不声明面板直接跑回归Stata会把每个观测当独立样本标准误全是错的。正确做法先声明个体id和时间变量再检查面板结构。xtset id year xtdescribe xtsum x m yxtset的id是截面个体标识year是时间标识两者组合起来必须唯一。如果数据里有重复的id-year组合xtset会直接报错。xtdescribe输出平衡/非平衡面板的判定如果你的数据结构是有缺失的输出里会显示每个id有多少个时期一眼就能看出哪些个体缺年份。xtsum给组间between、组内within和总体overall三个标准差这块信息对后文判断变量能不能进固定效应模型非常关键。我一般会在跑任何回归之前先看xtsum的结果。如果某个变量的within标准差小到接近0说明它几乎不随时间变化后面固定效应模型里这个变量的系数会很难估计甚至被absorb掉。这个检查动作只要十秒钟但能省掉后面一晚上的排查时间。2.2 固定效应还是随机效应Hausman检验定方向面板中介调节的基准模型绝大多数文献用固定效应FE因为它能吸收不随时间变化的个体异质性。但「该用FE」不靠感觉靠Hausman检验说话。xtreg y x m, fe estimates store fe_m xtreg y x m, re estimates store re_m hausman fe_m re_m这里先跑固定效应模型并存结果再跑随机效应模型并存结果最后用hausman比较两个模型的系数向量。Hausman原假设是随机效应与固定效应估计系统无差异p值小于0.05就拒绝原假设选FEp大于等于0.05时用RE也说得过去但很多期刊仍倾向报告FE结果。注意estimates store的两个名字不能重复后缀改成你自己的模型标识即可。跑面板模型时我还会顺手加上vce(cluster id)让标准误对个体聚类。面板数据里同一个体的不同年份观测必然相关不处理聚类会把t值放得很大这是审稿人最爱问的问题之一。加了聚类选项之后显著性阈值要重新审视因为聚类标准误通常比普通标准误大。2.3 先看变异再跑模型within标准差决定变量去留这个判断属于「跑了才发现坑」的预防针。假设你要检验的中介变量是行业属性、地区制度这类不太随时间变化的变量xtsum输出的within标准差会非常小。在这种情况下xtreg y x m, fe跑出来的m系数经常不显著但这不代表中介效应不存在而是固定效应把m的组内变异消耗殆尽了。xtsum x xtsum m比较within与between的占比如果某个变量的within占比低于10%在FE设定下除非样本期足够长、变化足够大否则很难估出显著系数。这不是硬性标准但在我处理过的面板数据里相当靠谱。遇到这种情况我一般主动改用随机效应做辅助检验并在稳健性部分说明两种设定下结论是否一致而不是默默删掉变量。3. 中介效应三步走Stata 的逐步回归、Sobel 与 Bootstrap3.1 逐步回归法在面板里的写法与系数判读中介效应的经典三步是总效应c即X对Y的回归系数、路径a即X对M的回归系数、路径b与直接效应c即X和M同时进入方程后M的系数与X的系数。面板场景下每一步都要带xtreg和fe。xtreg y x, fe estimates store total xtreg m x, fe estimates store path_a xtreg y x m, fe estimates store path_b三步都跑完后看三个关键系数xtreg m x里x的系数是a路径xtreg y x m里m的系数是b路径x的系数是直接效应c。a和b都显著是中介成立的前提。c不显著而a、b显著属于完全中介c显著但绝对值比第一步里的c小属于部分中介。这里必须提醒一个新手常犯的理解错误第三步回归里x和m同时在方程里两者之间的相关性会放大标准误c的显著性不是判断中介的唯一依据。a乘b这个间接效应的检验才更重要。有些数据a和b都显著但c仍然显著这时说「部分中介」完全成立也有a显著、b不显著的情况这时中介效应不成立别硬撑。3.2 Sobel 检验手动计算与 sgmediation 的边界Sobel检验的原假设是a乘b等于0检验统计量的公式是z等于a乘b除以根号下b方乘sa方加a方乘sb方。Stata里不必去记公式在第三步回归后手动算就行xtreg m x, fe scalar a _b[x] scalar sa _se[x] xtreg y x m, fe scalar b _b[m] scalar sb _se[m] scalar sobel_z a * b / sqrt(b^2 * sa^2 a^2 * sb^2) display Sobel z sobel_z这段代码利用xtreg后保存在e()里的系数和标准误直接算出z值。|z|大于1.96说明间接效应显著。很多教程会让装sgmediation然后一条命令出结果但sgmediation的底层是OLS回归并不理解xtset的面板结构直接把它用在面板数据上等于把固定效应全丢了。我一般只在审稿人明确要求报告Sobel结果时才补这个数主检验用下面要说的Bootstrap。3.3 Bootstrap 中介检验面板下更稳的做法Bootstrap不依赖a乘b的正态分布假设是目前主流的间接效应检验方式。面板数据里我习惯自己写一个小的程序块每次抽样都完整重跑两条xtreg路径capture program drop boot_med program define boot_med, rclass xtreg m x, fe scalar a _b[x] xtreg y x m, fe scalar b _b[m] return scalar ind a * b end bootstrap r(ind), reps(1000) seed(2024) nodots: boot_med estat boot, bcbootstrap后面的r(ind)告诉Stata从boot_med的返回值里抽哪个量。reps至少500我默认用1000太少的话置信区间每次跑都不一样结果不可复现。seed设固定值保证任何人用同一数据跑出来的结果一致这是论文里必须写的细节。estat boot, bc输出偏差校正置信区间区间不含0说明间接效应显著。Bootstrap比Sobel稳在哪它不需要a乘b服从正态分布的假设在小样本和中介效应较弱时更可靠。而且每次抽样都会重新跑xtreg面板结构在抽样过程中自然被保留比手工构造虚拟变量的Sobel更贴合面板设定。如果你的中介效应模型比较复杂比如有多个中介变量也可以在这个program里加一条xtreg返回多个indicator。4. 调节效应交互项构造、中心化与边际效应绘图4.1 交乘项的两种构造方式与多重共线性调节效应在回归里就是交乘项。连续变量x与调节变量m最简单的做法是生成x_m等于x乘m后放进回归。但直接用原始值相乘x和x乘m之间的相关系数经常超过0.9回归系数会被共线性折腾得符号乱跳。常见做法是先中心化再乘summarize x gen x_c x - r(mean) summarize m gen m_c m - r(mean) gen xm_c x_c * m_c xtreg y x_c m_c xm_c, fer(mean)是summarize之后保存的样本均值。中心化只改变变量的位置不改变回归的拟合优度但交乘项系数b3的含义变得更清晰它表示x对y的作用如何随m偏离均值而变化。嫌手动生成麻烦也可以用因子变量写法xtreg y c.x##c.m, fec.x##c.m等价于x加m加x乘m三项c.前缀声明连续变量。因子变量写法的优点是Stata自动处理交乘缺点是不方便直接提取交乘项做后续绘图我通常二选一手动生成更灵活。4.2 调节效应系数解释不能只看交乘项显著不显著很多新手把c.x##c.m跑出来只看x乘m的系数b3显著就说调节效应成立。这是不完整的。调节效应的实质是x对y的边际效应随m变化对y关于x求偏导得到b1加b3乘m_c。b1是m_c等于0即m在样本均值处时x的效应b3只是这个边际效应的变化斜率。所以在报告结果时我会同时给b1和b3并说明「m每增加一个单位x对y的效应增加b3个单位」而不是只写一句「调节效应显著」。还要注意另一个细节中心化之后b1是m在均值时的效应这个值通常落在样本支持范围内不中心化时b1是m等于0时的效应如果你的m取值都在50附近m等于0就是纯外推b1的解释没有实际意义。这就是为什么中心化不只是为了对付共线性更是为了让主效应有可解释的参照点。4.3 margins 与 marginsplot把调节方向画出来单看表格很难判断调节方向尤其b3为负时到底是「削弱」还是「反转」图形最直观。标准做法是用margins算x的边际效应在m不同取值上的估计值然后画出来margins, dydx(x) at(m(20(5)40)) marginsplot graph export margins_plot.png, width(800) replaceat(m(20(5)40))表示m取20、25、30、35、40五个值括号里第一个数是起点、第二个数是步长、第三个数是终点。dydx(x)表示求x对y的边际效应。marginsplot会画出边际效应及置信区间如果斜线从显著正走向不显著再走向显著负说明调节效应存在且发生了方向反转如果区间始终不包括0说明x的效应在m的整个取值范围内都显著只是大小在变。图形输出的宽度单位是像素期刊插图一般要矢量图写论文时我通常换成导出.eps。注意margins的at()语法在Stata不同版本里写法略有差异新版本建议用at(m(20(5)40))这种带括号的形式旧版本写at(m20(5)40)也行但要确认你的版本支持哪一种。5. 面板中介调节避坑实录五条能救命的踩坑记录5.1 把截面三步法硬搬到面板中介变量被固定效应吃掉现象xtreg m x, fe不显著换成xtreg m x, re立刻显著中介路径断了。原因固定效应只利用组内变异如果中介变量的within标准差太小FE把它的解释力全吸收掉了。很多截面数据里显著的中介关系进了面板FE模型就消失不一定是真消失而是数据里这个中介变量本身就不怎么随时间变。解决先跑xtsum m看within占比占比过低时改用RE或系统GMM做辅助检验两种设定结论矛盾时在正文里报告两种结果用Bootstrap置信区间作为最终判定依据。不要因为FE不显著就悄悄删掉中介变量审稿人看到变量清单里缺了理论核心变量问题比不显著更严重。5.2 交乘项加进去后主效应符号翻转现象xtreg y x, fe里x系数为正加入x乘m后x的系数变成负的。这是我在多个数据集里反复见到的情况第一反应不是改模型而是查共线性。原因原始值相乘导致x与x乘m高度共线系数被重新分配另一种可能是m等于0处本身就是外推区域b1的解释没有实际意义。中心化可以缓解前者但不能完全消除。解决先中心化再重跑。若翻转仍然存在不要急着删交乘项去看margins的边际效应图在m的合理取值范围内是否保持一致。如果图形显示x的效应在m的绝大多数取值上都是正的那表格里b1的负号只是一个外推假象报告时说明「在m的样本取值范围内x的效应为正且随m递增/递减」即可。5.3 Bootstrap 的 reps 太少或搞不清聚类现象bootstrap跑出来每次置信区间都不一样reps(200)时上下界差距很大reps(1000)才收敛。原因Bootstrap的抽样误差随reps增大而减小200次对间接效应这种小方差统计量不够稳定。另一个常见问题是面板内自相关没处理抽样时把同一个体的不同年份当独立观测。解决reps至少500我一律用1000并固定seed。如果担心面板内自相关在bootstrap命令里加cluster参数或对整个id做block bootstrap保证同一个体的观测被一起抽入或一起排除。5.4 sgmediation 的面板结果被审稿人质疑现象用sgmediation跑出z值显著但xtreg路径里b路径不显著两个结果打架。这是典型的模型设定不一致造成的矛盾。原因sgmediation是OLS版本既没吸收固定效应也没考虑面板聚类。它把重复观测当作独立样本标准误被系统性低估z值虚高。解决面板里别把sgmediation当主结果。主检验用xtreg路径系数加Bootstrapsgmediation只在审稿人明确要求报告传统Sobel时作为补充并标注这是横截面设定下的结果不作为结论依据。5.5 调节变量是类别变量时交互项解释出错现象m是0/1虚拟变量跑xtreg y c.x##i.m, fe后交乘项不显著分组回归却一组显著一组不显著。原因交乘项的基准组选择影响显著性分组回归只是「看起来」有差异真正的组间差异要用全样本交互项检验「一组显著一组不显著」本身不能证明调节效应存在。很多人踩这个坑是被「分组显著差异」的表象骗了。解决用因子变量i.m##c.x做全样本检验直接看交乘项的p值。想报告分组结果也得先保证全样本交互项显著否则分组差异只是抽样噪声。基准组的选取会影响交互项系数符号和显著性换一个基准组重跑一遍是必要的稳健性检查。6. 验证与进阶分组检验、稳健性与回归结果的呈现6.1 分组回归与组间系数差异调节效应的补充验证最常见的做法是按m的中位数把样本分两组分别跑xtreg y x, fe然后比较x的系数。注意组间差异不能靠「一组显著、一组不显著」来证明要回到全样本交互项xtreg y x m xm_c, fe test xm_ctest xm_c的p值才是组间系数差异的正式检验。我习惯把分组回归放在稳健性部分正文主结论用交互项模型分组结果用一张表附在文末。6.2 稳健性换估计量、加聚类、做滞后面板中介调节的稳健性一般做三件事第一把FE换成RE看方向是否一致第二加vce(cluster id)处理个体聚类第三把解释变量滞后一期缓解反向因果xtset id year gen lx l.x gen lxm l.x * m_c xtreg y lx m_c lxm, fe滞后一期会损失一年的观测非平衡面板里尤其要确认样本量变化。x对y的作用如果靠l.x才能显现说明当期效应可能偏弱这本身也是信息。所有稳健性结果我习惯排成一张表第一列放基准模型后面放RE、加聚类、滞后期的结果表注里写清楚每列的关键设定。从那以后我每次跑面板中介调节都强制走一遍「xtsum看变异 → Hausman定模型 → 三步法 → Bootstrap → margins画图 → 三组稳健性」的完整流程这套流程帮我躲过了不少审稿意见希望帮到你。本文还有配套的精品资源点击获取

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

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

免费获取报价 →
↑