# fixando a semente para reprodutibilidade
set.seed(61231601)
# Amostra
<- 100 # tamanho da amostra
n <- rnorm(n, mean = 0, sd = 10)
amostra
# Erro padrão amostral
<- sd(amostra)/sqrt(n) ) ( ep
[1] 0.9800282
Método de Reamostragem Boostrap
ESTAT0090 – Estatística Computacional
Prof. Dr. Sadraque E. F. Lucena
sadraquelucena@academico.ufs.br
Fazer inferências com amostras pequenas é muito difícil, principalmente quando a distribuição da população não é conhecida. Nesses casos, os métodos estatísticos tradicionais podem não ser adequados ou aplicáveis. Uma alternativa é usar o método bootstrap.
boot
no R para realizar a reamostragem Bootstrap.A estimativa bootstrap do erro padrão de um estimador \(\widehat{\theta}\) é o desvio padrão amostraldas réplicas bootstrap \(\widehat{\theta}^{(1)}, \ldots, \widehat{\theta}^{(B)}\) \[ dp(\widehat{\theta}^*) = \sqrt{\frac{1}{B-1} \sum\limits_{b=1}^B \left( \widehat{\theta}^*_b - \overline{\widehat{\theta}^*} \right)^2}, \] em que \[ \overline{\widehat{\theta}^*} = \sum\limits_{b=1}^B \widehat{\theta}^*_b. \]
Segundo Efron e Tibishirani, o número de réplicas necessárias para boa estimação do erro padrão não pe grande.
\(B=50\) geralmente é grande o suficiente e raramente \(B>200\) é necessário (para intervalos de confiança esse número é maior).
Gere uma amostra de tamanho 100 de \(X\sim N(\mu=0, \sigma^2= 100)\). Determine o erro padrão e estime-o via bootstrap não paramétrico e paramétrico para comparação.
boot()
do pacote boot
.### Usando o pacote "boot"
media.boot <- function(x, i) mean(x[i])
library(boot)
boot(data = amostra, statistic = media.boot, R = 200)
ORDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = amostra, statistic = media.boot, R = 200)
Bootstrap Statistics :
original bias std. error
t1* 0.8863115 0.1178033 0.9650515
B <- 200 # número de réplicas bootstrap
# função que obtem uma amostra bootstrap não paramétrica e calcula a média
media.np <- function(x) {
amstr <- sample(x, size = n, replace = TRUE)
return(mean(amstr))
}
medias.boot.np <- replicate( B, media.np(amostra) )
# Estimativa do erro padrão
( ep.boot.np <- sd(medias.boot.np) )
[1] 0.9211583
## Bootstrap paramétrico
B <- 200 # número de réplicas bootstrap
# função que obtem uma amostra bootstrap paramétrica e calcula a média
media.p <- function(x) {
m <- mean(x) # media
dp <- sd(x) # desvio padrão
# amostra bootstra paramétrica
amstr <- rnorm(n, mean = m, sd = dp)
return(mean(amstr))
}
medias.boot.p <- replicate( B, media.p(amostra) )
# Estimativa do erro padrão
sd(medias.boot.p)
[1] 0.9090239
Se \(\widehat{\theta}\) é um estimador não viesado para \(\theta\), então \(E[\widehat{\theta}] = \theta\). O viés de um estimador \(\widehat{\theta}\) de \(\theta\) é \[ B[\widehat{\theta}] = E[\widehat{\theta} - \theta] = E[\widehat{\theta}]- \theta \]
Se obtivermos várias estimativas bootstrap (\(\widehat{\theta}^{(1)},\ldots,\widehat{\theta}^{(B)}\)) para compreender a distribuição de \(\widehat{\theta}\), então a estimativa de viés bootstrap é \[ \widehat{B}[\widehat{\theta}] = \overline{\widehat{\theta}^*} - \widehat{\theta}, \] em que \(\widehat{\theta}\) é a estimativa calculada da amostra original.
Valores positivos de viés indicam que, em média, tende a sobrestimar \(\theta\).
Se um estimador é viesado gostaríamos de “corrigir” este estimador fazendo \[ \theta - B[\widehat{\theta}]. \]
Se usarmos uma estimativa bootstrap do viés, temos: \[ \theta - \widehat{B}[\widehat{\theta}]. \]
Assim, uma estimativa \(\widehat{\theta}^c\) para \(\theta\) corrigida pelo viés é \[ \begin{aligned} \widehat{\theta}^c &= \widehat{\theta} - \widehat{B}[\widehat{\theta}]\\ &= \widehat{\theta} - \left( \overline{\widehat{\theta}^*} - \widehat{\theta} \right)\\ &= 2 \widehat{\theta} - \overline{\widehat{\theta}^*}, \end{aligned} \] ou seja, a estimativa corrigida é dada pelo dobro da original subtraída da médas das estimativas das amostras bootstrap.
## Bootstrap não paramétrico
B <- 1000 # número de réplicas bootstrap
# função que obtem uma amostra bootstrap não
# paramétrica e calcula a variância
variancia.boot <- function(x) {
amstr <- sample(x, size = n, replace = TRUE)
return(var(amstr))
}
var.boot.np <- replicate( B, variancia.boot(dados) )
# Estimativa bootstrap da variância
( var.np <- mean(var.boot.np) )
[1] 3.822395
[1] -0.03406886
[1] 3.890532
## Usando a função "boot"
var.amostral <- function(x, i)
return( var(x[i]) )
( var_boot <- boot(dados, var.amostral, B) )
ORDINARY NONPARAMETRIC BOOTSTRAP
Call:
boot(data = dados, statistic = var.amostral, R = B)
Bootstrap Statistics :
original bias std. error
t1* 3.856463 -0.02316833 0.4616322
Obtenha um intervalo de confiança bootstrap de 95% para a variância do Exemplo 17.2 usando o método percentil.
25% 97.5%
3.492012 4.819677
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 1000 bootstrap replicates
CALL :
boot.ci(boot.out = var_boot, conf = 0.95, type = "perc")
Intervals :
Level Percentile
95% ( 2.969, 4.732 )
Calculations and Intervals on Original Scale
boot.ci
, use o argumento type = "all"
Obtenha intervalos de confiança bootstrap de 95% para a variância do Exemplo 17.2 considerando todos os cinco métodos.
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 1000 bootstrap replicates
CALL :
boot.ci(boot.out = var_boot, conf = 0.95, type = "all")
Intervals :
Level Normal Basic
95% ( 2.975, 4.784 ) ( 2.981, 4.744 )
Level Percentile BCa
95% ( 2.969, 4.732 ) ( 3.039, 4.877 )
Calculations and Intervals on Original Scale
Os dados abaixo correspondem à notas obtidas na admissão em uma universidade americana (LSAT) e o coeficiente de rendimento médio ao final do curso (GPA).
LSAT | 576 | 635 | 558 | 578 | 666 | 580 | 555 | 661 | 651 | 605 | 653 | 575 | 545 | 572 | 594 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
GPA | 339 | 330 | 281 | 303 | 344 | 307 | 300 | 343 | 336 | 313 | 312 | 274 | 276 | 288 | 296 |
Obtenha a correlação amostral entre as duas variáveis. Calcule uma estimativa bootstrap para o viés e o erro padrão dessa correlação. Obtenha também intervalos de confiança boostrap. Use boostrap não paramétrico e considere \(B = 2000\).
bootstrap
e chama-se law
. LSAT GPA
1 576 3.39
2 635 3.30
3 558 2.81
4 578 3.03
5 666 3.44
6 580 3.07
7 555 3.00
8 661 3.43
9 651 3.36
10 605 3.13
11 653 3.12
12 575 2.74
13 545 2.76
14 572 2.88
15 594 2.96
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 2000 bootstrap replicates
CALL :
boot.ci(boot.out = obj, conf = 0.95, type = "all")
Intervals :
Level Normal Basic
95% ( 0.5133, 1.0394 ) ( 0.5900, 1.1028 )
Level Percentile BCa
95% ( 0.4499, 0.9628 ) ( 0.2878, 0.9364 )
Calculations and Intervals on Original Scale
Some BCa intervals may be unstable
Conehcimento sobre a construção e interpretação de intervalos de confiança bootstrap.
Conhecimento sobre estimação e corrção de viés de estimadores usando o método Bootstrap.
Domínio do uso do pacote boot
no R para aplicar o Bootstrap em problemas reais.
Compreensão da diferença entre bootstrap paramétrico e não paramétrico e quando usar cada um.
Aula baseada no material “Métodos Computacionais Aplicados à Estatística Implementação no Software R” de Cristiano de Carvalho Santos.