在R的MICE中对每个插补数据集执行操作

ou6hu8tu  于 2023-04-03  发布在  其他
关注(0)|答案(4)|浏览(260)

如何对R包micemids类的对象中的每个估算数据集执行操作(如子集或添加计算列)?我希望结果仍然是mids对象。

编辑:示例

library(mice)
data(nhanes)

# create imputed datasets
imput = mice(nhanes)

插补数据集存储为列表的列表

imput$imp

其中,只有对给定变量进行插补的观测值的行。
原始(不完整)数据集存储在此处:

imput$data

例如,如何在每个估算数据集中创建一个计算为chl/2的新变量,从而生成一个新的mids对象?

rkkpypqq

rkkpypqq1#

这可以很容易地做到如下-
使用complete()将mids对象转换为长格式的data.frame:

long1 <- complete(midsobj1, action='long', include=TRUE)

执行所需的任何操作:

long1$new.var <- long1$chl/2
 long2 <- subset(long1, age >= 5)

使用as.mids()将操作过的数据转换回mids对象:

midsobj2 <- as.mids(long2)

现在您可以根据需要使用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对象。

midsobj2<-midsobj1
 midsobj2$data$new.var <- midsobj2$data$chl/2
 midsobj2$imp$new.var <- midsobj2$imp$chl/2

但是如果你想使用$imp的子集或者使用$call,你会遇到麻烦,所以我一般不推荐这个解决方案。

wooyq4lh

wooyq4lh2#

另一种选择是在插补之前计算变量,并对其进行限制。

library(mice)

# Create the additional variable - this will have missing
nhanes$extra <- nhanes$chl / 2

# Change the method of imputation for extra, so that it always equals chl/2
# Change the predictor matrix so only chl predicts extra
ini <- mice(nhanes, max = 0, print = FALSE)

meth <- ini$meth
meth["extra"] <- "~I(chl / 2)"

pred <- ini$pred  # extra isn't used to predict
pred["extra", "chl"] <- 1

# Imputations
imput <- mice(nhanes, seed = 1, pred = pred, meth = meth, print = FALSE)

mice: Multivariate Imputation by Chained Equations in R中有一些例子。

tzdcorbm

tzdcorbm3#

这里有一个with的重载可以帮助您

with(imput, chl/2)

文档位于?with.mids

dy2hfwbg

dy2hfwbg4#

basecamb包中有一个函数可以实现这一点:

library(basecamb)
apply_function_to_imputed_data(mids_object, function)

相关问题