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.demo
fonction 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.demo
fonction 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.