Вот некоторый R-код / пример, который позволит вам сравнить подгонки для подбора лесса и подгонки сплайна:
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 )
Вы можете попробовать это с вашими данными и изменить код, чтобы попробовать другие типы или варианты. Вы также можете посмотреть на loess.demo
функцию в пакете TeachingDemos, чтобы лучше понять, что делает алгоритм Лёсса. Обратите внимание, что то, что вы видите из лёсса, часто является комбинацией лёсса со вторым интерполяционным сглаживанием (иногда само по себе сплайном), loess.demo
функция на самом деле показывает как сглаженное, так и необработанное лессовое соответствие.
Теоретически вы всегда можете найти сплайн, который аппроксимирует другую непрерывную функцию настолько близко, насколько вы хотите, но маловероятно, что будет простой выбор узлов, который надежно даст близкое приближение к лессовому соответствию для любого набора данных.