Building and Estimating Structural Equation Models

A powerful, easy to syntax for specifying and estimating complex Structural Equation Models. Models can be estimated using Partial Least Squares Path Modeling or Covariance-Based Structural Equation Modeling or covariance based Confirmatory Factor Analysis. Methods described in Ray, Danks, and Valdez (2021).

Build Status

SEMinR brings many advancements to creating and estimating structural equation models (SEM) using Partial Least Squares Path Modeling (PLS-PM):

  • A natural feeling, domain-specific language to build and estimate structural equation models in R
  • Uses variance-based PLS estimation to model both composite and common-factor constructs
  • High-level functions to quickly specify interactions and complicated structural models

SEMinR follows the latest best-practices in methodological literature:

  • Automatically adjusts PLS estimates to ensure consistency (PLSc) wherever common factors are involved
  • Ajusts for known biases in interaction terms in PLS models
  • Continuously tested against leading PLSPM software to ensure parity of outcomes: SmartPLS (Ringle et al., 2015) and ADANCO (Henseler and Dijkstra, 2015), as well as other R packages such as semPLS (Monecke and Leisch, 2012) and matrixpls (Rönkkö, 2016)
  • High performance, multi-core bootstrapping function


The vignette for Seminr can be found in the seminr/inst/doc/ folder or by running the vignette("SEMinR") command after installation.

Demo code for use of Seminr can be found in the seminr/demo/ folder or by running the demo("seminr-contained"), demo("seminr-ecsi") or demo("seminr-interaction") commands after installation.


You can install SEMinR with:



Briefly, there are four steps to specifying and estimating a structural equation model using SEMinR:

1 Describe measurement model for each construct and its items:

measurements <- constructs(
  composite("Image",       multi_items("IMAG", 1:5), weights = mode_B),
  composite("Expectation", multi_items("CUEX", 1:3), weights = mode_A),
  reflective("Loyalty",    multi_items("CUSL", 1:3))

2 Specify any interactions between constructs:

# Easily create orthogonalized or scaled interactions between constructs
intxns <- interactions(
  interaction_ortho("Image", "Expectation")

3 Describe the structural model of causal relationships between constructs (and interactions):

# Quickly create multiple paths "from" and "to" sets of constructs
structure <- relationships(
  paths(from = c("Image", "Expectation", "Image*Expectation"), 
        to = "Loyalty")

4 Put the above elements together to estimate and bootstrap the model:

# Dynamically compose SEM models from individual parts
pls_model <- estimate_pls(data = mobi, measurements, intxns, structure)
# Use multi-core parallel processing to speed up bootstraps
boot_estimates <- bootstrap_model(pls_model, nboot = 1000, cores = 2)


  • Soumya Ray
  • Nicholas Danks


Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


2.3.0 by Nicholas Patrick Danks, 25 days ago

Browse source code at

Authors: Soumya Ray [aut, ths] , Nicholas Patrick Danks [aut, cre] , André Calero Valdez [aut] , Juan Manuel Velasquez Estrada [ctb] , James Uanhoro [ctb] , Johannes Nakayama [ctb] , Lilian Koyan [ctb] , Laura Burbach [ctb] , Arturo Heynar Cano Bejar [ctb] , Susanne Adler [ctb]

Documentation:   PDF Manual  

GPL-3 license

Imports parallel, lavaan, glue, knitr, testthat, rmarkdown, DiagrammeR, DiagrammeRsvg, webp

Enhances rsvg, semPlot, vdiffr

See at CRAN