以下に示す方法は、Davidson and Hinckley(1997)のセクション6.3.3、Bootstrap Methods and their Applicationで説明されている
方法です。ここにGlen_bと彼のコメントに感謝します。このトピックに関して相互検証に関するいくつかの質問があることを考えると、私はそれを書く価値があると思いました。
線形回帰モデルは次のとおりです。
Y私= X私β+ ϵ私
我々は、データを持っている我々は推定するために使用し、:として
β β OLS私は= 1 、2 、... 、Nβ
β^OLS= (X′バツ)− 1バツ′Y
今、私たちは何を予測したい、我々が知っていることを考えると、新しいデータポイントになりそれのために。これが予測の問題です。新しい(既知)と新しい(予測したい)呼び出しましょう。通常の予測は(がiidでと無相関であると仮定している場合):
X X X N + 1 Y Y N + 1 ϵ i X Y p N + 1YXXXN+1YYN+1ϵiX
YpN+1=XN+1β^OLS
この予測による予測エラーは次のとおりです。
epN+1=YN+1−YpN+1
この式を次のようにことができ。
YN+1=YpN+1+epN+1
これで、がすでに計算されました。したがって、を一定の間隔(たとえば、90%の時間)でバインドする場合、のおよびパーセンタイル/分位数を一貫して推定するだけです。、それらをと呼び、予測間隔は。 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+1YN+15th95thepN+1e5,e95[YpN+1+e5,YpN+1+e95]
の分位数/パーセンタイルを推定する方法は?さて、次のように書くことができます:
e p N + 1epN+1
epN+1=YN+1−YpN+1=XN+1β+ϵN+1−XN+1β^OLS=XN+1(β−β^OLS)+ϵN+1
戦略は、から(ブートストラップのような方法で)何回もサンプリングし、通常の方法でパーセンタイルを計算することです。したがって、多分から10,000回サンプリングし、およびパーセンタイルをおよび最小メンバーとして推定します。標本、見本。のE P N + 1 5 のT H 95 T H 500 のT H 9 、500 のT HepN+1epN+15th95th500th9,500th
を描画するには、ブートストラップエラーを使用できます(ケースも問題ありませんが、iidを想定しています)とにかくエラー)。そのため、各ブートストラップレプリケーションで、分散調整された残差(次の段落を参照)を置換して回描画し、を取得してから、新しい、その後、新しいデータセット OLSを実行して、このレプリケーションのを取得します。最後に、この複製のの描画は N ε * I Y * I = X I β OLS + ε * I(Y *、X ) β * R X N + 1 ( β - β OLS) X N + 1 (β OLS - β * RXN+1(β−β^OLS)Nϵ∗iY∗i=Xiβ^OLS+ϵ∗i(Y∗,X)β∗rXN+1(β−β^OLS)XN+1(β^OLS−β∗r)
iid想定している場合、方程式の部分からサンプリングする自然な方法は、回帰から得た残差。残差は異なるため、一般的に分散が小さすぎるため、、分散修正残差。ここで、あり、は観測値てこです。ϵϵ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
- 調整された残差に回描画して、ブートストラップ残差を作成します
N{ϵ∗1,ϵ∗2,…,ϵ∗N}
- ブートストラップY∗=Xβ^OLS+ϵ∗
- この複製のブートストラップOLS推定量を計算します、
β∗r=(X′X)−1X′Y∗
- この複製からブートストラップ残差を取得します、e∗r=Y∗−Xβ∗r
- この複製からブートストラップ分散調整残差を計算します、s∗−s∗¯¯¯¯¯
- この複製からブートストラップ分散調整残差の1つ、描画しϵ∗N+1,r
- この複製の描画を、計算し
epN+1ep∗r=XN+1(β^OLS−β∗r)+ϵ∗N+1,r
- 、およびパーセンタイルを見つける5th95thepN+1e5,e95
- 90%予測間隔は
です。[ Y p N + 1 + e 5、Y p N + 1 + e 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))