首页 > 解决方案 > 在小鼠中进行后处理,用另一个变量替换一个变量

问题描述

我正在尝试对 R 中的数据集执行多重插补,其中我有两个变量,其中一个变量需要与另一个变量相同或更大。我已经设置了方法和预测矩阵,但我无法理解如何配置后处理。手册(或主要论文 - van Buuren 和 Groothuis-Oudshoorn,2011 年)指出(第 3.5 节):“mice() 函数有一个参数 post,它采用 R 命令字符串的向量。这些命令在之后被解析和评估单变量插补函数返回,从而提供了一种对插补值进行后处理的方法。” 有几个例子,其中第二个似乎最有用:

R> post["gen"] <- "imp[[j]][p$data$age[!r[,j]]<5,i] <- levels(boys$gen)[1]"

这向我表明我可以这样做:

R> ini <- mice(cbind(boys), max = 0, print = FALSE)
R> post["A"] <- "imp[[j]][p$data$B[!r[,j]]>p$data$A[!r[,j]],i] <- levels(boys$A)[boys$B]"

但是,这不起作用(当我绘制 A v B 时,我得到随机散布,而不是点被限制在 A >= B 的图形的一半)。

正如另一个sx 帖子中所建议的那样,我也尝试过使用该ifdo()功能:

post["A"] <- "ifdo(A < B), B"

但是,该ifdo()功能似乎尚未实现。我尝试运行建议的代码以获得灵感,但担心我的 R 编程技能并不那么出色。

mice所以,总而言之,有没有人对如何在最终估算数据集中实现值 A >= 值 B 的后处理有任何建议?

标签: rimputationr-micepost-processing

解决方案


好的,所以我找到了自己问题的答案——但这也许不是最好的方法。

在 FIMD 中,建议在插补过程之外做这种事情,因此给出:

R> long <- mice::complete(imp, "long", include = TRUE)
R> long$A <- with(long, ifelse(B < A, B, A))

这似乎有效,所以我很高兴。


推荐阅读