install.packages("MASS")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 MASS. Ce TP est inspiré de la section 3.6 du livre An Introduction to Statistical Learning, de G. James, D. Witten, T. Hastie and R. Tibshirani.
Le package MASS est standard, et s’installe si besoin avec la commande :
On peut ensuite charger et voir les données :
library(MASS)
head(Boston) crim zn indus chas nox rm age dis rad tax ptratio black lstat
1 0.00632 18 2.31 0 0.538 6.575 65.2 4.0900 1 296 15.3 396.90 4.98
2 0.02731 0 7.07 0 0.469 6.421 78.9 4.9671 2 242 17.8 396.90 9.14
3 0.02729 0 7.07 0 0.469 7.185 61.1 4.9671 2 242 17.8 392.83 4.03
4 0.03237 0 2.18 0 0.458 6.998 45.8 6.0622 3 222 18.7 394.63 2.94
5 0.06905 0 2.18 0 0.458 7.147 54.2 6.0622 3 222 18.7 396.90 5.33
6 0.02985 0 2.18 0 0.458 6.430 58.7 6.0622 3 222 18.7 394.12 5.21
medv
1 24.0
2 21.6
3 34.7
4 33.4
5 36.2
6 28.7
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
ggplot2et 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
medven 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,coefetconfint.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
medvlorsquelstatvaut \(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,
ggplotdans 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_pred <- data.frame(lstat = seq(min(Boston$lstat), max(Boston$lstat), by = 0.1))
pred_grid <- 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
ggplot(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é. Interprétez.
Régression multiple
Faire la régression de
medvcontre 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 demedvcontre toutes les variables, saufageetindus. 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 ?Faites la régression linéaire de
medvcontre les seules variablesageetindus. Interprétez le résultat.
Croissance du \(R^2\)
- Générez une variable aléatoire
bruitindépendante des autres variables, avec la loi de votre choix. Ajouter cette variable à la régression avec la formulemedv ~ . + bruit. Comment a évolué le \(R^2\) ? Est-ce normal ? Que ce passe-t-il si vous ajoutez plusieurs variables de bruit ?
Transformation de données
Faites la régression de
medvcontrelstatetlog(lstat)à l’aide de la formulemedv ~ lstat + log(lstat). Interprétez.Faites la régression de
medvcontrelstat,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
medvcontrelstat,lstat^2,lstat^3, …,lstat^10à l’aide de la formulemedv ~ poly(lstat, 10). Interprétez.
Remarque : la fonction
polyretourne les polynomes orthogonalisés, et non les puissances simples, comme détaillé dans l’aide?poly.