如何将多个插补的并行处理结果合并到单个 mids 对象中?

问题描述 投票:0回答:1

我一直在尝试使用 mouseadds 并行进行多重插补(我使用 2l.pmm 方法,该方法在小鼠中不可用)。这是并行处理的代码:

library(foreach)
library(doParallel)
library(miceadds)

# Set up parallel backend
num_cores <- 30
cl <- makeCluster(num_cores)
registerDoParallel(cl)

# Define the imputation function
impute_function <- function(data, pred_matrix, method, seed) {
  set.seed(569)
  mice::mice(
    data,
    method = "2l.pmm",
    predictorMatrix = pred,
    maxit = 2,
    seed = seed
  )
}


num_imputations <- 5
seeds <- 1:num_imputations

# Run imputations in parallel
imputations <- foreach(seed = seeds, .combine = 'c', .packages = 'miceadds') %dopar% {
  impute_function(data, pred_matrix, method = "2l.pmm", seed = seed)
}

# Stop the cluster
stopCluster(cl)

对象插补是包含每次迭代的列表。 如何将这些迭代组合到单个 mids 对象中,例如函数

mice(data, method="2l.pmm", predictorMatrix = pred, maxit = 2, seed = 569)

会给吗?

P.S 我尝试使用 futuremice 函数,但无法将其与 mouseadds 中的 2l.pmm 方法一起使用。如果您知道一种方法,我想那就更好了。

r object parallel-processing
1个回答
0
投票

使用

mice::ibind()
,例如,

imp <- imputations[[1]]
for (i in seq_along(imputations)[-1]) {
  imp <- mice::ibind(imp, imputations[i])
}

imp <- Reduce(mice::ibind, imputations[-1], init = imputations[[1]])
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.