(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.

(25 February 2017): version 0.5-23.1097 has been released on CRAN. See Version History for more information.

(24 September 2016): version 0.5-22 has been released on CRAN. See Version History for more information. This update brings back the 'scaled' CFI/TLI/RMSEA values, and prints the robust versions on a separate line.

(24 September 2016): warning: the (new) robust CFI/TLI/RMSEA values as printed in the summary() output of version 0.5-21 (only) are wrong if (and only if) the test statistic is "mean.var.adjusted" or "scaled.shifted". The latter is used when estimator = "WLSMV", the default estimator in the categorical case.

(7 September 2016): version 0.5-21 has been released on CRAN. See Version History for more information.

(7 March 2016): two shiny apps were recently released: Kyle Hamilton created lavaan.shiny which be installed as a (local) R package; Keon-Woong Moon has created shiny app that is available through several webservers. See his github page for available servers.

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)
```