Existe alguma técnica de autoinicialização disponível para calcular intervalos de previsão para previsões pontuais obtidas, por exemplo, por regressão linear ou outro método de regressão (k-vizinho mais próximo, árvores de regressão etc.)?
De alguma forma, sinto que a maneira às vezes proposta de apenas inicializar a previsão do ponto (veja, por exemplo, Intervalos de previsão para regressão kNN ) não está fornecendo um intervalo de previsão, mas um intervalo de confiança.
Um exemplo em 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
Obviamente, o intervalo de inicialização de 95% básico corresponde ao intervalo de confiança de 95%, não ao intervalo de previsão de 95%. Então, minha pergunta: como fazê-lo corretamente?
bootstrap
prediction-interval
Michael M
fonte
fonte
Respostas:
O método descrito abaixo é o descrito na Seção 6.3.3 de Davidson e Hinckley (1997), Bootstrap Methods e Their Application . Graças a Glen_b e seu comentário aqui . Dado que havia várias perguntas sobre a Validação cruzada sobre esse tópico, achei que valia a pena escrever.
O modelo de regressão linear é:
Temos dados, , que usamos para estimar o β como: beta OLSi = 1 , 2 , … , N β
Agora, queremos prever o que será para um novo ponto de dados, já que sabemos X para ele. Esse é o problema de previsão. Vamos chamar o novo X (que sabemos) X N + 1 e o novo Y (que gostaríamos de prever), Y N + 1 . A predição habitual (se do princípio de que o ε i ii d e não correlacionada com X ) é: Y p N + 1Y X X XN+ 1 Y YN+ 1 ϵEu X
O erro de previsão feito por esta previsão é:
Podemos reescrever esta equação como:
Agora, já calculamos. Então, se quisermos obrigado Y N + 1 em um intervalo, digamos, 90% do tempo, tudo o que precisamos fazer é estimar de forma consistente os 5 t h e 95 t h percentis / quantis de e p N + 1 , chamada eles e 5 , e 95 , e o intervalo de previsão será [ Y p N + 1 + e 5 , Y p NYpN+ 1 YN+ 1 5t h 95t h epN+ 1 e5, e95 .[ YpN+ 1+ e5, YpN+ 1+ e95]
Como estimar os quantis / percentis de ? Bem, podemos escrever: e p N + 1epN+ 1
A estratégia será coletar amostras (de um modo de inicialização) muitas vezes de e, em seguida, calcular percentis da maneira usual. Assim, talvez que vai provar 10.000 vezes a partir de e p N + 1 , e em seguida, estimar os 5 t h e 95 t h percentis como o 500 t h e 9 , 500 t h mais pequenos da amostra.epN+ 1 epN+ 1 5t h 95t h 500t h 9 , 500t h
Para desenhar em , que pode inicializar erros (casos seria bom, também, mas estamos assumindo erros iid de qualquer maneira). Assim, em cada replicação de inicialização, você desenha N vezes com a substituição dos resíduos ajustados pela variância (veja o próximo parágrafo) para obter ε * i , em seguida, fazer nova Y * i = X i beta OLS + ε * i , OLS, em seguida, executados no novo conjunto de dados ( Y ∗ , X )XN+ 1( β- β^OLS) N ϵ∗Eu Y∗Eu= XEuβ^OLS+ ϵ∗Eu ( Y∗, X) para obter o dessa replicação . Por fim, este sorteio de replicação em X N + 1 ( β - β OLS ) é X N + 1 ( β OLS - β * r )β∗r XN+ 1( β- β^OLS) XN+1( β^OLS- β∗r)
Aqui está o
R
código:fonte