[R-br] Loop para ajuste de nls reciclando os start values

Fernando Souza nandodesouza em gmail.com
Qui Abr 25 14:22:23 -03 2019


Veja se entendi bem.
Mas se eu rodo um modelo para o subgrupo Feature ==A e um modelo para o subgrupo Featura==B e obtenho os parametros do modelo a1 e a2, e b1 e b2 respectivamente. Eu vou utilizar esses parâmetros para ajustar esses modelo novamente sobre os mesmos dados 999? Faz sentido isso? Acredito que você queira utilizar esses parâmetros como valores iniciais para outro conjunto de dados.
Os parametros a1 e a2 do modelo Feature==A e b1 e b2 do modelo Feature ==B são os melhores parametros do ajuste do modelos , ficar reajustando o modelo com esses parâmetros como valores iniciais, para o mesmo banco de dados, não alterarar o modelo em nada.

"Sim isso não consegui colocar como condição, mas eu queria para quando a iteração para os dois modelos fosse igual a 1, ou n modelos se houverem."
Acredito que afunção nlsLM conte o número de interação para obter o melhor ajuste e limita um valor máximo para nao ficar rodando indefinidamente. Esta contagem é crescente não?
Desculpe a pergunta mas estou tentando enteder a questão para propor um solução

On Apr 25 2019, at 12:46 pm, ASANTOS <alexandre.santos em cas.ifmt.edu.br> wrote:
>
> Obrigado pelo feedback Fernando,
> 1 - O loop de 999 vezes é para ajustar 999 modelos diferentes? Que parâmetro você altera em cada loop.
> O loop em 999 é para a cada vez que é realizado um ajuste, extrair os novos coeficientes coef(mod_ND[[i]])[1] e coef(mod_ND[[i]])[2] e os coloca no novo ajuste e repete isso n vezes até que a iteração de algum ajuste seja =1. Então necessariamente não precisa rodar 999 vezes, coloquei um número alto, mas imagino que a iteração igual a 1 venha a surgir antes.
> 2- "porém a cada vez que realiza o loop eu gostaria de reciclar os start values através da modificação em coef(mod_ND[[i]])[1] e coef(mod_ND[[i]])[2]." . O que você quer dizer com "Reciclar" --> modificar para qual valores?
> Reciclar é a cada novo ajuste utilizar como start values os coef(mod_ND[[i]])[1] e coef(mod_ND[[i]])[2] do ajuste anterior, a menos que a iteração seja igual a 1.
> 4- Explique melhor as interações: A condição para o loop parar é quando a iteração for igual a 1 para os dois modelos ( if (mod_ND[[z,c(finIter")]] <= ){ break } ## ).
> Sim isso não consegui colocar como condição, mas eu queria para quando a iteração para os dois modelos fosse igual a 1, ou n modelos se houverem.
> Baseada na sua resposta, que também eu não consegui ainda fazer funcionar, seria:
> # #Realizando os ajustes
> for(z in 1:999){
>
>
> modelo<-function(dados){
>
> mod_ND[[z]] < -summary(nlsLM(Diameter ~ a1 * Age^a2,start = list(a1 = 0.1, a2 = 10), control = nls.control(maxiter = 1000), data = dados))
>
> if (mod_ND[[z,c("finIter")]] <= 1){ break }
>
> }
>
> }
> list_modelos <- dlply(d,.(Feature),modelo)
>
> list_modelos
>
>
>
>
>
>
>
> --
> ======================================================================
> Alexandre dos Santos
> Proteção Florestal
> IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso
> Campus Cáceres
> Caixa Postal 244
> Avenida dos Ramires, s/n
> Bairro: Distrito Industrial
> Cáceres - MT CEP: 78.200-000
> Fone: (+55) 65 99686-6970 (VIVO) (+55) 65 3221-2674 (FIXO)
> e-mails:alexandresantosbr em yahoo.com.br (https://link.getmailspring.com/link/522C999C-97DC-4281-AAE7-236E9F648D2E@getmailspring.com/0?redirect=mailto%3Ae-mails%3Aalexandresantosbr%40yahoo.com.br&recipient=ci1ickBsaXN0YXMuYzNzbC51ZnByLmJy)
> alexandre.santos em cas.ifmt.edu.br (https://link.getmailspring.com/link/522C999C-97DC-4281-AAE7-236E9F648D2E@getmailspring.com/1?redirect=mailto%3Aalexandre.santos%40cas.ifmt.edu.br&recipient=ci1ickBsaXN0YXMuYzNzbC51ZnByLmJy)
> Lattes: http://lattes.cnpq.br/1360403201088680 (https://link.getmailspring.com/link/522C999C-97DC-4281-AAE7-236E9F648D2E@getmailspring.com/2?redirect=http%3A%2F%2Flattes.cnpq.br%2F1360403201088680&recipient=ci1ickBsaXN0YXMuYzNzbC51ZnByLmJy)
> OrcID: orcid.org/0000-0001-8232-6722 - ResearcherID: A-5790-2016
> Researchgate: www.researchgate.net/profile/Alexandre_Santos10 (https://link.getmailspring.com/link/522C999C-97DC-4281-AAE7-236E9F648D2E@getmailspring.com/3?redirect=http%3A%2F%2Fwww.researchgate.net%2Fprofile%2FAlexandre_Santos10&recipient=ci1ickBsaXN0YXMuYzNzbC51ZnByLmJy)
> LinkedIn: br.linkedin.com/in/alexandre-dos-santos-87961635
> Mendeley:www.mendeley.com/profiles/alexandre-dos-santos6/
> ======================================================================
> Em 25/04/2019 11:13, Fernando Souza escreveu:
>
> >
> > Alexandre , Algumas de suas explicações não estão muito claras para mim.
> > 1 - O loop de 999 vezes é para ajustar 999 modelos diferentes? Que parametro você altera em cada loop.
> > 2- "porém a cada vez que realiza o loop eu gostaria de reciclar os start values através da modificação em coef(mod_ND[[i]])[1] e coef(mod_ND[[i]])[2]." . O que você quer dizer com "Reciclar" --> modificar para qual valores?
> > 4- Explique melhor as interações: A condição para o loop parar é quando a iteração for igual a 1 para os dois modelos ( if (mod_ND[[z,c(finIter")]] <= ){ break } ## ).
> >
> > Acredito que a solução final para seu problema passe pela seguinte abordagem. No entanto preciso de mais esclarecimentos para melhorar.
> > library(minpack.lm)
> > library(plyr)
> >
> > ##Banco de dados
> > Feature<-sort(rep(c("A","B"),22))
> > Age<-c(60,72,88,96,27,36,48,60,72,88,96,27,36,48,60,72,88,96,27,36,48,60,27,27,36,48,60,72,88,96,27,36,48,60,72,88,96,27,36,48,60,72,88,96)
> > Diameter<-c(13.9,16.2,19.1,19.3,4.7,6.7,9.6,11.2,13.1,15.3,15.4,5.4,7,9.9,11.7,13.4,16.1,16.2,5.9,8.3,12.3,14.5,2.3,5.2,6.2,8.6,9.3,11.3,15.1,15.5,5,7,7.9,8.4,10.5,14,14,4.1,4.9,6,6.7,7.7,8,8.2)
> > d<-dados <- data.frame(Feature,Age,Diameter)
> > str(d)
> >
> > # #Realizando os ajustes
> > modelo<-function(dados){
> >
> > }
> > list_modelos <- dlply(d,.(Feature),modelo)
> > list_modelos
> > On Apr 25 2019, at 10:53 am, ASANTOS por (R-br) <r-br em listas.c3sl.ufpr.br> (https://link.getmailspring.com/link/522C999C-97DC-4281-AAE7-236E9F648D2E@getmailspring.com/4?redirect=mailto%3Ar-br%40listas.c3sl.ufpr.br&recipient=ci1ickBsaXN0YXMuYzNzbC51ZnByLmJy) wrote:
> > > Prezados Membros,
> > >
> > > Gostaria de fazer um loop (999 vezes) para ajustar dois modelos nls
> > > (Diameter ~ a1 * Age^a2) à partir de um subset em função da minha
> > > variável Feature, porém a cada vez que realiza o loop eu gostaria de
> > > reciclar os start values através da modificação em coef(mod_ND[[i]])[1]
> > > e coef(mod_ND[[i]])[2]. A condição para o loop parar é quando a
> > > iteração for igual a 1 para os dois modelos ( if
> > > (mod_ND[[z,c(finIter")]] <= 1){ break } ## ). Bom, mas infelizmente não
> > > esta funcionando não, alguma ideia? Segue CRM:
> > >
> > > #Pacote
> > > library(minpack.lm)
> > >
> > > # Meu banco de dados onde tenho o Diameter das plantas em função de
> > > Feature e Age.
> > > Feature<-sort(rep(c("A","B"),22))
> > > Age<-c(60,72,88,96,27,
> > > 36,48,60,72,88,96,27,36,48,60,72,
> > > 88,96,27,36,48,60,27,27,36,48,60,
> > > 72,88,96,27,36,48,60,72,88,96,27,
> > > 36,48,60,72,88,96)
> > > Diameter<-c(13.9,16.2,
> > > 19.1,19.3,4.7,6.7,9.6,11.2,13.1,15.3,
> > > 15.4,5.4,7,9.9,11.7,13.4,16.1,16.2,
> > > 5.9,8.3,12.3,14.5,2.3,5.2,6.2,8.6,9.3,
> > > 11.3,15.1,15.5,5,7,7.9,8.4,10.5,14,14,
> > > 4.1,4.9,6,6.7,7.7,8,8.2)
> > > d<-dados <- data.frame(Feature,Age,Diameter)
> > > str(d)
> > >
> > > #Realizando os ajustes
> > > e1<- Diameter ~ a1 * Age^a2
> > > Fecture_vec<-unique(d$Feature)
> > > mod_ND <- list() #List para salvar cada modelo
> > > for(i in 1:length(Fecture_vec)){
> > > d2 <- subset(d, d$Feature == Fecture_vec[i])
> > > mod_ND[[i]] <- nlsLM(e1, data = d2,
> > > start = list(a1 = 0.1, a2 = 10),
> > > control = nls.control(maxiter = 1000))
> > > Xs<-data.frame()
> > > for(z in 1:999){
> > > d2 <- subset(d, d$Feature == Fecture_vec[i])
> > > mod_ND[[z]] <- nlsLM(e1, data = d2,
> > > start = list(a1 = coef(mod_ND[[i]])[1], a2 = mod_ND[[i]])[2]),
> > > control = nls.control(maxiter = 1000))
> > > if (mod_ND[[z,c(finIter")]] <= 1){ break } ## Só para quando
> > > iteração = 1
> > > print(summary(mod_ND[[z]]))
> > > }
> > > }
> > > #
> > >
> > > Obrigado
> > >
> > >
> > > --
> > > ======================================================================
> > > Alexandre dos Santos
> > > Proteção Florestal
> > > IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso
> > > Campus Cáceres
> > > Caixa Postal 244
> > > Avenida dos Ramires, s/n
> > > Bairro: Distrito Industrial
> > > Cáceres - MT CEP: 78.200-000
> > > Fone: (+55) 65 99686-6970 (VIVO) (+55) 65 3221-2674 (FIXO)
> > > e-mails:alexandresantosbr em yahoo.com.br (https://link.getmailspring.com/link/522C999C-97DC-4281-AAE7-236E9F648D2E@getmailspring.com/5?redirect=mailto%3Ae-mails%3Aalexandresantosbr%40yahoo.com.br&recipient=ci1ickBsaXN0YXMuYzNzbC51ZnByLmJy)
> > > alexandre.santos em cas.ifmt.edu.br (https://link.getmailspring.com/link/522C999C-97DC-4281-AAE7-236E9F648D2E@getmailspring.com/6?redirect=mailto%3Aalexandre.santos%40cas.ifmt.edu.br&recipient=ci1ickBsaXN0YXMuYzNzbC51ZnByLmJy)
> > > Lattes: http://lattes.cnpq.br/1360403201088680 (https://link.getmailspring.com/link/522C999C-97DC-4281-AAE7-236E9F648D2E@getmailspring.com/7?redirect=http%3A%2F%2Flattes.cnpq.br%2F1360403201088680&recipient=ci1ickBsaXN0YXMuYzNzbC51ZnByLmJy)
> > > OrcID: orcid.org/0000-0001-8232-6722 - ResearcherID: A-5790-2016
> > > Researchgate: www.researchgate.net/profile/Alexandre_Santos10 (https://link.getmailspring.com/link/522C999C-97DC-4281-AAE7-236E9F648D2E@getmailspring.com/8?redirect=http%3A%2F%2Fwww.researchgate.net%2Fprofile%2FAlexandre_Santos10&recipient=ci1ickBsaXN0YXMuYzNzbC51ZnByLmJy)
> > > LinkedIn: br.linkedin.com/in/alexandre-dos-santos-87961635
> > > Mendeley:www.mendeley.com/profiles/alexandre-dos-santos6/
> > > ======================================================================
> > >
> > > _______________________________________________
> > > R-br mailing list
> > > R-br em listas.c3sl.ufpr.br (https://link.getmailspring.com/link/522C999C-97DC-4281-AAE7-236E9F648D2E@getmailspring.com/9?redirect=mailto%3AR-br%40listas.c3sl.ufpr.br&recipient=ci1ickBsaXN0YXMuYzNzbC51ZnByLmJy)
> > > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br (https://link.getmailspring.com/link/522C999C-97DC-4281-AAE7-236E9F648D2E@getmailspring.com/10?redirect=https%3A%2F%2Flistas.inf.ufpr.br%2Fcgi-bin%2Fmailman%2Flistinfo%2Fr-br&recipient=ci1ickBsaXN0YXMuYzNzbC51ZnByLmJy)
> > > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia (https://link.getmailspring.com/link/522C999C-97DC-4281-AAE7-236E9F648D2E@getmailspring.com/11?redirect=http%3A%2F%2Fwww.leg.ufpr.br%2Fr-br-guia&recipient=ci1ickBsaXN0YXMuYzNzbC51ZnByLmJy)) e fornea cdigo mnimo reproduzvel.
> > >
> >
> >
>
>

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


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