Інтервал прогнозу завантаження


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 {конформний висновок} може бути тим, що ви хочете, що дозволяє будувати інтервали прогнозування на основі переустановки, які мають дійсне кінцеве вибіркове покриття, і не надто покривають. Є хороший документ, який доступний на веб- сайті arxiv.org/pdf/1604.04173.pdf , який можна прочитати як вступ до теми, та пакет R, який можна знайти на веб-сайті github.com/ryantibs/conformal .
Саймон Боге Брант

Відповіді:


26

Нижче описаний метод, описаний у розділі 6.3.3 Девідсона та Хінклі (1997), методи Bootstrap та їх застосування . Дякую Glen_b та його коментар тут . Зважаючи на те, що на цю тему було кілька питань щодо перехресної перевірки, я подумав, що варто написати.

Yi=Xiβ+ϵi

i=1,2,,Nβ

β^OLS=(XX)1XY

YXXXN+1YYN+1ϵiX

YN+1p=XN+1β^OLS

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

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

YN+1pYN+15th95theN+1pe5,e95[YN+1p+e5,YN+1p+e95]

eN+1p

eN+1p=YN+1YN+1p=XN+1β+ϵN+1XN+1β^OLS=XN+1(ββ^OLS)+ϵN+1

eN+1peN+1p5th95th500th9,500th

XN+1(ββ^OLS)NϵiYi=Xiβ^OLS+ϵi(Y,X)βrXN+1(ββ^OLS)XN+1(β^OLSβr)

ϵϵN+1{e1,e2,,eN}{s1s¯,s2s¯,,sNs¯}si=ei/(1hi)hii

YN+1XXN+1

  1. YN+1p=XN+1β^OLS
  2. {s1s¯,s2s¯,,sNs¯}si=ei/(1hi)
  3. r=1,2,,R
    • N{ϵ1,ϵ2,,ϵN}
    • Y=Xβ^OLS+ϵ
    • βr=(XX)1XY
    • er=YXβr
    • ss¯
    • ϵN+1,r
    • eN+1perp=XN+1(β^OLSβr)+ϵN+1,r
  4. 5th95theN+1pe5,e95
  5. YN+1[YN+1p+e5,YN+1p+e95]

Ось 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/…, який звучить схоже.
Білл

Xβf(X,θ)

Як ви узагальнюєте "залишки, скориговані на дисперсію" - підхід OLS спирається на важелі - чи існує розрахунок важеля для довільного оцінювача f (X)?
Девід Уотерворт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.