Интервал прогнозирования начальной загрузки

29

Существует ли какой-либо метод начальной загрузки для вычисления интервалов прогнозирования для точечных прогнозов, полученных, например, с помощью линейной регрессии или другого метода регрессии (k-ближайший сосед, деревья регрессии и т. Д.)?

Почему-то я чувствую, что иногда предлагаемый способ просто перехватить точечный прогноз (см., Например, интервалы прогнозирования для регрессии kNN ) не обеспечивает интервал прогнозирования, а доверительный интервал.

Пример в R

# STEP 1: GENERATE DATA

set.seed(34345)

n <- 100 
x <- runif(n)
y <- 1 + 0.2*x + rnorm(n)
data <- data.frame(x, y)


# STEP 2: COMPUTE CLASSIC 95%-PREDICTION INTERVAL
fit <- lm(y ~ x)
plot(fit) # not shown but looks fine with respect to all relevant aspects

# Classic prediction interval based on standard error of forecast
predict(fit, list(x = 0.1), interval = "p")
# -0.6588168 3.093755

# Classic confidence interval based on standard error of estimation
predict(fit, list(x = 0.1), interval = "c")
# 0.893388 1.54155


# STEP 3: NOW BY BOOTSTRAP
B <- 1000
pred <- numeric(B)
for (i in 1:B) {
  boot <- sample(n, n, replace = TRUE)
  fit.b <- lm(y ~ x, data = data[boot,])
  pred[i] <- predict(fit.b, list(x = 0.1))
}
quantile(pred, c(0.025, 0.975))
# 0.8699302 1.5399179

Очевидно, базовый интервал начальной загрузки 95% соответствует доверительному интервалу 95%, а не интервалу прогнозирования 95%. Итак, мой вопрос: как это сделать правильно?

Майкл М
источник
По крайней мере, в случае обычных наименьших квадратов вам понадобится нечто большее, чем просто точечные прогнозы; Вы хотите использовать предполагаемую остаточную ошибку для построения интервалов прогнозирования.
Кодиолог
1
Связанный: stats.stackexchange.com/q/44860
@duplo: спасибо за указание на это. Правильная длина классических интервалов прогнозирования напрямую зависит от предположения нормальности члена ошибки, поэтому, если он слишком оптимистичен, то вполне вероятно, что будет также загруженная версия, если она получена из нее. Интересно, есть ли вообще метод начальной загрузки, работающий в регрессии (не обязательно OLS).
Майкл М
1
Я думаю, что \ textit {conformal inference} может быть тем, что вы хотите, что позволяет вам строить интервалы прогнозирования на основе повторной выборки, которые имеют действительный конечный выборочный охват и не слишком сильно перекрывают. Есть хороший документ, доступный по адресу arxiv.org/pdf/1604.04173.pdf , который можно прочитать в качестве введения в тему, и пакет R, доступный по адресу github.com/ryantibs/conformal .
Саймон Боге Брант

Ответы:

26

Метод, изложенный ниже, описан в разделе 6.3.3 Дэвидсона и Хинкли (1997), Методы начальной загрузки и их применение . Спасибо Glen_b и его комментарию здесь . Учитывая, что по этой теме было несколько вопросов о Cross Validated, я подумал, что стоит написать.

Модель линейной регрессии:

Yi=Xiβ+ϵi

У нас есть данные, , которые мы используем для оценки & beta ; как: бета МНКi=1,2,,Nβ

β^OLS=(XX)1XY

Теперь мы хотим предсказать, каким будет для новой точки данных, учитывая, что мы знаем X для нее. Это проблема прогнозирования. Давайте назовем новый X (который мы знаем) X N + 1 и новый Y (который мы хотели бы предсказать), Y N + 1 . Обычный прогноз (если мы предполагаем, что ϵ i являются iid и некоррелированными с X ): Y p N + 1YXXXN+1YYN+1ϵiX

YN+1p=XN+1β^OLS

Ошибка прогноза, сделанная этим прогнозом:

eN+1p=YN+1YN+1p

Мы можем переписать это уравнение как:

YN+1=YN+1p+eN+1p

YN+1pYN+15th95TчасеN+1пе5,е95[YN+1п+е5,YN+1п+е95]

еN+1п

еN+1пзнак равноYN+1-YN+1пзнак равноИксN+1β+εN+1-ИксN+1β^МНКзнак равноИксN+1(β-β^МНК)+εN+1

еN+1пеN+1п5Tчас95Tчас500Tчас9,500Tчас

ИксN+1(β-β^МНК)Nεя*Yя*знак равноИксяβ^МНК+εя*(Y*,Икс)βр*ИксN+1(β-β^МНК)ИксN+1(β^МНК-βр*)

εεN+1{е1*,е2*,...,еN*}{s1-s¯,s2-s¯,...,sN-s¯}sязнак равноея*/(1-чася)часяя

YN+1ИксИксN+1

  1. YN+1пзнак равноИксN+1β^МНК
  2. {s1-s¯,s2-s¯,...,sN-s¯}sязнак равноея/(1-чася)
  3. рзнак равно1,2,...,р
    • N{ε1*,ε2*,...,εN*}
    • Y*знак равноИксβ^МНК+ε*
    • βр*знак равно(Икс'Икс)-1Икс'Y*
    • ер*знак равноY*-Иксβр*
    • s*-s*¯
    • εN+1,р*
    • еN+1перп*знак равноИксN+1(β^МНК-βр*)+εN+1,р*
  4. 5Tчас95TчасеN+1пе5,е95
  5. YN+1[YN+1п+е5,YN+1п+е95]

Вот Rкод:

# This script gives an example of the procedure to construct a prediction interval
# for a linear regression model using a bootstrap method.  The method is the one
# described in Section 6.3.3 of Davidson and Hinckley (1997),
# _Bootstrap Methods and Their Application_.


#rm(list=ls())
set.seed(12344321)
library(MASS)
library(Hmisc)

# Generate bivariate regression data
x <- runif(n=100,min=0,max=100)
y <- 1 + x + (rexp(n=100,rate=0.25)-4)

my.reg <- lm(y~x)
summary(my.reg)

# Predict y for x=78:
y.p <- coef(my.reg)["(Intercept)"] + coef(my.reg)["x"]*78
y.p

# Create adjusted residuals
leverage <- influence(my.reg)$hat
my.s.resid <- residuals(my.reg)/sqrt(1-leverage)
my.s.resid <- my.s.resid - mean(my.s.resid)


reg <- my.reg
s <- my.s.resid

the.replication <- function(reg,s,x_Np1=0){
  # Make bootstrap residuals
  ep.star <- sample(s,size=length(reg$residuals),replace=TRUE)

  # Make bootstrap Y
  y.star <- fitted(reg)+ep.star

  # Do bootstrap regression
  x <- model.frame(reg)[,2]
  bs.reg <- lm(y.star~x)

  # Create bootstrapped adjusted residuals
  bs.lev <- influence(bs.reg)$hat
  bs.s   <- residuals(bs.reg)/sqrt(1-bs.lev)
  bs.s   <- bs.s - mean(bs.s)

  # Calculate draw on prediction error
  xb.xb <- coef(my.reg)["(Intercept)"] - coef(bs.reg)["(Intercept)"] 
  xb.xb <- xb.xb + (coef(my.reg)["x"] - coef(bs.reg)["x"])*x_Np1
  return(unname(xb.xb + sample(bs.s,size=1)))
}

# Do bootstrap with 10,000 replications
ep.draws <- replicate(n=10000,the.replication(reg=my.reg,s=my.s.resid,x_Np1=78))

# Create prediction interval
y.p+quantile(ep.draws,probs=c(0.05,0.95))

# prediction interval using normal assumption
predict(my.reg,newdata=data.frame(x=78),interval="prediction",level=0.90)


# Quick and dirty Monte Carlo to see which prediction interval is better
# That is, what are the 5th and 95th percentiles of Y_{N+1}
# 
# To do it properly, I guess we would want to do the whole procedure above
# 10,000 times and then see what percentage of the time each prediction 
# interval covered Y_{N+1}

y.np1 <- 1 + 78 + (rexp(n=10000,rate=0.25)-4)
quantile(y.np1,probs=c(0.05,0.95))
Билл
источник
Спасибо за полезные, подробные объяснения. Следуя этим строкам, я думаю, что общий метод за пределами OLS (методы на основе дерева, ближайший сосед и т. Д.) Не будет легко доступен, верно?
Майкл М
1
Вот это для случайных лесов: stats.stackexchange.com/questions/49750/… звучит похоже.
Билл
Иксβе(Икс,θ)
Как вы обобщаете «невязки с поправкой на дисперсию» - подход OLS основан на рычаге - есть ли расчет рычагов для произвольной оценки f (X)?
Дэвид Уотерворт