Uma lei exponencial (negativa) assume a forma . Ao permitir alterações de unidades dos x e y valores, no entanto, dizer para y = α y ' + β e x = γ x ' + δ , então a lei será expressa comoy=−exp(−x)xyy=αy′+βx=γx′+δ
αy′+β=y=−exp(−x)=−exp(−γx′−δ),
que algebricamente é equivalente a
y′=−1αexp(−γx′−δ)−β=a(1−uexp(−bx′))
utilizando-se três parâmetros de , u = 1 / ( β exp ( δ ) ) , e b = γ . Podemos reconhecer a como um parâmetro de escala para y , b como um parâmetro de escala para x e u como derivado de um parâmetro de localização para x .a=−β/αu=1/(βexp(δ))b=γaybxux
Como regra geral, esses parâmetros podem ser identificados rapidamente na plotagem :
O parâmetro é o valor da assíntota horizontal, um pouco menos que 2000 .a2000
O parâmetro é a quantidade relativa em que a curva aumenta da origem à sua assíntota horizontal. Aqui, o aumento é, portanto, um pouco menos que 2000 - 937 ; relativamente, isso é cerca de 0,55 da assíntota.u2000−9370.55
Como , quando x é igual a três vezes o valor de 1 / b, a curva deve ter subido para cerca de 1 - 0,05 ou 95 % de seu total. 95 % do aumento de 937 para quase 2000 nos coloca por volta de 1950 ; a varredura no gráfico indica que isso levou de 20 a 25 dias. Chamado de Let It 24 de simplicidade, de onde b ≈ 3 / 24exp(−3)≈0.05x1/b1−0.0595%95%93720001950202524 . (Essemétodo de 95 % para observar uma escala exponencial é padrão em alguns campos que usam muito plotagens exponenciais.)b≈3/24=0.12595%
Vamos ver como é isso:
plot(Days, Emissions)
curve((y = 2000 * (1 - 0.56 * exp(-0.125*x))), add = T)
Nada mal para um começo! (Mesmo apesar de digitar 0.56
no lugar de 0.55
, que era uma aproximação grosseira de qualquer maneira.) Podemos polir isso com nls
:
fit <- nls(Emissions ~ a * (1- u * exp(-b*Days)), start=list(a=2000, b=1/8, u=0.55))
beta <- coefficients(fit)
plot(Days, Emissions)
curve((y = beta["a"] * (1 - beta["u"] * exp(-beta["b"]*x))), add = T, col="Green", lwd=2)
A saída de nls
contém informações abrangentes sobre incerteza de parâmetro. Por exemplo , um simples summary
fornece erros padrão de estimativas:
> summary(fit)
Parameters:
Estimate Std. Error t value Pr(>|t|)
a 1.969e+03 1.317e+01 149.51 2.54e-10 ***
b 1.603e-01 1.022e-02 15.69 1.91e-05 ***
u 6.091e-01 1.613e-02 37.75 2.46e-07 ***
Podemos ler e trabalhar com toda a matriz de covariância das estimativas, o que é útil para estimar intervalos de confiança simultâneos (pelo menos para grandes conjuntos de dados):
> vcov(fit)
a b u
a 173.38613624 -8.720531e-02 -2.602935e-02
b -0.08720531 1.044004e-04 9.442374e-05
u -0.02602935 9.442374e-05 2.603217e-04
nls
suporta gráficos de perfil para os parâmetros, fornecendo informações mais detalhadas sobre suas incertezas:
> plot(profile(fit))
a
219451995