使用cv.glmertree时出现family$family符号不可子集化报错求助
glmertree包cv.glmertree函数报错排查建议
我使用R语言的glmertree包运行广义线性混合模型树,能成功拟合glmertree模型,但调用cv.glmertree函数获取标准误与推断结果时触发报错:
Error in family$family : object of type 'symbol' is not subsettable
我的代码如下:
train <- sample(1:nrow(non_miss), size =2382 , replace = TRUE) test <- sample(1:nrow(non_miss), size =2382 , replace = TRUE) tree1 <- glmertree(event ~ 1 | (1| cohort) | ageatenroll + hiv + racecat + visitsite + edu + smkgrp_hist + percent_drug + comorbid_hist + percent_depress, data=non_miss[train, ], family=binomial, nAGQ = 0, minsize=200) tree2 <- cv.glmertree(tree1, newdata=non_miss[test, ], reference=13)
报错回溯信息:
> tree2 <- cv.glmertree(tree1, newdata = non_miss[test, ], reference = 13) Error in family$family : object of type 'symbol' is not subsettable > traceback() 6: family$family %in% c("quasibinomial", "quasipoisson", "quasi") 5: lme4::glFormula(formula = ff, data = newdata, family = family, control = glmer.control, nAGQ = nAGQ) 4: eval(mc, parent.frame(1L)) 3: eval(mc, parent.frame(1L)) 2: glmer(ff, data = newdata, nAGQ = nAGQ, family = family, control = glmer.control) 1: cv.glmertree(tree1, newdata = non_miss[test, ], reference = 13)
排查与解决建议
- 显式传递family对象给cv.glmertree:报错核心是
family被当作符号而非family对象传递。在调用cv.glmertree时手动指定family = binomial()(注意带括号,返回的是family对象而非符号),替代默认从tree1中提取的参数:tree2 <- cv.glmertree(tree1, newdata=non_miss[test, ], reference=13, family = binomial()) - 验证数据集一致性:确认
non_miss[test, ]的变量类型、因子水平与训练集non_miss[train, ]完全匹配,避免glFormula处理数据时出现异常 - 更新glmertree包:旧版本包可能存在参数传递的bug,运行
update.packages("glmertree")更新到最新版后重试 - 显式指定glmer控制参数:在
cv.glmertree中添加control = glmer.control(),确保控制参数正确传递给内部调用的glmer函数
内容的提问来源于stack exchange,提问作者DeWa0611
相关产品推荐
相关产品推荐

