[R-br] Ajuste de modelo não linear

Marcus Nunes marcus.nunes em gmail.com
Domingo Outubro 16 10:15:19 BRST 2016


O erro do R diz que tu excedeu o número máximo de iterações. Eu aumentei
eles para 500 e, mesmo assim, não convergiu.

Creio que o teu problema não tenha solução da maneira que foi proposto. Vai
ser muito difícil encontrar uma função do tipo

f(anos) = a*(b^anos)

que funcione com um número tão grande para anos. Imagine uma função
exponencial que cresce muito, muito, muito devagar até 1961 e, a partir
daí, explode seu crescimento? Difícil, né?

Para lidar com este problema, o que eu faria é o reduzir o valor dos anos,
fazendo eles começarem em 1. Assim fica algo muito mais fácil de imaginar e
interpretar:

#####
Brasil <- c(13.63
,13.93,14.09,15.12,15.98,16.08,16.45,17.96,18.83,19.28,19.18,20.89,21.87,21.85,23.43,25.38,25.64,26.99,28.68,31.92,32.92,33.32,34.37,34.99,36.08,37.72,40.41,42.81,44.18,44.91,48.97,51.59,53.44,56.49,62.2,66.49,67.01,68.41,74.14,77.58,80.39,85.71,89.58,96.3,100.9,102.8,107.69,111.51,111.42,116.59,118.85,121.42,127.53)
anos <-
c(1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013)

anos2   <- anos-min(anos)+1

fit <- nls(Brasil ~ a*(b^(anos2)), start = list(a=12, b=1.4))

a <- coefficients(fit)[1]
b <- coefficients(fit)[2]

plot(Brasil ~ anos2)
lines(a*(b^anos2), col="red", lty=2)
###

Para encontrar os valores iniciais, eu tomei log(Brasil), ajustei uma reta
a estes dados e tomei a exponencial dos valores encontrados. Aliás,
linearizar a tua variável resposta é uma outra maneira de resolver este
problema. Só tem que tomar cuidado com as inferências posteriores.







2016-10-15 22:56 GMT-03:00 Andre Oliveira via R-br <r-br em listas.c3sl.ufpr.br
>:

> Boa noite pessoal,
> o que eu poderia modificar neste ajuste para obter exito? Já variei os
> chutes iniciais e não consegui.
>
>
> Brasil<- c(13.63 ,13.93,14.09,15.12,15.98,16.
> 08,16.45,17.96,18.83,19.28,19.18,20.89,21.87,21.85,23.43,25.
> 38,25.64,26.99,28.68,31.92,32.92,33.32,34.37,34.99,36.08,37.
> 72,40.41,42.81,44.18,44.91,48.97,51.59,53.44,56.49,62.2,66.
> 49,67.01,68.41,74.14,77.58,80.39,85.71,89.58,96.3,100.9,102.
> 8,107.69,111.51,111.42,116.59,118.85,121.42,127.53);
> anos <- c(1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,
> 1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,
> 1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,
> 1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,
> 2008,2009,2010,2011,2012,2013);
>
> fit<-nls(Brasil~a*(b^(anos)), start = list(a =18, b=1.4))
>
> *Error in nls(Brasil ~ a * (b^(anos)), start = list(a = 18, b = 1.4)) :
> número de iterações excedeu o máximo de 50*
>
> André Oliveira Souza. Graduação em Matemática, mestrado em estatística
> aplicada.Instituto Federal de Educação, Ciência e Tecnologia do Espirito
> Santo.  IFES
>
> _______________________________________________
> 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 forneça
> código mínimo reproduzível.
>



-- 
Marcus Nunes
http://marcusnunes.me/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20161016/d8aee0d8/attachment.html>


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