Regression linéaire avec R : Différence entre versions

De Wiki ODR
Aller à : navigation, rechercher
Ligne 70 : Ligne 70 :
 
Toutes choses égales par ailleurs, une chambre supplémentaire augmente par exemple le prix de la maison de 58 milles dollars environ, et 100 unités de surface (inconnue) supplémentaires vont l’augmenter de 14 mille dollars, toutes choses égales par ailleurs.
 
Toutes choses égales par ailleurs, une chambre supplémentaire augmente par exemple le prix de la maison de 58 milles dollars environ, et 100 unités de surface (inconnue) supplémentaires vont l’augmenter de 14 mille dollars, toutes choses égales par ailleurs.
  
== Fonctions  ==  
+
=== Fonctions  ===  
  
=== summary ===
+
==== summary ====
 
summary() permet de produire les sorties pour chaque regression présentées précédemment. Ainsi, cette fonction affiche : les coefficients estimés, leur écart-type, et la valeur de la statistique t de Student ainsi que la p-value (probabilité que le coefficient soit significativement différent de zéro) associées à chaque coefficient.
 
summary() permet de produire les sorties pour chaque regression présentées précédemment. Ainsi, cette fonction affiche : les coefficients estimés, leur écart-type, et la valeur de la statistique t de Student ainsi que la p-value (probabilité que le coefficient soit significativement différent de zéro) associées à chaque coefficient.
 
Sont aussi présentés le R2 et R2 ajusté, ainsi que la statistique F de Fisher (testant la significativité globales des variables), son degré de liberté, et la p-value associée.
 
Sont aussi présentés le R2 et R2 ajusté, ainsi que la statistique F de Fisher (testant la significativité globales des variables), son degré de liberté, et la p-value associée.
Ligne 81 : Ligne 81 :
 
</pre>
 
</pre>
  
=== coefficient ===
+
==== coefficient ====
 
coef() permet de n’extraire que les coefficients estimés.
 
coef() permet de n’extraire que les coefficients estimés.
 
<pre>#### Extraction des coefficients
 
<pre>#### Extraction des coefficients
Ligne 89 : Ligne 89 :
 
[[Fichier:reglincoef.png]]
 
[[Fichier:reglincoef.png]]
  
=== Confint ===
+
==== Confint ====
 
confint() permet d’afficher l’intervalle de confiance à 95% pour les coefficients estimés.
 
confint() permet d’afficher l’intervalle de confiance à 95% pour les coefficients estimés.
 
<pre>#### Intervalle de confiance (à 95%) des coefficients
 
<pre>#### Intervalle de confiance (à 95%) des coefficients
Ligne 97 : Ligne 97 :
 
[[Fichier:reglinconfint.png]]
 
[[Fichier:reglinconfint.png]]
  
=== Residuals ===
+
==== Residuals ====
 
resid() permet d’extraire les résidus.
 
resid() permet d’extraire les résidus.
 
<pre>#### Extraction des résidus
 
<pre>#### Extraction des résidus
Ligne 105 : Ligne 105 :
 
[[Fichier:reglinres.png]]
 
[[Fichier:reglinres.png]]
  
=== Fitted ===
+
==== Fitted ====
 
fitted() permet d’extraire les valeurs prédites.
 
fitted() permet d’extraire les valeurs prédites.
  
Ligne 114 : Ligne 114 :
 
[[Fichier:reglinfitted.png]]
 
[[Fichier:reglinfitted.png]]
  
=== Predict ===
+
==== Predict ====
 
La fonction predict() permet de prédire la valeur de y (i.e du prix) pour de nouvelles données (des variables explicatives).
 
La fonction predict() permet de prédire la valeur de y (i.e du prix) pour de nouvelles données (des variables explicatives).
 
Seul les deux premiers arguments sont requis : se.fit permet d’afficher l’écart-type de la valeur prédite, et interval et level permettent afficher ici les valeurs de l’intervalle de confiance fixé à 99%.
 
Seul les deux premiers arguments sont requis : se.fit permet d’afficher l’écart-type de la valeur prédite, et interval et level permettent afficher ici les valeurs de l’intervalle de confiance fixé à 99%.

Version du 1 juillet 2014 à 16:58

Données

Pour illustrer, on utilise le jeu de données « housingprices » (issu du package DAAG), composé de quinze observations et trois variables :

  • sale.price = prix de vente de la maison (en milliers de dollars australiens)
  • area = surface au sol de la maison
  • bedrooms = nombre de chambres dans la maison
#### Package DAAG
install.packages("DAAG")
library(DAAG)

head(houseprices)

Objectif

On peut vouloir expliquer le prix de vente des maisons, en fonction de leur surface en présumant que plus la surface est élevée, et plus le prix de vente sera élevé. Il s'agit là d'une regression dite "simple" car elle ne comporte qu'une seule variables explicative. De plus, on peut aussi supposer que le nombre de chambres influence le prix de la maison à la hausse ; il s'agira là d'une regression "multiple" avec deux variables explicatives.

L’objectif est d’évaluer si chacune des deux variables influence le prix, et, si tel est le cas, de tenter de quantifier cet effet.


La regression linéaire

La regression linéaire assume que la relation entre les variables explicatives et la variable à expliquer va être linéaire, du type : <math>y_{i} = b0 + b1 \times x1_{i} + b2 \times x2_{i} + e_{i} </math>

où :

  • y est la variable à expliquer (ici : sale.price)
  • x1 et x2 sont les variables explicatives (ici : la surface et le nombre de chambres)
  • e est le terme d’erreur, assumé être distribué selon une loi Normale : <math>e_i \rightarrow \mathcal{N}(0,\sigma^2) </math>.

Sous un certain nombre d'hypothèses, la méthode des moindres carrés ordinaires (OLS pour Ordinary Least Square) permet d'obtenir des estimateurs BLUE (Best Linear Unbiased Estimators), c'est-à-dire qui sont sans biais et à variance minimale. Les coefficients estimés sont issus de la minimisation de la somme des carré des résidus entre les valeurs prédites et les valeurs observées,formellement : <math> (\hat{b0} ; \hat{b1}) = \underset{\hat{b0},\hat{b1}}{argmin} \sum_{i=1}^{n} \hat{e_i}^2 = \underset{\hat{b0},\hat{b1}}{argmin} \sum_{i=1}^{n} (y_i - \hat{b0} - \hat{b1} \times x1_i - \hat{b2} \times x2_i) ^2 </math>

Regression linéaire simple

Dans ce cas, on considère une seule variable explicative. Ici, on souhaite donc estimer les coefficients du modèle :<math> sale.price = b0 + b1 \times area + e </math> La commande à utiliser dans R est : lm()

# y = b0 + b1*x1
# Variable à expliquer : y = prix de vente de la maison
# Une variable explicative : x1 = Surface au sol de la maison

pricereg<-lm(sale.price ~ area, data=houseprices)

Reglinsimple.png

On a donc l'équation de la droite de régression : <math> sale.price= 70.75 + 0.188 \times area + \hat{e} </math> , que l'on peut tracer avec le nuage de points :

# plot : "vraies" valeurs et droite de regression
plot(sale.price ~ area, data=houseprices)
abline(pricereg, col = "red") 

Droitereg.png


Regression linéaire multiple

Ici, on considère deux (ou plus) variables explicatives. On souhaite donc estimer les coefficients du modèle : <math> sale.price = b0 + b1 \times area + b2 \times bedroom + e </math>

# Variables explicatives : x1 = Surface au sol de la maison, x2 = nombre de chambres
pricereg2<-lm(sale.price ~ area + bedrooms , data=houseprices)

Reglinmult.png


Interprétation

L'équation de la droite de regression est : <math> sale.price = -141.76 + 0.14 \times area + 58.32 \times bedrooms </math>. Les coefficients associés aux variables "area" et "bedrooms" sont significatifs (respectivement à 95% et à 99%, cf : sortie précédente), on peut donc les interpréter. Toutes choses égales par ailleurs, une chambre supplémentaire augmente par exemple le prix de la maison de 58 milles dollars environ, et 100 unités de surface (inconnue) supplémentaires vont l’augmenter de 14 mille dollars, toutes choses égales par ailleurs.

Fonctions

summary

summary() permet de produire les sorties pour chaque regression présentées précédemment. Ainsi, cette fonction affiche : les coefficients estimés, leur écart-type, et la valeur de la statistique t de Student ainsi que la p-value (probabilité que le coefficient soit significativement différent de zéro) associées à chaque coefficient. Sont aussi présentés le R2 et R2 ajusté, ainsi que la statistique F de Fisher (testant la significativité globales des variables), son degré de liberté, et la p-value associée.

#### Regression output
summary(pricereg2)

coefficient

coef() permet de n’extraire que les coefficients estimés.

#### Extraction des coefficients
coef(pricereg2)

Reglincoef.png

Confint

confint() permet d’afficher l’intervalle de confiance à 95% pour les coefficients estimés.

#### Intervalle de confiance (à 95%) des coefficients
confint(pricereg2)

Reglinconfint.png

Residuals

resid() permet d’extraire les résidus.

#### Extraction des résidus
resid(pricereg2)

Reglinres.png

Fitted

fitted() permet d’extraire les valeurs prédites.

#### Extraction des valeurs prédites
fitted(pricereg2)

Reglinfitted.png

Predict

La fonction predict() permet de prédire la valeur de y (i.e du prix) pour de nouvelles données (des variables explicatives). Seul les deux premiers arguments sont requis : se.fit permet d’afficher l’écart-type de la valeur prédite, et interval et level permettent afficher ici les valeurs de l’intervalle de confiance fixé à 99%.

#### Prédiction du prix de la maison en fonction de sa superficie et de son nombre de chambres
predict(pricereg2, newdata=data.frame(area=800,bedrooms=2), se.fit=TRUE, interval = "prediction", level = 0.99)

Reglinpredict.png

Ainsi, le prix estimé d’une maison dont la surface au sol est de 800 unités et qui a 2 chambres serait de 88.92 mille dollars.