4.4 Bootstrap
O método de bootstrap foi proposto por (Efron 1979). Dada uma amostra aleatória \(\boldsymbol{X}=(X_1, \ldots, X_n)\) de uma distribuição de probabilidades desconhecida \(F\), o método permite estimar a distribuição amostral de alguma variável aleatória \(R(\boldsymbol{X},F)\) com base nos dados observados \(\boldsymbol{x}\). Efron aplica o método em uma série de exemplos, tais como o cálculo da variância da mediana amostral, taxas de erro na análise discriminante linear e estimação de parâmetros de uma regressão.
De acordo com (Lehmann and Romano 2005, 671), ‘o teste via bootstrap pode ser visto com uma aproximação analítica do teste corrigido de Bartlett da razão de verossimilhança’. Assim, o bootstrap ‘captura automaticamente a correção de Bartlett’ com probabilidade de erro de rejeição igual a \(O(n^{-2})\), contra \(O(n^{-1})\) do teste de verossimilhança usual (Beran and Ducharme 1991).
(Efron and Hastie 2016) apresentam diversos exemplos, recomendando o ‘ambicioso’ pacote bootstrap
(S et al. 2019). Há também o pacote boot
(Canty and Ripley 2022) que implementa funções e conjuntos de dados de (Davison and Hinkley 1997).
Exemplo 4.10 Pode-se utilizar a função bootstrap::bootstrap
para estimar um intervalo de confiança para a média, comparado com o intervalo de confiança assintótico conforme Seção IC para a média.
# gerando as re-amostras via bootstrap
library(bootstrap)
n <- 20
set.seed(4321); x <- rnorm(n, mean = 5, sd = 2)
theta <- function(x){mean(x)}
results <- bootstrap::bootstrap(x, 1000, theta)
# intervalo de confiança via bootstrap
m_boot <- mean(results$thetastar)
li_boot <- quantile(results$thetastar, .025)
ls_boot <- quantile(results$thetastar, .975)
c(li_boot, ls_boot)
## 2.5% 97.5%
## 4.232709 5.778373
# intervalo de confiança assintótico
li_ass <- mean(x)-1.96*sqrt(var(x)/n)
ls_ass <- mean(x)+1.96*sqrt(var(x)/n)
c(li_ass, ls_ass)
## [1] 4.142245 5.833840
# gráficos
hist(results$thetastar, 25, main = 'Estimativas via bootstrap')
abline(v = m_boot, col = 'red')
abline(v = li_boot, col = 'blue')
abline(v = ls_boot, col = 'blue')