Comparer les splines de lissage et le loess pour le lissage?


25

Je souhaite mieux comprendre les avantages / inconvénients de l'utilisation de loess ou d'un spline de lissage pour lisser une courbe.

Une autre variation de ma question est de savoir s'il existe un moyen de construire une spline de lissage d'une manière qui produira les mêmes résultats que l'utilisation du loess.

Toute référence ou idée est la bienvenue.


Tal, L'article bien cité qui suit examine de nombreuses approches de régression non paramétrique Buja, A., Hastie, T., et Tibshirani, R. (1989). Lisseuses linéaires et modèles additifs . The Annals of Statistics , 17 (2), 453–510, mieux.
Alexis

Réponses:


16

Voici un code / exemple R qui vous permettra de comparer les ajustements pour un ajustement de loess et un ajustement de spline:

library(TeachingDemos)
library(splines)

tmpfun <- function(x,y,span=.75,df=3) {
    plot(x,y)
    fit1 <- lm(y ~ ns(x,df))
    xx <- seq( min(x), max(x), length.out=250 )
    yy <- predict(fit1, data.frame(x=xx))
    lines(xx,yy, col='blue')
    fit2 <- loess(y~x, span=span)
    yy <- predict(fit2, data.frame(x=xx))
    lines(xx,yy, col='green')
    invisible(NULL)
}

tmplst <- list( 
    span=list('slider', from=0.1, to=1.5, resolution=0.05, init=0.75),
    df=list('slider', from=3, to=25, resolution=1, init=3))

tkexamp( tmpfun(ethanol$E, ethanol$NOx), tmplst )

Vous pouvez l'essayer avec vos données et modifier le code pour essayer d'autres types ou options. Vous pouvez également consulter la loess.demofonction du package TeachingDemos pour une meilleure compréhension de ce que fait l'algorithme de loess. Notez que ce que vous voyez du loess est souvent une combinaison de loess avec un second lissage d'interpolation (parfois lui-même une spline), la loess.demofonction affiche à la fois l'ajustement de lœss lissé et brut.

Théoriquement, vous pouvez toujours trouver une spline qui se rapproche d'une autre fonction continue aussi près que vous le souhaitez, mais il est peu probable qu'il y ait un simple choix de nœuds qui donnera de manière fiable une approximation proche d'un ajustement de loess pour n'importe quel ensemble de données.


Salut Greg: 1) Merci pour la réponse. 2) J'adore ta fonction loess.demo ...
Tal Galili

29

Les résultats réels d'une spline de lissage ou d'un lœss vont être assez similaires. Ils peuvent sembler un peu différents sur les bords du support, mais tant que vous vous assurez qu'il s'agit d'une spline de lissage "naturelle", ils seront très similaires.

Si vous en utilisez simplement un pour ajouter un "lissage" à un nuage de points, il n'y a aucune raison réelle de préférer l'un à l'autre. Si vous souhaitez plutôt faire des prédictions sur de nouvelles données, il est généralement beaucoup plus facile d'utiliser une spline de lissage. En effet, la spline de lissage est une expansion de base directe des données d'origine; si vous avez utilisé 100 nœuds pour le faire, cela signifie que vous avez créé ~ 100 nouvelles variables à partir de la variable d'origine. Loess estime plutôt la réponse à toutes les valeurs expérimentées (ou à un sous-ensemble stratifié pour les grandes données).

En général, il existe des algorithmes établis pour optimiser la valeur de pénalité pour le lissage des splines (mgcv dans R le fait probablement le mieux). Loess n'est pas aussi clair, mais vous obtiendrez généralement une sortie raisonnable de toute implémentation. MGCV vous donne également une idée des degrés de liberté équivalents afin que vous puissiez avoir une idée de la façon dont «non linéaire» vos données sont.

Je trouve que lors de la modélisation sur de très grandes données, une spline naturelle plus simple fournit souvent des résultats similaires pour un calcul minimal par rapport à une spline de lissage ou au loess.


+1, belle réponse! J'aime l'exposé théorique clair.
gung - Rétablir Monica

Pourquoi diffèrent-ils cependant près des bords du support?
imu96

1
X
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.