CTSEM
CTSEM.Rd
Set up a continuous time structural equation model with lessSEM
Arguments
- model
syntax to specify the model
- data
data set in long format with person and time for each observation
- do.fit
argument passed to intermediary lavaan model. Setting to FALSE is recommended because this model will fail to fit in most cases
- missing
argument passed to intermediary lavaan model. Set to "ml" for full information maximum likelihood
- meanstructure
argument passed to intermediary lavaan model. Setting to TRUE is recommended
- ...
additional arguments passed to intermediary lavaan model
Examples
library(ctsemOMX)
library(lessTemplates)
library(lessSEM)
library(lavaan)
data(AnomAuth)
data <- ctWideToLong(datawide = AnomAuth,
Tpoints= 5,
n.manifest=2,
manifestNames = c("Y1", "Y2"))
data <- ctDeintervalise(datalong = data, id='id', dT='dT')
colnames(data) <- c("person", "time", "Y1", "Y2")
data <- as.data.frame(data)
data <- data[!(is.na(data$Y1) & is.na(data$Y2)),]
model <- "
d_eta1(t) ~ eta1(t) + eta2(t)
d_eta2(t) ~ eta1(t) + eta2(t)
d_eta1(t) ~~ d_eta1(t) + d_eta2(t)
d_eta2(t) ~~ d_eta2(t)
eta1(t) =~ 1*Y1(t)
eta2(t) =~ 1*Y2(t)
Y1(t) ~~ 0*Y1(t)
Y2(t) ~~ 0*Y2(t)
Y1(t) ~ m1*1
Y2(t) ~ m2*1
eta1(0) ~ 1
eta2(0) ~ 1
"
ctsem <- lessTemplates::CTSEM(model = model,
data = data)
fit <- bfgs(lavaanModel = ctsem$lavaanModel,
modifyModel = modifyModel(transformations = ctsem$transformation,
transformationList = ctsem$transformationList))
fit@parameters[,sort(fit@parameterLabels)]
# comparison
AnomAuthmodel <- ctModel(LAMBDA = matrix(c(1, 0, 0, 1), nrow = 2, ncol = 2),
Tpoints = 5,
n.latent = 2, n.manifest = 2,
MANIFESTVAR=diag(0, 2), TRAITVAR = NULL)
AnomAuthfit <- ctFit(AnomAuth, AnomAuthmodel, useOptimizer = TRUE)
summary(AnomAuthfit)