Mplus code for mediation, moderation, and moderated mediation models
Model 59: 1 or more mediators, in parallel if multiple (example uses 1), 1 moderators, which moderates all of the IVMediator path, the MediatorDV path and the direct IVDV path
Example Variables:
1 predictor X, 1 mediator M, 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 + b1M + b2MW + c1'X + c2'W + c3'XW
M = a0 + a1X + a2W + a3XW
Algebra to calculate indirect and/or conditional effects by writing model as Y = a + bX:
Y = b0 + b1M + b2MW + c1'X + c2'W + c3'XW
M = a0 + a1X + a2W + a3XW
Hence... substituting in equation for M
Y = b0 + b1(a0 + a1X + a2W + a3XW) + b2(a0 + a1X + a2W + a3XW)W + c1'X + c2'W + c3'XW
Hence... multiplying out brackets
Y = b0 + a0b1 + a1b1X + a2b1W + a3b1XW + a0b2W + a1b2XW + a2b2WW + a3b2XWW + c1'X + c2'W + c3'XW
Hence... grouping terms into form Y = a + bX
Y = (b0 + a0b1 + a2b1W + a0b2W + a2b2WW + c2'W) + (a1b1 + a3b1W + a1b2W + a3b2WW + c1' + c3'W)X
Hence...
One indirect effect(s) of X on Y, conditional on W:
a1b1 + a3b1W + a1b2W + a3b2WW = (a1 + a3W)(b1 + b2W)
One direct effect of X on Y, conditional on W:
c1' + c3'W
Mplus code for the model:
! Predictor variable  X
! Mediator variable(s) – M
! Moderator variable(s) – W
! Outcome variable  Y
USEVARIABLES = X M W Y XW MW;
! Create interaction terms
! Note that they have to be placed at end of USEVARIABLES subcommand above
DEFINE:
MW = M*W;
XW = X*W;
ANALYSIS:
TYPE = GENERAL;
ESTIMATOR = ML;
BOOTSTRAP = 10000;
! In model statement name each path and intercept using parentheses
MODEL:
[Y] (b0);
Y ON M (b1);
Y ON MW (b2);
Y ON X (cdash1);
Y ON W (cdash2);
Y ON XW (cdash3);
[M] (a0);
M ON X (a1);
M ON W (a2);
M ON XW (a3);
! Use model constraint subcommand to test conditional indirect effects
! You need to pick low, medium and high moderator values for W
! for example, of 1 SD below mean, mean, 1 SD above mean
! 1 moderator, 3 values for it
! arbitrary naming convention for conditional indirect and total effects used below:
! MED_Q = medium value of Q, etc.
MODEL CONSTRAINT:
NEW(LOW_W MED_W HIGH_W IND_LOWW IND_MEDW IND_HIW IMM_LOW IMM_MEDW IMM_HIW DIR_LOWW DIR_MEDW DIR_HIW 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
! Calc conditional indirect effects for each combination of moderator values ! and index/indices of moderated mediation
IND_LOWW = a1*b1 + a3*b1*LOW_W + a1*b2*LOW_W + a3*b2*LOW_W*LOW_W; IND_MEDW = a1*b1 + a3*b1*MED_W + a1*b2*MED_W + a3*b2*MED_W*MED_W; IND_HIW = a1*b1 + a3*b1*HIGH_W + a1*b2*HIGH_W + a3*b2*HIGH_W*HIGH_W; IMM_LOW = a3*b1 + a1*b2 + a3*b2*LOW_W; IMM_MEDW = a3*b1 + a1*b2 + a3*b2*MED_W; IMM_HIW = a3*b1 + a1*b2 + a3*b2*HIGH_W;
! Calc conditional direct effects for each combination of moderator values
DIR_LOWW = cdash1 + cdash3*LOW_W; DIR_MEDW = cdash1 + cdash3*MED_W; DIR_HIW = cdash1 + cdash3*HIGH_W;
! Calc conditional total effects for each combination of moderator values
TOT_LOWW = IND_LOWW + DIR_LOWW;
TOT_MEDW = IND_MEDW + DIR_MEDW;
TOT_HIW = IND_HIW + DIR_HIW;
! Use loop plot to plot conditional indirect effect of X on Y for each combination of low, med, high moderator values
! Could be edited to show conditional direct or conditional total effects instead
! 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 = IND_LOWW*XVAL; MEDMOD = IND_MEDW*XVAL; HIMOD = IND_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.figureitout.org.uk
