Interwał przewidywania ładowania początkowego

29

Czy jest dostępna technika ładowania początkowego do obliczania przedziałów predykcji dla prognoz punktowych uzyskanych np. Z regresji liniowej lub innej metody regresji (k-najbliższy sąsiad, drzewa regresji itp.)?

Jakoś wydaje mi się, że czasami proponowanym sposobem, aby po prostu wyrzucić prognozę punktową (patrz np. Przedziały predykcji dla regresji kNN ), nie zapewnia przedziału prognoz, ale przedział ufności.

Przykład w 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

Oczywiście 95% podstawowy interwał ładowania początkowego pasuje do 95% przedziału ufności, a nie 95% przedziału predykcji. Więc moje pytanie: jak to zrobić poprawnie?

Michael M.
źródło
Przynajmniej w przypadku zwykłych najmniejszych kwadratów potrzebujesz więcej niż tylko prognoz punktowych; chcesz użyć szacunkowego błędu resztowego, aby skonstruować również przedziały prognozowania.
Kodiolog
@duplo: dziękuję za zwrócenie na to uwagi. Prawidłowa długość klasycznych przedziałów predykcji opiera się bezpośrednio na założeniu normalności terminu błędu, więc jeśli jest zbyt optymistyczny, to z całą pewnością również wersja bootstrapowana, jeśli zostanie z niej wyprowadzona. Zastanawiam się, czy istnieje ogólna metoda bootstrap działająca w regresji (niekoniecznie OLS).
Michael M
1
Myślę, że \ textit {konformacja wnioskowania} może być tym, czego chcesz, co pozwala konstruować przedziały predykcji oparte na ponownym próbkowaniu, które mają prawidłowy zasięg próbek skończonych i nie pokrywają zbyt wiele. Istnieje dobry artykuł dostępny na stronie arxiv.org/pdf/1604.04173.pdf , który można przeczytać jako wprowadzenie do tematu, oraz pakiet R dostępny na stronie github.com/ryantibs/conformal .
Simon Boge Brant

Odpowiedzi:

26

Metodą przedstawioną poniżej jest metoda opisana w sekcji 6.3.3 Davidson i Hinckley (1997), Metody ładowania początkowego i ich zastosowanie . Dzięki Glen_b i jego komentarzowi tutaj . Biorąc pod uwagę, że było kilka pytań na temat Cross Validated na ten temat, pomyślałem, że warto to napisać.

Model regresji liniowej to:

Yja=Xjaβ+ϵja

Mamy dane, , których używamy do oszacowania jako: beta beta OLSja=1,2),,N.β

β^OLS=(XX)-1XY

Teraz chcemy przewidzieć, jaki będzie dla nowego punktu danych, biorąc pod uwagę, że znamy dla niegoTo jest problem z prognozowaniem. Nazwijmy nowy (który znamy) i nowy (który chcielibyśmy przewidzieć), . Zwykła prognoza (jeśli zakładamy, że są iid i nieskorelowane z ) to: X X X N + 1 Y Y N + 1 ϵ i X Y p N + 1YXXXN.+1YYN.+1ϵjaX

YN.+1p=XN.+1β^OLS

Błąd prognozy spowodowany tą prognozą to:

miN.+1p=YN.+1-YN.+1p

Możemy ponownie napisać to równanie, takie jak:

YN.+1=YN.+1p+miN.+1p

Teraz już obliczyliśmy. Tak więc, jeśli chcemy związać w przedziale, powiedzmy, w 90% przypadków, wystarczy oszacować konsekwentnie i percentyle / kwantyle , nazwij je , a przedział przewidywania będzie . Y N + 1 5 t h 95 t h e p N + 1 e 5 , e 95 [ Y p N + 1 + e 5 , Y p N + 1 + e 95 ]YN.+1pYN.+15th95thmiN.+1pmi5,mi95[YN.+1p+mi5,YN.+1p+mi95]

Jak oszacować kwantyle / percentyle ? Cóż, możemy napisać: e p N + 1miN.+1p

miN.+1p=YN.+1-YN.+1p=XN.+1β+ϵN.+1-XN.+1β^OLS=XN.+1(β-β^OLS)+ϵN.+1

Strategia polega na próbkowaniu (w pewnym sensie bootstrapu) wiele razy z a następnie obliczaniu percentyli w zwykły sposób. Może więc spróbujemy 10 000 razy z , a następnie oszacujemy percentyle i jako i najmniejszych członków próbka. e p N + 1 5 t h 95 t h 500 t h 9 , 500 t hmiN.+1pmiN.+1p5th95th500th9,500th

Aby narysować , możemy załadować błędy (przypadki też byłyby w porządku, ale zakładamy, że iid błędy mimo to). Tak więc przy każdej replikacji bootstrap rysujesz razy z zamianą z reszt skorygowanych o wariancję (patrz następny akapit), aby uzyskać , a następnie utworzyć nowy , a następnie uruchom OLS na nowym zestawie danych, aby uzyskać tej repliki . Nareszcie losowanie tej repliki na to N ε * i Y * i = X i β OLS + ε * i ( Y * , X ) β * r X N + 1 ( β - β OLS ) X N + 1 ( β OLS - β * rXN.+1(β-β^OLS)N.ϵjaYja=Xjaβ^OLS+ϵja(Y,X)βrXN.+1(β-β^OLS)XN.+1(β^OLS-βr)

Biorąc pod uwagę, że zakładamy, że iid , naturalnym sposobem próbkowania z części równania jest użycie resztek z regresji, . Resztki mają różne i ogólnie zbyt małe wariancje, więc będziemy chcieli próbować z , reszty z korektą wariancji, gdzie i jest dźwignią obserwacji .ϵϵN.+1{mi1,mi2),,miN.}{s1-s¯,s2)-s¯,,sN.-s¯}sja=mija/(1-hja)hjaja

I wreszcie algorytm tworzenia 90% przedziału predykcji dla , biorąc pod uwagę, że to to:YN.+1XXN.+1

  1. Dokonaj prognozy .YN.+1p=XN.+1β^OLS
  2. Dokonaj reszt skorygowanych o wariancję, , gdzie .{s1-s¯,s2)-s¯,,sN.-s¯}sja=mija/(1-hja)
  3. Dla replikacji : r=1,2),,R
    • Narysuj razy na skorygowanych resztkach, aby zrobić resztki ładowania początkowego N.{ϵ1,ϵ2),,ϵN.}
    • Wygeneruj bootstrapY=Xβ^OLS+ϵ
    • Oblicz estymator OLS bootstrap dla tej replikacji, βr=(XX)-1XY
    • Uzyskaj resztki ładowania początkowego z tej replikacji,mir=Y-Xβr
    • Oblicz resztki skorygowane o wariancję bootstrap z tej replikacji,s-s¯
    • Narysuj jedną z reszt skorygowanych o wariancję bootstrapu z tej replikacji,ϵN.+1,r
    • Oblicz losowanie tej replikacji na ,miN.+1pmirp=XN.+1(β^OLS-βr)+ϵN.+1,r
  4. Znajdź i percentyli ,5th95thmiN.+1pmi5,mi95
  5. 90% przedział predykcji dla to .YN.+1[YN.+1p+mi5,YN.+1p+mi95]

Oto Rkod:

# 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))
Rachunek
źródło
Dziękujemy za przydatne, szczegółowe wyjaśnienia. Zgodnie z tymi liniami myślę, że ogólna technika poza OLS (techniki oparte na drzewach, najbliższy sąsiad itp.) Nie będzie łatwo dostępna, prawda?
Michael M
1
Jest taki dla losowych lasów: stats.stackexchange.com/questions/49750/…, który brzmi podobnie.
Bill
O ile mogę stwierdzić, jeśli abstrakcyjne do , technika ta działa na każdym modelu. Xβfa(X,θ)
shadowtalker,
Jak uogólnić „resztki skorygowane o wariancję” - podejście OLS opiera się na dźwigni - czy istnieje kalkulacja dźwigni dla dowolnego estymatora f (X)?
David Waterworth