R 调查包中的 svydesign 不接受 imputationList

svydesign in R survey package won't accept imputationList

我正在尝试使用 Survey 分析复杂的调查数据。我用鼠标估算缺失数据,并按照文档中的说明,在 mitools 中使用 imputationList() 将估算转换为 imputationList 对象。但是当我尝试将该对象用作 svydesign() 中的数据时,我收到此错误消息:

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

根据 Whosebug 其他地方提供的示例,我尝试将 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 ‘"function"’ to a data.frame

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

这是文档中的示例

> 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 老得多。