Dernière modification

9 octobre 2026

STT-4300 — Régression II

Labo 4

🗓️Date1er avril 2026

📘SujetSynthèse : kNN, noyau, splines et GAM en compétition

Objectifs

  • Comparer, sur un même jeu de données, l’ensemble des méthodes non paramétriques et non linéaires vues jusqu’ici (kNN, noyau, splines, GAM).
  • Estimer et comparer l’erreur de prédiction test de chaque méthode par validation croisée.
  • Développer un jugement critique sur le choix d’une méthode selon le contexte (nombre de variables, interprétabilité recherchée, taille de l’échantillon).

Mise en contexte

On reprend le jeu de données qualite_air (télécharger), mais à une autre station : Québec – Vieux-Limoilou. Comme aux labos 2 et 3, la réponse \(Y\) est la concentration d’ozone (O3) et la variable explicative \(X\) est l’heure de la journée ; on retient les mois de juin, juillet et août. Pour la partie multivariée, on utilisera l’année entière et les autres contaminants mesurés à la station : le monoxyde de carbone (CO), les particules fines (PM2.5-T640) et le carbone suie (BC_880nm).

library(FNN)
library(KernSmooth)
library(splines)
library(mgcv)
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))
air$jour  <- as.integer(format(as.Date(substr(air$Date_Heure, 1, 10)), "%j"))
quebec <- subset(air, Station == "03006 - Québec - Vieux-Limoilou")
ete <- subset(quebec, mois %in% 6:8 & !is.na(O3))

Consignes

  1. Partitionner les données en un ensemble d’entraînement (70 %) et un ensemble test (30 %), ou prévoir une procédure de validation croisée à \(K=10\) plis réutilisable pour toutes les méthodes suivantes. Réfléchir aux conséquences d’un tirage au hasard parmi des heures consécutives.
  2. Ajuster, sur l’ensemble d’entraînement, chacun des modèles suivants pour prédire O3 en fonction de heure :
    • un modèle linéaire simple (référence) ;
    • un estimateur kNN (knn.reg), avec \(k\) choisi par validation croisée ;
    • un estimateur de noyau (locpoly ou la formule des poids), avec \(h\) choisi par validation croisée ;
    • une spline de lissage (smooth.spline, en justifiant le choix entre GCV et cv = TRUE) ;
    • un GAM univarié (gam(O3 ~ s(heure))).
  3. Pour chaque méthode, calculer l’erreur quadratique moyenne sur l’ensemble test (ou moyenne des erreurs de validation croisée). Présenter les résultats dans un tableau.
  4. Superposer, sur un même graphique, les cinq courbes ajustées par rapport au nuage de points. Commenter les ressemblances et différences.
  5. Extension multivariée. Sur l’année entière, ajuster un GAM avec plusieurs prédicteurs, par exemple gam(O3 ~ s(heure) + s(jour) + s(CO) + s(PM25) + s(BC)), après avoir renommé les colonnes PM2.5-T640 et BC_880nm et retiré les heures où une mesure manque. Comparer son erreur de prédiction test à celle du modèle linéaire multiple correspondant et à celle du GAM à deux cycles du labo 3. Quelles variables semblent avoir un effet non linéaire marqué? Comment ces effets s’interprètent-ils chimiquement?
  6. Rédiger une conclusion (15-20 lignes) qui répond à la question : dans quelles circonstances choisiriez-vous kNN, le noyau, les splines, ou un GAM? Appuyez votre réponse sur vos résultats numériques et sur des arguments de flexibilité, de fléau de la dimension, et d’interprétabilité.

Matériel