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

Walmes Zeviani walmeszeviani em gmail.com
Segunda Outubro 17 09:33:38 BRST 2016


André,

Apenas para complementar a solução do Marcus, encaminho o código que faz
uso de uma função com recursos do pacote rpanel para ajuste de modelo não
linear de forma interativa. Essa função (na versão antiga) gerou o GIF que
fica na capa da página da lista no Nabble (rs). O uso da interface não
elimina o problema do chute inicial, só diminui porque ao invés de passar
um valor você passa um intervalo e calibra visualmente. Além disso, tem a
parte de análise de resíduos.

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 <- 1961:2013

anos2 <- anos - min(anos) + 1

# Calibrando o chute inicial (por tentativa-erro faça aproximar).
start <- list(a = 12, b = 1.049)
plot(Brasil ~ anos2)
with(start,
     curve(a * (b^(anos2)),
           xname = "anos2",
           add = TRUE,
           col = 2))

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

# Verificando o ajuste.
plot(Brasil ~ anos2)
with(as.list(coef(fit)),
     curve(a * (b^(anos2)),
           xname = "anos2",
           add = TRUE,
           col = 4))

# rp.nls: função que usa recursos no pacote rpanel para ajuste de
# modelos de regressão não linear.
source(paste0("https://raw.githubusercontent.com/walmes/",
              "wzRfun/master/R/rp.nls.R"))
library(rpanel)

fit <- rp.nls(Brasil ~ a * (b^(anos2)),
              data = data.frame(Brasil = Brasil, anos2 = anos2),
              start = list(a = c(5, 20),
                           b = c(0.95, 1.5)))
summary(fit)

# Função que era do pacote nls2() mas foi removida (guardei o fonte).
source("~/Dropbox/CursoR/GeneticaEsalq/as.lm.R")
library(nls2)

mit <- as.lm(fit)

# Diagnóstico do modelo.
par(mfrow = c(2, 2))
plot(mit)
layout(1)

# ! Relação média variância !

# Linear!
plot(log(Brasil) ~ anos2)

À disposição.
Walmes.

​
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20161017/8229a51a/attachment.html>


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