Como encontrar um intervalo de previsão do GBM

12

Estou trabalhando com modelos GBM usando o pacote de interpolação e procurando um método para resolver os intervalos de previsão dos meus dados previstos. Eu pesquisei bastante, mas só tenho algumas idéias para encontrar intervalos de previsão para a Floresta Aleatória. Qualquer ajuda / código R seria muito apreciada!

CooperBuckeye05
fonte

Respostas:

4

EDIT: Como indicado nos comentários abaixo, isso fornece os intervalos de confiança para previsões e não estritamente os intervalos de previsão . Fiquei um pouco satisfeito com a minha resposta e deveria ter pensado nisso.

Sinta-se à vontade para ignorar esta resposta ou tente desenvolver o código para obter os intervalos de previsão.


Eu usei o bootstrap simples para criar intervalos de previsão algumas vezes, mas pode haver outras maneiras (melhores).

Considere os oildados no caretpacote e suponha que desejamos gerar dependências parciais e intervalos de 95% para o efeito do Stearic no Palmitic. Abaixo está apenas um exemplo simples, mas você pode brincar com ele de acordo com suas necessidades. Verifique se o gbmpacote está atualizado para permitir o grid.pointsargumento emplot.gbm

library(caret)
data(oil)
#train the gbm using just the defaults.
tr <- train(Palmitic ~ ., method = "gbm" ,data = fattyAcids, verbose = FALSE)

#Points to be used for prediction. Use the quartiles here just for illustration
x.pt <- quantile(fattyAcids$Stearic, c(0.25, 0.5, 0.75))

#Generate the predictions, or in this case, the partial dependencies at the selected points. Substitute plot() for predict() to get predictions
p <- plot(tr$finalModel, "Stearic", grid.levels = x.pt, return.grid = TRUE)

#Bootstrap the process to get prediction intervals
library(boot)

bootfun <- function(data, indices) {
  data <- data[indices,]

  #As before, just the defaults in this example. Palmitic is the first variable, hence data[,1]
  tr <- train(data[,-1], data[,1], method = "gbm", verbose=FALSE)

  # ... other steps, e.g. using the oneSE rule etc ...
  #Return partial dependencies (or predictions)

  plot(tr$finalModel, "Stearic", grid.levels = x.pt, return.grid = TRUE)$y
  #or predict(tr$finalModel, data = ...)
}

#Perform the bootstrap, this can be very time consuming. Just 99 replicates here but we usually want to do more, e.g. 500. Consider using the parallel option
b <- boot(data = fattyAcids, statistic = bootfun, R = 99)

#Get the 95% intervals from the boot object as the 2.5th and 97.5th percentiles
lims <- t(apply(b$t, 2, FUN = function(x) quantile(x, c(0.025, 0.975))))

Essa é uma maneira de fazê-lo, que pelo menos tenta explicar as incertezas decorrentes do ajuste do gbm. Uma abordagem semelhante foi usada em http://onlinelibrary.wiley.com/doi/10.2193/2006-503/abstract

Às vezes, a estimativa de pontos está fora do intervalo, mas modificar a grade de ajuste (ou seja, aumentar o número de árvores e / ou a profundidade) geralmente resolve isso.

Espero que isto ajude!

ErikL
fonte
1
Se entendi seu código corretamente, o que você tem é um intervalo de confiança de 95% para as previsões. Não é o mesmo que um intervalo de previsão de 95% , que adiciona o erro residual (aleatório).
Hong Ooi
D'oh! Você está certo. Foi um pouco rápido em responder. Obrigado, vou editar minha resposta.
precisa saber é o seguinte
obrigado pela ajuda! Estou tendo um problema com a função de inicialização. Publiquei esse problema em stats.stackexchange.com/questions/117329/… . Não sei exatamente como configurar a função de auto-inicialização corretamente com meu conjunto de dados.
precisa saber é o seguinte
1
Acho que neste momento não é o que estou procurando, então ainda estou procurando uma resposta!
precisa saber é o seguinte