> Statistiques > Analyse de données > Local polynomial fitting
Local polynomial fitting
Moyenne mobile et convolution :
- filter permet de faire une convolution sur une série temporelle à une dimension en utilisant un vecteur de filtrage.
- exemple : y <- filter(x, filter = rep(1, 20) / 20) : moyenne mobile sur 20 points consécutifs.
- différences successives : filter(x, filter = c(1, -1))
L'objectif est de tracer une courbe qui ajuste un nuage de points. C'est une généralisation de la régression linéaire (souvent plus puissant également que l'ajustement polynomial simple). LOESS : locally weighted scatterplot smoothing.
Principe exact :
- pour chaque point du nuage, on calcule un polynôme de degré faible (0, 1 ou 2) qui ajuste ce point et les points environnants par une méthode moindre carrés (avec une pondération d'autant plus faible que le point est éloigné du point de référence).
- selon le degré du polynôme :
- degré 0 : on obtient une moyenne mobile pondérée.
- degré 1 : sorte de régression linéaire glissante (appelée souvent LOESS).
- degré 2 : sorte de régression quadratique glissante (appelée souvent LOWESS).
- avantages du local polynomial fitting :
- reste simple.
- pas besoin de spécifier une fonction pour le modèle. S'adapte à de très nombreuses formes de nuages de points.
- inconvénients du local polynomial fitting :
- pas de formule analytique.
- demande pas mal de points et pas mal de calculs (mais ce n'est plus un problème aujourd'hui).
Calcul de la régression, avec les paramètres par défaut :
x <- seq(0, 10, 0.1)
y <- 10 * exp(sin(x) / 10) + rnorm(length(x), 0, 0.1)
fr <- data.frame(x = x, y = y)
pred <- loess(y ~ x, fr)
Calcul de la régression avec différents paramètres :
pred <- loess(y ~ x, fr, span = 0.5, degree = 1)
- span = 0.5 : taille du voisinage autour du point courant qui doit être pris en compte pour le calcul de la régression, entre 0 et 1. Plus il est grand, plus la courbe est régulière, plus il est petit, plus la courbe suit le nuage (défaut = 0.75). Quand il faut 0.5, 50% des points sont pris en compte pour calculer la valeur locale.
- degree = 1 : degré du polynôme. Plus il est élevé, plus la courbe suit le nuage (défaut = 2).
Propriétés de l'objet renvoyé :
pred <- loess(y ~ x, fr)
L'objet renvoyé est de la classe loess et a notamment les attributs suivants :
- pred$fitted : les valeurs de y prédites pour les valeurs données de x.
- pred$residuals : les valeurs résiduelles de y pour les valeurs données de x (valeurs réelles-valeurs prédites).
Prédiction de valeurs correspondantes à des nouvelles valeur de x :
- predict(pred, c(1, 2, 3, 5)) : prédiction des valeurs correspondantes au valeurs présentes dans le vecteur (renvoie alors un simple vecteur).
- lis <- predict(pred, c(1, 2, 3, 5), se = TRUE) : renvoie les prédictions avec une erreur standard. Le type renvoyé est alors une liste avec notamment les attributs :
- lis$fit : les valeurs prédites (comme avec se = FALSE, le défaut).
- lis$se.fit : les erreurs standards sur les valeurs prédites.
- On peut récupérer la fonction prédite f par : f <- function(x) {return(predict(pred, x))}
Local polynomial fitting avec plusieurs variables :
x <- seq(0, 10, 0.1)
x <- rep(x, times = 20)
y <- seq(0, 10, 0.1)
y <- rep(y, each = 20)
z <- exp(sin(x) + sin(y))
fr <- data.frame(x = x, y = y, z = z)
pred <- loess(z ~ x * y, fr, span = 0.3)
f <- function(X, Y) {return(predict(pred, data.frame(x = X, y = Y)))
Copyright Aymeric Duclert
programmer en R, tutoriel R, graphes en R