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?
bootstrap
prediction-interval
Michael M.
źródło
źródło
Odpowiedzi:
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:
Mamy dane, , których używamy do oszacowania jako: beta beta OLSi = 1 , 2 , … , N β
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 + 1Y X X XN.+ 1 Y YN.+ 1 ϵja X
Błąd prognozy spowodowany tą prognozą to:
Możemy ponownie napisać to równanie, takie jak:
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 ]YpN.+ 1 YN.+ 1 5t godz 95t godz mipN.+ 1 mi5, e95 [ YpN.+ 1+ e5, YpN.+ 1+ e95]
Jak oszacować kwantyle / percentyle ? Cóż, możemy napisać: e p N + 1mipN.+ 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 hmipN.+ 1 mipN.+ 1 5t godz 95t godz 500t godz 9 , 500t godz
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. ϵ∗ja Y∗ja= Xjaβ^OLS+ ϵ∗ja ( Y∗, X) β∗r XN.+ 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 { e∗1, e∗2), … , E∗N.} { s1- s¯¯¯, s2)- s¯¯¯, … , SN.- s¯¯¯} sja= e∗ja/ ( 1 - godzja)------√ hja ja
I wreszcie algorytm tworzenia 90% przedziału predykcji dla , biorąc pod uwagę, że to to:YN.+ 1 X XN.+ 1
Oto
R
kod:źródło