Comparando splines de suavização vs loess para suavização?

25

Desejo entender melhor os prós / contras do uso de splines loess ou suavizantes para suavizar alguma curva.

Outra variação da minha pergunta é se existe uma maneira de construir um spline de suavização de uma maneira que produza os mesmos resultados que usar loess.

Qualquer referência ou insight é bem-vinda.

Tal Galili
fonte
Tal, o artigo bem citado a seguir examina muitas abordagens de regressão não paramétrica Buja, A., Hastie, T. e Tibshirani, R. (1989). Suportes lineares e modelos aditivos . The Annals of Statistics , 17 (2), 453-510, melhor.
Alexis

Respostas:

16

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.demofunçã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.demofunçã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.

Greg Snow
fonte
Olá Greg: 1) Obrigado pela resposta. 2) Eu amo a sua função loess.demo ...
Tal Galili
29

Os resultados reais de uma spline ou loess de suavização serão bastante semelhantes. Eles podem parecer um pouco diferentes nas bordas do suporte, mas desde que você tenha certeza de que é um spline de suavização "natural", eles parecerão realmente semelhantes.

Se você está apenas usando um para adicionar um "mais suave" a um gráfico de dispersão, não há motivo real para preferir um ao outro. Se, em vez disso, você deseja fazer previsões sobre novos dados, geralmente é muito mais fácil usar um spline de suavização. Isso ocorre porque o spline de suavização é uma expansão direta da base dos dados originais; se você usou 100 nós para fazer isso, significa que você criou ~ 100 novas variáveis ​​a partir da variável original. Loess apenas estima a resposta em todos os valores experimentados (ou um subconjunto estratificado para grandes dados).

Em geral, existem algoritmos estabelecidos para otimizar o valor da penalidade para suavizar splines (mgcv em R provavelmente faz o melhor). Loess não é tão claro, mas geralmente você ainda terá resultados razoáveis ​​em qualquer implementação. O MGCV também oferece uma sensação de graus de liberdade equivalentes, para que você possa ter uma noção de quão "não lineares" são seus dados.

Descobri que, ao modelar dados muito grandes, um spline natural mais simples geralmente fornece resultados semelhantes para um cálculo mínimo em comparação com um spline de suavização ou loess.

Shea Parkes
fonte
+1, boa resposta! Eu gosto da clara exposição teórica.
gung - Restabelece Monica
Por que eles diferem perto das bordas do suporte?
imu96 6/03
11
x