首页 > 解决方案 > R 调查包中的 svydesign 不接受 imputationList

问题描述

我正在尝试使用 Survey 分析复杂的调查数据。我用鼠标对丢失的数据进行了插补,并按照文档中的说明,将插补转换为具有 mitools 中的 imputationList() 的 imputationList 对象。但是当我尝试将该对象用作 svydesign() 中的数据时,我收到以下错误消息:

Error in as.data.frame.default(yrbs_complex_imputationList) : 
  cannot coerce class ‘"imputationList"’ to a data.frame

按照 StackOverflow 其他地方提供的示例,我尝试将 mitools 函数直接合并到 svydesign 公式中:

yrbs_svyimputationList<-svydesign(ids="psu", probs = NULL, strata = "stratum", variables = NULL, fpc = NULL, data=imputationList(yrbs_complex_imputations), nest = TRUE, check.strata = !nest, weights, pps=FALSE)

但这导致了不同的错误消息:

Error in as.data.frame.default(x[[i]], optional = TRUE) : 
  cannot coerce class ‘&quot;function"’ to a data.frame

如何将多重估算数据合并到调查设计对象中?

标签: rdataframesurveyimputation

解决方案


这是文档中的示例

> library(mitools)
> data.dir<-system.file("dta",package="mitools")
> files.men<-list.files(data.dir,pattern="m.\\.dta$",full=TRUE)
> men<-imputationList(lapply(files.men, foreign::read.dta,
+   warn.missing.labels=FALSE))
> files.women<-list.files(data.dir,pattern="f.\\.dta$",full=TRUE)
> women<-imputationList(lapply(files.women, foreign::read.dta,
+   warn.missing.labels=FALSE))
> men<-update(men, sex=1)
> women<-update(women,sex=0)
> all<-rbind(men,women)
> 
> designs<-svydesign(id=~id, strata=~sex, data=all)
> designs
Multiple (5) imputations: svydesign(id = ~id, strata = ~sex, data = all)

最大的区别是您需要使用~而不是引号来引用变量,就像在回归模型中一样。如今,这可能会使用 tidyverse 的非标准评估来实现,但该survey软件包比 tidyverse 旧得多。


推荐阅读