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

ASANTOS alexandre.santos em cas.ifmt.edu.br
Qui Abr 25 16:54:23 -03 2019


Obrigado novamente Fernando,

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. 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

Resposta:

São valores iniciais para o mesmo conjunto de dados o que eu quero, 
porque a função nls() faz se ajustada uma única vez:

1) Uso um intervalo de valores iniciais  para chegar perto dos 
coeficientes ideais (no exemplo abaixo sem considerar o subset):

mod1<-nlsLM(e1, data = d,
       start = list(a1 = 0.1, a2 = 10),
       control = nls.control(maxiter = 1000))

Nonlinear regression model model: Diameter ~ a1 * Age^a2 data: d a1 a2 
5.845e-08 4.283e+00 residual sum-of-squares: 1913 Number of iterations 
till stop: 100 Achieved convergence tolerance: 1.49e-08 Reason stopped: 
Number of calls to `fcn' has reached or exceeded `maxfev' == 300

2) Depois utilizo os coeficientes do ajuste anterior novamente:

mod2<-nlsLM(e1, data = d,
       start = list(a1 = 5.845e-08, a2 = 4.283e+000),
       control = nls.control(maxiter = 1000))


Nonlinear regression model model: Diameter ~ a1 * Age^a2 data: d a1 a2 
0.3357 0.8376 residual sum-of-squares: 271 Number of iterations to 
convergence: 54 Achieved convergence tolerance: 1.49e-08

3) Novamente:

mod3<-nlsLM(e1, data = d,
       start = list(a1 = 0.3357, a2 =0.8376),
       control = nls.control(maxiter = 1000))

Nonlinear regression model model: Diameter ~ a1 * Age^a2 data: d a1 a2 
0.3357 0.8376 residual sum-of-squares: 271 Number of iterations to 
convergence: 2 Achieved convergence tolerance: 1.49e-08

4) Deu no exemplo acima 2 iteraçõe. Quero repetir até 1 iteração para 
ter uma ideia da estabilidade dos coeficientes!!!







-- 
======================================================================
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
         alexandre.santos em cas.ifmt.edu.br
Lattes: http://lattes.cnpq.br/1360403201088680
OrcID: orcid.org/0000-0001-8232-6722   -   ResearcherID: A-5790-2016
Researchgate: www.researchgate.net/profile/Alexandre_Santos10
LinkedIn: br.linkedin.com/in/alexandre-dos-santos-87961635
Mendeley:www.mendeley.com/profiles/alexandre-dos-santos6/
======================================================================

Em 25/04/2019 13:22, Fernando Souza escreveu:
> 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=YWxleGFuZHJlLnNhbnRvc0BjYXMuaWZtdC5lZHUuYnI%3D>  
>              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=YWxleGFuZHJlLnNhbnRvc0BjYXMuaWZtdC5lZHUuYnI%3D>  
>     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=YWxleGFuZHJlLnNhbnRvc0BjYXMuaWZtdC5lZHUuYnI%3D>  
>     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=YWxleGFuZHJlLnNhbnRvc0BjYXMuaWZtdC5lZHUuYnI%3D>                        
>     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=YWxleGFuZHJlLnNhbnRvc0BjYXMuaWZtdC5lZHUuYnI%3D>
>         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=YWxleGFuZHJlLnNhbnRvc0BjYXMuaWZtdC5lZHUuYnI%3D>
>             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=YWxleGFuZHJlLnNhbnRvc0BjYXMuaWZtdC5lZHUuYnI%3D>
>             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=YWxleGFuZHJlLnNhbnRvc0BjYXMuaWZtdC5lZHUuYnI%3D>
>             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=YWxleGFuZHJlLnNhbnRvc0BjYXMuaWZtdC5lZHUuYnI%3D>
>             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=YWxleGFuZHJlLnNhbnRvc0BjYXMuaWZtdC5lZHUuYnI%3D>
>             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=YWxleGFuZHJlLnNhbnRvc0BjYXMuaWZtdC5lZHUuYnI%3D>
>             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=YWxleGFuZHJlLnNhbnRvc0BjYXMuaWZtdC5lZHUuYnI%3D>)
>             e fornea cdigo mnimo reproduzvel.
>
>         Sent from Mailspring
>
> Sent from Mailspring 
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20190425/4099dae5/attachment.html>


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