Allison, Paul D., Richard Williams, and Enrique Moral-Benito. 2017. “Maximum Likelihood for Cross-lagged Panel Models with Fixed Effects.” Socius: Sociological Research for a Dynamic World 3:1–17. (Original DOI: 10.1177/2378023117710578)
In this article, there is an error in the R code shown on pp. 15–16, such that the code displayed there produces noticeably different results from those of the other three packages. The authors have prepared a revised R code that does produce the right results, and have included it below as well as online at https://www3.nd.edu/~rwilliam/dynamic/lav_Socius.R.
# Lavaan Code for lav_Socius.R
library(haven)library(lavaan)
Socius.datafile <-
foreign::read.dta(“https://www3.nd.edu/~rwilliam/statafiles/wageswide.dta”)
Socius.model <- ’
# Dynamic Panel Data Model using ML for outcome variable wks
# Structural Equations wks2 ~
+ c1*wks1
+ c2*lwage1
+ c3*union1
+ c4*ed
wks3 ~
+ c1*wks2
+ c2*lwage2
+ c3*union2
+ c4*ed
wks4 ~
+ c1*wks3
+ c2*lwage3
+ c3*union3
+ c4*ed
wks5 ~
+ c1*wks4
+ c2*lwage4
+ c3*union4
+ c4*ed
wks6 ~
+ c1*wks5
+ c2*lwage5
+ c3*union5
+ c4*ed
wks7 ~
+ c1*wks6
+ c2*lwage6
+ c3*union6
+ c4*ed
# Alpha loadings equal 1 for all times
Alpha =~
+ 1*wks2 + 1*wks3 + 1*wks4 + 1*wks5 + 1*wks6 + 1*wks7
# Fixed Effects Model - Alpha correlated with Time-Varying Exogenous Vars
Alpha ~~
+ wks1 + lwage1 + union1 + 0*ed + lwage2 + union2
+ lwage3 + union3 + lwage4 + union4 + lwage5 + union5
+ lwage6 + union6
# Correlations between Ys and predetermined variables
union3 ~~
+ wks2
union4 ~~
+ wks2 + wks3
union5 ~~
+ wks2 + wks3 + wks4
union6 ~~
+ wks2 + wks3 + wks4 + wks5
# Constants free to vary across time
wks2 ~ 1
wks3 ~ 1
wks4 ~ 1
wks5 ~ 1
wks6 ~ 1
wks7 ~ 1
# Error variances constrained to be equal across time
wks2 ~~ c6*wks2
wks3 ~~ c6*wks3
wks4 ~~ c6*wks4
wks5 ~~ c6*wks5
wks6 ~~ c6*wks6
wks7 ~~ c6*wks7
# Exogenous variable covariances
wks1 ~~
+ lwage1 + union1 + ed + lwage2 + union2
+ lwage3 + union3 + lwage4 + union4 + lwage5
+ union5 + lwage6 + union6
lwage1 ~~
+ union1 + ed + lwage2 + union2
+ lwage3 + union3 + lwage4 + union4
+ lwage5 + union5 + lwage6 + union6
union1 ~~
+ ed + lwage2 + union2 + lwage3
+ union3 + lwage4 + union4 + lwage5
+ union5 + lwage6 + union6
ed ~~
+ lwage2 + union2 + lwage3 + union3 + lwage4
+ union4 + lwage5 + union5 + lwage6 + union6
lwage2 ~~
+ union2 + lwage3 + union3 + lwage4
+ union4 + lwage5 + union5 + lwage6
+ union6
union2 ~~
+ lwage3 + union3 + lwage4 + union4
+ lwage5 + union5 + lwage6 + union6
lwage3 ~~
+ union3 + lwage4 + union4 + lwage5
+ union5 + lwage6 + union6
union3 ~~
+ lwage4 + union4 + lwage5 + union5
+ lwage6 + union6
lwage4 ~~
+ union4 + lwage5 + union5 + lwage6
+ union6
union4 ~~
+ lwage5 + union5 + lwage6 + union6
lwage5 ~~
+ union5 + lwage6 + union6
union5 ~~
+ lwage6 + union6
lwage6 ~~
+ union6
# End of lavaan sem specification
’
Socius.results <- lavaan::sem(Socius.model,
data = Socius.datafile,
missing = “default”,
estimator = “ML”,
se = “default”,
)
lavaan::summary(Socius.results, fit.measures=FALSE)