#
#
###### Familiarization with SEM using the 'lavaan' package. ######
#
#
# This script assumes you have worked through all the previous notes from
# the web page and you have downloaded, installed, and updated all available
# R packages.
# Load the following library which is necessary to import an SPSS data file.
library(foreign)
### Upload the SAS SEM Example data ("SEMData.sav") which is SIMULATION DATA.
# This data can be imported directly from the web.
exsem <- read.spss("http://www.unt.edu/rss/class/Jon/R_SC/Module8/SAS_Ex/SEMData.sav", use.value.labels=TRUE,
max.value.labels=Inf, to.data.frame=TRUE)
detach("package:foreign")
head(exsem)
attach(exsem)
####### Lavaan #######
# Lavaan is a relatively new package (May 2010) which was created to make it easier for new R users
# to conduct latent variable modeling (e.g. confirmatory factor analysis, structural equation modeling,
# and latent growth curve models). The lavaan package requires at least 5 other packages: MASS, boot,
# mnormt, pbivnorm, & quadprog
library(lavaan)
# The primary benefit of the Lavaan package is an intuitive set of operators and structure for specifying elements
# of a model. As an example, consider the following generic (not used here) example from the Lavaan documentation.
# NOT RUN; simply shown as generic examples.
myModel <- '
# Regression or path equations
y ~ F1 + F2 + x1 + x2
F1 ~ F2 + F3
F2 ~ F3 + x1 + x2
# Latent variable definitions
F1 =~ y1 + y2 + y3
F2 =~ y4 + y5 + y6
F3 =~ y7 + y8 + y9 + y10
# Variances and covariances
y1 ~~ y1
y1 ~~ y2
F1 ~~ F2
# Intercepts
y1 ~ 1
F1 ~ 1
'
# The developers of the Lavaan package wanted to provide an easy to use and free alternative to
# commercially available modeling software. The developers state that "results of the lavaan
# package are typically very close, if not identical, to the results of the comercial package
# Mplus" (Rosseel, 2010) Lavaan contains an arguement for comparing its results directly to
# other modeling software. The optional arguement is 'mimic.Mplus=FALSE'. If 'TRUE', an
# attempt is made to mimic Mplus behavior as close as possible. If 'FALSE', results are more
# in line with EQS or LISREL.
# Rosseel, Y. (2010). lavaan: An R package for structural equation modeling and more.
# Available at: http://cran.r-project.org/web/packages/lavaan/index.html
# See also: http://lavaan.ugent.be/
#################################################################################################
############### CURRENT EXAMPLES BELOW ###############
##### Fit the Confirmatory Factor Analysis (CFA).
### Specify the Measurement Model.
m.model.1 <- '
Personality =~ extro + open + agree
Engagement =~ social + cognitive + physical + cultural
Crystallized =~ vocab + abstruse + block
Fluid =~ common + sets + series
'
### Fit the measurement model.
# * The "std.lv = TRUE" command sets the variance of all the latent factors to 1 (by default, the first loading
# of each latent variable is set to one).
# ** The "fit.measures = TRUE" command provides additional fit indices (only chi-square is given by default).
# *** The "standardize = TRUE" command provides standardized loadings (non-standardized loadings are given
# by default).
m.model.fit <- cfa(m.model.1, data = exsem, std.lv = TRUE)
summary(m.model.fit, fit.measures = TRUE, standardize = TRUE)
### Specify the Structural Model.
# Recall, by default, the lavaan package model specification functions (cfa & sem) constrain the first loading
# of each latent variable to 1.
s.model.1 <- '
Personality =~ extro + open + agree
Engagement =~ social + cognitive + physical + cultural
Crystallized =~ vocab + abstruse + block
Fluid =~ common + sets + series
Engagement ~ Personality
Crystallized ~ Engagement + Personality
Fluid ~ Engagement + Personality
Crystallized ~~ Fluid
'
### Fit the Structural Model.
s.model.fit <- sem(s.model.1, data = exsem)
summary(s.model.fit, fit.measures = TRUE, standardize = TRUE)
# To review the residuals, use the 'residuals' function.
resids <- residuals(s.model.fit)
resids
hist(resids$cov)
# As a comparison, you can see that these results are virtually identical to
# those furnished by SAS:
# http://www.unt.edu/rss/class/Jon/SAS_SC/SEM/SEM2/SAS_Module8_SEM2.htm
# Minor updates: Feb. 2011.