(31 July 2020): lavaan version 0.6-7 has been released on CRAN. See Version History for more information.
(12 Mayer 2020): new package covsim is now available on CRAN. New technology to simulate multivariate non-normal and ordinal data.
(27 Sept 2019): the newest version of the bain package now provides approximate Bayes factors for lavaan SEM models. See the psyarxiv paper here.
(28 Aug 2019): the slides and materials of the IMPS 2019 symposium ‘the lavaan ecosystem’ are available on an OSF page here.
(10 Jun 2018): the blavaan paper (on Bayesian SEM with a lavaan syntax) is published in the Journal of Statistical Software.
(18 Dec 2017): a tutorial on ‘The Pairwise Likelihood Method for Structural Equation Modelling with ordinal variables and data with missing values using the R package lavaan’ prepared by Myrsini Katsikatsou has been added to the (new) tutorial page of the resources section.
(16 July 2017): a recording of my keynote presentation `Structural Equation Modeling: models, software and stories’ given at the useR!2017 Conference is available here.
The lavaan package is developed to provide useRs, researchers and teachers a free open-source, but commercial-quality package for latent variable modeling. You can use lavaan to estimate a large variety of multivariate statistical models, including path analysis, confirmatory factor analysis, structural equation modeling and growth curve models.
The official reference to the lavaan package is the following paper:
Yves Rosseel (2012). lavaan: An R Package for Structural Equation Modeling. Journal of Statistical Software, 48(2), 1-36. URL http://www.jstatsoft.org/v48/i02/
To get a first impression of how lavaan works in practice, consider the following example of a SEM model. The figure below contains a graphical representation of the model that we want to fit.
model <- '
# latent variables
ind60 =~ x1 + x2 + x3
dem60 =~ y1 + y2 + y3 + y4
dem65 =~ y5 + y6 + y7 + y8
# regressions
dem60 ~ ind60
dem65 ~ ind60 + dem60
# residual covariances
y1 ~~ y5
y2 ~~ y4 + y6
y3 ~~ y7
y4 ~~ y8
y6 ~~ y8
'
fit <- sem(model,data=PoliticalDemocracy)
summary(fit)