[R-br] Loop para ajuste de nls reciclando os start values
Fernando Souza
nandodesouza em gmail.com
Qui Abr 25 12:13:10 -03 2019
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) <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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20190425/ed351d46/attachment.html>
Mais detalhes sobre a lista de discussão R-br