Learn R Programming

modsem

modsem is an R-package for estimating interaction (i.e., moderation) effects between latent variables in structural equation models (SEMs). See https://www.modsem.org for a tutorial.

Installation

modsem is available on CRAN and GitHub, and can be installed as follows:

# From CRAN 
install.packages("modsem")

# Latest version from GitHub
install.packages("devtools")
devtools::install_github("kss2k/modsem", build_vignettes = TRUE)

Note: The package needs to be compiled from source on macOS and Linux. If you have issues installing the package on macOS, you might need to install the gfortran compiler. A C++ compiler is also required, but should be installed by default on most systems. See the R for macOs page for more information.

Methods/Approaches

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. Different approaches can be categorized into two groups: Product Indicator (PI) and Distribution Analytic (DA) approaches.

Product Indicator (PI) Approaches:

  • "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)

Distribution Analytic (DA) Approaches

  • "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

Examples

Elementary Interaction Model (Kenny & Judd, 1984; Jaccard & Wan, 1995)

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)

Theory Of Planned 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 ~ 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)

Interactions between two observed variables

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)

Copy Link

Version

Install

install.packages('modsem')

Monthly Downloads

416

Version

1.0.7

License

MIT + file LICENSE

Maintainer

Kjell Solem Slupphaug

Last Published

March 27th, 2025

Functions in modsem (1.0.7)

modsem-package

modsem: Latent Interaction (and Moderation) Analysis in Structural Equation Models (SEM)
modsem

Estimate interaction effects in structural equation models (SEMs)
modsem_mplus

Estimation latent interactions through mplus
simple_slopes

Get the simple slopes of a SEM model
plot_jn

Plot Interaction Effect Using the Johnson-Neyman Technique
plot_surface

Plot Surface for Interaction Effects
trace_path

Estimate formulas for (co-)variance paths using Wright's path tracing rules
summary.modsem_da

summary for modsem objects
parameter_estimates

Extract parameterEstimates from an estimated model
var_interactions

Extract or modify parTable from an estimated model with estimated variances of interaction terms
plot_interaction

Plot Interaction Effects in a SEM Model
standardized_estimates

Get standardized estimates
multiplyIndicatorsCpp

Multiply indicators
oneInt

oneInt
modsem_nobs

Wrapper for nobs
modsem_pi

Interaction between latent variables using product indicators
modsem_vcov

Wrapper for vcov
modsemify

Generate parameter table for lavaan syntax
compare_fit

compare model fit for qml and lms models
fit_modsem_da

Fit measures for QML and LMS models
default_settings_pi

default arguments for product indicator approaches
TPB_2SO

TPB_2SO
default_settings_da

default arguments fro LMS and QML approach
TPB_1SO

TPB_1SO
TPB_UK

TPB_UK
TPB

TPB
get_pi_data

Get data with product indicators for different approaches
extract_lavaan

extract lavaan object from modsem object estimated using product indicators
modsem_da

Interaction between latent variables using lms and qml approaches
get_pi_syntax

Get lavaan syntax for product indicator approaches
jordan

Jordan subset of PISA 2006 data
modsem_inspect

Inspect model information
modsem_coef

Wrapper for coef