Como: Intervalos de previsão para regressão linear via bootstrapping


14

Estou tendo problemas para entender como usar o bootstrapping para calcular intervalos de previsão para um modelo de regressão linear. Alguém pode descrever um procedimento passo a passo? Eu pesquisei via google, mas nada realmente faz sentido para mim.

Eu entendo como usar a inicialização para calcular intervalos de confiança para os parâmetros do modelo.


1
Isso é discutido em detalhes no livro de Davison e Hinkley, Bootstrap Methods e Their Application , juntamente com um algoritmo explícito (Algoritmo 6.4). Eles explicam conceitos, armadilhas e detalhes em maior extensão do que é possível em uma resposta razoável aqui.
Glen_b -Reinstala Monica

@Glen_b Obrigado pela referência. Infelizmente, não estou em uma universidade ou empresa, portanto não tenho os recursos para adquirir o livro.
Max

Pode ser encomendado na Amazon; uma explicação completa do algoritmo e de todas as advertências e problemas associados não é realmente o tipo de coisa que você pode abordar em algumas centenas de palavras ou mesmo em uma resposta de uma página.
Glen_b -Reinstala Monica

1
@Glen_b Eu escrevi o algoritmo de Davison e HInkely --- existem várias perguntas no CV sobre isso, então achei que valeu a pena o esforço. Quaisquer comentários que você tenha serão apreciados. stats.stackexchange.com/questions/226565/…
Bill

Esta discussão parece responder à sua pergunta: stats.stackexchange.com/questions/226565/…
user2683832

Respostas:


7

Intervalos de confiança levam em consideração a incerteza da estimativa. Intervalos de previsão adicionam a isso a incerteza fundamental. R predict.lmfornecerá o intervalo de previsão para um modelo linear. A partir daí, tudo o que você precisa fazer é executá-lo repetidamente em amostras com bootstrap.

n <- 100
n.bs <- 30

dat <- data.frame( x<-runif(n), y=x+runif(n) )
plot(y~x,data=dat)


regressAndPredict <- function( dat ) {
  model <- lm( y~x, data=dat )
  predict( model, interval="prediction" )
}

regressAndPredict(dat)

replicate( n.bs, regressAndPredict(dat[ sample(seq(n),replace=TRUE) ,]) )

O resultado replicateé uma matriz tridimensional ( nx 3x n.bs). A dimensão do comprimento 3 consiste no valor ajustado para cada elemento de dados e nos limites inferior / superior do intervalo de previsão de 95%.

Método de Gary King

Dependendo do que você deseja, há um método interessante de King, Tomz e Wittenberg . É relativamente fácil de implementar e evita os problemas de inicialização para determinadas estimativas (por exemplo max(Y)).

Vou citar sua definição de incerteza fundamental aqui, já que é razoavelmente bom:

Uma segunda forma de variabilidade, a incerteza fundamental representada pelo componente estocástico (a distribuição f) na Equação 1, resulta de inúmeros eventos aleatórios, como clima ou doença, que podem influenciar Y, mas não estão incluídos em X. Mesmo se conhecíamos os valores exatos dos parâmetros (eliminando assim a incerteza de estimativa); a incerteza fundamental nos impediria de prever Y sem erros.


3
Não tenho certeza de como você cria um intervalo de confiança a partir desta matriz de n.bs intervalos de previsão.
B12Miner #

1

O bootstrapping não assume nenhum conhecimento da forma da distribuição pai subjacente da qual a amostra surgiu. As estimativas clássicas clássicas dos parâmetros estatísticos são baseadas na suposição de normalidade. O Bootstrap lida com a não normalidade e é mais preciso na prática do que os métodos clássicos.

O bootstrapping substitui o poder de computação bruto dos computadores por rigorosa análise teórica. É uma estimativa para a distribuição amostral de um termo de erro do conjunto de dados. O bootstrapping inclui: amostrar novamente o conjunto de dados um número especificado de vezes, calcular a média de cada amostra e encontrar o erro padrão da média.

O seguinte código "R" demonstra o conceito:

Este exemplo prático demonstra a utilidade do bootstrap e estima o erro padrão. O erro padrão é necessário para calcular o intervalo de confiança.

Vamos supor que você tenha um conjunto de dados assimétrico "a":

a<-rexp(395, rate=0.1)          # Create skewed data

visualização do conjunto de dados inclinado

plot(a,type="l")                # Scatter plot of the skewed data
boxplot(a,type="l")             # Box plot of the skewed data
hist(a)                         # Histogram plot of the skewed data

Execute o procedimento de inicialização:

n <- length(a)                  # the number of bootstrap samples should equal the original data set
    xbarstar <- c()                 # Declare the empty set “xbarstar” variable which will be holding the mean of every bootstrap iteration
    for (i in 1:1000) {             # Perform 1000 bootstrap iteration
        boot.samp <- sample(a, n, replace=TRUE) #”Sample” generates the same number of elements as the original data set
    xbarstar[i] <- mean(boot.samp)} # “xbarstar” variable  collects 1000 averages of the original data set
    ## 
    plot(xbarstar)                  # Scatter plot of the bootstrapped data
    boxplot(xbarstar)               # Box plot of the bootstrapped data
    hist(xbarstar)                  # Histogram plot of the bootstrapped data

    meanOfMeans <- mean(xbarstar)
    standardError <- sd(xbarstar)    # the standard error is the standard deviation of the mean of means
    confidenceIntervalAboveTheMean <- meanOfMeans + 1.96 * standardError # for 2 standard deviation above the mean 
    confidenceIntervalBelowTheMean <- meanOfMeans - 1.96 * standardError # for 2 standard deviation above the mean 
    confidenceInterval <- confidenceIntervalAboveTheMean + confidenceIntervalBelowTheMean
    confidenceInterval

1
Obrigado Ragy pelo exemplo. No entanto, pelo que posso ver, sua resposta não abrangeu o cálculo dos intervalos de previsão usando o bootstrap. Como eu disse na minha resposta, eu já entendo como usar o bootstrapping para calcular intervalos de confiança - o que seu código parece fazer.
Max
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.