Come calcolare gli intervalli di previsione per LOESS?


17

Ho alcuni dati che ho inserito usando un modello LOESS in R, dandomi questo:

inserisci qui la descrizione dell'immagine

I dati hanno un predittore e una risposta ed è eteroscedastico.

Ho anche aggiunto intervalli di confidenza. Il problema è che gli intervalli sono intervalli di confidenza per la linea, mentre io sono interessato agli intervalli di previsione. Ad esempio, il pannello inferiore è più variabile del pannello superiore, ma questo non viene catturato negli intervalli.

Questa domanda è leggermente correlata: capire la banda di confidenza da una regressione polinomiale , in particolare la risposta di @AndyW, tuttavia nel suo esempio usa il relativamente sempliceinterval="predict" argomento che esiste in predict.lm, ma è assente predict.loess.

Quindi ho due domande molto correlate:

  1. Come posso ottenere gli intervalli di previsione puntuali per LOESS?
  2. Come posso prevedere valori che cattureranno quell'intervallo, ovvero generare un gruppo di numeri casuali che alla fine assomiglieranno in qualche modo ai dati originali?

È possibile che non abbia bisogno di LOESS e che debba usare qualcos'altro, ma non ho familiarità con le mie opzioni. Fondamentalmente dovrebbe adattarsi alla linea usando la regressione locale o la regressione lineare multipla, dandomi stime di errore per le linee e inoltre anche varianze diverse per diverse variabili esplicative, quindi posso prevedere la distribuzione della variabile di risposta (y) a determinati valori x .


È un intervallo di previsione puntuale?
Glen_b

Cosa intendi con questo"? E non sono sicuro che sia giusto o no. La mia domanda 2 è quello che sto cercando - purtroppo non ho familiarità con la nomenclatura.
Gimelist

Con 'questo' intendo "la cosa che la domanda sta ponendo nel titolo"
Glen_b -Reinstate Monica

Quindi non sono sicuro - vedi il mio commento precedente. Fondamentalmente sto cercando un intervallo che catturi la varianza effettiva nei punti dati, come descritto nella mia domanda.
Elenco dei Gim

1
Lo spread può essere variabile (ecco perché ho optato per la regressione locale in primo luogo). Predittore singolo.
Elenco dei Gim

Risposte:


12

Non so come fare bande di predizione con la loessfunzione originale ma loess.sdnel msirpacchetto c'è una funzione che fa proprio questo! Quasi alla lettera dalla msirdocumentazione:

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)

inserisci qui la descrizione dell'immagine

La tua seconda domanda è un po 'più complicata poiché loess.sdnon ha una funzione di previsione, ma puoi hackerarla insieme interpolando linearmente i mezzi previsti e le SD da cui esci loess.sd(usando approx). Questi, a loro volta, possono essere usati per simulare i dati usando una distribuzione normale con i mezzi previsti e le SD:

# 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)

inserisci qui la descrizione dell'immagine


Esattamente quello che stavo cercando. Quando si guarda il metodo che ha usato vedendo il codice con loess.sd, non è troppo diverso da quello che @rnso ha suggerito in un commento a un'altra mia domanda . Grazie!
Elenco degli errori

Bootstrap per generare gli intervalli?
SmallChess,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.