Eu tenho os seguintes dados e gostaria de ajustar um modelo de crescimento exponencial negativo a ele:
Days <- c( 1,5,12,16,22,27,36,43)
Emissions <- c( 936.76, 1458.68, 1787.23, 1840.04, 1928.97, 1963.63, 1965.37, 1985.71)
plot(Days, Emissions)
fit <- nls(Emissions ~ a* (1-exp(-b*Days)), start = list(a = 2000, b = 0.55))
curve((y = 1882 * (1 - exp(-0.5108*x))), from = 0, to =45, add = T, col = "green", lwd = 4)
O código está funcionando e uma linha de ajuste é plotada. No entanto, o ajuste não é visualmente ideal e a soma residual dos quadrados parece ser bastante grande (147073).
Como podemos melhorar nosso ajuste? Os dados permitem um melhor ajuste?
Não conseguimos encontrar uma solução para esse desafio na rede. Qualquer ajuda direta ou ligação a outros sites / postagens é muito apreciada.
r
nonlinear-regression
fitting
nls
Strohmi
fonte
fonte
fit <- nls(Emissions ~ a* (1- u*exp(-b*Days)), start = list(a = 2000, b = 0.1, u=.5)); beta <- coefficients(fit); curve((y = beta["a"] * (1 - beta["u"] * exp(-beta["b"]*x))), add = T)
.Respostas:
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) x y y=αy′+β x=γx′+δ
que algebricamente é equivalente a
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=γ a y b x u x
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 .a 2000
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.u 2000−937 0.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.05 x 1/b 1−0.05 95% 95% 937 2000 1950 20 25 24 . (Essemétodo de 95 % para observar uma escala exponencial é padrão em alguns campos que usam muito plotagens exponenciais.)b≈3/24=0.125 95%
Vamos ver como é isso:
Nada mal para um começo! (Mesmo apesar de digitar
0.56
no lugar de0.55
, que era uma aproximação grosseira de qualquer maneira.) Podemos polir isso comnls
:A saída de
nls
contém informações abrangentes sobre incerteza de parâmetro. Por exemplo , um simplessummary
fornece erros padrão de estimativas: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):
nls
suporta gráficos de perfil para os parâmetros, fornecendo informações mais detalhadas sobre suas incertezas:fonte
res <- residuals(fit); res %*% res