library(splines)
air <- read.csv("qualite_air.csv", fileEncoding = "UTF-8-BOM")
air$heure <- as.integer(substr(air$Date_Heure, 12, 13))
air$mois <- as.integer(substr(air$Date_Heure, 6, 7))
ozone <- subset(air, Station == "06600 - Longueuil" & mois %in% 6:8 & !is.na(O3))STT-4300 — Régression II
Labo 2
Date18 mars 2026
SujetRégression non linéaire : polynômes et splines
Objectifs
- Ajuster des modèles de régression polynomiale, par fonctions constantes par morceaux, et par splines de régression.
- Choisir le degré du polynôme (ou le nombre de nœuds) par un critère d’information (AIC/BIC) et par validation croisée.
- Comprendre l’intérêt des splines naturelles et des splines de lissage (
smooth.spline) par rapport aux splines de régression classiques.
Mise en contexte
On utilise le jeu de données qualite_air (télécharger, 28 Mo), décrit dans les notes de cours : mesures horaires 2025 des stations du Réseau de surveillance de la qualité de l’air du Québec, tirées de donneesbleues.ca. Comme dans le chapitre sur les splines, on retient les mesures d’ozone (O3, en ppb) de juin, juillet et août à la station de Longueuil ; la réponse \(Y\) est la concentration d’ozone et la variable explicative \(X\) est l’heure de la journée, de 0 à 23.
Consignes
- Ajuster des régressions polynomiales de degré \(p = 1, 2, 3, 5, 10\) (
lm(O3 ~ poly(heure, p, raw = TRUE))). Superposer les courbes ajustées au nuage de points et commenter : quel degré minimal faut-il pour représenter le cycle journalier? Que fait le degré 10 près de minuit? - Sélectionner le degré \(p\) à l’aide de l’AIC et du BIC, puis à l’aide de la validation croisée (LOOCV ou 10-fold). Les critères mènent-ils à la même valeur de \(p\)? Pourquoi sont-ils si plats au-delà d’un certain degré?
- Ajuster un modèle à fonctions constantes par morceaux avec
cut(heure, K)pour quelques valeurs de \(K\), dont \(K = 24\). Que représente \(\hat f\) dans ce dernier cas? Comparer à la régression polynomiale, visuellement et par validation croisée. - Ajuster une spline de régression cubique avec
bs(heure, knots = ...)pour un choix de nœuds que vous justifierez, puis une spline naturelle avecns(heure, df = 4). Comparer les deux courbes, en particulier si on les prolonge au-delà de la plage des données. - Ajuster une spline de lissage avec
smooth.spline(ozone$heure, ozone$O3). Rapporter les degrés de liberté effectifs sélectionnés et comparer la courbe obtenue aux splines de régression du point 4. Essayer ensuitecv = TRUE: que dit R, et pourquoi? Combien de nœuds la spline de lissage utilise-t-elle ici? - Construire un intervalle de confiance ponctuel pour \(f(x)\) à 16 h, pour le modèle polynomial retenu au point 2, et le comparer à l’intervalle de prédiction pour une nouvelle mesure. Pourquoi sont-ils si différents?
- Rédiger une courte conclusion (5-10 lignes) comparant l’ensemble des méthodes du labo selon : flexibilité, risque de surajustement, interprétabilité, et facilité d’implémentation.
Matériel
- Notes de cours : Régression non linéaire — polynômes, fonctions par morceaux et splines
- Données :
qualite_air.csv - Librairies R :
splines