J'ai les données suivantes et j'aimerais y adapter un modèle de croissance exponentielle négative:
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)
Le code fonctionne et une ligne d'ajustement est tracée. Cependant, l'ajustement n'est pas idéal visuellement, et la somme résiduelle des carrés semble être assez énorme (147073).
Comment pouvons-nous améliorer notre ajustement? Les données permettent-elles un meilleur ajustement?
Nous n'avons pas pu trouver de solution à ce défi sur le net. Toute aide directe ou tout lien vers d'autres sites Web / messages est grandement apprécié.
r
nonlinear-regression
fitting
nls
Strohmi
la source
la source
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)
.Réponses:
Une loi exponentielle (négative) prend la forme . Cependant, lorsque vous autorisez des changements d'unités dans les valeurs x et y , dites y = α y ′ + β et x = γ x ′ + δ , alors la loi sera exprimée commey= - exp( - x ) X y y= α y′+ β x = γX′+ δ
qui est algébriquement équivalent à
en utilisant trois paramètres , u = 1 / ( β exp ( δ ) ) et b = γ . Nous pouvons reconnaître a comme paramètre d'échelle pour y , b comme paramètre d'échelle pour x et ua=−β/α u=1/(βexp(δ)) b = γ une y b X u comme dérivant d'un paramètre d' emplacement pour .X
En règle générale, ces paramètres peuvent être identifiés en un coup d'œil à partir de l'intrigue :
Le paramètreune est la valeur de l'asymptote horizontale, un peu inférieure à .2000
Le paramètre est la valeur relative de la montée de la courbe depuis l'origine jusqu'à son asymptote horizontale. Ici, la hausse est donc un peu inférieure à 2000 - 937u 2000−937 ; relativement, cela représente environ de l'asymptote.0.55
Parce que , lorsque x est égal à trois fois la valeur de 1 / b, la courbe aurait dû monter à environ 1 - 0,05 ou 95 % de son total. 95 % de l'augmentation de 937 à près de 2000 nous situe vers 1950 ; le balayage à travers le tracé indique que cela a pris 20 à 25 jours. L'appel de Let it 24 pour plus de simplicité, d' où b ≈ 3 / 24exp(−3)≈0.05 x 1/b 1−0.05 95% 95% 937 2000 1950 20 25 24 . (Cetteméthode à 95 % pour observer une échelle exponentielle est standard dans certains domaines qui utilisent beaucoup les tracés exponentiels.)b≈3/24=0.125 95%
Voyons à quoi cela ressemble:
Pas mal pour un début! (Même en tapant
0.56
à la place de0.55
, ce qui était de toute façon une approximation grossière.) Nous pouvons le polir avecnls
:La sortie de
nls
contient des informations détaillées sur l'incertitude des paramètres. Par exemple , un simplesummary
fournit des erreurs standard d'estimations:Nous pouvons lire et travailler avec toute la matrice de covariance des estimations, ce qui est utile pour estimer les intervalles de confiance simultanés (au moins pour les grands ensembles de données):
nls
prend en charge les tracés de profil pour les paramètres, donnant des informations plus détaillées sur leur incertitude:la source
res <- residuals(fit); res %*% res