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

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

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

R-br mailing list
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:[hidden email]
         [hidden email]
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
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

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

R-br mailing list
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){

    summary(nlsLM(Diameter ~ a1 * Age^a2,start = list(a1 = 0.1, a2 = 10),control = nls.control(maxiter = 1000), data = dados))

}

list_modelos <- dlply(d,.(Feature),modelo)

list_modelos

On Apr 25 2019, at 10:53 am, ASANTOS por (R-br) <[hidden email]> 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)
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
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
_______________________________________________
R-br mailing list
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

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

R-br mailing list

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)
[hidden email] 
        [hidden email] 
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) [hidden email] 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)
OrcID: orcid.org/0000-0001-8232-6722 - ResearcherID: A-5790-2016
LinkedIn: br.linkedin.com/in/alexandre-dos-santos-87961635
Mendeley:www.mendeley.com/profiles/alexandre-dos-santos6/
======================================================================

_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e fornea cdigo mnimo reproduzvel.
Sent from Mailspring

_______________________________________________
R-br mailing list
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

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

R-br mailing list
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 <[hidden email]> 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@...
        alexandre.santos@...
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@...> 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)
OrcID: orcid.org/0000-0001-8232-6722 - ResearcherID: A-5790-2016
LinkedIn: br.linkedin.com/in/alexandre-dos-santos-87961635
Mendeley:www.mendeley.com/profiles/alexandre-dos-santos6/
======================================================================

_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e fornea cdigo mnimo reproduzvel.
Sent from Mailspring
Sent from Mailspring
_______________________________________________
R-br mailing list
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

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

R-br mailing list

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)
[hidden email] 
        [hidden email] 
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 [hidden email] 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@... 
        alexandre.santos@... 
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@...> 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)
OrcID: orcid.org/0000-0001-8232-6722 - ResearcherID: A-5790-2016
LinkedIn: br.linkedin.com/in/alexandre-dos-santos-87961635
Mendeley:www.mendeley.com/profiles/alexandre-dos-santos6/
======================================================================

_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e fornea cdigo mnimo reproduzvel.
Sent from Mailspring
Sent from Mailspring

_______________________________________________
R-br mailing list
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

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

R-br mailing list
Agora sim

Eis a minha solução, veja se lhe atende. A saída ta meio tosca (precisa melhorar) mas os resultados acredito que seja o que deseja.

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)



modelo<-function(dados, a=0.01,b=10){
      
   mod<- nlsLM(Diameter ~ a1 * Age^a2,start = list(a1 = a, a2 = b),control = nls.control(maxiter = 1000), data = dados)
   par1<- summary(mod)$coefficients[[1]]
    par2 <- summary(mod)$coefficients[[2]]
   print(summary(mod))
    
   if(mod$convInfo[["finIter"]]>1){
      
       modelo(dados,par1,par2)
      
  }else{

       print(" --------Feature B-----------")


   }         

    }


list_modelos <- dlply(d,.(Feature),modelo)   
list_modelos
   

On Apr 25 2019, at 4:54 pm, ASANTOS <[hidden email]> wrote:

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)
[hidden email]
        [hidden email]
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 [hidden email] 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@...
       
alexandre.santos@...
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@...> 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)
OrcID: orcid.org/0000-0001-8232-6722 - ResearcherID: A-5790-2016
LinkedIn: br.linkedin.com/in/alexandre-dos-santos-87961635
Mendeley:www.mendeley.com/profiles/alexandre-dos-santos6/
======================================================================

_______________________________________________
R-br mailing list
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e fornea cdigo mnimo reproduzvel.
Sent from Mailspring
Sent from Mailspring

_______________________________________________
R-br mailing list
[hidden email]
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.