नीचे दी गई विधि डेविडसन और हिंक्ले (1997), बूटस्ट्रैप विधियों और उनके आवेदन की धारा 6.3.3 में वर्णित है
। यहाँ Glen_b और उनकी टिप्पणी के लिए धन्यवाद । यह देखते हुए कि इस विषय पर क्रॉस मान्य पर कई प्रश्न थे, मुझे लगा कि यह लिखने लायक है।
रैखिक प्रतिगमन मॉडल है:
Yi=Xiβ+ϵi
हम डेटा है , जो हम अनुमान लगाने के लिए उपयोग करें β के रूप
में:i=1,2,…,Nβ
β^OLS=(X′X)−1X′Y
अब, हम भविष्यवाणी करना चाहते हैं कि नए डेटा बिंदु के लिए क्या होगा, यह देखते हुए कि हम इसके लिए एक्स जानते हैं । यह भविष्यवाणी की समस्या है। आइए नए X (जिसे हम जानते हैं) को X N + 1 और नया Y (जिसे हम भविष्यवाणी करना चाहेंगे), Y N + 1 कहते हैं । हमेशा की तरह भविष्यवाणी (यदि हम मानते हैं कि ε मैं आईआईडी और साथ uncorrelated हैं एक्स ) है:
वाई पीYXXXN+1YYN+1ϵiX
YpN+1=XN+1β^OLS
इस भविष्यवाणी द्वारा की गई पूर्वानुमान त्रुटि है:
epN+1=YN+1−YpN+1
हम इस समीकरण को फिर से लिख सकते हैं जैसे:
YN+1=YpN+1+epN+1
अब, हमने पहले ही गणना कर लिया है। इसलिए, यदि हम एक अंतराल में Y N + 1 को बाध्य करना चाहते हैं, तो कहें, 90% समय, हम सभी को लगातार 5 t h और 95 t h प्रतिशतता / e p N + 1 की मात्राओं का अनुमान लगाना चाहिए , कॉल करें उन्हें ई 5 , ई 95 , और भविष्यवाणी अंतराल [ वाई पी एन + 1 + ई 5 , वाई पी एनYpN+1YN+15th95thepN+1e5,e95।[YpN+1+e5,YpN+1+e95]
की मात्रा / प्रतिशत का अनुमान कैसे लगाया जाए ? खैर, हम लिख सकते हैं:
ई पी एन + 1epN+1
epN+1=YN+1−YpN+1=XN+1β+ϵN+1−XN+1β^OLS=XN+1(β−β^OLS)+ϵN+1
से कई बार रणनीति (एक बूटस्ट्रैप तरह से) नमूना होगा और फिर सामान्य तरीके से प्रतिशत की गणना करेगा। तो, शायद हम e p N + 1 से 10,000 बार नमूना लेंगे , और फिर 5 t h और 95 t h प्रतिशत का अनुमान 500 t h और 9 , 500 t h सबसे छोटे सदस्यों के नमूने के रूप में लगाएंगे।epN+1epN+15th95th500th9,500th
पर आकर्षित करने के लिए , हम त्रुटियों बूटस्ट्रैप कर सकता है (ठीक मामलों हो सकता है, भी, लेकिन हम आईआईडी त्रुटियों मानते हैं वैसे भी)। तो, प्रत्येक बूटस्ट्रैप प्रतिकृति पर, आप आकर्षित एन बार विचरण से समायोजित बच (अगले पैरा देखें) से प्रतिस्थापन के साथ पाने के लिए ε * मैं , तो नए बनाने Y * मैं = एक्स मैं β OLS + ε * मैं , फिर से चलाने के OLS नई डेटासेट पर, ( YXN+1(β−β^OLS)Nϵ∗iY∗i=Xiβ^OLS+ϵ∗i(Y∗,X)इस प्रतिकृति के पाने के लिए । अंत में, पर इस प्रतिकृति का ड्रा एक्स एन + 1 ( β - β OLS ) है एक्स एन + 1 ( β OLS - β * आर )β∗rXN+1(β−β^OLS)XN+1(β^OLS−β∗r)
हम आईआईडी मानते हैं को देखते हुए , से नमूना करने के लिए प्राकृतिक तरीके से ε एन + 1 समीकरण का हिस्सा प्रतिगमन से बच हमारे पास उपयोग करने के लिए है, { ई * 1 , ई * 2 , ... , ई * एन } । बच गया, अलग और आम तौर पर बहुत छोटे प्रसरण है तो हम नमूना चाहता हूँ से { s 1 - ¯ रों , एस 2 - ¯ रों , ... , एस एन - ¯ रों }ϵϵN+1{e∗1,e∗2,…,e∗N}{s1−s¯¯¯,s2−s¯¯¯,…,sN−s¯¯¯}, विचरण-ठीक किया बच गया है, जहां औरजमैंअवलोकन के लाभ उठाने हैमैं।si=e∗i/(1−hi)−−−−−−√hii
और अंत में, के लिए एक 90% भविष्यवाणी अंतराल बनाने के लिए एल्गोरिथ्म , यह देखते हुए कि एक्स है एक्स एन + 1 है:YN+1XXN+1
- पूर्वानुमान करें ।YpN+1=XN+1β^OLS
- विचरण से समायोजित बच बनाओ, , जहां एस मैं = ई मैं / √{s1−s¯¯¯,s2−s¯¯¯,…,sN−s¯¯¯}।si=ei/(√1−hi)
- प्रतिकृति के लिए :
r=1,2,…,R
- ड्रा समायोजित बच पर बार बूटस्ट्रैप बच बनाने के लिए
{ ε * 1 , ε * 2 , ... , ε *N{ϵ∗1,ϵ∗2,…,ϵ∗N}
- बूटस्ट्रैप उत्पन्न Y∗=Xβ^OLS+ϵ∗
- गणना बूटस्ट्रैप OLS आकलनकर्ता इस प्रतिकृति के लिए,
β∗r=(X′X)−1X′Y∗
- e∗r=Y∗−Xβ∗r
- s∗−s∗¯¯¯¯¯
- ϵ∗N+1,r
- epN+1ep∗r=XN+1(β^OLS−β∗r)+ϵ∗N+1,r
- Find 5th and 95th percentiles of epN+1, e5,e95
- 90% prediction interval for YN+1 is
[YpN+1+e5,YpN+1+e95].
Here is R
code:
# 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))