modsem
modsem is anR-package for estimatinginteraction (i.e., moderation) effects between latent variables instructural equation models (SEMs). See https://www.modsem.org for atutorial.
modsem is available onCRAN andGitHub, and can be installed as follows:
# From CRANinstall.packages("modsem")# Latest version from GitHubinstall.packages("devtools")devtools::install_github("kss2k/modsem",build_vignettes =TRUE)Note: The package needs to be compiled from sourceonmacOS (if installing viaGitHub) andLinux. If you have issues installing the package onmacOS, you might need to install thegfortrancompiler. AC++ compiler is also required, but should beinstalled by default on most systems. See theR for macOs pagefor more information.
If you’re usingWindows, consider installingOpenBLAS in R for Windowsfor better perfmance. If you’re using aLinux distribution,consider installing theropenblaspackage
There are a number of approaches for estimating interaction effectsin SEM. Inmodsem(), themethod = "method"argument allows you to choose which to use. Different approaches can becategorized into two groups: Product Indicator (PI) and DistributionAnalytic (DA) approaches.
"ca" = constrained approach (Algina & Moulder,2001)"uca" = unconstrained approach (Marsh, 2004)"rca" = residual centering approach (Little et al.,2006)"dblcent" = double centering approach (Marsh., 2013)"pind" = basic product indicator approach (notrecommended)"lms" = The Latent Moderated Structural equations (LMS)approach, see thevignette"qml" = The Quasi Maximum Likelihood (QML) approach,see thevignette"mplus" =MplusMplus, if it is installedlibrary(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 approachest1_dca<-modsem(m1, oneInt)summary(est1_dca)# Constrained approachest1_ca<-modsem(m1, oneInt,method ="ca")summary(est1_ca)# QML approachest1_qml<-modsem(m1, oneInt,method ="qml")summary(est1_qml,standardized =TRUE)# LMS approachest1_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) INT ~ ATT + SN + PBC BEH ~ INT + PBC BEH ~ PBC:INT"# double centering approachest_tpb_dca<-modsem(tpb,data = TPB,method ="dblcent")summary(est_tpb_dca)# Constrained approach using Wrigths path tracing rules for generating# the appropriate constraintsest_tpb_ca<-modsem(tpb,data = TPB,method ="ca")summary(est_tpb_ca)# LMS approachest_tpb_lms<-modsem(tpb,data = TPB,method ="lms")summary(est_tpb_lms,standardized =TRUE)# QML approachest_tpb_qml<-modsem(tpb,data = TPB,method ="qml")summary(est_tpb_qml,standardized =TRUE)est2<-modsem('y1 ~ x1 + z1 + x1:z1',data = oneInt,method ="dblcent")summary(est2)m3<-' # Outer Model X =~ x1 + x2 + x3 Y =~ y1 + y2 + y3 # Inner model Y ~ X + z1 + X:z1'est3<-modsem(m3, oneInt,method ="dblcent",res.cov.method ="none")# res.cov.method = "simple" will lead# to an unidentifiable model. Instead we# constrain them to zerosummary(est3)