install.packages("ISLR2")
TP1 - Régression multiple
Quarto
Ce document est écrit en quarto
, un langage formaté qui permet de mélanger du texte (en markdown
) et du code (ici, du R
).
Nous utilisons ici Rstudio
, un tutoriel de présentation est disponible ici. Vous pouvez utiliser un autre IDE en fonction de votre préférence, mais ce TP part du principe que vous utilisez Rstudio
.
Vous pouvez partir de ce document pour créer votre rapport, ou bien en créer un nouveau depuis Rstudio
: File > New File > Quarto Document...
.
Données
On utilise les données Boston
qui sont présentes dans le package ISLR2
, associé au livre An Introduction to Statistical Learning, de G. James, D. Witten, T. Hastie and R. Tibshirani. Ce TP est inspiré de la section 3.6 du livre cité.
Le package s’installe avec la commande :
On peut ensuite charger et voir les données :
library(MASS)
library(ISLR2)
head(Boston)
crim zn indus chas nox rm age dis rad tax ptratio lstat medv
1 0.00632 18 2.31 0 0.538 6.575 65.2 4.0900 1 296 15.3 4.98 24.0
2 0.02731 0 7.07 0 0.469 6.421 78.9 4.9671 2 242 17.8 9.14 21.6
3 0.02729 0 7.07 0 0.469 7.185 61.1 4.9671 2 242 17.8 4.03 34.7
4 0.03237 0 2.18 0 0.458 6.998 45.8 6.0622 3 222 18.7 2.94 33.4
5 0.06905 0 2.18 0 0.458 7.147 54.2 6.0622 3 222 18.7 5.33 36.2
6 0.02985 0 2.18 0 0.458 6.430 58.7 6.0622 3 222 18.7 5.21 28.7
Note: le jeu de données
Boston
est présent dans les deux librariesMASS
etISLR2
, légèrement modifié dans la seconde. On prendra garde à bien charger les libraries dans cet ordre (MASS
d’abord, puisISLR2
) pour travailler sur la bonne version des données.
Une description du jeu de données peut être obtenue dans l’aide, en tapant dans la console :
?Boston
- Décrire brièvement le jeu de données. Qu’est-ce qu’un “individu” \(i\) dans ces données ? Combien y en a t il ? Combien y a t il de variables ? Décrivez brièvement ces variables, en précisant leur type (discret ou continu).
Régression simple
On s’intéresse d’abord au prix médian des maisons dans une ville (medv
) en fonction du pourcentage de foyers avec un statut socio-économique faible (lstat
).
- Tracer le nuage de point correspondant à ces deux variables. On pourra utiliser la librairie
ggplot2
et le code ci-dessous. Que pensez-vous de la relation entre les deux variables ?
library(ggplot2)
ggplot(Boston, aes(x = lstat, y = medv)) +
geom_point()
Faire la régression linéaire simple de
medv
en fonction delstat
à l’aide de la fonctionlm
. Interprétez les coefficients. Sont-ils significativement non nuls ? Donnez un intervalle de confiance à \(90%\) des coefficients. On pourra utiliser les fonctionssummary
,coef
etconfint
.Tracez la droite de régression sur le nuage de points en utilisant le code suivant. Que pensez-vous de l’ajustement du modèle ? Est-ce cohérent avec le résultat de l’ajustement linéaire ?
ggplot(Boston, aes(x = lstat, y = medv)) +
geom_point() +
geom_smooth(method = "lm")
Donnez un intervalle de prédiction à \(95%\) pour la valeur de
medv
lorsquelstat
vaut \(2\), \(15\), \(30\) et \(50\) pourcent à l’aide de la fonctionpredict
. Quand est-ce que l’intervalle est le plus grand ? Est-ce surprenant ? Discutez de la validité des prédictions, en particulier pourlstat=50
.Par défaut,
ggplot
dans le code de la fonction ci-dessus trace une zone d’incertitude en grisé. S’agit-il d’une bande de confiance, ou d’une bande de prédiction ? Quelle est la différence ?Ajoutez une bande de prédiction à l’aide du code (à compléter) suivant. Interprétez.
<- data.frame(lstat = seq(min(Boston$lstat), max(Boston$lstat), by = 0.1))
data_pred <- predict(lm.fit, data_pred, interval = "prediction") # lm.fit is the fit object, result of `lm` call.
pred_grid <- as.data.frame(pred_grid)
pred_grid $lstat <- data_pred$lstat
pred_gridggplot(Boston, aes(x = lstat, y = medv)) +
geom_point() +
geom_smooth(method = "lm") +
geom_ribbon(data = pred_grid, aes(y = fit, ymin = lwr, ymax = upr), alpha = 0.1)
- Que vaut la statistique de Fisher pour ce model ? Montrez que dans ce cas, elle peut être vue comme la statistique de Student d’un des coefficients mise au carré. Interprettez.
Régression multiple
Faire la régression de
medv
contre toutes les autres variables du jeu de données. On pourra utiliser la formulemedv ~ .
, qui est un raccourci pour éviter d’avoir à écrire toutes les variables à la main. Interprétez les résultats en utilisant la fonctionsummary
.En utilisant la formula
medv ~ . -age - indus
, faites la régression demedv
contre toutes les variables, saufage
etindus
. Interprétez. Quel modèle préférez-vous ?Faites le test de Fisher emboîté entre les deux modèles à l’aide de la fonction
anova
. Interprétez. Est-ce cohérent avec les résultats de la question précédente ?Appliquez la procédure “backward” pour la sélection de variable, en utilisant l’AIC, et la fonction
dropterm
de la librairieMASS
. Quelle conclusion obtenez vous ?Faites la régression linéaire de
medv
contre les seules variablesage
etindus
. Interprétez le résultat.
Transformation de données
Faites la régression de
medv
contrelstat
etlog(lstat)
à l’aide de la formulemedv ~ lstat + log(lstat)
. Interprétez.Faites la régression de
medv
contrelstat
,lstat^2
à l’aide de la formulemedv ~ lstat + I(lstat^2)
. Interprétez.
Note : la fonction
I()
est utile ici pour protéger la fonction carrée, l’opérateur^
ayant une autre signification dans le cadre d’une formule.
- Faites la régression de
medv
contrelstat
,lstat^2
,lstat^3
, …,lstat^10
à l’aide de la formulemedv ~ poly(lstat, 10)
. Interprétez.
Remarque : la fonction
poly
retourne les polynomes orthogonalisés, et non les puissances simples, comme détaillé dans l’aide?poly
.