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:
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)