Aqui está um código / exemplo de R que permitirá comparar os ajustes de um ajuste menor e um ajuste 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 )
Você pode tentar com seus dados e alterar o código para tentar outros tipos ou opções. Você também pode examinar a loess.demo
função no pacote TeachingDemos para entender melhor o que o algoritmo menor faz. Observe que o que você vê do loess geralmente é uma combinação de loess com uma segunda suavização de interpolação (às vezes um spline); a loess.demo
função realmente mostra o ajuste do loess suavizado e o bruto.
Teoricamente, você sempre pode encontrar um spline que se aproxima de outra função contínua tão perto quanto você deseja, mas é improvável que haja uma escolha simples de nós que ofereçam, de maneira confiável, uma aproximação aproximada de um ajuste menor para qualquer conjunto de dados.