| Title: | Simple Mediation and Moderation Analysis |
|---|---|
| Description: | This toolbox allows you to do simple mediation and moderation analysis. Models are estimated with the 'lavaan' package by Rosseel (2012) <doi:10.18637/jss.v048.i02>; standard errors for the mediation estimates are computed with the delta method following Sobel (1982) <doi:10.2307/270723> or by bootstrapping. It is also available as a module for 'jamovi' (see <https://www.jamovi.org> for more information). You can find an in depth tutorial on the 'lavaan' model syntax used for this package on <https://lavaan.ugent.be/tutorial/index.html>. |
| Authors: | Ravi Selker [aut, cre] |
| Maintainer: | Ravi Selker <[email protected]> |
| License: | GPL (>= 2) |
| Version: | 1.2.0 |
| Built: | 2026-07-16 08:49:59 UTC |
| Source: | https://github.com/raviselker/medmod |
This toolbox allows you to do simple mediation and moderation analysis. Models are estimated with the 'lavaan' package by Rosseel (2012) doi:10.18637/jss.v048.i02; standard errors for the mediation estimates are computed with the delta method following Sobel (1982) doi:10.2307/270723 or by bootstrapping. It is also available as a module for 'jamovi' (see https://www.jamovi.org for more information). You can find an in depth tutorial on the 'lavaan' model syntax used for this package on https://lavaan.ugent.be/tutorial/index.html.
| Simple mediation analysis | med() |
| Simple moderation analysis | mod()
|
Maintainer: Ravi Selker [email protected]
Authors:
Ravi Selker [email protected]
Useful links:
Simple mediation analysis. Estimates the indirect, direct and total effects of a model in which a predictor influences the dependent variable through a mediator. The model is fitted with the lavaan package (Rosseel, 2012); standard errors are computed with the delta method (equivalent to the Sobel test for the indirect effect) or by bootstrapping. Optionally provides the individual path estimates, an estimate plot, and an annotated path diagram of the model.
med( data, dep, med, pred, estMethod = "standard", bootstrap = 1000, test = TRUE, ci = FALSE, ciWidth = 95, pm = FALSE, paths = FALSE, label = FALSE, estPlot = FALSE, pathDiagram = FALSE, pathDiagramLabel = TRUE, pathDiagramEst = TRUE, pathDiagramSig = TRUE )med( data, dep, med, pred, estMethod = "standard", bootstrap = 1000, test = TRUE, ci = FALSE, ciWidth = 95, pm = FALSE, paths = FALSE, label = FALSE, estPlot = FALSE, pathDiagram = FALSE, pathDiagramLabel = TRUE, pathDiagramEst = TRUE, pathDiagramSig = TRUE )
data |
the data as a data frame |
dep |
a string naming the dependent variable |
med |
a string naming the mediator variable |
pred |
a string naming the predictor variable |
estMethod |
|
bootstrap |
a number between 1 and 100000 (default: 1000) specifying the number of samples that need to been drawn in the bootstrap method |
test |
|
ci |
|
ciWidth |
a number between 50 and 99.9 (default: 95) specifying the
confidence interval width that is used as |
pm |
|
paths |
|
label |
|
estPlot |
|
pathDiagram |
|
pathDiagramLabel |
|
pathDiagramEst |
|
pathDiagramSig |
|
A results object containing:
results$med |
a table containing mediation estimates | ||||
results$paths |
a table containing the individual path estimates | ||||
results$pathDiagram |
an image | ||||
results$estPlot |
an image | ||||
results$modelSyntax |
the lavaan syntax used to fit the mediation model |
Tables can be converted to data frames with asDF or as.data.frame. For example:
results$med$asDF
as.data.frame(results$med)
set.seed(1234) X <- rnorm(100) M <- 0.5*X + rnorm(100) Y <- 0.7*M + rnorm(100) dat <- data.frame(X=X, M=M, Y=Y) med(dat, dep = "Y", pred = "X", med = "M") # # Mediation Estimates # ----------------------------------------------------- # Effect Estimate SE Z p # ----------------------------------------------------- # Indirect 0.3736 0.0920 4.059 < .001 # Direct 0.0364 0.1044 0.348 0.728 # Total 0.4100 0.1247 3.287 0.001 # ----------------------------------------------------- # #set.seed(1234) X <- rnorm(100) M <- 0.5*X + rnorm(100) Y <- 0.7*M + rnorm(100) dat <- data.frame(X=X, M=M, Y=Y) med(dat, dep = "Y", pred = "X", med = "M") # # Mediation Estimates # ----------------------------------------------------- # Effect Estimate SE Z p # ----------------------------------------------------- # Indirect 0.3736 0.0920 4.059 < .001 # Direct 0.0364 0.1044 0.348 0.728 # Total 0.4100 0.1247 3.287 0.001 # ----------------------------------------------------- # #
Simple moderation analysis. Estimates a model in which the effect of a predictor on the dependent variable depends on the value of a moderator, testing the main effects of predictor and moderator and their interaction. All variables are mean-centered before the model is fitted with the lavaan package (Rosseel, 2012); standard errors are computed with the delta method or by bootstrapping. Optionally provides a simple slope analysis with a corresponding plot, and an annotated path diagram of the model.
mod( data, dep, mod, pred, estMethod = "standard", bootstrap = 1000, label = FALSE, test = TRUE, ci = FALSE, ciWidth = 95, pathDiagram = FALSE, pathDiagramLabel = TRUE, pathDiagramEst = TRUE, pathDiagramSig = TRUE, pathDiagramMainEffect = FALSE, simpleSlopeEst = FALSE, simpleSlopePlot = FALSE )mod( data, dep, mod, pred, estMethod = "standard", bootstrap = 1000, label = FALSE, test = TRUE, ci = FALSE, ciWidth = 95, pathDiagram = FALSE, pathDiagramLabel = TRUE, pathDiagramEst = TRUE, pathDiagramSig = TRUE, pathDiagramMainEffect = FALSE, simpleSlopeEst = FALSE, simpleSlopePlot = FALSE )
data |
the data as a data frame |
dep |
a string naming the dependent variable |
mod |
a string naming the moderator variable |
pred |
a string naming the predictor variable |
estMethod |
|
bootstrap |
a number between 1 and 100000 (default: 1000) specifying the number of samples that need to been drawn in the bootstrap method |
label |
|
test |
|
ci |
|
ciWidth |
a number between 50 and 99.9 (default: 95) specifying the
confidence interval width that is used as |
pathDiagram |
|
pathDiagramLabel |
|
pathDiagramEst |
|
pathDiagramSig |
|
pathDiagramMainEffect |
|
simpleSlopeEst |
|
simpleSlopePlot |
|
A results object containing:
results$mod |
a table containing moderation estimates | ||||
results$pathDiagram |
an image | ||||
results$simpleSlope$estimates |
a table containing the simple slope estimates | ||||
results$simpleSlope$plot |
an image | ||||
results$modelSyntax |
the lavaan syntax used to fit the moderation model |
Tables can be converted to data frames with asDF or as.data.frame. For example:
results$mod$asDF
as.data.frame(results$mod)
set.seed(1234) X <- rnorm(100) M <- rnorm(100) X_M <- X*M Y <- 0.7*X + 0.1*M + 4.2*X_M + rnorm(100) dat <- data.frame(X=X, M=M, Y=Y) mod(dat, dep = "Y", pred = "X", mod = "M") # # Moderation Estimates # -------------------------------------------------- # Estimate SE Z p # -------------------------------------------------- # X 0.951 0.0965 9.86 < .001 # M -0.471 0.0923 -5.10 < .001 # X:M 4.185 0.1009 41.50 < .001 # -------------------------------------------------- # #set.seed(1234) X <- rnorm(100) M <- rnorm(100) X_M <- X*M Y <- 0.7*X + 0.1*M + 4.2*X_M + rnorm(100) dat <- data.frame(X=X, M=M, Y=Y) mod(dat, dep = "Y", pred = "X", mod = "M") # # Moderation Estimates # -------------------------------------------------- # Estimate SE Z p # -------------------------------------------------- # X 0.951 0.0965 9.86 < .001 # M -0.471 0.0923 -5.10 < .001 # X:M 4.185 0.1009 41.50 < .001 # -------------------------------------------------- # #