library(modsem)
By default, modsem()
creates product indicators for you
based on the interaction specified in your model. Behind the scenes,
modsem()
generates a total of 9 variables (product
indicators) that are used as the indicators for your latent product.
<- '
m1 # Outer Model
X =~ x1 + x2 + x3
Y =~ y1 + y2 + y3
Z =~ z1 + z2 + z3
# Inner model
Y ~ X + Z + X:Z
'
<- modsem(m1, oneInt)
est1 cat(est1$syntax)
While this is often sufficient, you might want more control over how
these indicators are created. In general, modsem()
offers
two mechanisms for controlling the creation of product indicators: 1. By
specifying the measurement model for your latent product yourself. 2. By
using the mean()
and sum()
functions,
collectively known as parceling operations.
By default, modsem()
creates all possible combinations
of product indicators. However, another common approach is to match the
indicators by order. For example, let’s say you have an interaction
between the latent variables X
and Z
:
X =~ x1 + x2
and Z =~ z1 + z2
. By default, you
would get XZ =~ x1z1 + x1z2 + x2z1 + x2z2
. If you prefer to
use the matching approach, you would expect
XZ =~ x1z1 + x2z2
instead. To achieve this, you can use the
match = TRUE
argument.
<- '
m2 # Outer Model
X =~ x1 + x2
Y =~ y1 + y2
Z =~ z1 + z2
# Inner model
Y ~ X + Z + X:Z
'
<- modsem(m2, oneInt, match = TRUE)
est2 summary(est2)
If you want even more control, you can use the
get_pi_syntax()
and get_pi_data()
functions to
extract the modified syntax and data from modsem()
,
allowing you to modify them as needed. This can be particularly useful
in cases where you want to estimate a model using a feature in
lavaan
that isn’t available in modsem()
.
For example, the syntax for ordered and multigroup models (as of now)
isn’t as flexible in modsem()
as it is in
lavaan
. You can modify the auto-generated syntax (along
with the altered dataset) from modsem()
to suit your
needs.
<- '
m3 # Outer Model
X =~ x1 + x2
Y =~ y1 + y2
Z =~ z1 + z2
# Inner model
Y ~ X + Z + X:Z
'
<- get_pi_syntax(m3)
syntax cat(syntax)
<- get_pi_data(m3, oneInt)
data head(data)