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

ASANTOS alexandre.santos em cas.ifmt.edu.br
Qui Abr 25 12:46:43 -03 2019


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
         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 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> 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
>     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/
>     ======================================================================
>
>     _______________________________________________
>     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
>     fornea cdigo mnimo reproduzvel.
>
> Sent from Mailspring 
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20190425/91439a80/attachment.html>


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