请选择 进入手机版 | 继续访问电脑版
楼主: 晶晶哈哈
78594 155

[回归分析求助] stata 中介效应 bootstrap时出现r(ind_eff)找不到   [推广有奖]

讲师

79%

还不是VIP/贵宾

-

威望
0
论坛币
40587 个
通用积分
427.5040
学术水平
18 点
热心指数
20 点
信用等级
13 点
经验
8173 点
帖子
331
精华
0
在线时间
738 小时
注册时间
2012-3-5
最后登录
2024-3-21

晶晶哈哈 学生认证  发表于 2019-8-24 10:09:04 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
首先,抛出问题。做中介效应运行 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
------------------------------------------------------------------------------



要知道,我之前的结果也是


第一次发帖子回答问题,如果对我的回答还满意的话,请给我点赞哦,跟大家一起进步~!~!~O(∩_∩)O哈哈~

另外,还有什么细节出现问题出不来结果的话,欢迎留言或者私信!!~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


sgmediation.rar

1.22 KB

需要: 15 个论坛币  [购买]

中介效应确定的ado命令包

本附件包括:

  • sgmediation.ado

已有 5 人评分学术水平 热心指数 信用等级 收起 理由
企鹅家的猫 + 1 + 1 + 1 精彩帖子
buqu1013 + 1 + 1 + 1 分析的有道理
Bigeyes + 1 + 1 + 1 观点有启发
liuxinglin2018 + 1 + 1 + 1 精彩帖子
gigicat00 + 5 + 5 + 5 精彩帖子

总评分: 学术水平 + 9  热心指数 + 9  信用等级 + 9   查看全部评分

hq1998 学生认证  发表于 2019-8-25 22:51:33 |显示全部楼层 |坛友微信交流群
下了这个包依旧出现这个错误

使用道具

晶晶哈哈 学生认证  发表于 2019-8-26 16:27:12 |显示全部楼层 |坛友微信交流群
hq1998 发表于 2019-8-25 22:51
下了这个包依旧出现这个错误
多看下后面的讨论,应该没问题的,这里说不清楚

使用道具

您好,我下载了您提供的安装包,仍然还会出现'r(ind_eff)' evaluated to missing in full sample,怎么办啊

使用道具

淡如清水 发表于 2019-8-31 11:13:34 |显示全部楼层 |坛友微信交流群
代码完全可以使用,如果依然报错,将ado中原有代码“program define sgmediation, rclass”修改成“program define sgmediation1, rclass”,并相应的将文件名和do文件中的命令名也做修改。

使用道具

晶晶哈哈 学生认证  发表于 2019-8-31 12:09:29 来自手机 |显示全部楼层 |坛友微信交流群
非常高兴两个小伙伴通过下载这个命令包解决了中介效应的问题,因为我仔细研究了一下中介效应的原理和计算方式,所以才之前ado包的基础上发现了这个能跑出来的结果。这里,针对下载包之后仍出不来结果的情况解释一下
1,在下载我这个包之前,下载过其他sgmediation的包,造成冲突,跑不出来结果
解决办法:改动三个地方,把时光,sgmediation变成sgmediation1 (1)sgmediation命令包的文件名 (2)ado包按照do文件的方式打开,将第12行programme define 后面改成 sgmediation1 (3)调用命令时 bootstrap冒号后面也改成sgmediation
原理:之前你下载了别的ado包,已经有个叫张三(sgmediation)的了,你喊张三,只能出来张三,现在通过改命令,变成张三1(sgmediation1),就实现了成功调用命令

2,下载了很多个包,搞混了
解决办法:我的包有几个明显特征,可以自行查验(1)最开始的命令更新有一堆,一直到version1.11 (2)第35行local avar的暂元计算时,(_se[‘iv’])^2 标准误打了括号之后再求的平方 (3)最后计算单值时,有return scalar ind_eff 和dir_eff,也就是间接效应和直接效应
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
复亲亲 + 5 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

Terri666 发表于 2019-9-6 00:35:41 来自手机 |显示全部楼层 |坛友微信交流群
OK谢谢

使用道具

自己动手改了一下ado文件,依旧出现错误提示的同学可以用下面的代码覆盖之前的ado文件,就可以了:
*! version 1.1.1 -- 5/17/06 -- pbe
*! verion 1.0 -- 2/28/05 -- pbe
program define sgmediation,rclass
/* sobel-goodman mediation tests */
version 8.0
syntax varlist(max=1) [if/] [in], iv(varlist numeric max=1) ///
   mv(varlist numeric max=1) [ cv(varlist numeric) BOOTstrap reps(integer 200) level(integer 95)]  
marksample touse
markout `touse' `varlist' `mv' `iv' `cv'
tempname coef emat

display
display as text "Model with dv regressed on iv"
regress `varlist' `iv' `cv' if `touse'
local ccoef=_b[`iv']

display
display "Model with mediator regressed on iv"
regress `mv' `iv' `cv' if `touse'

local acoef=_b[`iv']
local avar=_se[`iv']^2

display
display "Model with dv regressed on mediator and iv"
regress `varlist' `mv' `iv' `cv' if `touse'

local bcoef=_b[`mv']
local bvar=_se[`mv']^2

local sobel =(`acoef'*`bcoef')
local serr=sqrt(`bcoef'^2*`avar' + `acoef'^2*`bvar')
local stest=`sobel'/`serr'
local g1err=sqrt(`bcoef'^2*`avar' + `acoef'^2*`bvar' + `avar'*`bvar')
local good1=`sobel'/`g1err'
local g2err=sqrt(`bcoef'^2*`avar' + `acoef'^2*`bvar' - `avar'*`bvar')
local good2=`sobel'/`g2err'
local toteff = `sobel'/((`acoef'*`bcoef')+(`ccoef'-(`acoef'*`bcoef')))
local ratio = `sobel'/((`ccoef'-(`acoef'*`bcoef')))
local direff=(`ccoef'-(`acoef'*`bcoef'))

return scalar ind_eff=`sobel'
return scalar dir_eff=`direff'

display
display "Sobel-Goodman Mediation Tests"
display
display "             Coef         Std Err     Z           P>|Z|"
display as txt "Sobel       " as res `sobel' _skip(4) `serr'  %8.4g ///
`stest', _skip(5) 2*(1-norm(abs(`stest')))
display as txt "Goodman-1   " as res `sobel' _skip(4) `g1err' %8.4g ///
`good1', _skip(5) 2*(1-norm(abs(`good1')))
display as txt "Goodman-2   " as res `sobel' _skip(4) `g2err' %8.4g ///
`good2', _skip(5) 2*(1-norm(abs(`good2')))
display
display as txt "Pecent of total effect that is mediated: ", as res ///
%5.2f 100*`toteff',"%"
display as txt "Ratio of indirect to direct effect:     ", as res %8.4f `ratio'

if "`bootstrap'"~="" {
  display
  display as txt "Percentile and Bias-corrected bootstrap results for Sobel: `reps' replications"
  display

  quietly bootstrap coef=r(sobel), reps(`reps') level(`level'): sgboot `varlist' , mv(`mv') iv(`iv') cv(`cv' )
  estat bootstrap, bc percentile noheader
  }

end




已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
youngyaoguai + 5 + 2 + 2 + 2 解决了我的问题,非常感谢

总评分: 论坛币 + 5  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

Jocelyn_vivian 发表于 2019-9-9 15:46
自己动手改了一下ado文件,依旧出现错误提示的同学可以用下面的代码覆盖之前的ado文件,就可以了:
*! ver ...
也困扰了自己很长时间,希望能帮到大家

使用道具

晶晶哈哈 学生认证  发表于 2019-9-11 10:12:12 |显示全部楼层 |坛友微信交流群
Jocelyn_vivian 发表于 2019-9-9 15:46
也困扰了自己很长时间,希望能帮到大家
`bcoef'^2 我想问下,这种不需要打括号吗?   (`bcoef')^2   不知道是版本问题还是什么,之前有个没有打括号,然后我用global代替里面的local,一个个计算参数值时,不打括号就算不出来。比如算Sab时,明明应该2次幂之后应该是一个大于0的值,但是却出现了负值

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 04:54