如何在R的包 mice
中的类 mids
的对象中的每个插补数据集上执行操作(如子集化或添加计算列)?我希望结果仍然是 mids
对象 .
Edit: Example
library(mice)
data(nhanes)
# create imputed datasets
imput = mice(nhanes)
插补数据集存储为列表列表
imput$imp
其中只有针对给定变量的插补的观察行 .
原始(不完整)数据集存储在此处:
imput$data
例如,如何在每个插补数据集中创建一个计算为 chl/2
的新变量,从而产生一个新的 mids
对象?
3 回答
另一种选择是在插补之前计算变量并对它们施加限制 .
小鼠中有一些例子:R中的链式方程的多元插补
这可以很容易地完成如下 -
使用
complete()
将mids对象转换为长格式data.frame:执行所需的任何操作:
使用
as.mids()
将操纵数据转换回mids对象:现在您可以根据需要使用
midsobj2
. 请注意,as.mids()
需要include=TRUE
(用于包含缺失值的原始数据)以正确压缩长格式数据 . 请注意,在鼠标v2.25之前,as.mids()函数中存在一个错误(请参阅此帖子https://stats.stackexchange.com/a/158327/69413)编辑:根据这个答案https://stackoverflow.com/a/34859264/4269699(从本质上是一个重复的问题)你也可以通过访问$ data和$ imp直接编辑mids对象 . 所以举个例子
如果你想要$ imp子集或者你想使用$ call,你会遇到麻烦,所以我不推荐这个解决方案 .
有一个
with
超载,可以帮助你文件在
?with.mids
给出