最近在经管之家上看到不少朋友在 Stata 中做中介效应分析时,使用 bootstrap r(ind_eff) r(dir_eff) 报错:
pgsql
复制编辑
'r(ind_eff)' evaluated to missing in full sample r(322);
我也碰到这个问题,查阅资料并实际测试后,现将原因分析 + 解决方案 + 资源文件整理如下,供大家参考交流。
✅ 一、问题根源:ado 文件未定义中介效应结果返回值很多教程建议使用 sgmediation 命令进行中介效应分析,但目前网络上常规方式(如 ssc install、findit)已无法直接安装该命令。更重要的是,部分流传的 sgmediation.ado 文件并未写入:
stata
复制编辑
return scalar ind_eff = ... return scalar dir_eff = ...
所以在执行 bootstrap 时自然会报错找不到 r(ind_eff) 和 r(dir_eff)。
🛠️ 二、解决办法:替换为正确的 sgmediation.ado 包操作步骤如下:
第一步:下载并放置ado文件我已在经管之家整理好修复版 sgmediation.ado,可在文末附带的压缩包中获取。
请将该文件放置于:
swift
复制编辑
Stata安装路径/ado/base/s/
若找不到 base/s/,也可以放到:
makefile
复制编辑
C:\Users\你的用户名\ado\personal\
第二步:检查ado是否正确返回中介效应指标打开 .ado 文件,在末尾应包含如下返回语句:
stata
复制编辑
return scalar ind_eff = `sobel' return scalar dir_eff = `direff'
其中:
- sobel = a × b 是间接效应(中介路径)
- direff = c – a × b 是直接效应
stata
复制编辑
sgmediation y, mv(m) iv(x) cv(control1 control2) bootstrap r(ind_eff) r(dir_eff), reps(1000): /// sgmediation y, mv(m) iv(x) cv(control1 control2) estat bootstrap, percentile bc
- y:被解释变量
- mv():中介变量
- iv():核心解释变量
- cv():控制变量
执行成功后会看到:
sql
复制编辑
------------------------------------------------------------------------------ | Observed Bootstrap Normal-based | Coef. Std. Err. z P>|z| [95% Conf. Interval] -------------+---------------------------------------------------------------- _bs_1 | .3266715 .0660581 4.95 0.000 .1972001 .4561429 _bs_2 | 1.636901 .4493625 3.64 0.000 .7561668 2.517636 ------------------------------------------------------------------------------
其中:
- _bs_1 为间接效应(中介路径)
- _bs_2 为直接效应
已整理好如下内容,方便大家参考与复现:
- ✅ 修正版 sgmediation.ado 文件
- ✅ 使用说明 PDF
- ✅ 示例 do 文件 + 模拟数据(dta)