搜索
人大经济论坛 附件下载

附件下载

所在主题:
文件名:  更改sgmedaion代码.do
资料下载链接地址: https://bbs.pinggu.org/a-4157306.html
附件大小:
根据林伟鹏、冯保艺两位老师发表于南开管理评论的非线性中介效应检验原理,以及up主@拿铁一定要加冰提出的带固定效应Sobel与Bootstrap代码改进方法。我对sobel的代码进行改进,实现了两位老师原文中所提到的检验方法。
以文中模型二为例,即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
  1. *- New
  2. *! version 3 -- 5/16/23 -- Updated by Shutter Zor
  3. *- Original
  4. *! version 1.11 -- 2/14/12 -- implement prefix option
  5. *! version 1.9 -- 10/28/11 -- (improve formatting)
  6. *! version 1.8 -- 10/19/11 -- (bootstrap option removed)
  7. *! version 1.7 -- 10/14/11 -- (ratio of total to direct)
  8. *! version 1.6 -- 9/27/11 -- (bug fix in sgboot.ado)
  9. *! version 1.5 -- 3/2/11
  10. *! version 1.4 -- 4/29/10 --
  11. *! version 1.3 -- 10/3/06 -- (bug fix)
  12. *! version 1.2 -- 9/8/06 -- (bug fix)
  13. *! version 1.1.1 -- 5/17/06 --
  14. *! verion 1.0 -- 2/28/05 -- pbe
  15. cap program drop sgmediation3
  16. program define sgmediation3, rclass
  17. /* sobel-goodman mediation tests */
  18. version 9.0
  19. syntax varlist(max=1) [if] [in], iv(varlist numeric max=1) ///
  20. mv(varlist numeric max=1) mv2(varlist numeric max=1) iv2(varlist numeric max=1) [ cv(varlist numeric) quietly ///
  21. level(integer 95) prefix(string)]
  22. marksample touse
  23. markout `touse' `varlist' `mv' `mv2' `iv' `iv2' `cv'
  24. tempname coef emat

  25. display
  26. `quietly' {
  27. display as text "Model with dv regressed on iv2 (path c)"
  28. `prefix' reghdfe `varlist'`iv2' `iv'`cv' if `touse', absorb(year ind)
  29. *`prefix' xtreg `varlist' `iv' `iv2' `cv' i.year i.ind if `touse', fe
  30. local ccoef=_b[`iv2']
  31. local cse =_se[`iv2']

  32. display
  33. display "Model with mediator regressed on iv (path a)"
  34. `prefix' reghdfe `mv' `iv' `cv' if `touse', absorb(year ind)
  35. *`prefix' xtreg `mv' `iv' `cv' i.year i.ind if `touse', fe

  36. local acoef=_b[`iv']
  37. local ase=_se[`iv']
  38. local avar =_se[`iv']^2

  39. display
  40. display "Model with dv regressed on mediator and iv (paths b and c')"
  41. `prefix' reghdfe `varlist' `mv2' `iv' `cv' `mv' if `touse', absorb(year ind)
  42. *`prefix' xtreg `varlist' `mv2' `iv' `cv' `mv' i.year i.ind if `touse', fe
  43. }

  44. local bcoef=_b[`mv2']
  45. local bse=_se[`mv2']
  46. local bvar =_se[`mv2']^2

  47. local sobel =(`acoef'*`bcoef')
  48. local serr=sqrt((`bcoef')^2*`avar' + (`acoef')^2*`bvar')
  49. local stest=`sobel'/`serr'
  50. local g1err=sqrt((`bcoef')^2*`avar' + (`acoef')^2*`bvar' + `avar'*`bvar')
  51. local good1=`sobel'/`g1err'
  52. local g2err=sqrt((`bcoef')^2*`avar' + (`acoef')^2*`bvar' - `avar'*`bvar')
  53. local good2=`sobel'/`g2err'
  54. local direff = (`ccoef'-(`acoef'*`bcoef'))
  55. local dse = _se[`iv']
  56. local toteff = `sobel'/`ccoef'
  57. local ratio = `sobel'/`direff'
  58. local t2d = ((`acoef'*`bcoef')+(`ccoef'-(`acoef'*`bcoef')))/`direff'

  59. display
  60. display as txt "Sobel-Goodman Mediation Tests"
  61. display
  62. display as txt " Coef Std Err Z P>|Z|"
  63. display as txt "Sobel " as res `sobel' _skip(4) `serr'%8.4g ///
  64. `stest', _skip(5) 2*(1-norm(abs(`stest')))
  65. display as txt "Goodman-1 (Aroian)" as res `sobel' _skip(4) `g1err' %8.4g ///
  66. `good1', _skip(5) 2*(1-norm(abs(`good1')))
  67. display as txt "Goodman-2 " as res `sobel' _skip(4) `g2err' %8.4g ///
  68. `good2', _skip(5) 2*(1-norm(abs(`good2')))
  69. display
  70. display as txt _col(21) "Coef" _col(31) "Std Err" _col(42) "Z" _col(53) "P>|Z|"
  71. 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')))
  72. 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')))
  73. 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')))
  74. 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')))
  75. 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')))
  76. display
  77. display as txt "Proportion of total effect that is mediated: ", as res `toteff'
  78. display as txt "Ratio of indirect to direct effect: ", as res `ratio'
  79. display as txt "Ratio of total to direct effect: ", as res `t2d'

  80. return scalar ind_eff = `sobel'
  81. return scalar dir_eff = `direff'
  82. return scalar tot_eff = `ccoef'
  83. return scalar a_coef= `acoef'
  84. return scalar b_coef= `bcoef'
  85. return scalar ind2tot = `toteff'
  86. return scalar ind2dir = `ratio'
  87. return scalar tot2dir = `t2d'

  88. end
复制代码


    熟悉论坛请点击新手指南
下载说明
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。
2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。
3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。
(如有侵权,欢迎举报)
二维码

扫码加我 拉你入群

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

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

GMT+8, 2026-1-7 10:06