[R-br] Ajustamento de dados à curva exponencial
Cícero C Nunes [rh]
rh em posicional.com
Quinta Novembro 28 16:11:57 BRST 2013
Caro Walmes, boa tarde.
Li o comentário sobre “curva exponencial” no e-mail abaixo endereçado ao
grupo.
Pois bem, estou com um probleminha para resolver, a saber:
Tenho estas duas séries:
x<-c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23)
y<-c(100,150,200,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950
,1000,1050,1100,1150,1200)
Utilizei um script apresentado no Livro Conhecendo o R de Luiz A Pertenelli
e Márcio P de Mello pág. 165 e não consegui resolver no R.
Bom! Ajustei a curva y para exponencial Y no EXCEL conforme abaixo:
Y<-c(187,206,227,250,275,303,334,368,405,446,491,541,596,657,723,797,877,966
,1064,1172,1291,1422,1566)
Por favor, como ajusto à exponencial a série y no R? Como chegar ao
resultado Y no R?
#Script utilizado que não funcionou:
x<-c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23)
y<-c(100,150,200,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950
,1000,1050,1100,1150,1200)
dados<-data.frame(x,y)
plot(dados)
funcao<-y~a*exp(b*x)
exponencial<-nls(funcao, dados, start=c(a=1,b=1))
exponencial
=====Erro no R ==================
10,11,12,13,14,15,16,17,18,19,20,21,22,23)
>
y<-c(100,150,200,250,300,350,400,450,500,550,600,650,700,750,800,850,900,950
,1000,1050,1100,1150,1200)
> dados<-data.frame(x,y)
> plot(dados)
> funcao<-y~a*exp(b*x)
> exponencial<-nls(funcao, dados, start=c(a=1,b=1))
Erro em nls(funcao, dados, start = c(a = 1, b = 1)) : gradiente singular
> exponencial
Erro: objeto 'exponencial' não encontrado
>
Onde estou errando?
Abs.
_____
<http://www.posicional.com/> assinatura_email_sites
Cícero C Nunes
Diretor Técnico Operacional
Divisão Remuneração
<mailto:c2n em posicional.com> c2n em posicional.com
+55(16)3397.0226
+55(11)3280.0226
+55(11)9.9978.0026
SKYPE: consultormp
Rua Padre Duarte, 1360 – salas 6/7 – Centro – Araraquara, SP – CEP.:
14.801-310
“Antes de imprimir pense em sua responsabilidade com o meio ambiente – Quem
ama cuida!”
De: R-br [mailto:r-br-bounces em listas.c3sl.ufpr.br] Em nome de walmes .
Enviada em: sexta-feira, 8 de novembro de 2013 18:33
Para: r-br em listas.c3sl.ufpr.br
Assunto: Re: [R-br] Contrastes em modelos de regressão de poisson
inflacionados por zeros
Você não deve esperar ver uma curva exponencial para a média das contagens
em função do tempo e uma sigmoide para a proporção de zeros não Poisson para
os zeros se não simulou os dados com efeito de tempo e não declarou efeito
de tempo na porção binomial. Para que isso aconteça a simulação tem que
estar condizente, tem que ter os efeitos para que as curvas não sejam as
"curvas nulas".
#------------------------------------------------------------------
# Definições da sessão.
rm(list=ls())
require(pscl)
require(VGAM)
require(multcomp)
require(lattice)
require(latticeExtra)
#------------------------------------------------------------------
# Dados artificiais.
da <- expand.grid(tempo=rep(1:10), trat=gl(3,10))
## simula porção Poisson
X <- model.matrix(~trat+tempo, da)
colnames(X)
beta.pois <- c(-1,0.25,0.5,0.25)
eta.pois <- X%*%beta.pois
da$y.pois <- rpois(nrow(X), lambda=exp(eta.pois))
xyplot(y.pois~tempo|trat, da)
## simula porção binomial
X <- model.matrix(~tempo, da)
beta.bern <- c(0,0.3)
eta.bern <- X%*%beta.bern
da$y.bern <- rbinom(nrow(X), size=1, prob=1/(1+exp(-eta.bern)))
xyplot(y.bern~tempo|trat, da)
## monta a contagem com inflação de zeros
da$y <- with(da, ifelse(y.bern==0, 0, y.pois))
xyplot(y~tempo|trat, da)
#------------------------------------------------------------------
# Modelo completo.
compl.mod <- zeroinfl(y~trat+tempo|trat+tempo, data=da)
coef(compl.mod)
#------------------------------------------------------------------
# Predição do modelo considerando as duas porções.
pred <- expand.grid(tempo=rep(1:10), trat=gl(3,1))
X <- model.matrix(~trat+tempo, pred)
i <- grep("^count\\_", names(coef(compl.mod)))
eta <- X%*%coef(compl.mod)[i]
pred$m.pois <- exp(eta)
i <- grep("^zero\\_", names(coef(compl.mod)))
eta <- X%*%coef(compl.mod)[i]
pred$p.zero <- exp(eta)/(1+exp(eta))
xyplot(y~tempo|trat, data=da, jitter.x=TRUE)+
as.layer(xyplot(m.pois~tempo|trat, data=pred, type="l"))+
as.layer(xyplot(p.zero~tempo|trat, data=pred,
type="l", lty=2, lwd=2))+
layer(panel.abline(h=1, lty=2))
xyplot(p.zero~tempo|trat, data=pred,
type="l", lty=2, lwd=2)
#------------------------------------------------------------------
À disposição.
Walmes.
==========================================================================
Walmes Marques Zeviani
LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W)
Departamento de Estatística - Universidade Federal do Paraná
fone: (+55) 41 3361 3573
skype: walmeszeviani
homepage: http://www.leg.ufpr.br/~walmes <http://www.leg.ufpr.br/%7Ewalmes>
linux user number: 531218
==========================================================================
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20131128/7664b9dd/attachment.html>
-------------- Próxima Parte ----------
Um anexo não-texto foi limpo...
Nome: image001.gif
Tipo: image/gif
Tamanho: 12852 bytes
Descrição: não disponível
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20131128/7664b9dd/attachment.gif>
Mais detalhes sobre a lista de discussão R-br