作者: 崔颖(中央财经大学)
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 表示中介变量, 表示回归方程的误差项。
第一步,解释变量 (X) 和被解释变量 (Y) 之间的调节效应也被称为全局处理效应 (如图中路径 C)。实际上,X 对 Y 的影响可以被分解为 A*B+C。
为了理解中介调节效应,首先明确全局调节效应的效果由 衡量。而对于调节中介效应,要求模型中不存在全局调节效应,即 不显著。
第二步,解释变量和中介变量之间的调节效应 (如图中路径 A)。
若 是显著的,说明调节变量会影响解释变量和中介变量之间的关系。
第三步,解释变量和被解释变量与中介变量和被解释变量之间的调节效应(如图中路径 A和路径B)。
若第二步中的 和第三部中的 都是显著的,则调节变量会影响解释变量和中介变量之间的关系 (如图中路径 A)。
若第二步中的 和第三部中的 都是显著的,则调节变量会影响中介变量和被解释变量之间的关系 (如图中路径 B)。
2. 调节中介效应的检验方法
Hayes (2013) 和 Preacher (2007) 详述了调节中介效应的理论背景和框架,他们也提供了检验调节中介效应和计算间接效应大小的方法。
第一种方法是基于正态分布假定的。这种方法理论上很有效,但实际中条件间接效应的分布往往不呈正态,通常会有各异的偏斜和峰态。基于正态分布方法的置信区间和假设检验通常不够准确。第二种方法使用自举法 (Bootstrapping) 获得标准误和置信区间。尽管这种方法的计算速度大大降低,但此时置信区间的计算是修正偏误且非对称的,更好的反映了条件间接效应样本分布的真实情况。
接下来,本文会介绍 Preacher 文章中的五个模型。每个模型都会先使用 sem
和 nlcom
命令进行基于正态分布假定的方法估计,然后再介绍如何获得标准误和置信区间的自举估计。
为了计算条件间接效果的大小,我们需要得到以下两个模型的估计系数:模型一用中介变量对解释变量进行回归,模型二用被解释变量对解释变量进行回归。此处,可以使用 Stata 命令 sem
方便得到上述估计系数。条件间接效应可以通过将结构方程模型 (Structural Equation Model) 的估计系数与调节变量给定的取值相乘得到。
对于 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:解释变量同时也是中介变量与被解释变量之间的调节变量
对模型 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:调节变量影响解释变量与中介变量之间的关系
. 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:调节变量影响中介变量与被解释变量之间的关系
. 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:两个不同的调节变量,一个影响解释变量与中介变量之间的关系,另一个影响中介变量与被解释变量之间的关系
. 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:一个调节变量同时影响解释变量与中介变量之间的关系及中介变量与被解释变量之间的关系
. 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]