[R-br] Problemas em foreach e parallel

Clécio da Silva Ferreira clecio.ferreira em ufjf.edu.br
Quarta Outubro 21 18:13:21 BRST 2015


Olá, Rubem, obrigado pela ajuda. Mas note abaixo que não resolveu o
problema de não estimar todas as amostras.  Anda, note que é aleatório,
pois nesse resultado, ela deixou de estimar as amostras 1, 4 e 5. No
exemplo anterior, foram as amostras 5, 8 e 9.

> tetaM=matrix(0,p,M)
> strt<-Sys.time()
> tetaM=foreach (k = 1:M,.combine=cbind) %dopar% {
+ y=yM[,k]
+ lm(y~X-1)$coefficients
+ #sgn.logL(teta3,y,X)
+ }
> print(Sys.time()-strt)
Time difference of 0.1875119 secs
>
> tetaM
   result.2 result.3 result.6  result.7 result.8  result.9 result.10
X1 4.584143 4.923599 4.737695 5.2330998 4.743239 5.2077600 4.9280171
X2 1.855138 1.121618 1.571513 0.6168855 1.305456 0.7255616 0.9040763

Atenciosamente,

Prof. Clécio da Silva Ferreira
Depto de Estatística - UFJF
Tel: (32) 2102-3306
Página: www.ufjf.br/clecio_ferreira


Em 21 de outubro de 2015 13:24, Rubem Kaipper Ceratti <
rubem_ceratti em yahoo.com.br> escreveu:

> Clécio,
>
> Não sei exatamente a razão da mensagem de erro, mas repare que você cria a
> matriz tetaM, depois atribui à tetaM o resultado do foreach, e *dentro* do
> foreach você ainda tenta atribuir à coluna k de tetaM os coeficientes da
> regressão. Imagino que seja alguma coisa aí no meio que esteja causando o
> erro.
>
> De toda forma, o foreach com o argumento *.combine=cbind* já retornaria
> uma matriz p por M. Segue abaixo uma versão simplificada e funcional do seu
> código:
>
> # Criação dos cores em paralelo:
> library(doParallel)
> cl <- makeCluster(3)
> registerDoParallel(cl)
>
>
> # Código
> # Modelo Normal
> n <- 100
> M <- 1e4
> p <- 2
> X <- matrix(1, n, p)
> X[, 2] <- runif(n)
> beta0 <- matrix(c(5, 1), 2, 1)
> sigma2 <- 1
>
>
> # Simulação
> strt <- Sys.time()
> tetaM <- foreach(k = 1:M, .combine = cbind) %dopar% {
>   erro <- rnorm(n, 0, sigma2)
>   y <- X %*% beta0 + erro
>   lm(y ~ X-1)$coefficients
> }
> print(Sys.time()-strt)
>
> dim(tetaM)
> tetaM[, 1:100]
>
>
> ------------------------------
> *De:* Clécio da Silva Ferreira <clecio.ferreira em ufjf.edu.br>
> *Para:* r-br em listas.c3sl.ufpr.br
> *Enviadas:* Quarta-feira, 21 de Outubro de 2015 9:03
> *Assunto:* [R-br] Problemas em foreach e parallel
>
> Prezados, estou tentando utilizar as ferramentas de paralelo em R para
> Windows. Acontecem dois problemas:
> 1. Às vezes parece que os workers não 'ativam', dando a mensagem de erro
> abaixo. Note que não roda, pois o tetaM continua como matriz de 0s. Eu às
> vezes tenho de colar as funções mais de uma vez para então 'ligar'.
>
> 2. Neste exemplo, eu faço replicações de amostras de um MRLM (só um
> treinamento) e  estimo o modelo para cada amostra. Independente da
> quantidade de amostras que eu gero (M amostras), ele sempre me devolve com
> 3 resultados a menos. 3 é o nº de cores que eu coloquei.
>
> Alguém tem alguma ideia da origem do problema? Ah, eu fiz para outros
> modelos que trabalho e ocorrem os mesmos problemas
>
>
> # Criação dos cores em paralelo:
> library(doParallel)
> library(foreach)
> cl<-makeCluster(3, type="SOCK")
> library(doSNOW)
> registerDoSNOW(cl)
>
>
> # Código
>
> # Modelo Normal
> n=100
> M=10
> p=2
> X=matrix(1,n,p)
> X[,2]=runif(n)
> beta0=matrix(c(5,1),2,1)
> sigma2=1
>
> yM=matrix(0,n,M)
> for (k in 1:M) {
> erro=rnorm(n,0,sigma2)
> yM[,k]=X%*%beta0+erro
> }
>
>
> tetaM=matrix(0,p,M)
> strt<-Sys.time()
> tetaM=foreach (k = 1:M,.combine=cbind) %dopar% {
> y=yM[,k]
> tetaM[,k]=lm(y~X-1)$coefficients
> #sgn.logL(teta3,y,X)
> }
> print(Sys.time()-strt)
>
> tetaM
>
>
> # Rodando no R:
>
> > tetaM=matrix(0,p,M)
> > strt<-Sys.time()
> > tetaM=foreach (k = 1:M,.combine=cbind) %dopar% {
> + y=yM[,k]
> + tetaM[,k]=lm(y~X-1)$coefficients
> + #sgn.logL(teta3,y,X)
> + }
> Error in e$fun(obj, substitute(ex), parent.frame(), e$data) :
>   worker initialization failed: 5.207760032192210.72556160440376
> > print(Sys.time()-strt)
> Time difference of 0.06304097 secs
> >
> > tetaM
>      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
> [1,]    0    0    0    0    0    0    0    0    0     0
> [2,]    0    0    0    0    0    0    0    0    0     0
> > tetaM=matrix(0,p,M)
> > strt<-Sys.time()
> > tetaM=foreach (k = 1:M,.combine=cbind) %dopar% {
> + y=yM[,k]
> + tetaM[,k]=lm(y~X-1)$coefficients
> + #sgn.logL(teta3,y,X)
> + }
> > print(Sys.time()-strt)
> Time difference of 0.07505703 secs
> >
> > tetaM
>    result.1 result.2 result.3 result.4 result.6  result.7 result.10
> X1 4.738553 4.584143 4.923599 4.962845 4.737695 5.2330998 4.9280171
> X2 1.313208 1.855138 1.121618 1.053215 1.571513 0.6168855 0.9040763
>
>
> Atenciosamente,
>
> Prof. Clécio da Silva Ferreira
> Depto de Estatística - UFJF
> Tel: (32) 2102-3306
> Página: www.ufjf.br/clecio_ferreira
>
>
> _______________________________________________
> 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� c�igo
> m�imo reproduz�el.
>
>
> _______________________________________________
> 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/20151021/fd3d8b7a/attachment.html>


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