r - R 中的调查包中的 svyglm 函数出错:“所有变量都必须在设计=参数中”
问题描述
新的stackoverflow。我正在处理一个使用 NHIS 数据的项目,但即使对于具有二元预测变量和二元结果变量的简单、未经调整的逻辑回归,我也无法让 svyglm 函数工作(最终我想使用多个分类预测变量,但是一个一步一步)。
El_under_glm<-svyglm(ElUnder~SO2, design=SAMPdesign, 子集=NULL, family=binomial(link="logit"), rescale=FALSE, 相关=TRUE)
eval 中的错误(extras、data、env):找不到对象“.survey.prob.weights”
我将变量更改为 0 和 1:
Under_narm$SO2REG<-ifelse(Under_narm$SO2=="异性恋", 0, 1) Under_narm$ElUnderREG<-ifelse(Under_narm$ElUnder=="No", 0, 1)
但随后得到一个不同的问题:
El_under_glm<-svyglm(ElUnderREG~SO2REG, design=SAMPdesign, 子集=NULL, family=binomial(link="logit"), rescale=FALSE, 相关=TRUE)
svyglm.survey.design 中的错误(ElUnderREG ~ SO2REG,design = SAMPdesign,:所有变量都必须在 design= 参数中
这是我用来计算权重的设计——我很确定它是正确的:
SAMPdesign=svydesign(数据=Under_narm,id=~NHISPID,重量=~SAMPWEIGHT)
任何和所有的帮助表示赞赏!我很好地掌握了统计数据,但编码速度很慢。让我知道我是否可以提供任何其他信息。
解决方案
使用一些虚构的示例数据,我能够通过设置让您的模型运行rescale = TRUE
。该文件指出
重新调整权重,以提高数值稳定性。默认重新调整权重以求和样本大小。使用 FALSE 不重新调整权重。
因此,一种解决方案可能就是设置rescale = TRUE
.
library(survey)
# sample data
Under_narm <- data.frame(SO2 = factor(rep(1:2, 1000)),
ElUnder = sample(0:1, 1000, replace = TRUE),
NHISPID = paste0("id", 1:1000),
SAMPWEIGHT = sample(c(0.5, 2), 1000, replace = TRUE))
# with 'rescale' = TRUE
SAMPdesign=svydesign(ids = ~NHISPID,
data=Under_narm,
weights = ~SAMPWEIGHT)
El_under_glm<-svyglm(formula = ElUnder~SO2,
design=SAMPdesign,
family=quasibinomial(), # this family avoids warnings
rescale=TRUE) # Weights rescaled to the sum of the sample size.
summary(El_under_glm, correlation = TRUE) # use correlation with summary()
否则,使用“survey:::svyglm.survey.design”查找此函数方法的代码,似乎可能存在错误。我可能是错的,但是当“rescale”为 FALSE 时,我的阅读.survey.prob.weights
似乎没有被分配一个值。
if (is.null(g$weights))
g$weights <- quote(.survey.prob.weights)
else g$weights <- bquote(.survey.prob.weights * .(g$weights)) # bug?
g$data <- quote(data)
g[[1]] <- quote(glm)
if (rescale)
data$.survey.prob.weights <- (1/design$prob)/mean(1/design$prob)
.survey.prob.weights
如果您在全局环境中分配一个数值向量,可能会有一种解决方法。不知道这些值应该是什么,但是如果您执行以下操作,您的错误就会消失。(.survey.prob.weights 需要是数据长度的两倍。)
SAMPdesign=svydesign(ids = ~NHISPID,
data=Under_narm,
weights = ~SAMPWEIGHT)
.survey.prob.weights <- rep(1, 2000)
El_under_glm<-svyglm(formula = ElUnder~SO2,
design=SAMPdesign,
family=quasibinomial(),
rescale=FALSE)
summary(El_under_glm, correlation = TRUE)
推荐阅读
- domain-driven-design - 订单和库存 DDD - 应该在哪里处理分配/预订?
- c# - 使用 TrackBar 播放音乐时断断续续
- python - 我从 Python 中的 Tkinter 收到的奇怪错误
- sql - 在更新之前通过修改数据从另外两个更新主表
- java - 为下拉菜单创建 Angular 服务
- nativescript - 如何使用 NativeScript 切换 UITabBar 半透明属性?
- mongodb - MongoDB:按索引删除数组元素,操作顺序?
- javascript - 汇总具有相同属性名称的对象的值
- c# - 如何测试类型是否可实例化?
- ios - 如何在 iOS 应用程序中有效地实现跳过逻辑分支?