我一直在尝试使用 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 方法一起使用。如果您知道一种方法,我想那就更好了。
使用
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]])