Dependencias no mclapply

Olá a todos. Na busca de melhorias no processamento paralelo, estou com uma dúvida quanto a função mclapply do pacote multicore. Benilton já me deu várias dicas de como proceder com o mesmo, mas ainda tenho a seguinte dúvida: - Quanto a questão de dependências dentro das operações do mclapply, por exemplo, nas seguintes instruções: mclapply(1:100, function(i) { g <- mvrnorm(n=1, mat.cokri[[1]],mat.cokri[[2]]) #1 seq1 <- seq(1,nlinhas,by=2) #2 seq2 <- seq(2,nlinhas,by=2) #3 y1 <- g[seq1] #4 y2 <- g[seq2] #5 gerado <- data.frame(y1,y2) #6 compos <- agl(gerado) #7 compos1 <- cbind(compos,compos1) #8 },mc.cores=4 ) - Em minha análise, cada um dos 4 núcleos vai executar todas as instruções dentro da função, ou seja, cada núcleo vai executar as 8 instruções dentro da função. Mas a dúvida surge quanto as dependências, visto que em uma execução sequencial, todas as instruções seriam executadas sequencialmente, e a próxima iteração só iniciaria após o resultado de "compos1" ter sido atribuído. E quanto ao processo paralelo, seria respeitado tal sequencia de instruções, ou seja, a segunda iteração inicia somente após "compos1" ter sido atribuído na primeira iteração? Como o mclapply possui tal controle? Estou ciente que esta questão pode ser mais da implementação do próprio pacote, mas se alguém puder me esclarecer ficaria muito grato. Att, Carlos Beleti.

Cada um dos nucleos executara' as instrucoes 1-8 do modo que elas estao apresentadas dentro da funcao. Cada nucleo executara' essa sequencia independentemente do que esteja acontecendo nos outros nucleos. Portanto, se o nucleo B terminar primeiro que o nucleo A, entao o nucleo B vai executar o que estiver na fila para ele e nao tera' nada a ver com o que esta' acontecendo no nucleo A. Com mclapply() vc trata apenas de problemas que sejam "embarrassingly parallel"... b 2012/4/19 Junior Beleti <beleti.junior@gmail.com>:
Olá a todos.
Na busca de melhorias no processamento paralelo, estou com uma dúvida quanto a função mclapply do pacote multicore. Benilton já me deu várias dicas de como proceder com o mesmo, mas ainda tenho a seguinte dúvida:
Quanto a questão de dependências dentro das operações do mclapply, por exemplo, nas seguintes instruções:
mclapply(1:100, function(i) {
g <- mvrnorm(n=1, mat.cokri[[1]],mat.cokri[[2]]) #1 seq1 <- seq(1,nlinhas,by=2) #2 seq2 <- seq(2,nlinhas,by=2) #3 y1 <- g[seq1] #4 y2 <- g[seq2] #5 gerado <- data.frame(y1,y2) #6 compos <- agl(gerado) #7 compos1 <- cbind(compos,compos1) #8
},mc.cores=4 )
Em minha análise, cada um dos 4 núcleos vai executar todas as instruções dentro da função, ou seja, cada núcleo vai executar as 8 instruções dentro da função. Mas a dúvida surge quanto as dependências, visto que em uma execução sequencial, todas as instruções seriam executadas sequencialmente, e a próxima iteração só iniciaria após o resultado de "compos1" ter sido atribuído.
E quanto ao processo paralelo, seria respeitado tal sequencia de instruções, ou seja, a segunda iteração inicia somente após "compos1" ter sido atribuído na primeira iteração? Como o mclapply possui tal controle?
Estou ciente que esta questão pode ser mais da implementação do próprio pacote, mas se alguém puder me esclarecer ficaria muito grato.
Att,
Carlos Beleti.
_______________________________________________ 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.

Existe pacote multicore no Windows? Cada um dos nucleos executara' as instrucoes 1-8 do modo que elas estao apresentadas dentro da funcao. Cada nucleo executara' essa sequencia independentemente do que esteja acontecendo nos outros nucleos. Portanto, se o nucleo B terminar primeiro que o nucleo A, entao o nucleo B vai executar o que estiver na fila para ele e nao tera' nada a ver com o que esta' acontecendo no nucleo A. Com mclapply() vc trata apenas de problemas que sejam "embarrassingly parallel"... b 2012/4/19 Junior Beleti <beleti.junior@gmail.com>:
Olá a todos.
Na busca de melhorias no processamento paralelo, estou com uma dúvida quanto a função mclapply do pacote multicore. Benilton já me deu várias dicas de como proceder com o mesmo, mas ainda tenho a seguinte dúvida:
Quanto a questão de dependências dentro das operações do mclapply, por exemplo, nas seguintes instruções:
mclapply(1:100, function(i) {
g <- mvrnorm(n=1, mat.cokri[[1]],mat.cokri[[2]]) #1 seq1 <- seq(1,nlinhas,by=2) #2 seq2 <- seq(2,nlinhas,by=2) #3 y1 <- g[seq1] #4 y2 <- g[seq2] #5 gerado <- data.frame(y1,y2) #6 compos <- agl(gerado) #7 compos1 <- cbind(compos,compos1) #8
},mc.cores=4 )
Em minha análise, cada um dos 4 núcleos vai executar todas as instruções dentro da função, ou seja, cada núcleo vai executar as 8 instruções dentro da função. Mas a dúvida surge quanto as dependências, visto que em uma execução sequencial, todas as instruções seriam executadas sequencialmente, e a próxima iteração só iniciaria após o resultado de "compos1" ter sido atribuído.
E quanto ao processo paralelo, seria respeitado tal sequencia de instruções, ou seja, a segunda iteração inicia somente após "compos1" ter sido atribuído na primeira iteração? Como o mclapply possui tal controle?
Estou ciente que esta questão pode ser mais da implementação do próprio pacote, mas se alguém puder me esclarecer ficaria muito grato.
Att,
Carlos Beleti. .

Eu já respondi essa pergunta para vc..... E não faz nem 10 dias... http://r-br.2285057.n4.nabble.com/R-br-listar-funcoes-de-determinados-pacote... On Friday, 20 April 2012, Mauro Sznelwar wrote:
** *Existe pacote multicore no Windows? *
Cada um dos nucleos executara' as instrucoes 1-8 do modo que elas estao apresentadas dentro da funcao.
Cada nucleo executara' essa sequencia independentemente do que esteja acontecendo nos outros nucleos. Portanto, se o nucleo B terminar primeiro que o nucleo A, entao o nucleo B vai executar o que estiver na fila para ele e nao tera' nada a ver com o que esta' acontecendo no nucleo A.
Com mclapply() vc trata apenas de problemas que sejam "embarrassingly parallel"...
b
2012/4/19 Junior Beleti <beleti.junior@gmail.com>:
Olá a todos.
Na busca de melhorias no processamento paralelo, estou com uma dúvida quanto a função mclapply do pacote multicore. Benilton já me deu várias dicas de como proceder com o mesmo, mas ainda tenho a seguinte dúvida:
Quanto a questão de dependências dentro das operações do mclapply, por exemplo, nas seguintes instruções:
mclapply(1:100, function(i) {
g <- mvrnorm(n=1, mat.cokri[[1]],mat.cokri[[2]]) #1 seq1 <- seq(1,nlinhas,by=2) #2 seq2 <- seq(2,nlinhas,by=2) #3 y1 <- g[seq1] #4 y2 <- g[seq2] #5 gerado <- data.frame(y1,y2) #6 compos <- agl(gerado) #7 compos1 <- cbind(compos,compos1) #8
},mc.cores=4 )
Em minha análise, cada um dos 4 núcleos vai executar todas as instruções dentro da função, ou seja, cada núcleo vai executar as 8 instruções dentro da função. Mas a dúvida surge quanto as dependências, visto que em uma execução sequencial, todas as instruções seriam executadas sequencialmente, e a próxima iteração só iniciaria após o resultado de "compos1" ter sido atribuído.
E quanto ao processo paralelo, seria respeitado tal sequencia de instruções, ou seja, a segunda iteração inicia somente após "compos1" ter sido atribuído na primeira iteração? Como o mclapply possui tal controle?
Estou ciente que esta questão pode ser mais da implementação do próprio pacote, mas se alguém puder me esclarecer ficaria muito grato.
Att,
Carlos Beleti. .

Boa noite pessoal eu tenho um modelo gerado utilizando a função lme do pacote nlme. Agora eu preciso estimar os componentes da Variância desse modelo, mas a função VarCorr() me retorna um erro. Alguém sabe qual o problema e como eu faço para estimar os componentes da variância do meu modelo? Obrigada Isabel Amorim model2<-lme(atr1~prod, random=list(const=pdBlocked(list(~ass-1, ~ass:prod-1),pdClass="pdIdent")),data=panel2) (VarCorr(model2) Erro em function (classes, fdef, mtable) : unable to find an inherited method for function "VarCorr", for signature "lme"

pelo CMR que você apresentou acredito que é um erro de comandos seu. Há um parêntese não fechado você escreveu (VarCorr(model2), quando na verdade o correto seria VarCorr(modelo2) Em 19 de abril de 2012 23:39, isabel de sousa Amorim < isabelsousaamorim@yahoo.com.br> escreveu:
Boa noite pessoal eu tenho um modelo gerado utilizando a função lme do pacote nlme. Agora eu preciso estimar os componentes da Variância desse modelo, mas a função VarCorr() me retorna um erro. Alguém sabe qual o problema e como eu faço para estimar os componentes da variância do meu modelo?
Obrigada Isabel Amorim
model2<-lme(atr1~prod, random=list(const=pdBlocked(list(~ass-1, ~ass:prod-1),pdClass="pdIdent")),data=panel2) (VarCorr(model2) Erro em function (classes, fdef, mtable) : unable to find an inherited method for function "VarCorr", for signature "lme"
_______________________________________________ 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.

Isabel, O seu modelo é estimado com o seu código? A princípio, se o summary() retorna os componentes de variância o VarCorr() deveria fazê-lo também. Só não estou seguro sobre a forma que você está usando no argumento random=, o que significa o "-1" (remover intercepto?), e certifique-se se a lme() entende o ":" pois é usual declarar com "/", ou seja, "A/B" ao invés de "A+A:B". Se não for nada disso, envie nos um CMR. À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

Oi Walmes obrigada por responder. Então, o modelo é estimado com seguinte código: model2<-lme(form2, random=list(const=pdBlocked(list(~ass-1, ~ass:prod-1),pdClass="pdIdent")),data=panel2) onde -1 indica remover o intercepto. O comando summary(model2) não retorna os componentes de variância. O erro deve estar na forma como eu especifiquei meu modelo. Vou tentar corrigir aqui. Obrigada Isabel Isabel, O seu modelo é estimado com o seu código? A princípio, se o summary() retorna os componentes de variância o VarCorr() deveria fazê-lo também. Só não estou seguro sobre a forma que você está usando no argumento random=, o que significa o "-1" (remover intercepto?), e certifique-se se a lme() entende o ":" pois é usual declarar com "/", ou seja, "A/B" ao invés de "A+A:B". Se não for nada disso, envie nos um CMR. À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ========================================================================== _______________________________________________ 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.

Isabel, a menos que eu esteja cometendo um grande engano, não existe isso de remover o intercepto na formula do efeito aleatório. Isso é restrição necessária para efeitos fixos. Os efeitos aleatórios não tem isso, mesmo porque pela própria definição eles tem esperança zero. Eles são preditos individualmente, não tem restrição paramétrica para formação das matrizes (pelo menos o usuário não pode controlar isso). Sendo assim, acho que deveria tentar sem o "-1". E veja sobre o ":" também. À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

O "-1" é aceito na função lme. Ele significa retirar o intercepto do modelo aleatório. significa dizer que os efeitos aleatórios não estão associados com o intercepto (intercepto fixo) e somente com as inclinações (pelo menos foi isto que entendi do livro do bates). Acredito que o erro está na forma como esta inserido o modelo aleatório. Entretanto ela utilizou duas vezes o -1 e aí sim não tem sentido uma vez que ela já o removeu. talvez isto funcione model2<-lme(atr1~prod, random=list(const=pdBlocked(list(~-1,~ass, ~ass:prod),pdClass="pdIdent")),data=panel2) Em 20 de abril de 2012 12:43, Walmes Zeviani <walmeszeviani@gmail.com>escreveu:
Isabel, a menos que eu esteja cometendo um grande engano, não existe isso de remover o intercepto na formula do efeito aleatório. Isso é restrição necessária para efeitos fixos. Os efeitos aleatórios não tem isso, mesmo porque pela própria definição eles tem esperança zero. Eles são preditos individualmente, não tem restrição paramétrica para formação das matrizes (pelo menos o usuário não pode controlar isso). Sendo assim, acho que deveria tentar sem o "-1". E veja sobre o ":" também.
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ 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.

Agora eu entendi, foi confusão da minha parte. É que eu achei que o "-1" estivesse mudando o tipo de contraste mas ele tá informando não incidência de efeito aleatório no parâmetro intercepto. Eu uso a notação "0" para distinguir entre esses casos. # -1 e 0 fazem a mesma coisa a notação melhora o entendimento lm(y~-1+fator) # estima médias e não contrastes com primeiro nível lm(y~0+covariável) # regressão pela origem, impõe intercepto = 0 Certamente, confusões assim seriam evitadas com CMR. W. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================

Obrigada pela ajuda, Walmes e Fernando. O meu modelo esse mesmo Fernando. Eu estou utilizando o mesmo modelo do livro do Bates. Porém eu tenho vários atributos, então eu criei uma função para rodar todos os atributos de só vez. (segue a função abaixo da mensagem). O problema está no comando "VarCorr". Eu consigo fazer "Summary(Model2), mas VarCorr(Model2) não. Eu tentei rodar o exemplo do help do R e deu a mesma mensagem de erro que dá quando eu rodo meu modelo. fm1 <- lme(distance ~ age, data = Orthodont, random = ~age) VarCorr(fm1) Erro em function (classes, fdef, mtable) : unable to find an inherited method for function "VarCorr", for signature "lme" Será que o problema está na minha versão do R? Eu estou trabalhando com a versão 2.15.0 (2012-03-30). Isso tem alguma coisa a ver? Obrigada pela ajuda Isabel Minha função: attrnames<- names(panel)[4:(L+3)] compvar=list() for (j in 1:L){ const<-rep(1, length(panel2$atr1)) panel2$prod<-factor(panel2$prod) panel2$ass<-factor(panel2$ass) form2<- formula(paste(attrnames[j],"~prod")) model2<-lme(form2, random=list(const=pdBlocked(list(~ass-1, ~ass:prod-1),pdClass="pdIdent")),data=panel2) compvar<-c(compvar, list(unique(VarCorr(model2)[,1]))) } ________________________________ De: Walmes Zeviani <walmeszeviani@gmail.com> Para: r-br@listas.c3sl.ufpr.br Enviadas: Sexta-feira, 20 de Abril de 2012 8:06 Assunto: Re: [R-br] VarCorr - nlme Isabel, O seu modelo é estimado com o seu código? A princípio, se o summary() retorna os componentes de variância o VarCorr() deveria fazê-lo também. Só não estou seguro sobre a forma que você está usando no argumento random=, o que significa o "-1" (remover intercepto?), e certifique-se se a lme() entende o ":" pois é usual declarar com "/", ou seja, "A/B" ao invés de "A+A:B". Se não for nada disso, envie nos um CMR. À disposição. Walmes. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ========================================================================== _______________________________________________ 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.

acho pouco provável que seja a versão do seu R. O meu é o 2.14.1 e rodou perfeitamente o código do exemplo. Dê um dput(dados) e envie-o junto com os seus comandos para que outros possam tentar rodar para você. Olhando assim fica difícil encontrar um erro. Em 20 de abril de 2012 14:21, isabel de sousa Amorim < isabelsousaamorim@yahoo.com.br> escreveu:
Obrigada pela ajuda, Walmes e Fernando.
O meu modelo esse mesmo Fernando. Eu estou utilizando o mesmo modelo do livro do Bates. Porém eu tenho vários atributos, então eu criei uma função para rodar todos os atributos de só vez. (segue a função abaixo da mensagem).
O problema está no comando "VarCorr". Eu consigo fazer "Summary(Model2), mas VarCorr(Model2) não.
Eu tentei rodar o exemplo do help do R e deu a mesma mensagem de erro que dá quando eu rodo meu modelo.
fm1 <- lme(distance ~ age, data = Orthodont, random = ~age) VarCorr(fm1)
Erro em function (classes, fdef, mtable) : unable to find an inherited method for function "VarCorr", for signature "lme"
Será que o problema está na minha versão do R? Eu estou trabalhando com a versão 2.15.0 (2012-03-30). Isso tem alguma coisa a ver?
Obrigada pela ajuda Isabel
Minha função: attrnames<- names(panel)[4:(L+3)] compvar=list() for (j in 1:L){ const<-rep(1, length(panel2$atr1)) panel2$prod<-factor(panel2$prod) panel2$ass<-factor(panel2$ass) form2<- formula(paste(attrnames[j],"~prod")) model2<-lme(form2, random=list(const=pdBlocked(list(~ass-1, ~ass:prod-1),pdClass="pdIdent")),data=panel2) compvar<-c(compvar, list(unique(VarCorr(model2)[,1]))) }
------------------------------ *De:* Walmes Zeviani <walmeszeviani@gmail.com> *Para:* r-br@listas.c3sl.ufpr.br *Enviadas:* Sexta-feira, 20 de Abril de 2012 8:06
*Assunto:* Re: [R-br] VarCorr - nlme
Isabel,
O seu modelo é estimado com o seu código? A princípio, se o summary() retorna os componentes de variância o VarCorr() deveria fazê-lo também. Só não estou seguro sobre a forma que você está usando no argumento random=, o que significa o "-1" (remover intercepto?), e certifique-se se a lme() entende o ":" pois é usual declarar com "/", ou seja, "A/B" ao invés de "A+A:B". Se não for nada disso, envie nos um CMR.
À disposição. Walmes.
========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
_______________________________________________ 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.
_______________________________________________ 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.

Você não passou o sessionInfo() mas se você carregou a lme4 apos a nlme, alguns métodos foram sobrescritos. Evite ter os dois pacotes na mesma sessão R. Fora isso não sei o que pode ser. W. ========================================================================== Walmes Marques Zeviani LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W) Departamento de Estatística - Universidade Federal do Paraná fone: (+55) 41 3361 3573 VoIP: (3361 3600) 1053 1173 e-mail: walmes@ufpr.br twitter: @walmeszeviani homepage: http://www.leg.ufpr.br/~walmes linux user number: 531218 ==========================================================================
participantes (6)
-
Benilton Carvalho
-
Fernando Antonio de souza
-
isabel de sousa Amorim
-
Junior Beleti
-
Mauro Sznelwar
-
Walmes Zeviani