(Version 0.2.4, updated on 2024-10-04, release history)
Functions for estimating indirect effects, conditional indirect effects, and conditional effects in a model with moderation, mediation, and/or moderated mediation fitted by structural equation modelling (SEM) or estimated by multiple regression. The package was introduced in:
Compute an unstandardized or standardized indirect effect or conditional indirect effect in a path model.
Form the confidence interval for this effect.
Nonparametric bootstrapping is fully supported, while Monte Carlo is
supported for models fitted by lavaan::sem()
.
Multigroup models fitted by lavaan::sem()
are also
supported in 0.1.14.2 and later versions. Details can be found in this
article.
A Simpler Workflow
No need to define any parameters or similar code when fitting a model
in lavaan::sem()
. Just focus on fitting the model first.
After a model has been selected, users can compute the effect for nearly
any path, from nearly any variable, to nearly any other variables,
conditional on nearly any moderators, and at any levels of the
moderators. (See vignette("manymome")
for details.) This is
particularly convenient for multigroup models fitted by
lavaan::sem()
, which are supported in 0.1.14.2 and later
versions (see this
guide, for an illustration).
Supports Both SEM-Based and Regression-Based Analysis
Supports structural equation models fitted by
lavaan::sem()
or by path models fitted by regression using
lm()
, although the focus of this package is on structural
equation models. The interface of the main functions are nearly the same
for both approaches.
Flexible in the Form of Models
No limit on the number of predictors, mediators, and outcome
variables, other than those by lavaan::sem()
and
lm()
. For multigroup models fitted by
lavaan::sem()
, there is no inherent limit on the number of
groups, other than the limit due to `lavaan::sem(), if any (supported in
0.1.14.2 and later versions).
Supports Standardized Effects
Can estimate standardized indirect effects and standardized conditional indirect effects without the need to standardize the variables. The bootstrap and Monte Carlo confidence intervals for standardized effects correctly take into account the sampling variation of the standardizers (the standard deviations of the predictor and the outcome variable) by recomputing them in each bootstrap sample or replication.
Supports Missing Data
Supports datasets with missing data through
lavaan::sem()
with full information maximum likelihood
(fiml
).
In version 0.1.9.8 or later, it also supports missing data handled by
multiple imputation if the models are fitted by
semTools::sem.mi()
or semTools::runMI()
(see
vignette("do_mc_lavaan_mi")
).
Supports Numeric and Categorical Moderators
Supports numeric and categorical moderators. It has a function
(factor2var()
) for the easy creation of dummy variables in
lavaan::sem()
, and can also capitalize on the native
support of categorical moderators in lm()
.
Less Time for Bootstrapping
Bootstrapping, which can be time consuming, can be conducted just
once. The main functions for computing indirect effects and conditional
indirect effects can be called as many times as needed without redoing
bootstrapping because they can reuse pregenerated bootstrap estimates
(see vignette("manymome")
and
vignette("do_boot")
).
Supports Latent Variables Mediation
Supports indirect effects among latent variables for models fitted by
lavaan::sem()
(see
vignette("med_lav")
).
Support Treating Group As a Moderator
For multigroup models fitted by lavaan::sem()
, it
supports comparing the direct or indirect effects along any path between
any two groups. That is, it uses the grouping variable as a moderator
(illustrated here;
supported in 0.1.14.2 and later versions).
Despite the aforementioned advantages, the current version of
manymome
has the following limitations:
Does not (officially) support categorical
x
-variables with more than two categories. Note that most
functions will work with dichotomous x
-variables, and the
effect of x
is simply the difference in predicted
y
between the two levels if coded as 0 and 1 (or any coding
with a difference of 1, e.g., 1 and 2).
Does not support multilevel models (although lavaan
does).
For bootstrapping, only supports nonparametric bootstrapping, and supports only percentile and bias-corrected confidence interval. Does not support other bootstrapping methods such parametric bootstrapping.
Only supports OLS estimation when lm()
is
used.
We would add more to this list (suggestions are welcomed by adding GitHub issues) so that users (and we) know when other
tools should be used instead of manymome
, or whether we can
address these limitations in manymome
in the future.
A good starting point is the Get-Started article
(vignette("manymome")
).
There are also articles
(vignettes) on special topics, such as how to use
mod_levels()
to set the levels of the moderators. More will
be added.
For more information on this package, please visit its GitHub page:
https://sfcheung.github.io/manymome/
The stable version at CRAN can be installed by
install.packages()
:
install.packages("manymome")
The latest developmental-but-stable version at GitHub can be
installed by remotes::install_github()
:
::install_github("sfcheung/manymome") remotes
We developed the package stdmod
in
2021 for moderated regression. We included a function
(stdmod::stdmod_lavaan()
) for standardized moderation
effect in path models fitted by lavaan::sem()
. However, in
practice, path models nearly always included indirect effects and so
moderated mediation is common in path models. Moreover,
stdmod
is intended for moderated regression, not for
structural equation modeling. We thought perhaps we could develop a more
general tool for models fitted by structural equation modelling based on
the interface we used in stdmod::stdmod_lavaan()
. In our
own projects, we also need to estimate indirect effects in models
frequently. Large sample sizes with missing data are also common to us,
for which bootstrapping is slow even with parallel processing.
Therefore, we developed manymome
to address these
needs.
If you have any suggestions and found any bugs or limitations, please feel feel to open a GitHub issue. Thanks.
https://github.com/sfcheung/manymome/issues