美文网首页
如何用 Stata 做调节中介效应检验?

如何用 Stata 做调节中介效应检验?

作者: stata连享会 | 来源:发表于2019-07-28 23:44 被阅读0次

    作者: 崔颖(中央财经大学)

    Source: HOW CAN I DO MODERATED MEDIATION IN STATA? | STATA FAQ

    Stata连享会   计量专题 || 精品课程 || 简书推文 || 公众号合集

    点击查看完整推文列表

    连享会计量方法专题……

    1. 中介效应和调节效应的定义

    首先,我们来区分两个相似的概念:中介效应 (Mediation) 和 调节效应 (Moderation) 。

    中介变量 是介于自变量与因变量之间的,它可以部分地解释自变量对因变量的间接影响,即自变量对因变量的影响可以分为直接效应和间接效应两部分。

    调节变量 影响模型中其他的变量的作用效果,也就是说,模型中特定变量的作用效果会依赖于调节变量的取值大小。

    调节中介效应 (Moderated Mediation) 是指调节变量的取值大小影响中介变量所能解释的间接效应的幅度,这被称为 条件间接效应。在调节变量取特定值得条件下,解释间接效应的影响效果。

    Muller 等人 (2005) 在其文章中 When moderation is mediated and mediation is moderated 中提出了三种基本模型来解释调节中介效应和中介调节效应。其中, Mo 表示调节变量,Me 表示中介变量,\varepsilon 表示回归方程的误差项。

    image

    第一步,解释变量 (X) 和被解释变量 (Y) 之间的调节效应也被称为全局处理效应 (如图中路径 C)。实际上,X 对 Y 的影响可以被分解为 A*B+C。

    Y=\beta_{10}+\beta_{11} X+\beta_{12} Mo+\beta_{13} X Mo+\varepsilon_{1}

    为了理解中介调节效应,首先明确全局调节效应的效果由 \beta_{13} 衡量。而对于调节中介效应,要求模型中不存在全局调节效应,即 \beta_{13} 不显著。

    第二步,解释变量和中介变量之间的调节效应 (如图中路径 A)。

    Me=\beta_{20}+\beta_{21} X+\beta_{22} Mo+\beta_{23} X Mo+\varepsilon_{2}

    \beta_{23} 是显著的,说明调节变量会影响解释变量和中介变量之间的关系。

    第三步,解释变量和被解释变量与中介变量和被解释变量之间的调节效应(如图中路径 A和路径B)。

    Y=\beta_{30}+\beta_{31} X+\beta_{32} Mo+\beta_{33} X Mo+\beta_{34} M e+\beta_{35} M e M o+\varepsilon_{3}

    若第二步中的 \beta_{23} 和第三部中的 \beta_{33} 都是显著的,则调节变量会影响解释变量和中介变量之间的关系 (如图中路径 A)。

    若第二步中的 \beta_{23} 和第三部中的 \beta_{35} 都是显著的,则调节变量会影响中介变量和被解释变量之间的关系 (如图中路径 B)。

    2. 调节中介效应的检验方法

    Hayes (2013) 和 Preacher (2007) 详述了调节中介效应的理论背景和框架,他们也提供了检验调节中介效应和计算间接效应大小的方法。

    第一种方法是基于正态分布假定的。这种方法理论上很有效,但实际中条件间接效应的分布往往不呈正态,通常会有各异的偏斜和峰态。基于正态分布方法的置信区间和假设检验通常不够准确。第二种方法使用自举法 (Bootstrapping) 获得标准误和置信区间。尽管这种方法的计算速度大大降低,但此时置信区间的计算是修正偏误且非对称的,更好的反映了条件间接效应样本分布的真实情况。

    接下来,本文会介绍 Preacher 文章中的五个模型。每个模型都会先使用 semnlcom 命令进行基于正态分布假定的方法估计,然后再介绍如何获得标准误和置信区间的自举估计。

    为了计算条件间接效果的大小,我们需要得到以下两个模型的估计系数:模型一用中介变量对解释变量进行回归,模型二用被解释变量对解释变量进行回归。此处,可以使用 Stata 命令 sem 方便得到上述估计系数。条件间接效应可以通过将结构方程模型 (Structural Equation Model) 的估计系数与调节变量给定的取值相乘得到。

    image image

    对于 Preacher 文章五个模型中的前四个,我们将计算调节变量取三个值 (低 (均值减一个标准差),中 (均值),高 (均值加一个标准差)) 时,分别对应的条件间接效应。其中,模型4 由于涉及到两个调节变量,将会产生 3*3=9 种结果。

    2.1 调用数据并定义变量

    use "https://stats.idre.ucla.edu/stat/data/hsb2", clear
    rename science y    // 被解释变量
    rename math    x    // 解释变量  
    rename read    m    // 中介变量  
    rename write   w    // 调节变量1 
    rename socst   z    // 调节变量2 
    

    2.2 模型构建与估计

    模型 1:解释变量同时也是中介变量与被解释变量之间的调节变量

    \mathrm{m}=\mathrm{a}_{0}+\mathrm{a}_{1} \mathrm{x}

    \mathrm{y}=\mathrm{b}_{0}+\mathrm{b}_{1} \mathrm{m}+\mathrm{b}_{2} \mathrm{x}+\mathrm{b}_{3} \mathrm{mx}

    \text{条 件 间 接 效 应} = a_{1}\left(b_{1}+b_{3} x\right)

    对模型 1 进行正态分布假定估计:

    . summarize x
    . global m = r(mean)
    . global s = r(sd)
    . generate mx = m*x  // mv by iv interaction
    . sem (m <- x)(y <- m x mx)
    

    输出结果如下:

    Endogenous variables
    Observed:  m y
    
    Exogenous variables
    Observed:  x mx
    
    Fitting target model:
    Iteration 0:   log likelihood = -3585.6581  
    Iteration 1:   log likelihood = -3585.6581  
    
    Structural equation model                       Number of obs     =        200
    Estimation method  = ml
    Log likelihood     = -3585.6581
    ------------------------------------------------------------------------------
                 |                 OIM
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
    Structural   |
      m          |
               x |    .724807   .0579824    12.50   0.000     .6111636    .8384504
           _cons |   14.07254   3.100201     4.54   0.000     7.996255    20.14882
      -----------+----------------------------------------------------------------
      y          |
               m |   .9766164   .2875081     3.40   0.001     .4131109    1.540122
               x |    1.03094   .2969707     3.47   0.001     .4488881    1.612992
              mx |  -.0115869   .0053091    -2.18   0.029    -.0219926   -.0011812
           _cons |  -20.83921   15.16952    -1.37   0.170    -50.57092    8.892495
    -------------+----------------------------------------------------------------
         var(e.m)|   58.71925   5.871925                      48.26811    71.43329
         var(e.y)|   49.70994   4.970994                      40.86232    60.47326
    ------------------------------------------------------------------------------
    LR test of model vs. saturated: chi2(1)   =    594.37, Prob > chi2 = 0.0000
    

    计算特定调节变量取值下的系数:

    . nlcom _b[m:x]*(_b[y:m]+($m-$s)*_b[y:mx])            /* mean - 1 sd */
    
           _nl_1:  _b[m:x]*(_b[y:m]+(52.645-9.368447794077296)*_b[y:mx])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .3444105   .0656615     5.25   0.000     .2157163    .4731048
    ------------------------------------------------------------------------------
    
    . nlcom _b[m:x]*(_b[y:m]+($m)*_b[y:mx])                  /* mean  */
    
           _nl_1:  _b[m:x]*(_b[y:m]+(52.645)*_b[y:mx])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .2657319   .0517277     5.14   0.000     .1643474    .3671164
    ------------------------------------------------------------------------------
    
    . nlcom _b[m:x]*(_b[y:m]+($m+$s)*_b[y:mx])            /* mean + 1 sd */
    
           _nl_1:  _b[m:x]*(_b[y:m]+(52.645+9.368447794077296)*_b[y:mx])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1870532   .0609803     3.07   0.002      .067534    .3065724
    ------------------------------------------------------------------------------
    

    在此例中,条件间接效应随着调节变量取值的增加而减小。接下来,我们使用如下的bootstrap 命令进行 500 次循环计算。

    capture program drop bootm1
    program bootm1, rclass
      sem (m <- x)(y <- m x mx)
      return scalar cielw = _b[m:x]*(_b[y:m]+($m-$s)*_b[y:mx])
      return scalar ciemn = _b[m:x]*(_b[y:m]+($m)*_b[y:mx])
      return scalar ciehi = _b[m:x]*(_b[y:m]+($m+$s)*_b[y:mx])                       
    end
    
    . bootstrap r(cielw) r(ciemn) r(ciehi), reps(500) nodots: bootm1
    

    结果如下:

    Bootstrap results                               Number of obs     =        200
                                                    Replications      =        500
    
          command:  bootm1
            _bs_1:  r(cielw)
            _bs_2:  r(ciemn)
            _bs_3:  r(ciehi)
    
    ------------------------------------------------------------------------------
                 |   Observed   Bootstrap                         Normal-based
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _bs_1 |   .3444105   .0616473     5.59   0.000      .223584    .4652371
           _bs_2 |   .2657319   .0524074     5.07   0.000     .1630153    .3684484
           _bs_3 |   .1870532   .0621991     3.01   0.003     .0651451    .3089613
    ------------------------------------------------------------------------------
    
    . estat boot, bc percentile
    
    Bootstrap results                               Number of obs     =        200
                                                    Replications      =        500
    
          command:  bootm1
            _bs_1:  r(cielw)
            _bs_2:  r(ciemn)
            _bs_3:  r(ciehi)
    
    ------------------------------------------------------------------------------
                 |    Observed               Bootstrap
                 |       Coef.       Bias    Std. Err.  [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _bs_1 |   .34441055  -.0064576   .06164735    .2203172   .4564181   (P)
                 |                                       .2290775   .4607842  (BC)
           _bs_2 |   .26573187  -.0042591   .05240738    .1586023   .3617616   (P)
                 |                                       .1702687   .3684798  (BC)
           _bs_3 |   .18705319  -.0020605   .06219915    .0653596   .3086919   (P)
                 |                                       .0642492   .3030243  (BC)
    ------------------------------------------------------------------------------
    (P)    percentile confidence interval
    (BC)   bias-corrected confidence interval
    

    模型 2:调节变量影响解释变量与中介变量之间的关系

    \mathrm{m}=\mathrm{a}_{0}+\mathrm{a}_{1} \mathrm{x}+\mathrm{a}_{2} \mathrm{w}+\mathrm{a}_{3} \mathrm{x} \mathrm{w}

    \mathrm{y}=\mathrm{b}_{0}+\mathrm{b}_{1} \mathrm{m}+\mathrm{b}_{2} \mathrm{x}+\mathrm{b}_{3} \mathrm{w}+\mathrm{b}_{4} \mathrm{x} \mathrm{w}

    条件间接效应=b_{1}\left(a_{1}+a_{3} \mathrm{w}\right)

    . summarize w
    . global m=r(mean)
    . global s=r(sd)
    . generate wx=w*x  /*  moderator 1 by iv interaction */
    . sem (m <- x w wx)(y <- m x w wx)  // SEM 模型
    
    Endogenous variables
    Observed:  m y
    
    Exogenous variables
    Observed:  x w wx
    
    Fitting target model:
    Iteration 0:   log likelihood = -3919.1644  
    Iteration 1:   log likelihood = -3919.1644  
    
    Structural equation model                       Number of obs      =       200
    Estimation method  = ml
    Log likelihood     = -3919.1644
    
    ------------------------------------------------------------------------------
                 |                 OIM
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
    Structural   |
      m <-       |
               x |   .2707428   .3780083     0.72   0.474    -.4701398    1.011625
               w |   .1041694   .3417056     0.30   0.760    -.5655613    .7739002
              wx |   .0044859   .0066954     0.67   0.503    -.0086368    .0176087
           _cons |    19.7711   18.53835     1.07   0.286    -16.56341     56.1056
      -----------+----------------------------------------------------------------
      y <-       |
               m |   .3057916   .0677692     4.51   0.000     .1729665    .4386168
               x |   .7902703   .3627478     2.18   0.029     .0792976    1.501243
               w |   .6316515   .3275671     1.93   0.054    -.0103682    1.273671
              wx |   -.008533   .0064241    -1.33   0.184     -.021124    .0040579
           _cons |  -14.88752   17.81763    -0.84   0.403    -49.80943    20.03438
    -------------+----------------------------------------------------------------
         var(e.m)|   52.63581   5.263581                      43.26744    64.03265
         var(e.y)|    48.3477    4.83477                      39.74254    58.81607
    ------------------------------------------------------------------------------
    LR test of model vs. saturated: chi2(0)   =      0.00, Prob > chi2 =      .
    
    
    . nlcom (_b[m:x]+($m-$s)*_b[m:wx])*_b[y:m]            /* mean - 1 sd */
    
           _nl_1:  (_b[m:x]+(52.775-9.47858602138653)*_b[m:wx])*_b[y:m]
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1421829   .0455118     3.12   0.002     .0529814    .2313843
    ------------------------------------------------------------------------------
    
    . nlcom (_b[m:x]+($m)*_b[m:wx])*_b[y:m]                   /* mean */
    
           _nl_1:  (_b[m:x]+(52.775)*_b[m:wx])*_b[y:m]
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1551852   .0408543     3.80   0.000     .0751121    .2352582
    ------------------------------------------------------------------------------
    
    . nlcom (_b[m:x]+($m+$s)*_b[m:wx])*_b[y:m]            /* mean + 1 sd */
    
           _nl_1:  (_b[m:x]+(52.775+9.47858602138653)*_b[m:wx])*_b[y:m]
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1681874   .0451294     3.73   0.000     .0797355    .2566394
    ------------------------------------------------------------------------------
    
    capture program drop bootm2
    program bootm2, rclass
      sem (m <- x w wx)(y <- m x w wx)
      return scalar cielw = (_b[m:x]+($m-$s)*_b[m:wx])*_b[y:m]
      return scalar ciemn = (_b[m:x]+($m)*_b[m:wx])*_b[y:m]
      return scalar ciehi = (_b[m:x]+($m+$s)*_b[m:wx])*_b[y:m]                       
    end
    
    . bootstrap r(cielw) r(ciemn) r(ciehi), reps(500) nodots: bootm2
    
    Bootstrap results                               Number of obs      =       200
                                                    Replications       =       500
    
          command:  bootm2
            _bs_1:  r(cielw)
            _bs_2:  r(ciemn)
            _bs_3:  r(ciehi)
    
    ------------------------------------------------------------------------------
                 |   Observed   Bootstrap                         Normal-based
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _bs_1 |   .1421829    .047612     2.99   0.003      .048865    .2355007
           _bs_2 |   .1551852   .0409495     3.79   0.000     .0749256    .2354447
           _bs_3 |   .1681874   .0423557     3.97   0.000     .0851717    .2512031
    ------------------------------------------------------------------------------
    
    . estat boot, bc percentile
    
    Bootstrap results                               Number of obs      =       200
                                                    Replications       =       500
    
          command:  bootm2
            _bs_1:  r(cielw)
            _bs_2:  r(ciemn)
            _bs_3:  r(ciehi)
    
    ------------------------------------------------------------------------------
                 |    Observed               Bootstrap
                 |       Coef.       Bias    Std. Err.  [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _bs_1 |   .14218287   .0009392   .04761201    .0579299   .2551758   (P)
                 |                                       .0579299   .2551758  (BC)
           _bs_2 |   .15518515   .0001497    .0409495     .078383    .242382   (P)
                 |                                        .078383    .242382  (BC)
           _bs_3 |   .16818743  -.0006398   .04235573    .0869211   .2532646   (P)
                 |                                        .089544   .2589626  (BC)
    ------------------------------------------------------------------------------
    (P)    percentile confidence interval
    (BC)   bias-corrected confidence interval
    

    在此例中,条件间接效应随着调节变量取值的增加而缓慢增长。

    模型 3:调节变量影响中介变量与被解释变量之间的关系

    \mathrm{m}=\mathrm{a}_{0}+\mathrm{a}_{1} \mathrm{x}

    \mathrm{y}=\mathrm{b}_{0}+\mathrm{b}_{1} \mathrm{m}+\mathrm{b}_{2} \mathrm{x}+\mathrm{b}_{3} \mathrm{w}+\mathrm{b}_{4} \mathrm{mw}

    条件间接效应=a_{1}\left(b_{1}+b_{4} \mathrm{w}\right)

    . summarize w
    . global m=r(mean)
    . global s=r(sd)
    . generate mw=m*w  /*  mv by moderator 1 interaction */
    . sem (m <- x)(y <- m x w mw) 
    
    Endogenous variables
    Observed:  m y
    
    Exogenous variables
    Observed:  x w mw
    
    Fitting target model:
    Iteration 0:   log likelihood = -4260.6166  
    Iteration 1:   log likelihood = -4260.6166  
    
    Structural equation model                       Number of obs      =       200
    Estimation method  = ml
    Log likelihood     = -4260.6166
    
    ------------------------------------------------------------------------------
                 |                 OIM
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
    Structural   |
      m <-       |
               x |    .724807   .0579824    12.50   0.000     .6111636    .8384504
           _cons |   14.07254   3.100201     4.54   0.000     7.996255    20.14882
      -----------+----------------------------------------------------------------
      y <-       |
               m |   .8193599   .3169173     2.59   0.010     .1982135    1.440506
               x |     .33696   .0761398     4.43   0.000     .1877287    .4861913
               w |   .6739726   .2880423     2.34   0.019     .1094201    1.238525
              mw |  -.0095993     .00574    -1.67   0.094    -.0208495    .0016509
           _cons |  -17.23954   15.65376    -1.10   0.271    -47.92034    13.44126
    -------------+----------------------------------------------------------------
         var(e.m)|   58.71925   5.871925                      48.26811    71.43329
         var(e.y)|   48.10157   4.810157                      39.54022    58.51664
    ------------------------------------------------------------------------------
    LR test of model vs. saturated: chi2(2)   =    639.91, Prob > chi2 = 0.0000
    
    . nlcom _b[m:x]*(_b[y:m]+($m-$s)*_b[y:mw])            /* mean - 1 sd */
    
           _nl_1:  _b[m:x]*(_b[y:m]+(52.775-9.47858602138653)*_b[y:mw])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .2926372   .0700399     4.18   0.000     .1553616    .4299129
    ------------------------------------------------------------------------------
    
    . nlcom _b[m:x]*(_b[y:m]+($m)*_b[y:mw])                   /* mean */
    
           _nl_1:  _b[m:x]*(_b[y:m]+(52.775)*_b[y:mw])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .2266887   .0524176     4.32   0.000     .1239522    .3294253
    ------------------------------------------------------------------------------
    
    . nlcom _b[m:x]*(_b[y:m]+($m+$s)*_b[y:mw])            /* mean + 1 sd */
    
           _nl_1:  _b[m:x]*(_b[y:m]+(52.775+9.47858602138653)*_b[y:mw])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1607402   .0612818     2.62   0.009       .04063    .2808504
    ------------------------------------------------------------------------------
    

    在此例中,条件间接效应随着调节变量取值的增加而减少。

    capture program drop bootm3
    program bootm3, rclass
      sem (m <- x)(y <- m x w mw)
      return scalar cielw = _b[m:x]*(_b[y:m]+($m-$s)*_b[y:mw])
      return scalar ciemn = _b[m:x]*(_b[y:m]+($m)*_b[y:mw])
      return scalar ciehi = _b[m:x]*(_b[y:m]+($m+$s)*_b[y:mw])                       
    end
    
    . bootstrap r(cielw) r(ciemn) r(ciehi), reps(500) nodots: bootm3
    
    Bootstrap results                               Number of obs      =       200
                                                    Replications       =       500
    
          command:  bootm3
            _bs_1:  r(cielw)
            _bs_2:  r(ciemn)
            _bs_3:  r(ciehi)
    
    ------------------------------------------------------------------------------
                 |   Observed   Bootstrap                         Normal-based
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _bs_1 |   .2926372   .0666315     4.39   0.000     .1620418    .4232326
           _bs_2 |   .2266887   .0531356     4.27   0.000     .1225448    .3308326
           _bs_3 |   .1607402   .0615717     2.61   0.009     .0400619    .2814185
    ------------------------------------------------------------------------------
    
    . estat boot, bc percentile
    
    Bootstrap results                               Number of obs      =       200
                                                    Replications       =       500
    
          command:  bootm3
            _bs_1:  r(cielw)
            _bs_2:  r(ciemn)
            _bs_3:  r(ciehi)
    
    ------------------------------------------------------------------------------
                 |    Observed               Bootstrap
                 |       Coef.       Bias    Std. Err.  [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _bs_1 |   .29263724  -.0008677   .06663153    .1549403   .4144395   (P)
                 |                                       .1554288   .4178429  (BC)
           _bs_2 |   .22668872   .0000859   .05313561    .1177044   .3335583   (P)
                 |                                       .1170573   .3309805  (BC)
           _bs_3 |    .1607402   .0010394   .06157172    .0423122   .2809089   (P)
                 |                                       .0423122   .2809089  (BC)
    ------------------------------------------------------------------------------
    (P)    percentile confidence interval
    (BC)   bias-corrected confidence interval
    

    模型 4:两个不同的调节变量,一个影响解释变量与中介变量之间的关系,另一个影响中介变量与被解释变量之间的关系

    \mathrm{m}=\mathrm{a}_{0}+\mathrm{a}_{1} \mathrm{x}+\mathrm{a}_{2} \mathrm{w}+\mathrm{a}_{3} \mathrm{x} \mathrm{w}

    \mathrm{y}=\mathrm{b}_{0}+\mathrm{b}_{1} \mathrm{m}+\mathrm{b}_{2} \mathrm{x}+\mathrm{b}_{3} \mathrm{w}+\mathrm{b}_{4} \mathrm{x} \mathrm{w}+\mathrm{b}_{5} \mathrm{z}+\mathrm{b}_{6} \mathrm{mz}

    条件间接效应=\left(b_{1}+b_{6} z\right)\left(a_{1}+a_{3} \mathrm{w}\right)

    . summarize w
    . global m1 = r(mean)
    . global s1 = r(sd)
    . summarize z
    . global m2 = r(mean)
    . global s2 = r(sd)
    . capture generate wx=w*x  // moderator 1 by iv interaction
    . gen mz=m*z               // mv by moderator 2 interaction
    
    . sem (m <- x w wx)(y <- m x w wx z mz)
    
    Endogenous variables
    Observed:  m y
    
    Exogenous variables
    Observed:  x w wx z mz
    
    Fitting target model:
    Iteration 0:   log likelihood = -6096.1477  
    Iteration 1:   log likelihood = -6096.1477  
    
    Structural equation model                       Number of obs      =       200
    Estimation method  = ml
    Log likelihood     = -6096.1477
    
    ------------------------------------------------------------------------------
                 |                 OIM
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
    Structural   |
      m <-       |
               x |   .2707428   .3780083     0.72   0.474    -.4701398    1.011625
               w |   .1041694   .3417056     0.30   0.760    -.5655613    .7739002
              wx |   .0044859   .0066954     0.67   0.503    -.0086368    .0176087
           _cons |    19.7711   18.53835     1.07   0.286    -16.56341     56.1056
      -----------+----------------------------------------------------------------
      y <-       |
               m |   .4013056    .282893     1.42   0.156    -.1531546    .9557658
               x |   .7571766   .3864076     1.96   0.050    -.0001684    1.514522
               w |   .6031543   .3562554     1.69   0.090    -.0950935    1.301402
              wx |  -.0078215   .0069183    -1.13   0.258     -.021381    .0057381
               z |   .0553245   .2661857     0.21   0.835    -.4663899    .5770389
              mz |  -.0015944   .0050813    -0.31   0.754    -.0115536    .0083647
           _cons |   -17.0724    19.0314    -0.90   0.370    -54.37327    20.22847
    -------------+----------------------------------------------------------------
         var(e.m)|   52.63581   5.263581                      43.26744    64.03265
         var(e.y)|   48.28407   4.828407                      39.69024    58.73866
    ------------------------------------------------------------------------------
    LR test of model vs. saturated: chi2(2)   =    571.85, Prob > chi2 = 0.0000
    
    . nlcom (_b[m:x]+($m1-$s1)*_b[m:wx])*(_b[y:m]+($m2-$s2)*_b[y:mz])  /* mean1 - 1 sd1; mean2 - 1 sd2 */
    
    _nl_1:  (_b[m:x]+(52.775-9.47858602138653)*_b[m:wx])*(_b[y:m]+(52.405-10.7357934642267)*_b[y:mz])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1557016   .0568792     2.74   0.006     .0442203    .2671828
    ------------------------------------------------------------------------------
    
    . nlcom (_b[m:x]+($m1)*_b[m:wx])*(_b[y:m]+($m2-$s2)*_b[y:mz])  /* mean1; mean2 - 1 sd2 */
    
    _nl_1:  (_b[m:x]+(52.775)*_b[m:wx])*(_b[y:m]+(52.405-10.7357934642267)*_b[y:mz])
    
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1699401   .0538198     3.16   0.002     .0644552     .275425
    ------------------------------------------------------------------------------
    
    . nlcom (_b[m:x]+($m1+$s1)*_b[m:wx])*(_b[y:m]+($m2-$s2)*_b[y:mz])  /* mean1 + 1 sd1; mean2 - 1 sd2 */
    
    _nl_1:  (_b[m:x]+(52.775+9.47858602138653)*_b[m:wx])*(_b[y:m]+(52.405-10.7357934642267)*_b[y:mz])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1841786    .059107     3.12   0.002      .068331    .3000263
    ------------------------------------------------------------------------------
    
    . nlcom (_b[m:x]+($m1-$s1)*_b[m:wx])*(_b[y:m]+($m2)*_b[y:mz])  /* mean1 - 1 sd1; mean2 */
    
    _nl_1:  (_b[m:x]+(52.775-9.47858602138653)*_b[m:wx])*(_b[y:m]+(52.405)*_b[y:mz])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1477424     .04785     3.09   0.002     .0539581    .2415267
    ------------------------------------------------------------------------------
    
    nlcom (_b[m:x]+($m1)*_b[m:wx])*(_b[y:m]+($m2)*_b[y:mz])  /* mean1; mean2 */
    
    _nl_1:  (_b[m:x]+(52.775)*_b[m:wx])*(_b[y:m]+(52.405)*_b[y:mz])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1612531   .0431911     3.73   0.000     .0766001    .2459061
    ------------------------------------------------------------------------------
    
    . nlcom (_b[m:x]+($m1+$s1)*_b[m:wx])*(_b[y:m]+($m2)*_b[y:mz])  /* mean1 + 1 sd1; mean2 */
    
    _nl_1:  (_b[m:x]+(52.775+9.47858602138653)*_b[m:wx])*(_b[y:m]+(52.405)*_b[y:mz])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1747638   .0476804     3.67   0.000      .081312    .2682156
    ------------------------------------------------------------------------------
    
    . nlcom (_b[m:x]+($m1-$s1)*_b[m:wx])*(_b[y:m]+($m2+$s2)*_b[y:mz])  /* mean1 - 1 sd1; mean2 + 1 sd */
    
    _nl_1:  (_b[m:x]+(52.775-9.47858602138653)*_b[m:wx])*(_b[y:m]+(52.405+10.73579
    > 34642267)*_b[y:mz])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1397833   .0513566     2.72   0.006     .0391261    .2404404
    ------------------------------------------------------------------------------
    
    . nlcom (_b[m:x]+($m1)*_b[m:wx])*(_b[y:m]+($m2+$s2)*_b[y:mz])  /* mean1; mean2 + 1 sd */
    
    _nl_1:  (_b[m:x]+(52.775)*_b[m:wx])*(_b[y:m]+(52.405+10.7357934642267)*_b[y:mz])
    
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1525661   .0486854     3.13   0.002     .0571445    .2479878
    ------------------------------------------------------------------------------
    
    . nlcom (_b[m:x]+($m1+$s1)*_b[m:wx])*(_b[y:m]+($m2+$s2)*_b[y:mz])  /* mean1 + 1 sd1; mean2 + 1 sd */
    
    _nl_1:  (_b[m:x]+(52.775+9.47858602138653)*_b[m:wx])*(_b[y:m]+(52.405+10.7357934642267)*_b[y:mz])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |    .165349   .0534577     3.09   0.002     .0605738    .2701241
    ------------------------------------------------------------------------------
    

    自举法估计结果如下:

    capture program drop bootm4
    program bootm4, rclass
      sem (m <- x w wx)(y <- m x w wx z mz)
      return scalar ciell = (_b[m:x]+($m1-$s1)*_b[m:wx])*(_b[y:m]+($m2-$s2)*_b[y:mz])
      return scalar cieml = (_b[m:x]+($m1)*_b[m:wx])*(_b[y:m]+($m2-$s2)*_b[y:mz])
      return scalar ciehl = (_b[m:x]+($m1+$s1)*_b[m:wx])*(_b[y:m]+($m2-$s2)*_b[y:mz]) 
      return scalar cielm = (_b[m:x]+($m1-$s1)*_b[m:wx])*(_b[y:m]+($m2)*_b[y:mz])
      return scalar ciemm = (_b[m:x]+($m1)*_b[m:wx])*(_b[y:m]+($m2)*_b[y:mz])
      return scalar ciehm = (_b[m:x]+($m1+$s1)*_b[m:wx])*(_b[y:m]+($m2)*_b[y:mz])
      return scalar cielh = (_b[m:x]+($m1-$s1)*_b[m:wx])*(_b[y:m]+($m2+$s2)*_b[y:mz])
      return scalar ciemh = (_b[m:x]+($m1)*_b[m:wx])*(_b[y:m]+($m2+$s2)*_b[y:mz])
      return scalar ciehh = (_b[m:x]+($m1+$s1)*_b[m:wx])*(_b[y:m]+($m2+$s2)*_b[y:mz])
    end
    
    . bootstrap r(ciell) r(cieml) r(ciehl) r(cielm) r(ciemm) r(ciehm) ///
           r(cielh) r(ciemh) r(ciehh), reps(500) nodots: bootm4
    
    Bootstrap results                               Number of obs      =       200
                                                    Replications       =       500
    
          command:  bootm4
            _bs_1:  r(ciell)
            _bs_2:  r(cieml)
            _bs_3:  r(ciehl)
            _bs_4:  r(cielm)
            _bs_5:  r(ciemm)
            _bs_6:  r(ciehm)
            _bs_7:  r(cielh)
            _bs_8:  r(ciemh)
            _bs_9:  r(ciehh)
    
    ------------------------------------------------------------------------------
                 |   Observed   Bootstrap                         Normal-based
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _bs_1 |   .1557016   .0649863     2.40   0.017     .0283307    .2830725
           _bs_2 |   .1699401   .0621157     2.74   0.006     .0481956    .2916846
           _bs_3 |   .1841786   .0671694     2.74   0.006      .052529    .3158283
           _bs_4 |   .1477424   .0487353     3.03   0.002     .0522231    .2432618
           _bs_5 |   .1612531   .0445524     3.62   0.000     .0739321    .2485741
           _bs_6 |   .1747638   .0493391     3.54   0.000      .078061    .2714666
           _bs_7 |   .1397833   .0492498     2.84   0.005     .0432554    .2363111
           _bs_8 |   .1525661   .0472475     3.23   0.001     .0599627    .2451695
           _bs_9 |    .165349   .0528395     3.13   0.002     .0617855    .2689124
    ------------------------------------------------------------------------------
    
    . estat boot, bc percentile
    
    Bootstrap results                               Number of obs      =       200
                                                    Replications       =       500
    
          command:  bootm4
            _bs_1:  r(ciell)
            _bs_2:  r(cieml)
            _bs_3:  r(ciehl)
            _bs_4:  r(cielm)
            _bs_5:  r(ciemm)
            _bs_6:  r(ciehm)
            _bs_7:  r(cielh)
            _bs_8:  r(ciemh)
            _bs_9:  r(ciehh)
    
    ------------------------------------------------------------------------------
                 |    Observed               Bootstrap
                 |       Coef.       Bias    Std. Err.  [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _bs_1 |   .15570156  -.0011114   .06498635    .0403215   .2988805   (P)
                 |                                       .0505215   .3103726  (BC)
           _bs_2 |   .16994009  -.0011208   .06211569    .0493589   .2907081   (P)
                 |                                       .0592202   .3041216  (BC)
           _bs_3 |   .18417863  -.0011303   .06716942     .056527   .3229917   (P)
                 |                                       .0683613   .3390853  (BC)
           _bs_4 |   .14774241  -.0025282   .04873525    .0589332   .2458749   (P)
                 |                                       .0740234   .2873931  (BC)
           _bs_5 |    .1612531   -.002414   .04455236    .0787119   .2513106   (P)
                 |                                       .0928683   .2640307  (BC)
           _bs_6 |   .17476379  -.0022999   .04933908    .0872108   .2716488   (P)
                 |                                       .0949407   .2876344  (BC)
           _bs_7 |   .13978326  -.0039449   .04924982    .0522442   .2376913   (P)
                 |                                       .0635381   .2752829  (BC)
           _bs_8 |   .15256611  -.0037072   .04724748    .0625553   .2519639   (P)
                 |                                       .0673052   .2589675  (BC)
           _bs_9 |   .16534895  -.0034695   .05283947    .0625117   .2702666   (P)
                 |                                       .0756997   .2865739  (BC)
    ------------------------------------------------------------------------------
    (P)    percentile confidence interval
    (BC)   bias-corrected confidence interval
    

    模型 5:一个调节变量同时影响解释变量与中介变量之间的关系及中介变量与被解释变量之间的关系

    \mathrm{m}=\mathrm{a}_{0}+\mathrm{a}_{1} \mathrm{x}+\mathrm{a}_{2} \mathrm{w}+\mathrm{a}_{3} \mathrm{xw}

    \mathrm{y}=\mathrm{b}_{0}+\mathrm{b}_{1} \mathrm{m}+\mathrm{b}_{2} \mathrm{x}+\mathrm{b}_{3} \mathrm{w}+\mathrm{b}_{4} \mathrm{x} \mathrm{w}+\mathrm{b}_{5} \mathrm{m} \mathrm{w}

    条件间接效应=\left(b_{1}+b_{5} \mathrm{w}\right)\left(a_{1}+a_{3} \mathrm{w}\right)

    . summarize w
    . global m = r(mean)
    . global s = r(sd)
    . capture generate wx = w*x   // moderator 1 by iv interaction
    . capture generate mw = m*w   // mv by moderator 1 interaction
    
    . sem (m <- x w wx)(y <- m x w wx mw)
    
    Endogenous variables
    Observed:  m y
    
    Exogenous variables
    Observed:  x w wx mw
    
    Fitting target model:
    Iteration 0:   log likelihood = -5398.1882  
    Iteration 1:   log likelihood = -5398.1882  
    
    Structural equation model                       Number of obs      =       200
    Estimation method  = ml
    Log likelihood     = -5398.1882
    
    ------------------------------------------------------------------------------
                 |                 OIM
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
    Structural   |
      m <-       |
               x |   .2707428   .3780083     0.72   0.474    -.4701398    1.011625
               w |   .1041694   .3417056     0.30   0.760    -.5655613    .7739002
              wx |   .0044859   .0066954     0.67   0.503    -.0086368    .0176087
           _cons |    19.7711   18.53835     1.07   0.286    -16.56341     56.1056
      -----------+----------------------------------------------------------------
      y <-       |
               m |   .7237774   .3852893     1.88   0.060    -.0313758    1.478931
               x |   .5236584   .4351217     1.20   0.229    -.3291644    1.376481
               w |   .7576026   .3460016     2.19   0.029      .079452    1.435753
              wx |  -.0034416   .0078974    -0.44   0.663    -.0189201     .012037
              mw |  -.0077956   .0070744    -1.10   0.270    -.0216612      .00607
           _cons |  -21.81586   18.84366    -1.16   0.247    -58.74876    15.11704
    -------------+----------------------------------------------------------------
         var(e.m)|   52.63581   5.263581                      43.26744    64.03265
         var(e.y)|   48.05594   4.805594                      39.50271    58.46113
    ------------------------------------------------------------------------------
    LR test of model vs. saturated: chi2(1)   =    696.37, Prob > chi2 = 0.0000
    
    . nlcom (_b[m:x]+($m-$s)*_b[m:wx])*(_b[y:m]+($m-$s)*_b[y:mw])            /* mean - 1 sd */
    
    _nl_1:  (_b[m:x]+(52.775-9.47858602138653)*_b[m:wx])*(_b[y:m]+(52.775-9.47858602138653)*_b[y:mw])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1795967   .0621316     2.89   0.004      .057821    .3013723
    ------------------------------------------------------------------------------
    
    . nlcom (_b[m:x]+($m)*_b[m:wx])*(_b[y:m]+($m)*_b[y:mw])                   /* mean */
    
    _nl_1:  (_b[m:x]+(52.775)*_b[m:wx])*(_b[y:m]+(52.775)*_b[y:mw])
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1585216   .0411369     3.85   0.000     .0778949    .2391484
    ------------------------------------------------------------------------------
    
    . nlcom (_b[m:x]+($m+$s)*_b[m:wx])*(_b[y:m]+($m+$s)*_b[y:mw])            /* mean + 1 sd */
    
    _nl_1:  (_b[m:x]+(52.775+9.47858602138653)*_b[m:wx])*(_b[y:m]+(52.775+9.47858602138653)*_b[y:mw])
    
    
    ------------------------------------------------------------------------------
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _nl_1 |   .1311629   .0538847     2.43   0.015     .0255509     .236775
    ------------------------------------------------------------------------------
    

    自举法估计结果如下:

    capture program drop bootm5
    program bootm5, rclass
      sem (m <- x w wx)(y <- m x w wx mw)
      return scalar cielw = (_b[m:x]+($m-$s)*_b[m:wx])*(_b[y:m]+($m-$s)*_b[y:mw])
      return scalar ciemn = (_b[m:x]+($m)*_b[m:wx])*(_b[y:m]+($m)*_b[y:mw])
      return scalar ciehi = (_b[m:x]+($m+$s)*_b[m:wx])*(_b[y:m]+($m+$s)*_b[y:mw])                      
    end
    
    . bootstrap r(cielw) r(ciemn) r(ciehi), reps(500) nodots: bootm5
    
    Bootstrap results                               Number of obs      =       200
                                                    Replications       =       500
    
          command:  bootm5
            _bs_1:  r(cielw)
            _bs_2:  r(ciemn)
            _bs_3:  r(ciehi)
    
    ------------------------------------------------------------------------------
                 |   Observed   Bootstrap                         Normal-based
                 |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _bs_1 |   .1795967   .0731346     2.46   0.014     .0362555    .3229378
           _bs_2 |   .1585216   .0431536     3.67   0.000     .0739422    .2431011
           _bs_3 |   .1311629   .0501183     2.62   0.009     .0329329     .229393
    ------------------------------------------------------------------------------
    
    . estat boot, bc percentile
    
    Bootstrap results                               Number of obs      =       200
                                                    Replications       =       500
    
          command:  bootm5
            _bs_1:  r(cielw)
            _bs_2:  r(ciemn)
            _bs_3:  r(ciehi)
    
    ------------------------------------------------------------------------------
                 |    Observed               Bootstrap
                 |       Coef.       Bias    Std. Err.  [95% Conf. Interval]
    -------------+----------------------------------------------------------------
           _bs_1 |   .17959665    .004129   .07313458    .0583385   .3322092   (P)
                 |                                       .0600062   .3465318  (BC)
           _bs_2 |   .15852165   .0022404   .04315356    .0775977    .247842   (P)
                 |                                       .0758291   .2446393  (BC)
           _bs_3 |   .13116295   .0023994   .05011829    .0406206   .2343201   (P)
                 |                                       .0406206   .2343201  (BC)
    ------------------------------------------------------------------------------
    (P)    percentile confidence interval
    (BC)   bias-corrected confidence interval
    

    写在最后

    本文首先详细介绍了中介效应和调节效应的定义,借助 Muller 等人 (2005) 文章中提出的模型详细介绍了中介调节效应和调节中介效应。其次,本文列举了 Preacher (2007) 文章中的五种调节中介效应模型,分别运用基于正态分布假定的基准方法和自举法估计并检验了中介变量所能解释的间接效应幅度如何随调节变量取值的变化而变化。此方法可以广泛应用于微观实证计量研究的机制检验中,相关 Stata 程序包也较为丰富,感兴趣的同学可进一步研究学习。

    参考资料

    1. Hayes, A.F. (2013) Introduction to Mediation, Moderation, and Conditional Process Analysis: A Regression-Based Approach[M]. New York, NY: Guilford Press

    2. Preacher, K.J., Rucker, D.D. and Hayes, A.F. (2007). Addressing moderated mediation hypotheses: Theory, methods, and prescriptions[J]. Multivariate Behavioral Research, 42(1), 185-227. [PDF]

    3. Muller D, Judd, Charles M, Yzerbyt, Vincent Y. When moderation is mediated and mediation is moderated[J]. Journal of Personality & Social Psychology, 2005, 89(6):852-863. [PDF]

    2019暑期“实证研究方法与经典论文”专题班-连玉君-江艇主讲

    2019暑期“实证研究方法与经典论文”专题班-连玉君-江艇主讲

    相关文章

      网友评论

          本文标题:如何用 Stata 做调节中介效应检验?

          本文链接:https://www.haomeiwen.com/subject/mbimrctx.html