Как рассчитать интервалы прогнозирования для LOESS?

17

У меня есть некоторые данные, которые я использовал, используя модель LOESS в R, давая мне это:

введите описание изображения здесь

Данные имеют один предиктор и один ответ, и они гетероскедастичны.

Я также добавил доверительные интервалы. Проблема в том, что интервалы являются доверительными интервалами для линии, тогда как меня интересуют интервалы прогнозирования. Например, нижняя панель более изменчива, чем верхняя панель, но она не фиксируется в интервалах.

Этот вопрос немного связан: понимание доверительного интервала из полиномиальной регрессии , особенно ответа @AndyW, однако в своем примере он использует относительно простой interval="predict"аргумент, который существует в predict.lm, но отсутствует в predict.loess.

Итак, у меня есть два очень связанных вопроса:

  1. Как я могу получить точечные интервалы прогнозирования для LOESS?
  2. Как я могу предсказать значения, которые захватят этот интервал, то есть сгенерировать группу случайных чисел, которые в конечном итоге будут выглядеть как исходные данные?

Возможно, мне не нужен LOESS и я должен использовать что-то другое, но я не знаком с моими вариантами. По сути, он должен соответствовать линии, используя локальную регрессию или множественную линейную регрессию, давая мне оценки ошибок для линий, а также, кроме того, разные дисперсии для разных объясняющих переменных, чтобы я мог предсказать распределение переменной отклика (y) при определенных значениях x ,

Gimelist
источник
Это интервал точечного предсказания?
Glen_b
Что ты хочешь этим сказать"? И я не уверен, если это точечно или нет. Мой вопрос 2 - это то, что я ищу - к сожалению, я не знаком с номенклатурой.
Gimelist
Под «этим» я подразумеваю «то, о чем вопрос задается в заголовке»
Glen_b
Так что я не уверен - см. Мой предыдущий комментарий. По сути, я ищу интервал, который будет отражать фактическую дисперсию в точках данных, как описано в моем вопросе.
Gimelist
1
Спред может быть переменным (поэтому я выбрал локальную регрессию в первую очередь). Единственный предиктор.
Gimelist

Ответы:

12

Я не знаю, как делать полосы предсказания с оригинальной loessфункцией, но loess.sdв msirпакете есть функция , которая делает именно это! Почти дословно из msirдокументации:

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)

введите описание изображения здесь

Ваш второй вопрос немного сложнее, так loess.sdкак не включает функцию прогнозирования, но вы можете взломать ее вместе, линейно интерполируя предсказанные средние значения и SD, которые вы получаете loess.sd(используя approx). Их, в свою очередь, можно использовать для моделирования данных с использованием нормального распределения с прогнозируемыми средними и 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)

введите описание изображения здесь

Расмус Батх
источник
Именно то, что я искал. Если посмотреть на метод, который он использовал, увидев код loess.sd, то он не слишком отличается от того, что @rnso предложил в комментарии к другому моему вопросу . Благодарность!
Gimelist
Бутстрап для генерации интервалов?
SmallChess