METHODE DES MOINDRES CARRÉS
On s’intéresse à deux variables X et Y. On tente d’expliquer Y (variable
à expliquer) à partir de la variable X (variable explicative). On dispose
de 12 couples (xi ; yi) dont les valeurs sont indiquées ci-dessous :
x<-c(97,91,103,79,81,105,94,85,101,106,75,99)
y<-c(100,95,112,83,86,110,99,94,107,114,80,108)
plot(x, y, xlab="Variable X", ylab="Variable Y", pch=20, cex=2,col="blue",
bty="n",ylim=c(75,120))
text(x,y,pos=3)
120
10
3
6
110
12
9
1
100
Variable Y
2
8
90
5
4
11
80
75 80 85 90 95 100 105
Variable X
Compte tenu de la forme du nuage de points (étiré autour d’une droite
« imaginaire ») on peut envisager une relation linéaire entre les
variables X et Y.
On va déterminer la droite d’équation y = ax + b qui passe au milieu du
nuage de points et au plus près de tous les points.
Cette droite est obtenue à l’aide de la méthode des moindres carrés qui
consiste à trouver a et b de telle sorte que la somme suivante soit la
plus petite possible :
(100 – 97a – b)² + (95 – 91a – b)² + … + (80 – 75a – b)² + (108 – 99a – b)²
Ce qui revient à déterminer une droite telle que les carrés des longueurs
indiquées en rouge soient les plus petits possibles.
reg<-lm(y~x)
abline(reg,col="red",lwd=2)
segments(x,y,x,reg$fitted.values,col="red",lwd=3)
Page 1 sur 3
On obtient facilement cette équation à l’aide de la fonction lm (linear
model).
reg<-lm(y~x)
reg
Coefficients:
(Intercept) x
-0.4113 1.0689
Ainsi la droite d’ajustement a pour équation y = 1,0689x – 0,4113.
Pour la représenter graphiquement il suffit de taper l’instruction
suivante :
abline(reg,col="red",lwd=2)
Il est possible, à l’aide de la fonction nlm() de retrouver le minimum
de la fonction f de deux variables a et b, d’équation :
f(a,b) = (100 – 97a – b)² + … + (108 – 99a – b)²
f-function(z){a<-z[1];b<-z[2];sum((y-a*x-b)^2)}
nlm(f,c(1,1))
$minimum
[1] 46.00238
$estimate
[1] 1.0689382 -0.4112519
Le minimum de la fonction f vaut 46,00238 et se produit pour a 1,0689
et b -0,4113
Page 2 sur 3
Si on souhaite obtenir une droite d’ajustement avec une ordonnée à
l’origine nulle alors il faut utiliser les instructions suivantes :
reg2<-lm(y~x-1)
reg2
Coefficients:
x
1.065
Il s’agit de la droite d’équation y = 1,065x
Il est possible de retrouver cette équation, à l’aide de la fonction
optimize() en recherchant le minimum de la fonction g (fonction à une
variable) d’équation :
g(a) = (100 – 97a)² + … + (108 – 99a)²
g<-function(a){sum((y-a*x)^2)}
optimize(g,lower = 0, upper =2) # on cherche la solution sur l’intervalle [0 ;
2]
$minimum
[1] 1.064569
$objective
[1] 46.02676
Le minimum de la fonction g vaut 46,02676 et se produit pour a 1,0645
Page 3 sur 3