Run the following code to install the development version:
install.packages("piecewiseSEM")
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
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 nonGaussian 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 nonstandard 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
# 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)