如何对R包mice
中mids
类的对象中的每个估算数据集执行操作(如子集或添加计算列)?我希望结果仍然是mids
对象。
编辑:示例
library(mice)
data(nhanes)
# create imputed datasets
imput = mice(nhanes)
插补数据集存储为列表的列表
imput$imp
其中,只有对给定变量进行插补的观测值的行。
原始(不完整)数据集存储在此处:
imput$data
例如,如何在每个估算数据集中创建一个计算为chl/2
的新变量,从而生成一个新的mids
对象?
4条答案
按热度按时间rkkpypqq1#
这可以很容易地做到如下-
使用
complete()
将mids对象转换为长格式的data.frame:执行所需的任何操作:
使用
as.mids()
将操作过的数据转换回mids对象:现在您可以根据需要使用
midsobj2
。注意as.mids()
需要include=TRUE
(用于包含缺失值的原始数据)来正确压缩长格式数据。请注意,在mice v2.25之前,as.mids()函数中有一个bug(请参阅https://stats.stackexchange.com/a/158327/69413)EDIT:根据https://stackoverflow.com/a/34859264/4269699的答案(本质上是重复的问题),您还可以通过访问$data和$imp直接编辑mids对象。
但是如果你想使用$imp的子集或者使用$call,你会遇到麻烦,所以我一般不推荐这个解决方案。
wooyq4lh2#
另一种选择是在插补之前计算变量,并对其进行限制。
在mice: Multivariate Imputation by Chained Equations in R中有一些例子。
tzdcorbm3#
这里有一个
with
的重载可以帮助您文档位于
?with.mids
dy2hfwbg4#
在
basecamb
包中有一个函数可以实现这一点: