Problema resolvido pela regra nº 1: reseta (no caso remover todos os objetos) e recomece.

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 18:13, Clécio da Silva Ferreira <clecio.ferreira@ufjf.edu.br> escreveu:
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@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@ufjf.edu.br>
Para: r-br@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@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@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.