library(tidyverse)
library(AmesHousing)
library(scales)
library(patchwork)
ames_complet <- make_ames()
niveaux_qualite_attendus <- c(
"Very_Poor", "Poor", "Fair", "Below_Average", "Average",
"Above_Average", "Good", "Very_Good", "Excellent",
"Very_Excellent"
)
stopifnot(identical(
levels(ames_complet$Overall_Qual),
niveaux_qualite_attendus
))
ames <- ames_complet |>
transmute(
sale_price = Sale_Price,
gr_liv_area = Gr_Liv_Area,
overall_qual = as.integer(Overall_Qual),
year_built = Year_Built,
garage_cars = Garage_Cars,
full_bath = Full_Bath,
neighborhood = Neighborhood
)Mission 1: choisir avant d’ajuster
Question, graphiques et formule de modèle
Votre mandat
Vous devez construire un premier modèle explicatif du prix de vente des propriétés d’Ames. Votre équipe ne peut retenir que quatre à six prédicteurs. Le but est de faire des choix lisibles, pas d’utiliser toutes les colonnes.
Durée: 25 minutes.
Production: une formule de modèle, un graphique probant et un verdict de trois phrases.
Ce que vous devez apprendre
À la fin de cette mission, vous devez pouvoir:
- nommer précisément l’unité statistique et les unités de mesure;
- distinguer la forme de la réponse de la forme d’une relation;
- justifier un prédicteur autrement que par sa disponibilité dans le fichier;
- écrire une formule de modèle qui correspond à une question explicite.
Le but n’est pas de trouver immédiatement le meilleur modèle. Il est de construire un premier modèle assez simple pour que chaque choix puisse être expliqué et discuté.
Organisation suggérée de l’équipe
Répartissez trois rôles:
- une personne exécute le code;
- une personne surveille les unités, les titres et la question statistique;
- une personne rédige le verdict et demande la preuve de chaque affirmation.
Changez de rôle après le premier graphique si le temps le permet.
Repères sur les variables
| Variable | Signification | Type et unité |
|---|---|---|
sale_price |
prix de vente | quantitative, dollars américains |
gr_liv_area |
surface habitable au-dessus du sol | quantitative, pieds carrés |
overall_qual |
qualité globale | ordinale, score de 1 à 10 |
year_built |
année de construction | quantitative, année |
garage_cars |
capacité du garage | dénombrement, nombre de places |
neighborhood |
quartier | nominale, catégorie |
1. Charger et préparer les données
Une ligne représente une vente résidentielle. sale_price est en dollars américains et gr_liv_area est la surface habitable au-dessus du sol, en pieds carrés.
Avant de continuer, vérifiez que vous obtenez 2 930 lignes. Si ce n’est pas le cas, ne poursuivez pas: vérifiez l’appel à make_ames() et les noms de variables.
2. Comprendre la réponse
Complétez puis exécutez:
ames |>
summarise(
ventes = n(),
prix_median = median(___),
prix_min = min(___),
prix_max = max(___)
)ames |>
ggplot(aes(x = ___)) +
geom_histogram(bins = 40, fill = "#0f7c80", color = "white") +
scale_x_continuous(labels = label_dollar()) +
labs(x = "Prix de vente", y = "Nombre de ventes")Décrivez la forme de la distribution. Le prix brut semble-t-il symétrique? Une transformation logarithmique pourrait-elle être utile plus tard?
Cette étape décrit uniquement la réponse. Elle ne permet pas encore de dire pourquoi les prix diffèrent. Notez séparément une caractéristique générale, par exemple l’asymétrie, et une observation particulière, par exemple un prix très élevé.
3. Examiner quatre pistes
p_surface <- ames |>
ggplot(aes(gr_liv_area, sale_price)) +
geom_point(alpha = 0.25, color = "#277da1") +
geom_smooth(method = "lm", se = FALSE, color = "#b5222e") +
labs(x = "Surface habitable", y = "Prix")
p_qualite <- ames |>
ggplot(aes(overall_qual, sale_price)) +
geom_jitter(width = 0.15, alpha = 0.2, color = "#0f7c80") +
geom_smooth(method = "lm", se = FALSE, color = "#b5222e") +
labs(x = "Qualité globale, de 1 à 10", y = "Prix")
p_surface + p_qualiteCréez ensuite un graphique semblable pour l’année de construction ou le nombre de places de garage.
Pour chaque graphique, utilisez la même grille de lecture:
- direction générale de l’association;
- forme approximativement linéaire ou courbée;
- dispersion verticale autour de la tendance;
- présence d’observations inhabituelles;
- variable absente qui pourrait modifier l’interprétation.
Un nuage de points montre une association marginale. Le coefficient du futur modèle sera conditionnel aux autres variables incluses. Les deux résultats peuvent donc différer.
4. Proposer un premier modèle
Le modèle commun de la matinée sera:
modele_prix <- lm(
sale_price ~ gr_liv_area + overall_qual + year_built + garage_cars,
data = ames
)Avant de l’exécuter, prédisez le signe de chaque coefficient. Distinguez ensuite les raisons de garder une variable:
- connaissance du problème;
- preuve graphique;
- contrôle d’un facteur de confusion possible;
- facilité d’interprétation.
Une variable ne doit pas être retenue uniquement parce que sa valeur p pourrait être petite. À cette étape, la question, la plausibilité, la représentation de facteurs importants et la lisibilité du modèle passent avant le tri automatique.
Comparez votre formule à un modèle qui ajoute full_bath ou neighborhood. Une variable supplémentaire améliore-t-elle nécessairement la valeur pédagogique ou la capacité de généralisation du modèle?
Votre verdict
Rédigez exactement trois phrases:
- « Une ligne représente… »
- « Nous voulons surtout expliquer ou prédire… »
- « Nous retenons… parce que notre graphique montre… »
Conservez votre graphique et ces phrases pour la mission finale.
Vérification avant de remettre
Votre équipe doit pouvoir répondre oui aux cinq questions:
- avons-nous nommé la vente comme unité statistique?
- avons-nous conservé les unités du prix et de la surface?
- notre graphique possède-t-il des axes lisibles?
- chaque prédicteur possède-t-il une justification?
- avons-nous évité le langage causal?
Si une réponse est non, corrigez d’abord le verdict plutôt que d’ajouter un nouveau graphique.