Mplus code for mediation, moderation, and moderated mediation models
Model 87: 2 or more mediators in series, 1 moderator, moderating the second mediatorDV path
Example Variables: 1 predictor X, 2 mediators M1 and M2, 1 moderator W, 1 outcome Y
Preliminary notes:
The code below assumes that
 The primary IV (variable X) is continuous or dichotomous
 Any moderators (variables W, V, Q, Z) are continuous, though the only adaptation required to handle dichotomous moderators is in the MODEL CONSTRAINT: and loop plot code  an example of how to do this is given in model 1b. Handling categorical moderators with > 2 categories is demonstrated in
model 1d.
 Any mediators (variable M, or M1, M2, etc.) are continuous and satisfy the assumptions of standard multiple regression. An example of how to handle a dichotomous mediator is given in model 4c.
 The DV (variable Y) is continuous and satisfies the assumptions of standard multiple regression. An example of how to handle a dichotomous DV is given in model 1e (i.e. a moderated logistic regression) and in model 4d (i.e. an indirect effect in a logistic regression).
Model Diagram:
Statistical Diagram:
Model Equation(s):
Y = b0 + b1M1 + b2M2 + b3W + b4M2W + c'X
M1 = a01 + a1X
M2 = a02 + a2X + d1M1
Algebra to calculate total, indirect and/or conditional effects by writing model as Y = a + bX:
Y = b0 + b1M1 + b2M2 + b3W + b4M2W + c'X
M1 = a01 + a1X
M2 = a02 + a2X + d1M1
Hence... substituting in equations for M1 and M2
Y = Y = b0 + b1(a01 + a1X) + b2(a02 + a2X + d1(a01 + a1X)) + b3W + b4(a02 + a2X + d1(a01 + a1X))W + c'X
Hence... multiplying out brackets
Y = b0 + a01b1 + a1b1X + a02b2 + a2b2X + a01d1b2 + a1d1b2X + b3W + a02b4 + a2b4X + a01d1b4W + a1d1b4XW + c'X
Hence... grouping terms into form Y = a + bX
Y = (b0 + a01b1 + a02b2 + a01d1b2 + b3W + a02b4 + a01d1b4W) + (a1b1 + a2b2 + a2b4W + a1d1b2 + a1d1b4W + c')X
Hence...
Three indirect effects of X on Y, conditional on W:
a1b1, a1d1(b2 + b4W), a2(b2 + b4W)
One direct effect of X on Y:
c'
Mplus code for the model:
! Predictor variable  X
! Mediator variable(s) – M1, M2
! Moderator variable(s)  W
! Outcome variable  Y
USEVARIABLES = X M1 M2 W Y M2W;
! Create interaction term
! Note that it has to be placed at end of USEVARIABLES subcommand above
DEFINE:
M2W = M2*W;
ANALYSIS:
TYPE = GENERAL;
ESTIMATOR = ML;
BOOTSTRAP = 10000;
! In model statement name each path using parentheses
MODEL:
Y ON M1 (b1);
Y ON M2 (b2);
Y ON W (b3);
Y ON M2W (b4);
Y ON X (cdash); ! direct effect of X on Y
M1 ON X (a1);
M2 ON X (a2);
M2 ON M1 (d1);
! Use model constraint subcommand to test simple slopes
! You need to pick low, medium and high moderator values,
! for example, of 1 SD below mean, mean, 1 SD above mean
! Also calc total effects at lo, med, hi values of moderator
MODEL CONSTRAINT:
NEW(LOW_W MED_W HIGH_W a1b1
LWa2b2 MWa2b2 HWa2b2
LWa1d1b2 MWa1d1b2 HWa1d1b2
IMM_A IMM_B
TOT_LOWW TOT_MEDW TOT_HIW);
LOW_W = #LOWW; ! replace #LOWW in the code with your chosen low value of W
MED_W = #MEDW; ! replace #MEDW in the code with your chosen medium value of W
HIGH_W = #HIGHW; ! replace #HIGHW in the code with your chosen high value of W
! Now calc indirect and total effects for each value of W
a1b1 = a1*b1; ! Specific indirect effect of X on Y via M1 only
! Conditional indirect effects of X on Y via M2 only given values of W
LWa2b2 = a2*b2 + a2*b4*LOW_W;
MWa2b2 = a2*b2 + a2*b4*MED_W;
HWa2b2 = a2*b2 + a2*b4*HIGH_W;
! Conditional indirect effects of X on Y via M1 and M2 given values of W
LWa1d1b2 = a1*d1*b2 + a1*d1*b4*LOW_W;
MWa1d1b2 = a1*d1*b2 + a1*d1*b4*MED_W;
HWa1d1b2 = a1*d1*b2 + a1*d1*b4*HIGH_W;
! Indices of Moderated Mediation
IMM_A = a2*b4;
IMM_B = a1*d1*b4;
! Conditional total effects of X on Y given values of W
TOT_LOWW = LWa1d1b2 + LWa2b2 + a1b1 + cdash;
TOT_MEDW = MWa1d1b2 + MWa2b2 + a1b1 + cdash ;
TOT_HIW = HWa1d1b2 + HWa2b2 + a1b1 + cdash;
! Use loop plot to plot total effect of X on Y for low, med, high values of W
! NOTE  values of 1,5 in LOOP() statement need to be replaced by
! logical min and max limits of predictor X used in analysis
PLOT(LOMOD MEDMOD HIMOD);
LOOP(XVAL,1,5,0.1);
LOMOD = TOT_LOWW*XVAL;
MEDMOD = TOT_MEDW*XVAL;
HIMOD = TOT_HIW*XVAL;
PLOT:
TYPE = plot2;
OUTPUT:
STAND CINT(bcbootstrap);
Return to Model Template index.
To cite this page and/or any code used, please use:
Stride, C.B., Gardner, S., Catley, N. & Thomas, F.(2015) 'Mplus code for the mediation, moderation, and moderated mediation model templates from Andrew Hayes' PROCESS analysis examples', http://www.offbeat.group.shef.ac.uk/FIO/mplusmedmod.htm
