stata 中介效应 bootstrap时出现r(ind_eff)找不到
首先,抛出问题。做中介效应运行 bootstrap r(ind_eff) r(dir_eff),reps(1000) : sgmediation y, mv() iv() cv(),出现了如下结果:
‘r(ind_eff)’ evaluated to missing in full sample
r(322);
由于本人也在做中介效应,遇到了同样的问题,几经波折之下,终于找到了原因。
出现上面的这个问题,主要原因是sgmediation这个包里面没有计算r(ind_eff)和r(dir_eff),也就是中介效应里的直接效应和间接效应两个值。所以,解决办法如下
1、保证下了一个正确的sgmediation的ado文件包
很多朋友说直接在stata窗口中用findit 和help或者ssc install已经无法下载到这个包了
是的,所以我在附件里提供了这个ado包
请大家下载后,放到 ado/base/s 这个文件夹下,到时候才可以自动调取命令
2、可以自行检查一下ado包里是否有r(ind_eff)和r(dir_eff)这两个单值,这里我简单给大家展示一下ado里中介效应的原理
(1)ado文件按照打开do文件的方式打开
(2)检查命令的触发项
program define sgmediation, rclass
这里就定义了我要用 sgmediation执行这一整条ado文档,我自己把它称为触发键
就比如你用regress命令的时候,其实在regress的包里定义了program define regress,rclass
!!这个触发命令要保证与 bootstrap r(ind_eff) r(dir_eff),reps(1000) : sgmediation y, mv() iv() cv() 命令中的红色部分一致,否则就无法调动程序命令
(3)检查是否有r(ind_eff)和r(dir_eff)这两项
看下图这个包,分别先定义和计算了sobel(其实就是间接效应,即中介效应,是系数a*b),也计算了直接效应direff,是总效应减去中介效应,即系数 c-a*b
local sobel =(`acoef’*`bcoef’)
local direff = (`ccoef’-(`acoef’*`bcoef’))
再看,包的最后是返回了这两个单值命令的
return scalar ind_eff = `sobel’
return scalar dir_eff = `direff’
3、检查无误后,就可以进行中介效应检验了
命令分别是 sgmediation y, mv() iv() cv() —只做一般的中介效应
bootstrap r(ind_eff) r(dir_eff),reps(1000) : sgmediation y, mv() iv() cv()
estat bootstrap,percentile bc —–用bootsrap的方法抽样
注: y, mv() iv() cv() 依次是被解释变量 ,中介变量,核心自变量,控制变量
4、最后,就可以出结果了
command: sgmediation2 y, mv(tagcreditde) iv(dum_e) cv(w networth0_w1 socinsurepfde famisize
eduyearf_m z finscore plittlec100 pbankcredit100 dum_reg1 dum_reg3)
_bs_1: r(ind_eff)
_bs_2: r(dir_eff)
——————————————————————————
| 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
——————————————————————————