[R-br] Problemas em foreach e parallel

Rubem Kaipper Ceratti rubem_ceratti em yahoo.com.br
Quarta Outubro 21 13:24:01 BRST 2015


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 <- 100M <- 1e4p <- 2X <- 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 Normaln=100M=10p=2X=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.10X1 4.738553 4.584143 4.923599 4.962845 4.737695 5.2330998 4.9280171X2 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.

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


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