बूटस्ट्रैप भविष्यवाणी अंतराल


29

क्या रेखीय प्रतिगमन या अन्य प्रतिगमन विधि (k- निकटतम पड़ोसी, प्रतिगमन पेड़ आदि) से प्राप्त बिंदु भविष्यवाणियों के लिए पूर्वानुमान अंतराल की गणना करने के लिए कोई बूटस्ट्रैप तकनीक उपलब्ध है?

किसी तरह मुझे लगता है कि कभी-कभी प्रस्तावित भविष्यवाणी को बूट करने के लिए कभी-कभी प्रस्तावित तरीका (देखें उदाहरण केएनएन प्रतिगमन के लिए भविष्यवाणी अंतराल ) एक भविष्यवाणी अंतराल नहीं बल्कि एक आत्मविश्वास अंतराल प्रदान कर रहा है।

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

जाहिर है, 95% मूल बूटस्ट्रैप अंतराल 95% विश्वास अंतराल से मेल खाता है, न कि 95% पूर्वानुमान अंतराल। तो मेरा सवाल: इसे ठीक से कैसे करें?


कम से कम साधारण वर्ग के मामले में, आपको केवल बिंदु भविष्यवाणियों से अधिक की आवश्यकता होगी; आप अनुमानित अंतराल का निर्माण करने के लिए अनुमानित अवशिष्ट त्रुटि का उपयोग करना चाहते हैं।
कोडियोलॉजिस्ट


@ डुप्लो: इस ओर इशारा करने के लिए धन्यवाद। क्लासिक भविष्यवाणी अंतराल की सही लंबाई त्रुटि शब्द की सामान्यता धारणा पर सीधे निर्भर है, इसलिए यदि यह बहुत आशावादी है, तो निश्चित रूप से बूटस्ट्रैप्ड संस्करण भी होगा यदि यह वहां से प्राप्त होता है। मुझे आश्चर्य है कि यदि प्रतिगमन (सामान्य रूप से ओएलएस नहीं) में सामान्य बूटस्ट्रैप विधि काम कर रही है।
माइकल एम

1
मुझे लगता है कि \ textit {अनुरूप निष्कासन} वह हो सकता है जो आप चाहते हैं, जो आपको resampling- आधारित भविष्यवाणी अंतरालों का निर्माण करने की अनुमति देता है जिनके पास वैध परिमित नमूना कवरेज है, और बहुत अधिक कवर नहीं करते हैं। एक अच्छा पेपर है जो arxiv.org/pdf/1604.04173.pdf पर उपलब्ध है , जो विषय के लिए एक परिचय के रूप में पढ़ना संभव है, और एक R पैकेज जो github.com/ryantibs-conformal से उपलब्ध है ।
साइमन बोगी ब्रेंट

जवाबों:


26

नीचे दी गई विधि डेविडसन और हिंक्ले (1997), बूटस्ट्रैप विधियों और उनके आवेदन की धारा 6.3.3 में वर्णित है । यहाँ Glen_b और उनकी टिप्पणी के लिए धन्यवाद । यह देखते हुए कि इस विषय पर क्रॉस मान्य पर कई प्रश्न थे, मुझे लगा कि यह लिखने लायक है।

रैखिक प्रतिगमन मॉडल है:

Yi=Xiβ+ϵi

हम डेटा है , जो हम अनुमान लगाने के लिए उपयोग करें β के रूप में:i=1,2,,Nβ

β^OLS=(XX)1XY

अब, हम भविष्यवाणी करना चाहते हैं कि नए डेटा बिंदु के लिए क्या होगा, यह देखते हुए कि हम इसके लिए एक्स जानते हैं । यह भविष्यवाणी की समस्या है। आइए नए X (जिसे हम जानते हैं) को X N + 1 और नया Y (जिसे हम भविष्यवाणी करना चाहेंगे), Y N + 1 कहते हैं । हमेशा की तरह भविष्यवाणी (यदि हम मानते हैं कि ε मैं आईआईडी और साथ uncorrelated हैं एक्स ) है: वाई पीYXXXN+1YYN+1ϵiX

YN+1p=XN+1β^OLS

इस भविष्यवाणी द्वारा की गई पूर्वानुमान त्रुटि है:

eN+1p=YN+1YN+1p

हम इस समीकरण को फिर से लिख सकते हैं जैसे:

YN+1=YN+1p+eN+1p

अब, हमने पहले ही गणना कर लिया है। इसलिए, यदि हम एक अंतराल में Y N + 1 को बाध्य करना चाहते हैं, तो कहें, 90% समय, हम सभी को लगातार 5 t h और 95 t h प्रतिशतता / e p N + 1 की मात्राओं का अनुमान लगाना चाहिए , कॉल करें उन्हें 5 , 95 , और भविष्यवाणी अंतराल [ वाई पी एन + 1 + 5 , वाई पी एनYN+1pYN+15th95theN+1pe5,e95[YN+1p+e5,YN+1p+e95]

की मात्रा / प्रतिशत का अनुमान कैसे लगाया जाए ? खैर, हम लिख सकते हैं: पी एन + 1eN+1p

eN+1p=YN+1YN+1p=XN+1β+ϵN+1XN+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 सबसे छोटे सदस्यों के नमूने के रूप में लगाएंगे।eN+1peN+1p5th95th500th9,500th

पर आकर्षित करने के लिए , हम त्रुटियों बूटस्ट्रैप कर सकता है (ठीक मामलों हो सकता है, भी, लेकिन हम आईआईडी त्रुटियों मानते हैं वैसे भी)। तो, प्रत्येक बूटस्ट्रैप प्रतिकृति पर, आप आकर्षित एन बार विचरण से समायोजित बच (अगले पैरा देखें) से प्रतिस्थापन के साथ पाने के लिए ε * मैं , तो नए बनाने Y * मैं = एक्स मैं β OLS + ε * मैं , फिर से चलाने के OLS नई डेटासेट पर, ( YXN+1(ββ^OLS)NϵiYi=Xiβ^OLS+ϵi(Y,X)इस प्रतिकृति के पाने के लिए । अंत में, पर इस प्रतिकृति का ड्रा एक्स एन + 1 ( β - β OLS ) है एक्स एन + 1 ( β OLS - β * आर )βrXN+1(ββ^OLS)XN+1(β^OLSβr)

हम आईआईडी मानते हैं को देखते हुए , से नमूना करने के लिए प्राकृतिक तरीके से ε एन + 1 समीकरण का हिस्सा प्रतिगमन से बच हमारे पास उपयोग करने के लिए है, { * 1 , * 2 , ... , * एन } । बच गया, अलग और आम तौर पर बहुत छोटे प्रसरण है तो हम नमूना चाहता हूँ से { s 1 - ¯ रों , एस 2 - ¯ रों , ... , एस एन - ¯ रों }ϵϵN+1{e1,e2,,eN}{s1s¯,s2s¯,,sNs¯}, विचरण-ठीक किया बच गया है, जहां औरमैंअवलोकन के लाभ उठाने हैमैंsi=ei/(1hi)hii

और अंत में, के लिए एक 90% भविष्यवाणी अंतराल बनाने के लिए एल्गोरिथ्म , यह देखते हुए कि एक्स है एक्स एन + 1 है:YN+1XXN+1

  1. पूर्वानुमान करें YN+1p=XN+1β^OLS
  2. विचरण से समायोजित बच बनाओ, , जहां एस मैं = मैं / {s1s¯,s2s¯,,sNs¯}si=ei/(1hi)
  3. प्रतिकृति के लिए : r=1,2,,R
    • ड्रा समायोजित बच पर बार बूटस्ट्रैप बच बनाने के लिए { ε * 1 , ε * 2 , ... , ε *N{ϵ1,ϵ2,,ϵN}
    • बूटस्ट्रैप उत्पन्न Y=Xβ^OLS+ϵ
    • गणना बूटस्ट्रैप OLS आकलनकर्ता इस प्रतिकृति के लिए, βr=(XX)1XY
    • er=YXβr
    • ss¯
    • ϵN+1,r
    • eN+1perp=XN+1(β^OLSβr)+ϵN+1,r
  4. Find 5th and 95th percentiles of eN+1p, e5,e95
  5. 90% prediction interval for YN+1 is [YN+1p+e5,YN+1p+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))

Thank you for the useful, detailed explanations. Following these lines, I think that a general technique outside OLS (tree based techniques, nearest neighbour etc.) wont be easily available, right?
Michael M

1
There is this one for random forests: stats.stackexchange.com/questions/49750/… which sounds similar.
Bill

As far as I can tell, if you abstract Xβ to f(X,θ), this technique works for any model.
shadowtalker

How do you generalise the "variance adjusted residuals" - the OLS approach relies on the leverage - is there a leverage calculation for an arbitrary f(X) estimator?
David Waterworth
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.