Comment minimiser la somme résiduelle des carrés d'un ajustement exponentiel?


14

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é.


1
Dans ce cas, si vous considérez un modèle de régression , où ϵ iN ( 0 , σ ) , vous obtenez des estimateurs similaires. En traçant les régions de confiance, on peut observer comment ces valeurs sont contenues dans les régions de confiance. Vous ne pouvez pas vous attendre à un ajustement parfait à moins d'interpoler les points ou d'utiliser un modèle non linéaire plus flexible. Les émissionsje=F(Journéesje,une,b)+ϵjeϵjeN(0,σ)

J'ai changé le titre parce que "modèle exponentiel négatif" signifie quelque chose de différent de celui décrit dans la question.
blanc

Merci d'avoir clarifié la question (@whuber) et merci pour votre réponse (@Procrastinator). Comment puis-je calculer et tracer les régions de confiance. Et, quel serait un modèle non linéaire plus flexible?
Strohmi

4
Vous avez besoin d'un paramètre supplémentaire. Voyez ce qui se passe avec 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).
blanc

1
@whuber - vous devriez peut-être poster cela comme réponse?
jbowman

Réponses:


16

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)Xyy=αy+βX=γX+δ

αy+β=y=exp(x)=exp(γxδ),

qui est algébriquement équivalent à

y=1αexp(γxδ)β=a(1uexp(bx))

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=γuneybXu 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ètre une 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 - 937u2000937 ; 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.05x1/b10.0595%95%93720001950202524 . (Cetteméthode à 95 % pour observer une échelle exponentielle est standard dans certains domaines qui utilisent beaucoup les tracés exponentiels.)b3/24=0.12595%

Voyons à quoi cela ressemble:

plot(Days, Emissions)
curve((y = 2000 * (1 - 0.56 * exp(-0.125*x))), add = T)

Coupe du globe oculaire

Pas mal pour un début! (Même en tapant 0.56à la place de 0.55, ce qui était de toute façon une approximation grossière.) Nous pouvons le polir avec 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)

NLS fit

La sortie de nlscontient des informations détaillées sur l'incertitude des paramètres. Par exemple , un simple summaryfournit des erreurs standard d'estimations:

> 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 ***

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):

> 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 prend en charge les tracés de profil pour les paramètres, donnant des informations plus détaillées sur leur incertitude:

> plot(profile(fit))

a

Tracé de profil

219451995


res <- residuals(fit); res %*% resu2724147073

Tout va bien et bon. Mais peut-être que l'OP avait une raison de choisir le modèle exponentiel (ou peut-être parce qu'il est bien connu). Je pense d'abord que les résidus devraient être examinés pour le modèle exponentiel. Tracez-les en fonction de covariables potentielles pour voir s'il y a une structure et pas seulement un bruit aléatoire important. Avant de vous lancer dans des modèles plus sophistiqués, essayez de voir si un modèle plus sophistiqué pourrait vous aider.
Michael R. Chernick

3
x

2
Je ne critiquais pas votre réponse! Je n'ai vu aucune parcelle résiduelle. Tout ce que je suggérais, c'est que les graphiques des résidus par rapport aux covariables potentielles devraient être la première étape pour trouver un meilleur modèle. Si je pensais que j'avais une réponse à mettre là-bas, j'aurais donné une réponse plutôt que de soulever mon point comme une constante. Je pensais que vous aviez donné une excellente réponse et j'étais parmi ceux qui vous ont donné un +1.
Michael R. Chernick
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.