EVAL_DEFAULT <- FALSE knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = EVAL_DEFAULT )
library(modsem)
Both the LMS
and QML
approaches work on most models, but interaction effects with endogenous variables can be tricky to estimate (see the vignette). Both approaches, particularly the LMS
approach, are computationally intensive and are partially implemented in C++ (using Rcpp
and RcppArmadillo
). Additionally, starting parameters are estimated using the double-centering approach, and the means of the observed variables are used to generate good starting parameters for faster convergence. If you want to monitor the progress of the estimation process, you can use verbose = TRUE
.
Here is an example of the LMS
approach for a simple model. By default, the summary()
function calculates fit measures compared to a null model (i.e., the same model without an interaction term).
library(modsem) m1 <- ' # Outer Model X =~ x1 X =~ x2 + x3 Z =~ z1 + z2 + z3 Y =~ y1 + y2 + y3 # Inner Model Y ~ X + Z Y ~ X:Z ' lms1 <- modsem(m1, oneInt, method = "lms") summary(lms1, standardized = TRUE) # Standardized estimates
Here is the same example using the QML
approach:
qml1 <- modsem(m1, oneInt, method = "qml") summary(qml1)
Below is an example of a more complex model based on the theory of planned behavior (TPB), which includes two endogenous variables and an interaction between an endogenous and exogenous variable. When estimating more complex models with the LMS
approach, it is recommended to increase the number of nodes used for numerical integration. By default, the number of nodes is set to 16, but this can be increased using the nodes
argument. The nodes
argument has no effect on the QML
approach.
When there is an interaction effect between an endogenous and exogenous variable, it is recommended to use at least 32 nodes for the LMS
approach. You can also obtain robust standard errors by setting robust.se = TRUE
in the modsem()
function.
Note: If you want the LMS
approach to produce results as similar as possible to Mplus, you should increase the number of nodes (e.g., nodes = 100
).
# ATT = Attitude # PBC = Perceived Behavioral Control # INT = Intention # SN = Subjective Norms # BEH = Behavior 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 BEH ~ INT:PBC ' lms2 <- modsem(tpb, TPB, method = "lms", nodes = 32) summary(lms2) qml2 <- modsem(tpb, TPB, method = "qml") summary(qml2, standardized = TRUE) # Standardized estimates
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.