Learn R Programming

⚠️There's a newer version (2.3.0) of this package.Take me there.

piecewiseSEM: Piecewise Structural Equation Modeling in R

Version 2.1.2

Last updated: 09 December 2020

To install

Run the following code to install the development version:

install.packages("piecewiseSEM")

Getting Help

See our website at (piecewiseSEM)[http://jslefche.github.io/piecewiseSEM/]

There is an online resource available for SEM, including piecewiseSEM and lavaan, available (here)[https://jslefche.github.io/sem_book/]

This version is a major update to the piecewiseSEM package that uses a completely revised syntax that better reproduces the base R syntax and output. It is highly recommended that consult vignette("piecewiseSEM") even if you have used the package before as it documents the many changes.

It also incorporates new functionality in the form of coefficient standardization and updated methods for R^2 for mixed models.

Currently supported model classes: lm, glm, gls, pgls, sarlm, lme, glmmPQL, lmerMod, merModLmerTest, glmerMod

To add a new model class

Frequently, we get requests to add new model classes. We'd like to accommodate wherever we can! Currently, to add a new model class, you will need to update the following functions in the following files:

  • In coefs.R - getCoefficients() - will need a method to generate a standardized coefficient table from your class - GetSDy() - will need a method to get the proper SD of y, particularly for non-Gaussian error families
  • In helpers.R - GetSingleData() - need a method to get a data frame from your class type - GetOLRE() - if your class has random effects, will need a method to get observation level random effects - nObs() - if your class has a non-standard way to get the number of observations, will need it here. - You might need to write a all.vars method for you class. See all.vars.merMod() as an example.
  • In psem.R - evaluateClasses() - so we know that this class can work in piecewiseSEM
  • In rsquared.R - rsquared() - what function should be used to get the rsquared for your model class? - Will need an rsquared.youclass() method to get the R^2

Example

# Install development branch from github
library(devtools)
install_github("jslefche/piecewiseSEM@devel", build_vignette = TRUE)

# Load library
library(piecewiseSEM)

# Read vignette
vignette("piecewiseSEM")

# Create fake data
set.seed(1)

data <- data.frame(
  x = runif(100),
  y1 = runif(100),
  y2 = rpois(100, 1),
  y3 = runif(100)
)

# Store in SEM list
modelList <- psem(
  lm(y1 ~ x, data),
  glm(y2 ~ x, "poisson", data),
  lm(y3 ~ y1 + y2, data),
  data
)

# Run summary
summary(modelList)

# Address conflict using conserve = T
summary(modelList, conserve = T)

# Address conflict using direction = c()
summary(modelList, direction = c("y2 <- y1"))

# Address conflict using correlated errors
modelList2 <- update(modelList, y2 %~~% y1)

summary(modelList2)

Copy Link

Version

Install

install.packages('piecewiseSEM')

Monthly Downloads

2,735

Version

2.1.2

License

GPL-3

Maintainer

Jon Lefcheck

Last Published

December 9th, 2020

Functions in piecewiseSEM (2.1.2)

BIC.psem

Generalized function for SEM BIC score
GetData

Get data from model list
AIC.psem

Generalized function for SEM AIC(c) score
GetVarCov

Get random effects variance-covariance from lme
GetSingleData

Get data from one model
all.vars_notrans

Get vector of untransformed variables
GetSDx

Get standard deviation of predictor variables
all.vars.merMod

Remove random effects from all.vars
GetOLRE

Obtain (observation-level) random effects from a generalized linear mixed model
GetSDy

Properly scale standard deviations depending on the error distribution
anovaTable

Single anova
anovaLRT

Chi-square difference test
all.vars_trans

Get vector of transformed variables
dupOutput

Identify duplicate output
meadows

Data set from Grace & Jutila (1999)
evaluateClasses

Evaluate model classes and stop if unsupported model class
listFormula

Recompute P-values using Kenward-Rogers approximation
%~~%

Correlated error operator
partialResid

Computing partial effects
anova.psem

ANOVA and chi-squared difference test for model comparison
as.psem

Convert list to psem object
get_response

Get Response Name as a Character
cerror

Correlated errors
coefs

Extract path coefficients
findbars.lme

Get random effects from lme
filterInteractions

Filter interactions from the d-sep tests
captureTable

Captures output table
cbind_fill

Bind data.frames of differing dimensions
filterExisting

Remove existing paths from the basis set
filterExogenous

Filter relationships among exogenous variables from the basis set (ignoring add.vars)
dSep

Tests of directed separation
piecewiseSEM-package

Piecewise Structural Equation Modeling
dataTrans

Transform variables based on model formula and store in new data frame
basisSet

Derivation of the basis set
fisherC

Summarize tests of directed separation using Fisher's C statistic
formatpsem

Format for psem
getDAG

Generate adjacency matrix from list of structural equations
getAnova

Get ANOVA results from `merMod`
resid.lme

Get residuals from innermost grouping of mixed models (replicate-level)
getResidModels

Identify models with correlated errors and return modified versions
residuals.psem

Residual values from fit models
removeCerror

Remove correlated errors from the basis set
isSig

Assess significance
keeley

Data set from Grace & Keeley (2006)
multigroup

Multigroup Analysis for Piecewise SEM
nObs

Get number of observations from a model
getCoefficients

Get coefficients from linear regression
scaleInt

Calculate standard deviation or relevant range for interaction terms
shipley

Data set from Shipley (2006)
plot.psem

Plotting of Piecewise Structural Equation Models
print.anova.psem

Print anova
infCrit

Information criterion values for SEM
handleCategoricalCoefs

Handles putting categorical variables into coefficient tables for easy use in path analysis
psem

Fitting piecewise structural equation models
print.summary.psem

Print summary
onlyBars

Get random effects from merMod
rsquared.lme

R^2 for lme objects
removeData

Remove data from the model list
rsquared.glmerMod

R^2 for glmer objects
rsquared.merMod

R^2 for phylolm objects
sortDag

Sort DAG based on ancestry
print.psem

Print psem
reverseAddVars

Replace transformations in the basis set by cycling through neighbors and applying transformations in order of how variables are treated in the child nearest to current node
print.multigroup.psem

Print multigroup
update.psem

Update psem model object with additional values.
rsquared.glmmPQL

R^2 for glmmPQL objects
stdCoefs

Calculate standardized regression coefficients
partialCorr

Calculate partial correlations from partial residuals
unstdCoefs

Get raw (undstandardized) coefficients from model
reverseNonLin

If intermediate endogenous variables are nonlinear, return both directions
stripTransformations

Strip transformations
summary.psem

Summarizing piecewise structural equation models
print.basisSet

Print basis set
print.attr

Do not print attributes with custom functions
specifyDir

Remove duplicate items from the basis set whose direction is not a priori specified
rsquared.lm

R^2 for lm objects
rsquared

R-squared for linear regression
rsquared.negbin

R^2 for negbin objects
rsquared.glm

R^2 for glm objects
scaleGLM

Compute standard deviation or relevant range of response for GLMs
rsquared.gls

R^2 for gls objects
testBasisSetElements

Evaluate conditional independence claim from the basis set