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

Pedro Emmanuel Alvarenga Americano do Brasil emmanuel.brasil em gmail.com
Sexta Outubro 23 07:24:22 BRST 2015


A força por aqui, sempre encontra o seu camimho.

Que a firça esteja sempre contigo tambem.

Pedro Brasil
via Android (:)=
Em 20/10/2015 18:38, "Vinícius Lionel Mateus" <vinynegrelli em gmail.com>
escreveu:

> 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>
> 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
>> >:
>> > 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
>> > 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
>> >
>> >
>> > _______________________________________________
>> > 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.
>> _______________________________________________
>> 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 fornea
>> cdigo mnimo reproduzvel.
>
>
>
>
> _______________________________________________
> R-br mailing listR-br em listas.c3sl.ufpr.brhttps://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.lionelhttp://www.qui.puc-rio.br/index.html
>
>
> _______________________________________________
> 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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20151023/d2e8bc6c/attachment.html>


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