পদ্ধতি নীচে তুলে ধরা পাড়া ডেভিডসন ও Hinckley, (1997), ধারা 6.3.3 বর্ণিত এক
বুটস্ট্র্যাপ পদ্ধতি এবং তাদের আবেদন । এখানে গ্লেন_বি এবং তার মন্তব্যে ধন্যবাদ । এই বিষয়টিতে ক্রস যাচাই করার জন্য বেশ কয়েকটি প্রশ্ন রয়েছে তা প্রদত্ত, আমি ভেবেছিলাম এটি লেখার পক্ষে উপযুক্ত।
লিনিয়ার রিগ্রেশন মডেলটি হ'ল:
Yi=Xiβ+ϵi
আমাদের কাছে ডেটা রয়েছে, , যা আমরা হিসাবে অনুমান করতে ব্যবহার করি :
i=1,2,…,Nβ
β^OLS=(X′X)−1X′Y
এখন, আমরা ভবিষ্যদ্বাণী করতে চাই যে একটি নতুন ডেটা পয়েন্টের জন্য কী হবে, প্রদত্ত যে আমরা এর জন্য জানি। এটি ভবিষ্যদ্বাণী সমস্যা। আসুন নতুন কল (যা আমরা জানি) এবং নতুন (যা আমরা ভবিষ্যদ্বাণী করা চাই), । স্বাভাবিক ভবিষ্যদ্বাণী (যদি আমরা ধরে নিই যে আইআইডি এবং ) হ'ল:
YXXXN+1YYN+1ϵiX
YpN+1=XN+1β^OLS
এই পূর্বাভাস দ্বারা করা পূর্বাভাস ত্রুটিটি হ'ল:
epN+1=YN+1−YpN+1
আমরা এই সমীকরণটি আবার লিখতে পারি:
YN+1=YpN+1+epN+1
এখন, আমরা ইতিমধ্যে গণনা করেছি। সুতরাং, আমরা যদি কোনও বিরতিতে bound বেঁধে চাই , বলুন, 90% সময়, আমাদের করতে হবে তা হ'ল ধারাবাহিকভাবে এবং পার্সেন্টাইল / কোয়ান্টাইলগুলি অনুমান করা উচিত , তাদের call কল করুন এবং ভবিষ্যদ্বাণী ব্যবধানটি ।YpN+1YN+15th95thepN+1e5,e95[YpN+1+e5,YpN+1+e95]
of এর কোয়ান্টাইলস / পারসেন্টাইলগুলি কীভাবে অনুমান করা যায় ? ঠিক আছে, আমরা লিখতে পারি:
epN+1
epN+1=YN+1−YpN+1=XN+1β+ϵN+1−XN+1β^OLS=XN+1(β−β^OLS)+ϵN+1
কৌশলটি from থেকে বহুবার নমুনা (বুটস্ট্র্যাপের উপায়ে) এবং তারপরে সাধারণ উপায়ে পার্সেন্টাইলগুলি গণনা করা হবে। সুতরাং, সম্ভবত আমরা from থেকে 10,000 বার নমুনা করব এবং তারপরে এবং পার্সেন্টাইলের এবং ক্ষুদ্রতম সদস্য হিসাবে অনুমান করব উচ্চ স্বরে পড়া.epN+1epN+15th95th500th9,500th
অঙ্কন করতে , আমরা বুটস্ট্র্যাপ ত্রুটি (মামলা জরিমানা, অত্যধিক হবে পারে, কিন্তু আমরা IID অভিমানী হয় ত্রুটি যাইহোক)। সুতরাং, প্রতিটি বুটস্ট্র্যাপের অনুলিপিতে, আপনি পেতে ভেরিয়েন্স-অ্যাডজাস্টেড রেসিডুয়ালগুলি (পরবর্তী প্যারা দেখুন) থেকে প্রতিস্থাপনের জন্য বার আঁকেন , তারপরে নতুন , তারপরে এই প্রতিলিপিটির পেতে নতুন ডেটাসেটে S ওএলএস চালান । অবশেষে, এই রেপ্লিকেশন এর ড্র হয়XN+1(β−β^OLS)Nϵ∗iY∗i=Xiβ^OLS+ϵ∗i(Y∗,X)β∗rXN+1(β−β^OLS)XN+1(β^OLS−β∗r)
আমরা আইডি এপসিলন ধরে , সমীকরণের অংশ থেকে নমুনার প্রাকৃতিক উপায় হ'ল রেগ্রেশন থেকে আমাদের থাকা অবশিষ্টাংশগুলি ব্যবহার করা, । অবশিষ্টগুলির পৃথক এবং সাধারণত খুব ছোট , তাই আমরা from থেকে নমুনা , বৈকল্পিক অবশিষ্টাংশ, যেখানে এবং হল পর্যবেক্ষণের ।ϵϵN+1{e∗1,e∗2,…,e∗N}{s1−s¯¯¯,s2−s¯¯¯,…,sN−s¯¯¯}si=e∗i/(1−hi)−−−−−−√hii
এবং, অবশেষে, জন্য 90% পূর্বাভাস ব্যবধান তৈরি করার জন্য দেওয়া হল যে হল :YN+1XXN+1
- করুন ভবিষ্যদ্বাণী।YpN+1=XN+1β^OLS
- , যেখানে ভেরিয়েন্স-অ্যাডজাস্ট করা অবশিষ্টগুলি তৈরি করুন ।{s1−s¯¯¯,s2−s¯¯¯,…,sN−s¯¯¯}si=ei/(√1−hi)
- প্রতিলিপিগুলির জন্য :
r=1,2,…,R
- বুটস্ট্র্যাপের অবশিষ্টাংশগুলি make করতে অ্যাডজাস্ট করা রেসিডুয়ালে বার
আঁকুনN{ϵ∗1,ϵ∗2,…,ϵ∗N}
- বুটস্ট্র্যাপ জেনারেট করুনY∗=Xβ^OLS+ϵ∗
- এই প্রতিলিপিটির জন্য বুটস্ট্র্যাপ ওএলএস অনুমানকারী গণনা করুন,
β∗r=(X′X)−1X′Y∗
- এই প্রতিলিপি থেকে বুটস্ট্র্যাপের অবশিষ্টাংশগুলি পান,e∗r=Y∗−Xβ∗r
- this এই প্রতিলিপি থেকে বুটস্ট্র্যাপ বৈকল্পিক-সামঞ্জস্যিত অবশিষ্টাংশগুলি গণনা করুনs∗−s∗¯¯¯¯¯
- এই প্রতিলিপি থেকে বুটস্ট্র্যাপের বৈকল্পিক-সামঞ্জস্যিত অবশিষ্টাংশগুলি আঁকুন,ϵ∗N+1,r
- , এই প্রতিরূপের গণনা করুন
epN+1ep∗r=XN+1(β^OLS−β∗r)+ϵ∗N+1,r
- এই এবং এর শতকরা ,5th95thepN+1e5,e95
- জন্য 90% ভবিষ্যদ্বাণী ব্যবধান হয়
।[ ওয়াই পি এন + 1 + ই 5 , ওয়াই পি এন + 1 + ই 95 ]YN+1[YpN+1+e5,YpN+1+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))