[R-br] Imputação de dados com processamento paralelo

Vinícius Lionel Mateus vinynegrelli em gmail.com
Terça Outubro 20 18:36:23 BRST 2015


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 em live.com 
> <mailto:dmarcelino em 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 em gmail.com <mailto:vinynegrelli em 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 em listas.c3sl.ufpr.br <mailto:R-br em 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 em listas.c3sl.ufpr.br <mailto:R-br em 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 em listas.c3sl.ufpr.br <mailto:R-br em 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 em 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

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20151020/c8c87aef/attachment.html>


Mais detalhes sobre a lista de discussão R-br