# Mediation

Consider a classical mediation setup with three variables: Y is the dependent variable, X is the predictor, and M is a mediator. For illustration, we create a toy dataset containing these three variables, and fit a path analysis model that includes the direct effect of X on Y and the indirect effect of X on Y via M.

``````set.seed(1234)
X <- rnorm(100)
M <- 0.5*X + rnorm(100)
Y <- 0.7*M + rnorm(100)
Data <- data.frame(X = X, Y = Y, M = M)
model <- ' # direct effect
Y ~ c*X
# mediator
M ~ a*X
Y ~ b*M
# indirect effect (a*b)
ab := a*b
# total effect
total := c + (a*b)
'
fit <- sem(model, data = Data)
summary(fit)``````
``````lavaan 0.6.17.1968 ended normally after 1 iteration

Estimator                                         ML
Optimization method                           NLMINB
Number of model parameters                         5

Number of observations                           100

Model Test User Model:

Test statistic                                 0.000
Degrees of freedom                                 0

Parameter Estimates:

Standard errors                             Standard
Information                                 Expected
Information saturated (h1) model          Structured

Regressions:
Estimate  Std.Err  z-value  P(>|z|)
Y ~
X          (c)    0.036    0.104    0.348    0.728
M ~
X          (a)    0.474    0.103    4.613    0.000
Y ~
M          (b)    0.788    0.092    8.539    0.000

Variances:
Estimate  Std.Err  z-value  P(>|z|)
.Y                 0.898    0.127    7.071    0.000
.M                 1.054    0.149    7.071    0.000

Defined Parameters:
Estimate  Std.Err  z-value  P(>|z|)
ab                0.374    0.092    4.059    0.000
total             0.410    0.125    3.287    0.001``````

The example illustrates the use of the `":="` operator in the lavaan model syntax. This operator ‘defines’ new parameters which take on values that are an arbitrary function of the original model parameters. The function, however, must be specified in terms of the parameter labels that are explicitly mentioned in the model syntax. By default, the standard errors for these defined parameters are computed by using the so-called Delta method. As with other models, bootstrap standard errors can be requested simply by specifying `se = "bootstrap"` in the fitting function.