在R的partykit与lavaan构建SEM树时能否使用FIML估计?
基于partykit实现带FIML估计的潜增长曲线模型(LGCM)树处理缺失值
我需要用R包partykit捕捉抑郁症状轨迹的异质性,因此在lavaan中指定了潜增长曲线模型(LGCM),并参照Achim Zeileis的博文搭建了可处理SEM的“mobster”函数。
以下是构建LGCM树的基础代码示例:
# LGCM in lavaan growth_curve_model <- ' inter =~ 1*X1 + 1*X2 + 1*X3 + 1*X4 + 1*X5; slope =~ 0*X1 + 1*X2 + 2*X3 + 3*X4 + 4*X5; inter ~~ vari*inter; inter ~ meani*1; slope ~~ vars*slope; slope ~ means*1; inter ~~ cov*slope; X1 ~~ residual*X1; X1 ~ 0*1; X2 ~~ residual*X2; X2 ~ 0*1; X3 ~~ residual*X3; X3 ~ 0*1; X4 ~~ residual*X4; X4 ~ 0*1; X5 ~~ residual*X5; X5 ~ 0*1; ' # SEM-adapted "mobster" lavaan_fit <- function(model) { function(y, x = NULL, start = NULL, weights = NULL, offset = NULL, ..., estfun = FALSE, object = FALSE) { sem <- lavaan::lavaan(model = model, data = y, start = start) list( coefficients = stats4::coef(sem), objfun = -as.numeric(stats4::logLik(sem)), estfun = if(estfun) sandwich::estfun(sem) else NULL, object = if(object) sem else NULL ) } } # transform data ex1 <- transform(lgcm, agegroup = factor(agegroup), training = factor(training), noise = factor(noise)) ex1 <- ex1 %>% rename( X1 = o1, X2 = o2, X3 = o3, X4 = o4, X5 = o5 ) # fit tree library("partykit") tr <- mob(X1 + X2 + X3 + X4 + X5 ~ agegroup + training + noise, data = ex1, fit = lavaan_fit(growth_curve_model), control = mob_control(ytype = "data.frame")) # plot tree plot(tr, drop = TRUE, tnex = 2)
我的数据集在LGCM的观测变量(不同时间点的抑郁症状变量)中存在缺失值,纵向数据插补复杂度高,因此希望在SEM树中使用FIML估计替代lavaan默认的列表删除法ML估计。
我尝试修改“mobster”函数以启用FIML,但未成功,修改后的代码如下:
lavaan_fit <- function(model) { function(y, x = NULL, start = NULL, weights = NULL, offset = NULL, ..., estfun = FALSE, object = FALSE) { sem <- lavaan::lavaan(model = model, data = y, start = start, missing = "fiml") list( coefficients = stats4::coef(sem), objfun = -as.numeric(stats4::logLik(sem)), estfun = if(estfun) sandwich::estfun(sem) else NULL, object = if(object) sem else NULL ) } }
我知道semtree包专为SEM树设计且支持FIML,但我的数据在semtree中始终无法分裂树(即使设置alpha = 0.95),因此希望找到基于partykit的解决方案。
内容的提问来源于stack exchange,提问作者Antonia Spr
相关产品推荐
相关产品推荐

