Existe-t-il une technique de bootstrap pour calculer les intervalles de prédiction pour les prédictions ponctuelles obtenues par exemple à partir d'une régression linéaire ou d'une autre méthode de régression (k-plus proche voisin, arbres de régression, etc.)?
D'une certaine manière, je pense que la manière parfois proposée de simplement lancer la prédiction ponctuelle (voir par exemple les intervalles de prédiction pour la régression kNN ) ne fournit pas un intervalle de prédiction mais un intervalle de confiance.
Un exemple en 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
De toute évidence, l'intervalle de bootstrap de base à 95% correspond à l'intervalle de confiance à 95%, et non à l'intervalle de prédiction à 95%. Alors ma question: comment le faire correctement?
bootstrap
prediction-interval
Michael M
la source
la source
Réponses:
La méthode présentée ci-dessous est celle décrite à la section 6.3.3 de Davidson et Hinckley (1997), Bootstrap Methods and Their Application . Merci à Glen_b et à son commentaire ici . Étant donné qu'il y avait plusieurs questions sur la validation croisée sur ce sujet, j'ai pensé que cela valait la peine d'être écrit.
Le modèle de régression linéaire est:
Nous avons des données, , que nous utilisons pour estimer la comme: ß la ß OLSi=1,2,…,N β
Maintenant, nous voulons prédire ce que sera pour un nouveau point de données, étant donné que nous connaissons pour cela. C'est le problème de prédiction. Appelons le nouveau (que nous connaissons) et le nouveau (que nous aimerions prédire), . La prédiction habituelle (si nous supposons que les sont iid et non corrélés avec ) est: X X X N + 1 Y Y N + 1 ϵ i X Y p N + 1Y X X XN+1 Y YN+1 ϵi X
L'erreur de prévision faite par cette prédiction est:
Nous pouvons réécrire cette équation comme:
Maintenant, nous avons déjà calculé. Donc, si nous voulons dans un intervalle, disons, 90% du temps, tout ce que nous devons faire est d'estimer de manière cohérente les et percentiles / quantiles de , appelez-les , et l'intervalle de prédiction sera . Y N + 1 5 t h 95 t h e p N + 1 e 5 , e 95YpN+1 YN+1 5th 95th epN+1 e5,e95 [YpN+1+e5,YpN+1+e95]
Comment estimer les quantiles / centiles de ? Eh bien, nous pouvons écrire: e p N + 1epN+1
La stratégie consistera à échantillonner (de manière bootstrap) plusieurs fois à partir de , puis à calculer les centiles de la manière habituelle. Ainsi, nous allons peut-être échantillonner 10 000 fois à partir de , puis estimer les et centiles comme les et plus petits membres de l'échantillon. e p N + 1 5 t h 95 t h 500 t h 9 , 500 t hepN+1 epN+1 5th 95th 500th 9,500th
Pour dessiner sur , nous pouvons amorcer des erreurs (les cas seraient bien aussi, mais nous supposons iid erreurs de toute façon). Ainsi, à chaque réplication bootstrap, vous tirez fois avec remplacement à partir des résidus ajustés à la variance (voir paragraphe suivant) pour obtenir , puis créez de nouveaux , puis exécutez OLS sur le nouveau jeu de données, pour obtenir le cette réplication . Enfin, le tirage de cette réplication sur est N ε * i Y * i = X i β OLS + ε * i ( Y * , X ) β * r X N + 1 ( β - β OLS ) X N + 1 ( β OLS - β * rXN+1(β−β^OLS) N ϵ∗i Y∗i=Xiβ^OLS+ϵ∗i (Y∗,X) β∗r XN+1(β−β^OLS) XN+1(β^OLS−β∗r)
Étant donné que nous supposons iid , la façon naturelle d'échantillonner à partir de la partie de l'équation est d'utiliser les résidus que nous avons de la régression, . Les résidus ont des écarts différents et généralement trop faibles, nous allons donc vouloir échantillonner à partir de , les résidus corrigés de la variance, où et est l'effet de levier de l'observation .ϵ N + 1 { e ∗ 1 , e ∗ 2 , … , e ∗ N } { s 1 - ¯ s , s 2 - ¯ s , … , s N - ¯ s } s i = e ∗ i / √ϵ ϵN+1 {e∗1,e∗2,…,e∗N} {s1−s¯¯¯,s2−s¯¯¯,…,sN−s¯¯¯} hiisi=e∗i/(1−hi)−−−−−−√ hi i
Et, enfin, l'algorithme pour faire un intervalle de prédiction de 90% pour , étant donné que est est: X X N + 1YN+1 X XN+1
Voici le
R
code:la source