TADE - LAMFA - Université de Picardie Jules Verne

publicité
TADE : RÉGRESSION NON LINÉAIRE AVEC R
MARK ASCH
1. I NTRODUCTION
Dans la régression linéaire, la surface moyenne est un plan dans l’espace d’échantillonage. Dans
la régression non linéaire, elle peut être une surface courbée, arbitraire.Sinon, les modèles sont identiques.Néanmoins, des problèmes de calcul numérique peuvent apparaître.
2. M ODÈLES
La forme générale d’un modèle de régression non linéaire est
y = f (x, β ) + ε
où x est un vecteur de variables explicatives, β est un vecteur de dimension p de paramètres inconnus
et ε et un terme d’erreur N (0, σ 2 ). Si y est un vecteur empirique (d’échantillon) de taille n, et si
f (β ) est son vecteur moyen, alors l’estimateur de maximum de vraisemblance de β est également
l’estimateur de moindres carrés. Cet estimateur minimise la distance entre le vecteur empirique et
l’espace engendré par β .
L’ajustage d’un modèle non linéaire diffère de celui d’un modèle linéaire par :
(1) Il n’y a pas de formule explicite pour les estimés et un processus itératif, avec des valeurs
initiales, est requis.
(2) Le formules d’un modèle linéaire ne sont pas adéquates et il nous faut un protocole plus
flexible.
3. R ÉGRESSION NON LINÉAIRE AVEC R
La fonction principale de R pour l’ajustage d’un modèle de régression non linéaire est nls. Les
arguments de nls sont les suivants :
formula: Une formule de modèle non linéaire de la forme response ~ mean où le deuxième
membre est une expression algébrique qui contient des variables et des paramètres.
data: Un data frame facultatif pour les variables.
start: Une liste ou un vecteur numérique avec les valeurs initiales pour chaque paramètre. Les
names des composantes de start sont utilisés dans la formule afin de désigner les paramètres.
Tous les autres sont pris pour des variables explicatives.
control: Facultatif - pour les caractéristiques de l’algorithme itératif.
algorithm: Facultatif - pour le choix de l’algorithme itératif.
trace: Pour affichage des information pendant la procédure itérative.
Date: Janvier 2011.
Module TADE, EDSS, Université de Picardie Jules Verne.
1
TADE : RÉGRESSION NON LINÉAIRE AVEC R
2
3.1. Utilisation du gradient. La connaissance des dérivées de la fonction à minimiser, apporte
(presque) systématiquement une amélioration de la convergence. Pour cela, on rajoute l’attribut “gradient” à la définition du modèle (voir l’exemple).
4. E XEMPLE : OBÉSITÉ ET PERTE DE POIDS
Des patients obèses dans un programme de perte de poids ont tendance à perdre du tissu adipeux
avec un taux qui va en diminuant. La base de données wtloss dans la bibliothèque MASS contient 2
variables : Days, le temps (en jours) depuis le début du programme, et Weight, le poids du patient.
Voici un script pour charger et afficher les données :
library(MASS)
attach(wtloss)
help(wtloss)
plot(Days,Weight,type="p",ylab="Poids (kg)")
150
110
120
130
140
Poids (kg)
160
170
180
Voici le résultat.
0
50
100
150
200
250
Days
Même si des modèles de régression polynomiale peuvent bien décrire les données dans le range
observé, ils peuvent échouer misérablement en dehors de ce range. Un modèle plus utile, avec du
soutien théorique et empirique, est non linéaire dans les paramètres, de la forme
y = β0 + β1 2−t/θ + ε
où β0 est le poids ultime (asymptote), β1 est le poids à perdre et θ est le temps nécessaire pour perdre
la moitié de ce qui reste à perdre. Les paramètres β0 et β1 sont linéaires, et θ est un paramètre non
linéaire.
Voici le script pour ajuster le modèle non linéaire.
> wtloss.st<-c(b0=90,b1=95,th=120)
> wtloss.md <- Weight ~ b0 + b1*2^(-Days/th)
> wtloss.fm <- nls(wtloss.md, start=wtloss.st, trace=TRUE)
67.54349 :
90 95 120
TADE : RÉGRESSION NON LINÉAIRE AVEC R
40.18081 :
82.72629 101.30457 138.71374
39.24489 :
81.39868 102.65836 141.85859
39.2447 :
81.37375 102.68417 141.91052
> wtloss.fm
Nonlinear regression model
model: Weight ~ b0 + b1 * 2^(-Days/th)
data: parent.frame()
b0
b1
th
81.37 102.68 141.91
residual sum-of-squares: 39.24
Number of iterations to convergence: 3
Achieved convergence tolerance: 4.354e-06
> summary(wtloss.fm)
Formula: Weight ~ b0 + b1 * 2^(-Days/th)
Parameters:
Estimate Std. Error t value Pr(>|t|)
b0
81.374
2.269
35.86
<2e-16 ***
b1 102.684
2.083
49.30
<2e-16 ***
th 141.911
5.295
26.80
<2e-16 ***
--Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.8949 on 49 degrees of freedom
Number of iterations to convergence: 3
Achieved convergence tolerance: 4.354e-06
>
Finalement, on peut tracer la courbe de régression.
150
140
130
120
110
Poids (kg)
160
170
180
> wt<-seq(0,255,le=256)
> lines(wt,predict(wtloss.fm, new=list(Days = wt)))
0
50
100
150
Days
200
250
3
TADE : RÉGRESSION NON LINÉAIRE AVEC R
4
Nous pouvons rajouter le gradient de notre fonction f . On calcul aisement,
∂f
∂f
∂f
(log 2)β1 x2−x/θ
= 1,
= 2−x/θ ,
=
∂ β0
∂ β1
∂θ
θ2
et la fonction R qui définit le modèle avec ses dérivées est :
expn <- function(b0,b1,th,x){
temp<-2^(-x/th)
model.func <- b0 + b1*temp
Z <- cbind(1, temp, (b1*x*temp*log(2))/th^2)
dimnames(Z)<- list(NULL,c("b0","b1","th"))
attr(model.func,"gradient") <- Z model.func
}
wtloss.gr <- nls(Weight ~ expn(b0,b1,th,Days),data=wtloss,start=wtloss.st,trace=T)
Téléchargement