19 votos

Cómo calcular los intervalos de predicción para el LOESS?

Tengo algunos datos que me instalados usando un modelo de LOESS en R, me da esto:

enter image description here

Los datos tiene un predictor y una respuesta, y es heteroscedastic.

También he añadido los intervalos de confianza. El problema es que los intervalos son los intervalos de confianza para la línea, mientras que yo estoy interesado en los intervalos de predicción. Por ejemplo, el panel inferior es más variable, a continuación, el panel superior, pero esto no se refleja en los intervalos.

Esta pregunta es un poco relacionado con: La comprensión de la banda de confianza de un polinomio de regresión, especialmente la respuesta de @AndyW, sin embargo en este ejemplo se utiliza la relativamente sencillo interval="predict" argumento de que existe en predict.lm, pero que está ausente de predict.loess.

Así que tengo dos preguntas:

  1. ¿Cómo puedo obtener el pointwise intervalos de predicción para el LOESS?
  2. ¿Cómo puedo predecir los valores que se captura en ese intervalo, es decir, generar un montón de números aleatorios que eventualmente se ven un poco como los datos originales?

Es posible que no tengo necesidad de LOESS y debe utilizar algo más, pero no estoy familiarizado con mis opciones. Básicamente debe encajar en la línea de uso de locales de regresión o de regresión lineal múltiple, me da un error de estimación para las líneas, y además también diferentes variaciones para diferentes variables explicativas, así que puede predecir la distribución de la variable de respuesta (y) en ciertos valores de x.

14voto

x0n Puntos 26002

No sé cómo hacer la predicción de las bandas con el original loess función, pero no es una función loess.sd en la msir paquete que hace justamente eso! Casi textual de la msir documentación:

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)

enter image description here

La segunda pregunta es un poco más complicado, ya loess.sd no viene con una función de predicción, pero se puede hackear juntos por interpolando linealmente de la predicción de los medios y SDs de salir de la loess.sd (usando approx). Estos pueden, a su vez, se utiliza para simular los datos con una distribución normal con la predicción de los medios y de la SDs:

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

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X