Ecco qualche codice / esempio R che ti permetterà di confrontare gli adattamenti per un adattamento loess e un adattamento 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 )
Puoi provarlo con i tuoi dati e cambiare il codice per provare altri tipi o opzioni. Potresti anche voler esaminare la loess.demo
funzione nel pacchetto TeachingDemos per una migliore comprensione di ciò che fa l'algoritmo di loess. Si noti che ciò che si vede da loess è spesso una combinazione di loess con un secondo livellamento di interpolazione (a volte esso stesso una spline), la loess.demo
funzione mostra in realtà sia l'adattamento levigato che quello grezzo.
Teoricamente puoi sempre trovare una spline che si avvicina a un'altra funzione continua il più vicino possibile, ma è improbabile che ci sia una semplice scelta di nodi che fornirà in modo affidabile una stretta approssimazione a un adattamento loess per qualsiasi set di dati.