以文中模型二为例,即X与M之间是线性关系而M与Y之间是非线性关系,通过构建方程(15)与方程(16)来表述,进一步检验参数IND来确认间接效应是否存在。IND是方程(1)中x的系数B1,和方程(2)中M’的系数B5的乘积生成,表示的是x通过M对Y产生曲线间接效应的强弱。因此,IND的显著性与强弱可以作为中介效应的检验。同样,为了更加准确地估计间接效应的显著性水平,建议使用 Bootstrap 方法得出参数IND 的置信区间。
M=B0+B1x (1); Y=B2+B3X+B4M+B5M*M (2); IND=B1*B5 (3)
具体操作方法如下:
1.将我修改后的do文档运行
2. sgmediation3 被解释变量, mv(中介) mv2(中介变量的平方项) iv(解释变量) iv2(解释变量平方项) cv(控制变量)
结果默认输出控制了时间与行业固定效应的reghdfe,我在do文档中给时间与行业固定效应的命名为ind、year,具体如何按照自己的回归变量修改推荐参照@拿铁一定要加冰老师的原视频。也可以在do文档第29、36、45行自行按照需求修改。
[1]林伟鹏,冯保艺.管理学领域的曲线效应及统计检验方法[J].南开管理评论,2022,25(01):155-166.
[2]@拿铁一定要加冰老师:【「Stata」中介效应检验 - 带固定效应Sobel与Bootstrap】 https://www.bilibili.com/video/BV1Gs4y1M7Y8/?share_source=copy_web&vd_source=1f14f70e709a6c27cffb20b2ac13175f
- *- New
- *! version 3 -- 5/16/23 -- Updated by Shutter Zor
- *- Original
- *! version 1.11 -- 2/14/12 -- implement prefix option
- *! version 1.9 -- 10/28/11 -- (improve formatting)
- *! version 1.8 -- 10/19/11 -- (bootstrap option removed)
- *! version 1.7 -- 10/14/11 -- (ratio of total to direct)
- *! version 1.6 -- 9/27/11 -- (bug fix in sgboot.ado)
- *! version 1.5 -- 3/2/11
- *! version 1.4 -- 4/29/10 --
- *! version 1.3 -- 10/3/06 -- (bug fix)
- *! version 1.2 -- 9/8/06 -- (bug fix)
- *! version 1.1.1 -- 5/17/06 --
- *! verion 1.0 -- 2/28/05 -- pbe
- cap program drop sgmediation3
- program define sgmediation3, rclass
- /* sobel-goodman mediation tests */
- version 9.0
- syntax varlist(max=1) [if] [in], iv(varlist numeric max=1) ///
- mv(varlist numeric max=1) mv2(varlist numeric max=1) iv2(varlist numeric max=1) [ cv(varlist numeric) quietly ///
- level(integer 95) prefix(string)]
- marksample touse
- markout `touse' `varlist' `mv' `mv2' `iv' `iv2' `cv'
- tempname coef emat
- display
- `quietly' {
- display as text "Model with dv regressed on iv2 (path c)"
- `prefix' reghdfe `varlist' `iv2' `iv' `cv' if `touse', absorb(year ind)
- *`prefix' xtreg `varlist' `iv' `iv2' `cv' i.year i.ind if `touse', fe
- local ccoef=_b[`iv2']
- local cse =_se[`iv2']
- display
- display "Model with mediator regressed on iv (path a)"
- `prefix' reghdfe `mv' `iv' `cv' if `touse', absorb(year ind)
- *`prefix' xtreg `mv' `iv' `cv' i.year i.ind if `touse', fe
- local acoef=_b[`iv']
- local ase =_se[`iv']
- local avar =_se[`iv']^2
- display
- display "Model with dv regressed on mediator and iv (paths b and c')"
- `prefix' reghdfe `varlist' `mv2' `iv' `cv' `mv' if `touse', absorb(year ind)
- *`prefix' xtreg `varlist' `mv2' `iv' `cv' `mv' i.year i.ind if `touse', fe
- }
- local bcoef=_b[`mv2']
- local bse =_se[`mv2']
- local bvar =_se[`mv2']^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 direff = (`ccoef'-(`acoef'*`bcoef'))
- local dse = _se[`iv']
- local toteff = `sobel'/`ccoef'
- local ratio = `sobel'/`direff'
- local t2d = ((`acoef'*`bcoef')+(`ccoef'-(`acoef'*`bcoef')))/`direff'
- display
- display as txt "Sobel-Goodman Mediation Tests"
- display
- display as txt " 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 (Aroian) " 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 _col(21) "Coef" _col(31) "Std Err" _col(42) "Z" _col(53) "P>|Z|"
- display as txt "a coefficient = " as res %8.0g `acoef' " " %8.0g `ase' " " %8.0g `acoef'/`ase' _col(50) %8.0g 2*(1-norm(abs(`acoef'/`ase')))
- display as txt "b coefficient = " as res %8.0g `bcoef' " " %8.0g `bse' " " %8.0g `bcoef'/`bse' _col(50) %8.0g 2*(1-norm(abs(`bcoef'/`bse')))
- display as txt "Indirect effect = " as res %8.0g `sobel' " " %8.0g `serr' " " %8.0g `stest' _col(50) %8.0g 2*(1-norm(abs(`stest')))
- display as txt " Direct effect = " as res %8.0g `direff' " " %8.0g `dse' " " %8.0g `direff'/`dse' _col(50) %8.0g 2*(1-norm(abs(`direff'/`dse')))
- display as txt " Total effect = " as res %8.0g `ccoef' " " %8.0g `cse' " " %8.0g `ccoef'/`cse' _col(50) %8.0g 2*(1-norm(abs(`ccoef'/`cse')))
- display
- display as txt "Proportion of total effect that is mediated: ", as res `toteff'
- display as txt "Ratio of indirect to direct effect: ", as res `ratio'
- display as txt "Ratio of total to direct effect: ", as res `t2d'
- return scalar ind_eff = `sobel'
- return scalar dir_eff = `direff'
- return scalar tot_eff = `ccoef'
- return scalar a_coef = `acoef'
- return scalar b_coef = `bcoef'
- return scalar ind2tot = `toteff'
- return scalar ind2dir = `ratio'
- return scalar tot2dir = `t2d'
- end


雷达卡





京公网安备 11010802022788号







