使用jtools处理调查数据:svyglm模型调用summ()函数报错求助
解决
summ(fit_a)报错:no applicable method for 'summ' applied to an object of class "list" 咱们一步步排查问题根源,给出对应的解决办法:
1. 先确认模型对象的实际类型
报错提示fit_a是list类,但正常情况下svyglm拟合成功后应该返回svyglm(继承glm、lm)类型的对象。先运行下面的代码检查:
class(fit_a)
- 如果输出不是
[1] "svyglm" "glm" "lm":- 先检查你的调查设计对象
TET_svy是否有效:运行str(TET_svy)确认它是标准的survey.design类对象,没有结构错误(比如权重缺失、抽样框问题)。 - 重新拟合模型并查看隐藏警告:有时候模型拟合没报错,但数据或设计的问题会导致返回非标准对象,运行以下代码查看警告:
警告信息可能会提示你变量缺失、权重无效等之前没注意到的问题。fit_a <- svyglm(DIED ~ conanomalies , design=TET_svy, family=quasibinomial(link=logit)) warnings()
- 先检查你的调查设计对象
2. 确保jtools的summ方法能识别svyglm对象
如果fit_a确实是有效的svyglm对象,问题大概率出在jtools版本或包冲突上:
- 更新
jtools到最新版本:旧版本的jtools对svyglm的支持不完善,运行下面的代码更新,之后重启R会话再试:update.packages("jtools") - 直接指定
jtools的summ方法:可能有其他包(比如自定义工具包或功能重叠的包)覆盖了summ函数,这时候直接用包前缀调用jtools的版本:jtools::summ(fit_a) - 检查冲突包:运行
methods("summ")查看所有提供summ方法的包,如果有其他包的方法优先级高于jtools,可以卸载冲突包后再尝试:detach("package:冲突包名", unload = TRUE)
3. 如果以上方法都无效,试试临时 workaround
如果还是无法解决,先先用survey包自带的汇总函数确认模型是有效的,再尝试以下方案:
- 运行
summary(fit_a)(survey包的原生函数)查看模型基本结果,确认模型拟合是正确的。 - 临时将
svyglm对象转换为glm类(注意:这个操作会丢失调查设计的属性,仅用于格式化结果,不能用于后续的调查分析):class(fit_a) <- c("glm", "lm") summ(fit_a)
内容的提问来源于stack exchange,提问作者Laxmi
相关产品推荐
相关产品推荐

