Como calcular os intervalos de previsão do LOESS?

17

Eu tenho alguns dados que eu ajustei usando um modelo LOESS em R, me dando o seguinte:

insira a descrição da imagem aqui

Os dados têm um preditor e uma resposta e são heterocedásticos.

Eu também adicionei intervalos de confiança. O problema é que os intervalos são intervalos de confiança para a linha, enquanto eu estou interessado nos intervalos de previsão. Por exemplo, o painel inferior é mais variável que o painel superior, mas isso não é capturado nos intervalos.

Esta pergunta está um pouco relacionada: Entendendo a faixa de confiança de uma regressão polinomial , especialmente a resposta de @AndyW, no entanto, em seu exemplo, ele usa o interval="predict"argumento relativamente direto que existe predict.lm, mas está ausente predict.loess.

Então, eu tenho duas perguntas muito relacionadas:

  1. Como obtenho os intervalos de previsão no sentido do LOESS?
  2. Como posso prever valores que capturam esse intervalo, ou seja, gerar um monte de números aleatórios que eventualmente se parecerão com os dados originais?

É possível que eu não precise do LOESS e use outra coisa, mas não estou familiarizado com minhas opções. Basicamente, ele deve se ajustar à linha usando regressão local ou regressão linear múltipla, fornecendo estimativas de erro para as linhas e também variações diferentes para variáveis ​​explicativas diferentes, para que eu possa prever a distribuição da variável de resposta (y) em certos valores x .

Gimelist
fonte
Esse é um intervalo de previsão pontual?
Glen_b -Reinstala Monica 13/03
O que você quer dizer com isso"? E eu não tenho certeza se é importante ou não. Minha pergunta 2 é o que estou procurando - infelizmente não estou familiarizado com a nomenclatura.
Gimelist 13/03/2015
Por 'isto' Quero dizer "a coisa a questão é perguntando sobre o título"
Glen_b -Reinstate Monica
Portanto, não tenho certeza - veja meu comentário anterior. Basicamente, estou procurando um intervalo que capture a variação real nos pontos de dados, conforme descrito na minha pergunta.
Gimelist 13/03/2015
1
O spread pode ser variável (foi por isso que optei pela regressão local em primeiro lugar). Único preditor.
Gimelist

Respostas:

12

Não sei como fazer bandas de previsão com a loessfunção original , mas há uma função loess.sdno msirpacote que faz exatamente isso! Quase literalmente da msirdocumentação:

library(msir)
data(cars)
# Calculates and plots a 1.96 * SD prediction band, that is,
# a 95% prediction band
l <- loess.sd(cars, nsigma = 1.96)
plot(cars, main = "loess.sd(cars)", col="red", pch=19)
lines(l$x, l$y)
lines(l$x, l$upper, lty=2)
lines(l$x, l$lower, lty=2)

insira a descrição da imagem aqui

Sua segunda pergunta é um pouco mais complicada, uma vez loess.sdque não vem com uma função de previsão, mas você pode agrupá-la interpolando linearmente os meios e SDs previstos dos quais você obtém loess.sd(usando approx). Estes podem, por sua vez, ser usados ​​para simular dados usando uma distribuição normal com os meios e SDs previstos:

# Simulate x data uniformly and y data acording to the loess fit
sim_x <- runif(100, min(cars[,1]), max(cars[,1]))
pred_mean <- approx(l$x, l$y, xout = sim_x)$y
pred_sd <- approx(l$x, l$sd, xout = sim_x)$y
sim_y <- rnorm(100, pred_mean, pred_sd) 

# Plots 95% prediction bands with simulated data 
plot(cars, main = "loess.sd(cars)", col="red", pch=19)
points(sim_x, sim_y, col="blue")
lines(l$x, l$y)
lines(l$x, l$upper, lty=2)
lines(l$x, l$lower, lty=2)

insira a descrição da imagem aqui

Rasmus Bååth
fonte
Exatamente o que eu estava procurando. Ao olhar para o método que ele usou ao ver o código loess.sd, não é muito diferente do que o @rnso sugeriu em um comentário para outra pergunta minha . Obrigado!
Gimelist
Bootstrap para gerar os intervalos?
SmallChess