This is a package which allows you to perform interactions between latent variables (i.e., moderation) in CB-SEM. See https://kss2k.github.io/intro_modsem/ for a tutorial.
# From CRAN
install.packages("modsem")
# Latest version from Github
install.packages("devtools")
devtools::install_github("kss2k/modsem", build_vignettes = TRUE)
There are a number of approaches for estimating interaction effects in SEM. In modsem()
, the method = "method"
argument allows you to choose which to use.
"ca"
= constrained approach (Algina & Moulder, 2001)- Note that constraints can become quite complicated for complex models, particularly when there is an interaction including enodgenous variables. The method can therefore be quite slow.
"uca"
= unconstrained approach (Marsh, 2004)"rca"
= residual centering approach (Little et al., 2006)"dblcent"
= double centering approach (Marsh., 2013)- default
"pind"
= basic product indicator approach (not recommended)"lms"
= The Latent Moderated Structural equations (LMS) approach, see the vignette"qml"
= The Quasi Maximum Likelihood (QML) approach, see the vignette"mplus"
- estimates model through Mplus, if it is installed
- Interaction effects between endogenous and exogenous variables are now possible by default with QML-approach.
- Interaction effects between two endogenous variables are now possible with the LMS and QML approach, using the 'cov.syntax' argument, see the vignette for more information.
- Improved
summary()
function for LMS and QML:- Standardized estimates are now available for the LMS and QML approach,
using the
standardized = TRUE
argument. - The
summary()
function now also returns the RMSEA, Chi-Square, AIC, BIC, and Expected covariance matrix for the LMS and QML approach. - The
summary()
function now resembles the output of thesummary()
function from thelavaan
package.
- Standardized estimates are now available for the LMS and QML approach,
using the
- Added post-estimation functions for LMS and QML:
modsem_inspect()
for inspecting the results of the LMS and QML approachfit_modsem_da()
caluculates a variety of fit indices for the LMS and QML approach, RMSEA, Chi-Square, AIC, BIC, and Expected covariance matrix.vcov()
returns the variance-covariance matrix of the parameter estimates for the LMS and QML approach.coef()
returns the parameter estimates for the LMS and QML approach.
library(modsem)
m1 <- '
# Outer Model
X =~ x1 + x2 +x3
Y =~ y1 + y2 + y3
Z =~ z1 + z2 + z3
# Inner model
Y ~ X + Z + X:Z
'
# Double centering approach
est1_dca <- modsem(m1, oneInt)
summary(est1_dca)
# Constrained approach
est1_ca <- modsem(m1, oneInt, method = "ca")
summary(est1_ca)
# QML approach
est1_qml <- modsem(m1, oneInt, method = "qml")
summary(est1_qml, standardized = TRUE)
# LMS approach
est1_lms <- modsem(m1, oneInt, method = "lms")
summary(est1_lms)
tpb <- "
# Outer Model (Based on Hagger et al., 2007)
ATT =~ att1 + att2 + att3 + att4 + att5
SN =~ sn1 + sn2
PBC =~ pbc1 + pbc2 + pbc3
INT =~ int1 + int2 + int3
BEH =~ b1 + b2
# Inner Model (Based on Steinmetz et al., 2011)
# Causal Relationsships
INT ~ ATT + SN + PBC
BEH ~ INT + PBC
BEH ~ PBC:INT
"
# double centering approach
est_tpb_dca <- modsem(tpb, data = TPB, method = "dblcent")
summary(est_tpb_dca)
# Constrained approach using Wrigths path tracing rules for generating
# the appropriate constraints
est_tpb_ca <- modsem(tpb, data = TPB, method = "ca")
summary(est_tpb_ca)
# LMS approach
est_tpb_lms <- modsem(tpb, data = TPB, method = "lms")
summary(est_tpb_lms, standardized = TRUE)
# QML approach
est_tpb_qml <- modsem(tpb, data = TPB, method = "qml")
summary(est_tpb_qml, standardized = TRUE)
est2 <- modsem('y1 ~ x1 + z1 + x1:z1', data = oneInt, method = "pind")
summary(est2)
## Interaction between an obsereved and a latent variable
m3 <- '
# Outer Model
X =~ x1 + x2 +x3
Y =~ y1 + y2 + y3
# Inner model
Y ~ X + z1 + X:z1
'
est3 <- modsem(m3, oneInt, method = "pind")
summary(est3)