modsem
introduces a new feature to the
lavaan
syntax—the semicolon operator (:
). The
semicolon operator works the same way as in the lm()
function. To specify an interaction effect between two variables, you
join them by Var1:Var2
.
Models can be estimated using one of the product indicator approaches
("ca"
, "rca"
, "dblcent"
,
"pind"
) or by using the latent moderated structural
equations approach ("lms"
) or the quasi maximum likelihood
approach ("qml"
). The product indicator approaches are
estimated via lavaan
, while the lms
and
qml
approaches are estimated via modsem
itself.
Here is a simple example of how to specify an interaction effect
between two latent variables in lavaan
.
m1 <- '
# Outer Model
X =~ x1 + x2 + x3
Y =~ y1 + y2 + y3
Z =~ z1 + z2 + z3
# Inner Model
Y ~ X + Z + X:Z
'
est1 <- modsem(m1, oneInt)
summary(est1)
By default, the model is estimated using the "dblcent"
method. If you want to use another method, you can change it using the
method
argument.
modsem
allows you to estimate interactions between not
only latent variables but also observed variables. Below, we first run a
regression with only observed variables, where there is an interaction
between x1
and z2
, and then run an equivalent
model using modsem()
.
modsem
modsem
can also be used to to estimate interaction
effects between observed variables. Interaction effects with observed
variables are not supported by the LMS
and QML
approaches. In most cases, you can define a latent variable with a
single indicator to estimate the interaction effect between two observed
variables in the LMS
and QML
approaches.
modsem
also allows you to estimate interaction effects
between latent and observed variables. To do so, simply join a latent
and an observed variable with a colon (e.g.,
'latent:observed'
). In most of the product indicator
approaches the residuals of product indicators with common variables
(e.g., x1z1
and x1z2
) are allowed to covary
freely. This is problematic when there is an interaction term between an
observed variable (or a latent variable with a single indicator) and a
latent variables (with multiple indicators), since all of the product
indicators share a common element.
In the example below, all the generated product indicators
(x1z1
, x2z1
and x3z1
) share
z1
. If all the indicator residuals of a latent variabel are
allowed to covary freely, the model will (in general) be unidenfified.
The simplest way to fix this issue, is to constrain the residual
covariances to be zero, by using the res.cov.method
argument.
Quadratic effects are essentially a special case of interaction
effects. Thus, modsem
can also be used to estimate
quadratic effects.
Here is a more complex example using the theory of planned behavior (TPB) model.
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)
INT ~ ATT + SN + PBC
BEH ~ INT + PBC + INT:PBC
'
# The double-centering approach
est_tpb <- modsem(tpb, TPB)
# Using the LMS approach
est_tpb_lms <- modsem(tpb, TPB, method = "lms")
summary(est_tpb_lms)
Here is an example that includes two quadratic effects and one
interaction effect, using the jordan
dataset. The dataset
is a subset of the PISA 2006 dataset.
m2 <- '
ENJ =~ enjoy1 + enjoy2 + enjoy3 + enjoy4 + enjoy5
CAREER =~ career1 + career2 + career3 + career4
SC =~ academic1 + academic2 + academic3 + academic4 + academic5 + academic6
CAREER ~ ENJ + SC + ENJ:ENJ + SC:SC + ENJ:SC
'
est_jordan <- modsem(m2, data = jordan)
est_jordan_qml <- modsem(m2, data = jordan, method = "qml")
summary(est_jordan_qml)