簡體   English   中英

在 R 的 MICE 中對每個插補數據集執行操作

[英]Perform operation on each imputed dataset in R's MICE

我怎樣才能執行操作(如子集划分或添加計算的列)的類的對象上的每個數據集估算mids來自R的包mice 我希望結果仍然是一個mids對象。

編輯:示例

library(mice)
data(nhanes)

# create imputed datasets
imput = mice(nhanes)

估算的數據集存儲為列表列表

imput$imp

其中只有對給定變量進行插補的觀察行。

原始(不完整)數據集存儲在這里:

imput$data

例如,我將如何在每個估算數據集中創建一個計算為chl/2的新變量,從而產生一個新的mids對象?

這可以很容易地完成如下 -

使用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 (用於包含具有缺失值的原始數據as.mids()才能正確壓縮長格式數據。 請注意,在 mouse v2.25 之前, as.mids() 函數中存在一個錯誤(請參閱此帖子https://stats.stackexchange.com/a/158327/69413

編輯:根據這個答案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,您會遇到麻煩,因此我一般不推薦此解決方案。

另一種選擇是在插補之前計算變量並對它們施加限制。

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)

小鼠中有例子:Multivariate Imputation by Chained Equations in R

有大量的with可以幫助你

with(imput, chl/2)

文檔位於?with.mids

basecamb包中有一個函數:

library(basecamb)
apply_function_to_imputed_data(mids_object, function)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM