brandmaier/semtree

semtree returns an error for lavaan models

manuelarnold opened this issue · 1 comments

semtree gives the following error message for lavaan models:

Error occured!
Error in fitSubmodels(model, subset1, subset2, control, invariance = NULL): no slot of name "data" for this object of class "lavaan"
No traceback available
✔ Tree construction finished [took less than a second].

The resulting tree consists of only one node, even though semtree would split the sample for an equivalent OpenMx model.

Here is an example:

library(semtree)
library(lavaan)
library(OpenMx)

set.seed(1808)

Data <- data.frame(y = c(rnorm(150, mean = -1), rnorm(150, mean = 1)),
z = sort(rnorm(300)))

m_lav <- '
y ~~ y
y ~ 1
'

####Testing semtree with lavaan models ####
fit_lav <- lavaan(model = m, data = Data)

tree_lav <- semtree::semtree(model = fit_lav, data = Data,
control = semtree.control(use.maxlm = TRUE, method = "naive"))
'# => returns an error

tree_lav <- semtree::semtree(model = fit_lav, data = Data)
'# => also returns an error

plot(tree_lav)
'# Only one node

Testing semtree with OpenMx models

m_mx <- mxModel(manifestVars = "y", type = "RAM",
mxData(observed = Data, type = "raw"),
mxPath(from = "y", arrows = 2, free = TRUE, values = 1, labels = "sigma2"),
mxPath(from = "one", to = "y", arrows = 1, free = TRUE, values = 0, labels = "mu"))

fit_mx <- mxTryHard(model = m_mx)

tree_mx <- semtree::semtree(model = fit_mx, data = Data,
control = semtree.control(use.maxlm = TRUE, method = "naive"))
plot(tree_mx)
'# => OpenMx models work

Thanks for reporting this, @manuelarnold . I checked this again with the current version and it actually works well with lavaan:
image

I noted that you pass a model called m to the semtree(...)-function but your model is really called m_lav. Maybe this was causing the problem in the first place?

Anyhow, I turned your example into a unit test (see 2d813e8)