r - 在小鼠中进行后处理,用另一个变量替换一个变量
问题描述
我正在尝试对 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 的后处理有任何建议?
解决方案
好的,所以我找到了自己问题的答案——但这也许不是最好的方法。
在 FIMD 中,建议在插补过程之外做这种事情,因此给出:
R> long <- mice::complete(imp, "long", include = TRUE)
R> long$A <- with(long, ifelse(B < A, B, A))
这似乎有效,所以我很高兴。
推荐阅读
- javascript - 如何使用 HTTP 获取请求在另一个函数中触发一个函数?
- sql-server - 寻找数据复制的替代方案
- vba - 将 Dcount 与 Access VBA 一起使用会产生错误消息
- swift - 如何确定 AppleTV 当前是否连接到 iCloud?
- javascript - Bootstrap Modal 不会出现
- mysql - 无法更改mysql中列的默认值
- git - 在没有 sudo 权限的情况下安装 Git
- wordpress - 按订单状态在后台搜索订单列表
- c++ - swscaler - 错误的 src 图像指针 MacOS
- swift - 仅在按下按钮后才允许触摸