使用svrepdesign和svyglm时遇'all variables must be in design argument'报错及设计对象更新问题咨询
svrepdesign和svyglm时遇'all variables must be in design argument'报错及设计对象更新问题咨询
你好,我来帮你拆解这两个关联的问题:
一、关于all variables must be in design argument报错的原因与解决
这个错误提示本质是说:你在svyglm公式里用到的所有变量(这里是number_symptoms和age),都必须存在于你传入的设计对象design1中。
出现这个问题的核心场景是:
- 你当初创建
design1的时候,data_covid里还没有number_symptoms或者age这两个变量; - 或者你后来给
data_covid新增了变量,但没同步更新design1。
你的设计对象代码如下:
design1 <- svrepdesign( weights = ~CPWWWGT, repweights = "CPWW[001-100]+", type = "Fay", rho = 0.3, data = data_covid, combined.weights = TRUE )
对应的报错信息:
Error in svyglm.survey.design (number_symptoms ~ age, design = design1, : all variables must be in design= argument
解决方法很直接:
确保所有分析要用的变量都在数据集里,然后重新运行svrepdesign代码生成新的设计对象,再用这个新对象跑svyglm。
二、新增变量到data_covid后,design1会自动更新吗?
答案是不会。
svrepdesign生成的设计对象(比如design1)是一个独立的R对象,它在创建时就已经把当时data_covid的变量、权重、抽样结构等信息全部存储下来了。后续你对原始数据集data_covid做的任何修改(新增变量、修改数据、删除变量),都不会自动同步到已创建好的设计对象里。
所以正确的流程是:
- 先把
data_covid整理好,确保包含所有后续分析需要的变量; - 运行
svrepdesign创建设计对象; - 用这个设计对象做
svyglm分析; - 如果之后修改了
data_covid,一定要重新生成设计对象,再进行后续分析。
备注:内容来源于stack exchange,提问作者four77
相关产品推荐
相关产品推荐

