Installez l’extension ISLR2
et car
contenant les jeux de données et les fonctions qui nous intéressent.
L’extension ISLR2
contient le jeu de données
Boston
. Boston
possède la variable
medv
(valeur médiane d’une maison) pour \(506\) recensements à Boston. Nous voulons
prédire la valeur médiane d’une maison à partir de \(12\) variables explicatives comme
rmvar
(nombre moyen de pièces par maison), age
(âge moyen des maisons), et lstat
(pourcentage de ménage
avec un statut socioéconomique faible). ?Boston
pour une
description détaillée sur jeu de données.
head(Boston)
str(Boston)
## 'data.frame': 506 obs. of 13 variables:
## $ crim : num 0.00632 0.02731 0.02729 0.03237 0.06905 ...
## $ zn : num 18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...
## $ indus : num 2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...
## $ chas : int 0 0 0 0 0 0 0 0 0 0 ...
## $ nox : num 0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...
## $ rm : num 6.58 6.42 7.18 7 7.15 ...
## $ age : num 65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...
## $ dis : num 4.09 4.97 4.97 6.06 6.06 ...
## $ rad : int 1 2 2 3 3 3 5 5 5 5 ...
## $ tax : num 296 242 242 222 222 222 311 311 311 311 ...
## $ ptratio: num 15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...
## $ lstat : num 4.98 9.14 4.03 2.94 5.33 ...
## $ medv : num 24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...
La fonction attach
permet d’importer les variables d’un
tableau de données dans votre environnement. Par exemple, après avoir
utilisé attach
, Boston$age
pourra être
accessible en utilisant la variable age
importée.
attach(Boston)
Avant d’entrainer notre modèle de régression linéaire, nous pouvons
observer avec plot()
s’il existe une relation linéaire
entre la variable à prédire et la variable explicative.
plot(lstat, medv)
Nous utilisons la fonction lm()
pour l’entrainement d’un
modèle de régression linéaire simple à partir de la variable explicative
lstat
pour prédire la variable medv
.
lm.fit <- lm(medv ~ lstat, data = Boston)
La fonction summary(lm.fit)
retourne les \(p\)-valeurs et les écarts types des
coefficients (a
et b
) ainsi que les
statistiques \(R^2\) et \(F\) du modèle de régression.
lm.fit
##
## Call:
## lm(formula = medv ~ lstat, data = Boston)
##
## Coefficients:
## (Intercept) lstat
## 34.55 -0.95
summary(lm.fit)
##
## Call:
## lm(formula = medv ~ lstat, data = Boston)
##
## Residuals:
## Min 1Q Median 3Q Max
## -15.168 -3.990 -1.318 2.034 24.500
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 34.55384 0.56263 61.41 <2e-16 ***
## lstat -0.95005 0.03873 -24.53 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.216 on 504 degrees of freedom
## Multiple R-squared: 0.5441, Adjusted R-squared: 0.5432
## F-statistic: 601.6 on 1 and 504 DF, p-value: < 2.2e-16
Interpretez les résultats retournés par la fonction
summary(lm.fit)
.
On utilise la fonction names()
pour connaitre les
informations stockées dans lm.fit
.
names(lm.fit)
## [1] "coefficients" "residuals" "effects" "rank"
## [5] "fitted.values" "assign" "qr" "df.residual"
## [9] "xlevels" "call" "terms" "model"
lm.fit$coefficients
## (Intercept) lstat
## 34.5538409 -0.9500494
Si nous voulons prédire 3 nouvelles valeurs de lstat
(5,
10 et 15) avec la fonction predict()
:
predict(lm.fit, data.frame(lstat = (c(5, 10, 15))))
## 1 2 3
## 29.80359 25.05335 20.30310
Nous affichons la droite de régression entre medv
et
lstat
en utilisant la fonction abline()
.
plot(lstat, medv)
abline(lm.fit, lwd = 3, col ="red")
Nous observons qu’il pourrait y avoir une relation non-linéaire entre
lstat
et medv
.
lstat
)Par exemple, si nous voulons utiliser lstat
et
age
:
lm.fit <- lm(medv ~ lstat + age, data = Boston)
Des idées pour aborder ces problèmes ?