Tengo los siguientes datos y me gustaría ajustarle un modelo de crecimiento exponencial negativo:
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)
El código funciona y se traza una línea de ajuste. Sin embargo, el ajuste no es visualmente ideal, y la suma residual de cuadrados parece ser bastante grande (147073).
¿Cómo podemos mejorar nuestro ajuste? ¿Los datos permiten un mejor ajuste?
No pudimos encontrar una solución a este desafío en la red. Cualquier ayuda directa o enlace a otros sitios web / publicaciones es muy apreciada.
r
nonlinear-regression
fitting
nls
Strohmi
fuente
fuente
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)
.Respuestas:
Una ley exponencial (negativa) toma la forma . Sin embargo, cuando permite cambios de unidades en los valores x e y , digamos y = α y ′ + β y x = γ x ′ + δ , entonces la ley se expresará comoy=−exp(−x) x y y= α y′+ β x = γX′+ δ
que algebraicamente es equivalente a
utilizando tres parámetros , u = 1 / ( β exp ( δ ) ) , y b = γ . Podemos reconocer a como un parámetro de escala para y , b como un parámetro de escala para x , y u como derivado de un parámetro de ubicación para x .a=−β/α u=1/(βexp(δ)) b=γ a y b x u x
Como regla general, estos parámetros se pueden identificar de un vistazo desde la gráfica :
El parámetro es el valor de la asíntota horizontal, un poco menos de 2000 .a 2000
El parámetro es la cantidad relativa que la curva sube desde el origen hasta su asíntota horizontal. Aquí, el aumento, por lo tanto, es un poco menor que 2000 - 937 ; relativamente, eso es aproximadamente 0,55 de la asíntota.u 2000−937 0.55
Debido a que , cuando x es igual a tres veces el valor de 1 / b, la curva debería haber aumentado a aproximadamente 1 - 0.05 o 95 % de su total. El 95 % del aumento de 937 a casi 2000 nos sitúa alrededor de 1950 ; El escaneo a través de la trama indica que esto tomó de 20 a 25 días. La llamada de Hagámosle 24 por simplicidad, de donde b ≈ 3 / 24exp(−3)≈0.05 x 1/b 1−0.05 95% 95% 937 2000 1950 20 25 24 . (Este 95 %b≈3/24=0.125 95% método del para observar una escala exponencial es estándar en algunos campos que utilizan mucho las parcelas exponenciales).
Veamos cómo se ve esto:
¡No está mal para empezar! (Incluso a pesar de escribir
0.56
en lugar de0.55
, lo cual fue una aproximación cruda de todos modos). Podemos pulirlo connls
:La salida de
nls
contiene información extensa sobre la incertidumbre de los parámetros. Por ejemplo , un simplesummary
proporciona errores estándar de estimaciones:Podemos leer y trabajar con toda la matriz de covarianza de las estimaciones, que es útil para estimar intervalos de confianza simultáneos (al menos para grandes conjuntos de datos):
nls
admite gráficos de perfil para los parámetros, brindando información más detallada sobre su incertidumbre:fuente
res <- residuals(fit); res %*% res
nos dice que introduciendo el tercer parámetro