Khoảng dự đoán Bootstrap


29

Có bất kỳ kỹ thuật bootstrap nào có sẵn để tính các khoảng dự đoán cho các dự đoán điểm thu được, ví dụ từ hồi quy tuyến tính hoặc phương pháp hồi quy khác (hàng xóm gần nhất k, cây hồi quy, v.v.) không?

Bằng cách nào đó tôi cảm thấy rằng cách đôi khi được đề xuất để khởi động dự đoán điểm (xem ví dụ: Khoảng dự đoán cho hồi quy kNN ) không cung cấp khoảng dự đoán mà là khoảng tin cậy.

Một ví dụ trong 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

Rõ ràng, khoảng thời gian bootstrap cơ bản 95% khớp với khoảng tin cậy 95%, không phải là khoảng dự đoán 95%. Vì vậy, câu hỏi của tôi: Làm thế nào để làm điều đó đúng?


Ít nhất là trong trường hợp bình phương tối thiểu thông thường, bạn sẽ cần nhiều hơn là chỉ dự đoán điểm; bạn cũng muốn sử dụng sai số dư ước tính để xây dựng các khoảng dự đoán.
Kodiologist


@duplo: cảm ơn bạn đã chỉ ra điều này. Độ dài chính xác của các khoảng dự đoán cổ điển phụ thuộc trực tiếp vào giả định quy tắc của thuật ngữ lỗi, vì vậy nếu nó quá lạc quan, thì chắc chắn phiên bản bootstrapping cũng sẽ xuất phát từ đó. Tôi tự hỏi nếu có trong phương pháp bootstrap chung làm việc trong hồi quy (không nhất thiết phải là OLS).
Michael M

1
Tôi nghĩ rằng \ textit {suy luận tuân thủ} có thể là những gì bạn muốn, cho phép bạn xây dựng các khoảng dự đoán dựa trên việc lấy mẫu lại có phạm vi bảo hiểm mẫu hữu hạn hợp lệ và không che đậy quá nhiều. Có một bài viết hay có sẵn tại arxiv.org/pdf/1604.04173.pdf , có thể đọc như một giới thiệu về chủ đề và gói R có sẵn từ github.com/ryantibs/conformal .
Simon Boge Brant

Câu trả lời:


26

Phương pháp được trình bày dưới đây là phương pháp được mô tả trong Phần 6.3.3 của Davidson và Hinckley (1997), Phương pháp Bootstrap và Ứng dụng của chúng . Cảm ơn Glen_b và bình luận của anh ấy ở đây . Cho rằng có một số câu hỏi về Xác thực chéo về chủ đề này, tôi nghĩ rằng nó đáng để viết lên.

Mô hình hồi quy tuyến tính là:

Ytôi= =Xtôiβ+εtôi

Chúng tôi có dữ liệu, , chúng tôi sử dụng để ước tính là: beta beta OLStôi= =1,2,Giáo dục,Nβ

β^TUỔI= =(X'X)-1X'Y

Bây giờ, chúng tôi muốn dự đoán sẽ là gì cho một điểm dữ liệu mới, với điều kiện là chúng tôi biết cho nó. Đây là vấn đề dự đoán. Chúng ta hãy gọi mới (mà chúng ta biết) và mới (mà chúng ta muốn dự đoán), . Dự đoán thông thường (nếu chúng ta giả sử rằng là iid và không tương thích với ) là: X X X N + 1 Y Y N + 1 ϵ i X Y p N + 1YXXXN+1YYN+1εtôiX

YN+1p= =XN+1β^TUỔI

Lỗi dự báo được thực hiện bởi dự đoán này là:

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

Chúng ta có thể viết lại phương trình này như:

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

Bây giờ, chúng tôi đã tính toán. Vì vậy, nếu chúng ta muốn ràng buộc trong một khoảng thời gian, giả sử, 90% thời gian, tất cả những gì chúng ta cần làm là ước tính nhất quán và phần trăm / lượng tử của , gọi chúng là và khoảng dự đoán sẽ là . 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 ]YN+1pYN+15th95theN+1pe5,e95[YN+1p+e5,YN+1p+e95]

Làm cách nào để ước tính số lượng / phần trăm của ? Chà, chúng ta có thể viết: e p N + 1eN+1p

eN+1p= =YN+1-YN+1p= =XN+1β+εN+1-XN+1β^TUỔI= =XN+1(β-β^TUỔI)+εN+1

Chiến lược sẽ là lấy mẫu (theo kiểu bootstrap) nhiều lần từ và sau đó tính toán phần trăm theo cách thông thường. Vì vậy, có thể chúng tôi sẽ lấy mẫu 10.000 lần từ , và sau đó ước tính tỷ lệ phần trăm và là thành viên nhỏ nhất và mẫu. e p N + 1 5 t h 95 t h 500 t h 9 , 500 t heN+1peN+1p5th95th500th9,500th

Để vẽ trên , chúng tôi có thể bootstrap lỗi (trường hợp cũng sẽ ổn, nhưng chúng tôi đang giả sử iid dù sao cũng có lỗi). Vì vậy, trên mỗi lần sao chép bootstrap, bạn rút ra lần thay thế từ phần dư được điều chỉnh phương sai (xem đoạn tiếp theo) để nhận , sau đó tạo , sau đó chạy OLS trên tập dữ liệu mới, để có bản sao này . Cuối cùng, bản sao này được vẽ trên là N ε * i Y * i = X i β OLS + ε * i ( Y * , X ) β * r X N + 1 ( β - β OLS ) X N + 1 ( β OLS - β * rXN+1(β-β^TUỔI)Nεtôi*Ytôi*= =Xtôiβ^TUỔI+εtôi*(Y*,X)βr*XN+1(β-β^TUỔI)XN+1(β^TUỔI-βr*)

Vì chúng ta đang giả sử iid , cách tự nhiên để lấy mẫu từ phần của phương trình là sử dụng phần dư chúng ta có từ hồi quy, . Phần dư có các phương sai khác nhau và thường quá nhỏ, vì vậy chúng tôi sẽ muốn lấy mẫu từ , phần dư được hiệu chỉnh phương sai, trong đó và là đòn bẩy quan sát .εεN+1{e1*,e2*,Giáo dục,eN*}{s1s¯,s2s¯,,sNs¯}si=ei/(1hi)hitôi

Và cuối cùng, thuật toán tạo khoảng dự đoán 90% cho , với điều kiện là là:YN+1XXN+1

  1. Đưa ra dự đoán .YN+1p= =XN+1β^TUỔI
  2. Tạo các phần dư được điều chỉnh phương sai, , trong đó .{S1-S¯,S2-S¯,Giáo dục,SN-S¯}Stôi= =etôi/(1-htôi)
  3. Đối với các bản sao : r= =1,2,Giáo dục,R
    • Vẽ lần trên các phần dư được điều chỉnh để tạo phần dư bootstrap N{ε1*,ε2*,Giáo dục,εN*}
    • Tạo bootstrapY*= =Xβ^TUỔI+ε*
    • Tính toán công cụ ước tính OLS bootstrap cho bản sao này, βr*= =(X'X)-1X'Y*
    • Có được phần dư bootstrap từ bản sao này,er*= =Y*-Xβr*
    • Tính toán phần dư được điều chỉnh phương sai bootstrap từ bản sao này,S*-S*¯
    • Vẽ một trong các phần dư được điều chỉnh phương sai bootstrap từ bản sao này,εN+1,r*
    • Tính toán bản sao của bản sao này trên ,eN+1perp*= =XN+1(β^TUỔI-βr*)+εN+1,r*
  4. Tìm và phần trăm của ,5th95theN+1pe5,e95
  5. Khoảng dự đoán 90% cho là .YN+1[YN+1p+e5,YN+1p+e95]

Đây là Rmã:

# 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))

Cảm ơn bạn đã giải thích hữu ích, chi tiết. Theo những dòng này, tôi nghĩ rằng một kỹ thuật chung bên ngoài OLS (kỹ thuật dựa trên cây, hàng xóm gần nhất, v.v.) sẽ không dễ dàng có sẵn, phải không?
Michael M

1
Có cái này cho các khu rừng ngẫu nhiên: stats.stackexchange.com/questions/49750/ Khăn mà âm thanh tương tự.
Hóa đơn

Theo như tôi có thể nói, nếu bạn trừu tượng thành , kỹ thuật này hoạt động cho bất kỳ mô hình nào. Xβf(X,θ)
Shadowtalker

Làm thế nào để bạn khái quát "phần dư được điều chỉnh phương sai" - phương pháp OLS dựa vào đòn bẩy - có tính toán đòn bẩy cho một công cụ ước tính f (X) tùy ý không?
David Waterworth
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.