
Hey Pedro, Infelizmente, não tenho expertise para a tarefa que você desempenha. O meu conhecimento sobre imputação (por enquanto) é mais aplicado à /envirometria/quimiometria/. "Que a força esteja com você!" Abs, Vinícius On 10/16/2015 04:06 PM, Pedro Emmanuel Alvarenga Americano do Brasil wrote:
Ei vinicius,
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.
# para criar um dado completo. imputed.data <-impute.transcan(mit2, imputation=1, data=data, list.out=TRUE, pr=FALSE, check=FALSE) data[names(imputed.data)] <- imputed.data
Se voce puder me dar uma mão ... agradeceria muito.
Pedro Brasil
Em 10 de outubro de 2015 15:58, Daniel Marcelino <dmarcelino@live.com <mailto:dmarcelino@live.com>> escreveu:
Se o que você entende por imputação em paralelo for simplesmente executar alguma função de imputação do tipo MI, MICE , MAR , MCAR AMELIA etc em paralelo. Ou seja, repartir o tarefa entre as CPUs, eu acredito que bastaria você passar a função dentro de um foreach ou parLapply. Por exemplo, usando a base `mammalsleep` do pacote mice para gerar 10 tabelas:
nCores <- detectCores() -1 library(foreach) library(doParallel) cl <- makeCluster(nCores) clusterSetRNGStream(cl, 51) registerDoParallel(cl)
library(mice)
imp_mice <- foreach(no = 1:nCores, .combine = ibind, .export = "mammalsleep", .packages = "mice") %dopar% { mice(mammalsleep, m = 10, printFlag = FALSE) } stopCluster(cl)
# veja os dados completos: complete(imp_mice)
Você vair querer explorar também o que está armazenado no objeto : imp_mice Como: imp_mice$method imp_mice$data imp_mice$m etc.
D
2015-10-10 12:28 GMT-03:00 Vinícius Lionel Mateus <vinynegrelli@gmail.com <mailto:vinynegrelli@gmail.com>>: > Olá Pedro, > > Ainda não precisei trabalhar com computação em paralelo, mas o tema > imputação de dados é de grande interesse para mim. > Ao ver seu email, me lembrei de um pacote recém desenvolvido, que trabalha > com séries temporais. > Se for seu caso, google " Imputation of missing data in time series for air > pollutants". > > O que você almeja com a imputação de dados? > Substituir dados abaixo de um threshold (e.g., LOD, LOQ)? > Séries temporais? > > Imputação de dados é um tema bastante extenso. > Acho que serie interessante você fornecer mais dicas, a fim de que outros > colegas possam colaborar. > (Eu vou ficar na torcida, e acompanhando o seu post ;-) ) > > Abs, > Vinícius > > On 10/09/2015 02:32 PM, Pedro Emmanuel Alvarenga Americano do Brasil wrote: > > Amigos de R, > > Eu estou trabalhando com um banco de dados que possui mais de 220000 linhas. > Eu cheguei numa parte do plano de análise em que imputação multipla será > conduzida. > > Eu já usei a função Hmisc::aregIMpute e mice::mice que considero muito boas. > O problema é que com essa quantidade de dados pra descobrir que deu um erro > eu levo de 2h a 8h esperando. Então eu fiz um estrategia de testar em bancos > menores subsets do principal. > > Eu procurei por ai e há outros pacotes que fazem imputação mas não consegui > encontrar qualquer um que possa fazer imputação com computação em paralelo. > > Alguem saberia indicar uma função que faça imputação multipla com computação > em paralelo? > > Alguem ja tentou criar um algoritmo de computação em paralelo para fazer > imputação multipla com Hmisc::aregImput? > > Abraço a todos, > > Pedro Brasil > > > _______________________________________________ > R-br mailing list > R-br@listas.c3sl.ufpr.br <mailto:R-br@listas.c3sl.ufpr.br> > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo > m�nimo reproduz�vel. > > > -- > Best regards, > > Vinícius Lionel Mateus, MSc (http://lattes.cnpq.br/6501001637020665) > Chemistry PhD Student > Atmospheric Chemistry Laboratory - Dep. Chemistry > PUC-Rio - Pontifical Catholic University of Rio de Janeiro > Marquês de São Vicente, 225, Gávea - Rio de Janeiro, RJ - Brazil CEP: > 22451-900 > Phone: (+45) 26 28 28 51 <tel:%28%2B45%29%2026%2028%2028%2051> > (+55) (21) 3527-1327 <tel:%28%2B55%29%20%2821%29%203527-1327> > (+55) (21) 993 - 588 - 051 <tel:%28%2B55%29%20%2821%29%20993%20-%20588%20-%20051> > Skype: vinicius.lionel > http://www.qui.puc-rio.br/index.html > > > _______________________________________________ > R-br mailing list > R-br@listas.c3sl.ufpr.br <mailto:R-br@listas.c3sl.ufpr.br> > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código > mínimo reproduzível. _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br <mailto:R-br@listas.c3sl.ufpr.br> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e fornea cdigo mnimo reproduzvel.
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel.
-- Best regards, Vinícius Lionel Mateus, MSc (http://lattes.cnpq.br/6501001637020665) Chemistry PhD Student Atmospheric Chemistry Laboratory - Dep. Chemistry PUC-Rio - Pontifical Catholic University of Rio de Janeiro Marquês de São Vicente, 225, Gávea - Rio de Janeiro, RJ - Brazil CEP: 22451-900 Phone: (+45) 26 28 28 51 (+55) (21) 3527-1327 (+55) (21) 993 - 588 - 051 Skype: vinicius.lionel http://www.qui.puc-rio.br/index.html