Önyükleme tahmini aralığı


29

Örneğin doğrusal regresyondan veya diğer regresyon yönteminden (k-en yakın komşu, regresyon ağaçları vb.) Elde edilen nokta tahminleri için tahmin aralıklarını hesaplamak için mevcut herhangi bir önyükleme tekniği var mı?

Her nasılsa, bazen kestirilen nokta tahminini sadece ön plana çıkarmak için önerilen yolun (bakınız örn. KNN regresyonunun öngörülen aralık aralıkları) bir tahmin aralığı değil, bir güven aralığı olduğunu hissediyorum .

R'deki bir örnek

# 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

Açıkçası,% 95 temel önyükleme aralığı,% 95 tahmin aralığı ile değil% 95 güven aralığı ile eşleşiyor. Peki benim sorum: Nasıl düzgün yapmalı?


En azından sıradan en küçük kareler durumunda, nokta tahminlerinden daha fazlasına ihtiyacınız olacak; Tahmini kalıntı hatasını da tahmin aralıkları oluşturmak için kullanmak istersiniz.
Kodiolog


@duplo: Bunu belirttiğiniz için teşekkür ederiz. Klasik tahmin aralıklarının doğru uzunluğu, doğrudan hata teriminin normalliği varsayımına dayanmaktadır, bu yüzden eğer çok iyimser ise, o zaman kesinlikle oradan türetilmişse bootstrapped versiyonu da olacaktır. Genel regresyonda regresyonda çalışan bir yöntem olup olmadığını merak ediyorum (mutlaka OLS değil).
Michael M

1
Bence \ textit {conformal inference} istediğiniz şey olabilir, bu da geçerli sonlu örnek kapsamı olan yeniden örnekleme temelli tahmin aralıkları oluşturmanıza olanak sağlar ve fazla örtmez. Mevcuttur iyi kağıt yok arxiv.org/pdf/1604.04173.pdf konuya bir giriş ve edinilebilir bir R paketi olarak okumak mümkündür, github.com/ryantibs/conformal .
Simon Boge Brant

Yanıtlar:


26

Aşağıda ortaya konan yöntem, Davidson ve Hinckley (1997), Bölüm 6.3.3, Bootstrap Yöntemleri ve Uygulamaları bölümünde tarif edilen yöntemdir . Glen_b ve onun yorumuna teşekkürler burada . Bu konuyla ilgili Validated Cross hakkında birkaç soru olduğu göz önüne alındığında, yazmaya değeceğini düşündüm.

Doğrusal regresyon modeli:

Yi=Xiβ+ϵi

olarak tahmin etmek için kullandığımız verisine sahibiz : i=1,2,,Nβ

β^OLS=(XX)1XY

Şimdi, ne tahmin etmek istiyorum bildiğimiz düşünülürse, yeni bir veri noktası için olacak bunun için. Bu tahmin sorunudur. Yeni (bildiğimiz) ve yeni (tahmin etmek istediğimiz), . Genel tahmin ( kimliğini ve ile ilişkisini koruduğunu varsayarsak ): X, X, X , N + 1 , Y -Y , N + 1 ε i X, Y, p , N + 1YXXXN+1YYN+1ϵiX

YN-+1p=XN-+1β^EKK

Bu tahmin tarafından yapılan tahmin hatası:

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

Bu denklemi şu şekilde yeniden yazabiliriz:

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

Şimdi, zaten hesapladık. Bu nedenle, 'i belirli bir aralıkta, örneğin, zamanın% 90'ını sınırlamak istiyorsak , tek yapmamız gereken tutarlı bir şekilde ve yüzdelik / kuantillerini tahmin etmektir . , onları olarak adlandırın ve tahmin aralığı . , Y , N + 1 5 ton saat 95 T h e s , N + 1 e 5 , e 95 [ Y'nin s , N + 1 + E 5 ,YN-+1pYN-+15th95theN-+1pe5,e95[YN-+1p+e5,YN-+1p+e95]

in miktarları / yüzdelikleri nasıl tahmin edilir ? Eh, biz yazabiliriz: e p N + 1eN-+1p

eN-+1p=YN-+1-YN-+1p=XN-+1β+εN-+1-XN-+1β^EKK=XN-+1(β-β^EKK)+εN-+1

Strateji, den birçok kez (bir bootstrap türünde) örnekleme yapmak ve daha sonra her zamanki gibi yüzdelik değerleri hesaplamak olacaktır. Öyleyse, belki de den 10.000 kez numune alacağız ve ardından ve yüzdelik oranlarını ve en küçük üyeler olarak tahmin edeceğiz . örnek. e p N + 1 5 t sa 95 t saeN-+1peN-+1p5th95th 9 , 500 t sa500th9,500th

üzerine çizmek için hataları önyükleyebiliriz (durumlar da iyi olabilir, ancak kimliğini kabul ediyoruz) yine de hataları). Öyleyse, her önyükleme çoğaltmasında, varyansa göre ayarlanan artıklardan değiştirerek kez (sonraki paragrafa bakın) , sonra yeni , sonra bu çoğaltmanın değerini almak için yeni veri setinde OLS'yi çalıştırın, . Sonunda, bu çoğaltma in , N ε * ı -Y * ı = X i β En Küçük Kareler + ε * ı ( Y * , X ) β * r X , N + 1 ( β - β en küçük kareler ) X, N + 1 ( β En Küçük Kareler - β * rXN-+1(β-β^EKK)N-εben*Yben*=Xbenβ^EKK+εben*(Y*,X)βr*XN-+1(β-β^EKK)XN-+1(β^EKK-βr*)

İid farz edersek , denklemin bölümünden örneklemenin doğal yolu , regresyondan kalan kalıntıları kullanmaktır, . Artıkların farklı ve genellikle çok küçük farklılıkları vardır, bu yüzden varyans düzeltilmiş artıklar, ve gözlem kaldıraç .εεN-+1{e1*,e2*,...,eN-*}{s1-s¯,s2-s¯,...,sN--s¯}sben=eben*/(1-hben)hbenben

Ve son olarak, bir% 90 tahmini aralığını yapmak için algoritma göz önüne alındığında, bir olduğu:YN-+1XXN-+1

  1. Tahminini yapın .YN-+1p=XN-+1β^EKK
  2. göre ayarlanan artıkları yapın, , burada .{s1-s¯,s2-s¯,...,sN--s¯}sben=eben/(1-hben)
  3. Çoğaltmalar için : r=1,2,...,R,
    • Önyükleme artıkları yapmak için ayarlanan kalıntılara kez çizinN-{ε1*,ε2*,...,εN-*}
    • Önyükleme oluşturY*=Xβ^EKK+ε*
    • Bu çoğaltma için önyükleme OLS tahmincisini hesaplayın, βr*=(X'X)-1X'Y*
    • Önyükleme artıklarını bu çoğaltmadan alın,er=YXβr
    • Önyükleme sapma ayarlı artıkları bu çoğaltmadan hesaplayın,ss¯
    • Bu çoğaltmadan önyükleme sapması ayarlanmış artıklardan birini çizin,ϵN+1,r
    • Bu çoğaltmanın çekilişini ,eN+1perp=XN+1(β^OLSβr)+ϵN+1,r
  4. ve , yüzdeliklerini bulun.5th95theN+1pe5,e95
  5. % 90 tahmini aralığı olduğu .YN+1[YN-+1p+e5,YN-+1p+e95]

İşte Rkod:

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

Yararlı, ayrıntılı açıklamalar için teşekkür ederim. Bu çizgilerin ardından, OLS dışındaki genel bir tekniğin (ağaç tabanlı teknikler, en yakın komşu vb.) Kolayca bulunamayacağını düşünüyorum.
Michael M

1
: Rastgele ormanlar için bu bir tane var stats.stackexchange.com/questions/49750/... benzer sesler.
Bill

Bildiğim kadarıyla söyleyebilirim, sen soyut eğer için , herhangi modeli için bu teknik çalışır. Xβf(X,θ)
shadowtalker

“Varyansa göre ayarlanan artıkları” nasıl genelleştirirsiniz - OLS yaklaşımı kaldıraca dayanır - keyfi bir f (X) tahmincisi için kaldıraç hesaplaması var mı?
David Waterworth
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.