Na verdade eu queria mesmo era utilizar a função aregImpute porque estou acostumado com ela e ela tem algumas opçoes que o mice não tem. Eu simulei uns dados e tentei rodar alguns exemplos mas ainda não saiu do geito que eu queria.
data <- data.frame(los = sample(seq(0,45,0.001),5000,T),desfecho.los = sample(c(0,1),5000,T),sex = sample(c("M","F"),5000,T),BMI= sample(seq(16,45,0.1),5000,T))
data2$BMI[sample(1:5000,2000)] <- NA
#### sem montar o cluster para computação paralelo
library(rms)
Sys.time()
ini <- Sys.time()
mit2 <- aregImpute(~ los + I(desfecho.los) + I(Age50) + Gender + I(BMI45), n.impute=5, data=data,tlinear=F)
Sys.time() - ini
Sys.time()
# Com o cluster para computação em paralelo
library(mice)
library(rms)
library(foreach)
library(doParallel)
nCores <- detectCores() -1
cl <- makeCluster(nCores)
clusterSetRNGStream(cl, 51)
registerDoParallel(cl)
Sys.time()
ini <- Sys.time()
mit3 <-
foreach(no = 1:nCores,
# .combine = ibind,
# .export = "mammalsleep",
.packages = "rms") %dopar%
{
aregImpute(~ los + I(desfecho.los) + I(Age50) + Gender + I(BMI45), n.impute=5, data=data,tlinear=F)
}
Sys.time() - ini
Sys.time()
stopCluster(cl)
Nos dois exemplos acima a computação no meu dado original demorou cerca de 13 min. Repare que para criar o objeto mit3 eu exclui os argumentos .combine e .export. Pra falar a verdade eu não consegui entender a partir da documentação pra que serve esse argumento .export. O mit3 saiu como uma lista de tres objetos e cada um desses como cinco imputações. Então entendi eu levei o mesmo tempo pra fazer 3x mais imputações (3 é o numero de cores que usei). Mas eu gostaria mesmo que a saida fosse uma lista com um unico objeto com 5 imputações. Então entendi que a função ibind deveria fazer exatamente isso. Eu tentei usar a função ibind do pacote mice mas retorna um erro, provavelmente porque essa função só funciona para objetos de classe mids ou mice. Então acho que agora a questão seria como combinar as saidas das computações dos diferentes cores. Eu não sei se tem jeito porque a documentação original do Hmisc::aregImpute não comenta nada a respeito de computação em paralelo ou de juntar objetos da mesma função.
Se voce puder me dar uma mão ... agradeceria muito.