【问题标题】:svydesign in R survey package won't accept imputationListR 调查包中的 svydesign 不接受 imputationList
【发布时间】:2021-06-17 03:43:42
【问题描述】:

我正在尝试使用 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 ‘"function"’ to a data.frame

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

【问题讨论】:

  • 也许尝试使用mice::complete() 分别提取每个插补数据集?然后使用鲁宾的方法组合估计
  • 谢谢。我终于发现我需要做两件事:在 imputationList() 的参数中的每个变量名之前放置一个 ~,然后将 imputationList() 调用合并到 svydesign 对象的创建中,而不是作为一个单独的步骤进行.一切都很好。

标签: r dataframe survey imputation


【解决方案1】:

这是文档中的示例

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

【讨论】:

    猜你喜欢
    • 2022-11-07
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2021-07-10
    • 1970-01-01
    • 2012-11-04
    • 2018-08-25
    相关资源
    最近更新 更多