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 (if installing via GitHub) 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.

If you're using Windows, consider installing OpenBLAS in R for Windows for better perfmance. If you're using a Linux distribution, consider installing the ropenblas package

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" = 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 = "dblcent")
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 = "dblcent", 
               res.cov.method = "none") # res.cov.method = "simple" will lead
                                        # to an unidentifiable model. Instead we
                                        # constrain them to zero
summary(est3)

Copy Link

Version

Install

install.packages('modsem')

Monthly Downloads

758

Version

1.0.13

License

MIT + file LICENSE

Maintainer

Kjell Solem Slupphaug

Last Published

October 7th, 2025

Functions in modsem (1.0.13)

fit_modsem_da

Fit measures for QML and LMS models
modsem_coef

Wrapper for coef
extract_lavaan

extract lavaan object from modsem object estimated using product indicators
jordan

Jordan subset of PISA 2006 data
estimate_h0

Estimate baseline model for modsem models
get_pi_syntax

Get lavaan syntax for product indicator approaches
get_pi_data

Get data with product indicators for different approaches
modsem-package

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

Interaction between latent variables using LMS and QML approaches
modsem

Estimate interaction effects in structural equation models (SEMs)
parameter_estimates

Extract parameterEstimates from an estimated model
modsem_pi

Interaction between latent variables using product indicators
oneInt

oneInt
modsem_nobs

Wrapper for nobs
modsem_mimpute

Estimate a modsem model using multiple imputation
modsemify

Generate parameter table for lavaan syntax
modsem_inspect

Inspect model information
modsem_vcov

Wrapper for vcov
modsem_mplus

Estimation latent interactions through Mplus
modsem_predict

Predict From modsem Models
relcorr_single_item

Reliability‑Corrected Single‑Item SEM
plot_surface

Plot Surface for Interaction Effects
standardize_model

Standardize a fitted modsem_da model
summarize_partable

Summarize a parameter table from a modsem model.
plot_interaction

Plot Interaction Effects in a SEM Model
simple_slopes

Get the simple slopes of a SEM model
summary.modsem_da

summary for modsem objects
set_modsem_colors

Define or disable the color theme used by modsem
standardized_estimates

Get Standardized Estimates
plot_jn

Plot Interaction Effect Using the Johnson-Neyman Technique
var_interactions

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

Estimate interaction effects in structural equation models (SEMs) using a twostep procedure
trace_path

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

TPB_UK
default_settings_da

default arguments fro LMS and QML approach
colorize_output

Capture, colorise, and emit console text
TPB_1SO

TPB_1SO
bootstrap_modsem

Bootstrap a modsem Model
compare_fit

compare model fit for modsem models
TPB

TPB
TPB_2SO

TPB_2SO
default_settings_pi

default arguments for product indicator approaches
centered_estimates

Get Centered Interaction Term Estimates