Skip to contents

Set up a continuous time structural equation model with lessSEM

Usage

CTSEM(model, data, do.fit = FALSE, missing = "ml", meanstructure = TRUE, ...)

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)