Motivação

O Problema Fundamental da Inferência Estatística

Na Inferencial Clássica, o objetivo central é aprender sobre um parâmetro populacional desconhecido \(\theta\) a partir de uma amostra observada \(\boldsymbol{X} = (X_1, X_2, \dots, X_n)\) extraída de uma população com distribuição de probabilidade \(F\).

Para avaliar a precisão de um estimador \(\hat{\theta} = T(X_1, X_2, \dots, X_n)\) precisamos conhecer sua distribuição amostral. Tradicionalmente, isso é feito por meio de dois caminhos:

  1. Suposições Paramétricas: Assumir que \(F\) pertence a uma família paramétrica de distribuições e derivar analiticamente a distribuição exata de \(\hat{\theta}\) (como num problema de transformação e vetores aleatórios em Teria das Probabilidades); ou
  2. Resultados Assintóticos: Utilizar o Teorema do Limite Central (TLC) ou outros resultados assintóticos para aproximar a distribuição amostral de \(\hat{\theta}\) quando \(n \to \infty\).

As Limitações da Abordagem Clássica

Na prática das ciências aplicadas e da análise de dados moderna, esses caminhos frequentemente falham devido a:

  • Estatísticas Complexas: Para estatísticas como a mediana, a razão de médias, autovalores de matrizes de covariância ou coeficientes de modelos não lineares, a distribuição analítica é extremamente complexa ou desconhecida.
  • Tamanho Amostral Pequeno a Moderado: As aproximações assintóticas do TLC podem ser inadequadas quando o tamanho da amostra \(n\) é pequeno.
  • Violação de Suposições: Dados reais frequentemente apresentam assimetria, caudas pesadas ou contaminações por outliers, invalidando as premissas de normalidade comumente utilizadas.

A Ideia de Efron (1979)

Proposto por Bradley Efron em 1979, o Método Bootstrap é uma técnica computacional intensiva de reamostragem não paramétrica.

A analogia conceitual do Bootstrap baseia-se na seguinte substituição do “Mundo Real” pelo “Mundo Bootstrap”:

  • A Amostra Observada (\(\boldsymbol{X}\)) atua como se fosse a População Desconhecida.

  • A Distribuição Empírica (\(\widehat{F}_n\)) atua como a aproximação da Distribuição verdadeira \(F\).

  • As Reamostras Bootstrap (\(\boldsymbol{X}^*\)) obtidas por amostragem com reposição de \(\boldsymbol{X}\) atuam como Amostras originais.


Um pouco sobre a Função de Distribuição Empírica

Dada uma amostra \(X_1, X_2, \dots, X_n\) de variáveis aleatórias independentes e identicamente distribuídas (i.i.d.) com função de distribuição acumulada (f.d.a.) \(F(x) = P(X \le x)\), a Função de Distribuição Acumulada Empírica \(\widehat{F}_n(x)\) é definida por:

\[ \widehat{F}_n(x) = \frac{1}{n} \sum_{i=1}^{n} \mathbb{I}(X_i \le x) \]

onde \(\mathbb{I}(\cdot)\) é a função indicadora, que assume o valor \(1\) se a condição do argumento for verdadeira e \(0\) caso contrário.

Um exemplo de Função de Distribuição Empírica

Vamos determinar a função de distribuição empírica para a seguinte amostra de tamanho \(n=5\):

\[2, \quad 3, \quad 8, \quad 13, \quad 6\]

  1. Ordenando a amostra: \(2, \quad 3, \quad 6, \quad 8, \quad 13\).

  2. Encontrando a função de distribuição empírica:

\[\widehat{F}_n(x) = \begin{cases} 0 & \text{se } x < 2 \\ 1/5 = 0{,}2 & \text{se } 2 \le x < 3 \\ 2/5 = 0{,}4 & \text{se } 3 \le x < 6 \\ 3/5 = 0{,}6 & \text{se } 6 \le x < 8 \\ 4/5 = 0{,}8 & \text{se } 8 \le x < 13 \\ 1 & \text{se } x \ge 13 \end{cases}\]

Note que a função \(\widehat{F}_n\) dá peso \(1/n\) para cada ponto \(x_i\) observado na amostra.

De fato, pode-se provar as seguintes propriedades para a Função de Distribuição Empírica:

  1. Esperança e Variância: Para qualquer \(x \in \mathbb{R}\) fixo, a variável \(n \widehat{F}_n(x) \sim \text{Binomial}(n, F(x))\). Consequentemente: \[ \mathbb{E}[\widehat{F}_n(x)] = F(x) \] \[ \text{Var}(\widehat{F}_n(x)) = \frac{F(x)(1 - F(x))}{n} \]

  2. Consistência (Teorema de Glivenko-Cantelli): Conhecido como o Teorema Fundamental da Estatística, o resultado estabelece que \(\widehat{F}_n\) converge uniformemente para \(F\) quase certamente quando \(n \to \infty\): \[ \sup_{x \in \mathbb{R}} \vert{}\widehat{F}_n(x) - F(x)\vert{} \xrightarrow{\text{q.s.}} 0 \] Para mais detalhes, consulte Billingsley (1995).


Bootstrap: Fundamentação Teórica e Definições Formais

De acordo com Robert & Casella (2004), as técnicas de Bootstrap1 são um conjunto de métodos computacionalmente intensivos baseados na reamostragem a partir dos dados observados. Elas foram introduzidas originalmente por Efron (1979) e são descritas de forma mais completa em Efron (1982), Efron e Tibshirani (1994) ou Hjorth (1994).

A ideia básica do Bootstrap é avaliar as propriedades de um estimador arbitrário \(\hat{\theta} = T(X_1, \dots, X_n)\) por meio da função de distribuição acumulada (f.d.a.) empírica da amostra \(X_1, \dots, X_n\):

\[ \widehat{F}_n(x) = \frac{1}{n} \sum_{i=1}^{n} \mathbb{I}(X_i \le x) \]

em vez da f.d.a. teórica \(F\).

Mais precisamente, se desejamos uma estimativa de \[\theta(F) = \int h(x) \, dF(x),\] um candidato óbvio é \[\theta(\widehat{F}_n) = \int h(x) \, d\widehat{F}_n(x).\].

Quando os \(X_i\) são independentes e identicamente distribuídos (i.i.d.), o Teorema de Glivenko-Cantelli garante a convergência na norma do supremo de \(\widehat{F}_n\) para \(F\) e, portanto, garante que \(\theta(\widehat{F}_n)\) é um estimador consistente de \(\theta(F)\).

A notação \(\theta(F)\) indica que o parâmetro populacional \(\theta\) é expresso como um funcional da distribuição \(F\). Logo, o estimador \(\theta(\widehat{F}_n)\) de \(\theta\) é simplesmente o mesmo funcional aplicado à distribuição empírica \(\widehat{F}_n\); ou seja, é o estimador plug-in de \(\theta\):

\[ \text{Se } \quad \theta(F) = g(F) \quad\text{ então }\quad \hat{\theta} = g(\widehat{F}_n). \]

Exemplos:

  • Média populacional: \(\mu = \mathbb{E}[X] = \int x \, dF(x) \implies \hat{\mu} = \int x \, d\widehat{F}_n(x) = \frac{1}{n} \sum_{i=1}^{n} X_i = \bar{X}\).

  • Variância populacional: \(\sigma^2 = \int (x - \mu)^2 \, dF(x) \implies \hat{\sigma}^2 = \frac{1}{n} \sum_{i=1}^{n} (X_i - \bar{X})^2\).

Como obter um estimador via Bootstrap

O bootstrap fornece um método razoavelmente automático de calcular \(\theta(\widehat{F}_n)\) por meio da reamostragem dos dados.

Seja \(\boldsymbol{X}^{*(b)} = (X^{*(b)}_1, \cdots, X^{*(b)}_n)\) uma reamostragem de \(\boldsymbol{X} = (X_1, \cdots, X_n)\) obtida através de um sorteio com reposição das componentes \(X_1,\cdots,X_n\). (Observe que os \(X_j^{*(b)}\) são iguais a um dos \(X_j\) e que o mesmo valor \(X_j\) pode aparecer várias vezes em \(\boldsymbol{X}^{*i}\).)

De fato, tornou-se comum denotar uma amostra bootstrap com o sobrescrito “\(*\)”, de modo que:

\[ \boldsymbol{X}^{*(b)} = (X^{*(b)}_1, \cdots, X^{*(b)}_n) \sim \widehat{F}_n, \quad \text{i.i.d.} \]

Com base na extração de \(\boldsymbol{X}^{*(1)}, \cdots, \boldsymbol{X}^{*(B)}\), a quantidade \(\theta(\widehat{F}_n)\) pode ser aproximada pelo estimador bootstrap \(\hat{\theta}(\widehat{F}_n)\):

\[ \tag{$\star$} \theta(\widehat{F}_n) = \int h(x) \, d\widehat{F}_n(x) \qquad \approx \qquad \hat{\theta}(\widehat{F}_n) = \frac{1}{B} \sum_{b=1}^{B} h(\boldsymbol{X}^{*(b)}) \]

com a aproximação tornando-se mais precisa à medida que \(B\) aumenta.

Se \(\hat{\theta}(F)\) for um estimador arbitrário de \(\theta(F)\), o viés, a variância ou até mesmo a distribuição do erro de \(\hat{\theta}\) podem ser estimados de forma análoga utilizando o mesmo princípio do Método de Monte Carlo.

O Algoritmo do Bootstrap Não-Paramétrico

Quando a distribuição amostral teórica de \(\hat{\theta} = T(\boldsymbol{X})\) é intratável analiticamente, utilizamos o método de Monte Carlo para aproximar a distribuição Bootstrap de \(\hat{\theta}^*\).

Algoritmo Passo a Passo

  1. Entrada: Amostra original \(\boldsymbol{X} = \{x_1, x_2, \cdots, x_n\}\) e número de réplicas bootstrap \(B\).
  2. Para \(b = 1, 2, \dots, B\):
    1. gere uma reamostra Bootstrap \(\boldsymbol{X}^{*(b)} = \{x_1^{*(b)}, x_2^{*(b)}, \cdots, x_n^{*(b)}\}\) sorteando \(n\) elementos de \(\boldsymbol{X}\) com reposição (cada elemento tem probabilidade \(1/n\) de ser selecionado a cada sorteio);
    2. calcule a estatística de interesse na \(b\)-ésima reamostra: \(\hat{\theta}^{*(b)} = T(\boldsymbol{X}^{*(b)})\).
  3. Saída: O vetor de réplicas bootstrap \(\boldsymbol{\hat{\theta}}^* = \{\hat{\theta}^{*(1)}, \hat{\theta}^{*(2)}, \cdots, \hat{\theta}^{*(B)}\}\).

Estimadores para o Viés e para a Variância

A partir do conjunto de réplicas \(\{\hat{\theta}^{*(1)}, \cdots, \hat{\theta}^{*(B)}\}\), estimamos as propriedades amostrais do estimador \(\hat{\theta}\) conforme discutido a seguir.

De fato, o viés do estimador \(\hat{\theta}(F)\) é dado por \[\widehat{\text{B}}(\hat{\theta}(F)) = \mathbb{E}[\hat{\theta}(F)] - \theta(F) \approx \mathbb{E}[\hat{\theta}(\widehat{F}_n)] - \theta(\widehat{F}_n).\]

Pelo princípio plug-in, substituímos \(\mathbb{E}[\hat{\theta}]\) pela média das estimativas bootstrap e \(\theta\) pela estimativa pontual original \(\hat{\theta}\). Dessa forma, o vício estimado pelo Bootstrap é definido por: \[\widehat{\text{B}}_{boot}(\hat{\theta}) = \mathbb{E}[\hat{\theta}] - \theta = \bar{\theta}^* - \hat{\theta},\] onde \[\bar{\theta}^* = \frac{1}{B} \sum_{b=1}^B \hat{\theta}^{*(b)}.\] Tratando as estimativas bootstrap como uma amostra aleatória de estimativas independentes para \(\hat{\theta}\), a variância de Bootstrap do estimador \(\hat{\theta}\) será dada por: \[ \begin{aligned} \widehat{\text{Var}}_{boot}(\hat{\theta}) &= \frac{1}{B-1} \sum_{b=1}^{B} \left(\hat{\theta}^{*(b)} - \bar{\theta}^*\right)^2 \end{aligned} \]

O erro padrão Bootstrap é simplesmente a raiz quadrada da variância: \[ \widehat{\text{SE}}_{boot}(\hat{\theta}) = \sqrt{\widehat{\text{Var}}_{boot}(\hat{\theta})}. \]

Além disso, faz sentido pensar no estimador corrigido via Bootstrap como \[ \hat{\theta}_{boot} = \hat{\theta} - \widehat{\text{B}}_{boot}(\hat{\theta}) = \hat{\theta} - (\bar{\theta}^* - \hat{\theta}) =2\hat{\theta} - \bar{\theta}^* \] ]


Intervalos de Confiança Bootstrap

Existem diferentes abordagens para construir intervalos de confiança (IC) de nível \(100(1-\alpha)\%\) a partir das réplicas Bootstrap.

Vamos discutir aqui as duas formas mais frequentemente utilizadas.

1. Intervalo baseado na distribuição Normal Padrão

Assume que a distribuição amostral de \(\hat{\theta}\) é aproximadamente Normal:

\[ \text{IC}_{100(1-\alpha)\%}^{\text{Normal}}(\theta) = \left[ \hat{\theta} - z_{1-\alpha/2} \cdot \widehat{\text{SE}}_{boot}\, , \, \hat{\theta} + z_{1-\alpha/2} \cdot \widehat{\text{SE}}_{boot} \right]. \]

Limitação: Exige simetria (assimetria nula) e tamanho amostral grande para garantir assintoticidade normal.

2. Intervalo Percentil

Utiliza diretamente os quantis empíricos da distribuição das réplicas Bootstrap \(\hat{\theta}^*\):

\[ \text{IC}_{100(1-\alpha)\%}^{\text{Percentil}} = \left[ \hat{\theta}^*_{\alpha/2} \, , \, \hat{\theta}^*_{1 - \alpha/2} \right], \]

onde \(\hat{\theta}^*_{q}\) representa o quantil de ordem \(q\) do vetor \(\{\hat{\theta}^{*(1)}, \cdots, \hat{\theta}^{*(B)}\}\).

Vantagem: Invariante a transformações monotônicas de \(\hat{\theta}\).


Exemplo 1: Erro Padrão da Mediana (onde o Jackknife Falha)

Vamos demonstrar como o método Bootstrap calcula com precisão o erro padrão da mediana amostral baseada em uma amostra extraída de uma distribuição Exponencial.

Lembre-se que \(X \sim Exp(\lambda) \qquad \Rightarrow \qquad F_X(x) = 1-e^{-\lambda x}, \;x>0 \qquad \text{e} \qquad q_p(x) = -\frac{\ln(1-p)}{\lambda}.\)

# Configurando semente para reprodutibilidade
set.seed(1)

# gerando a amostra (assimétrica)
n = 30
lambda = 0.2
x = rexp(n, rate = 0.2) 
media.verd = 1/lambda
#media.verd
mediana.verd = -log(1-0.5)/lambda
#mediana.verd

# estimativa pontual (baseada no estimador original)
theta_hat = median(x)

# algoritmo Bootstrap
B = 2000
replicas_theta_hat = numeric(B)

for(b in 1:B) {
  reamostra = sample(x, size = n, replace = TRUE)
  replicas_theta_hat[b] = median(reamostra)
}

theta_bar = mean(replicas_theta_hat)

# Vício estimado
vies_boot = theta_bar - theta_hat

# Variância do Estimador
var_boot = var(replicas_theta_hat)
se_boot = sd(replicas_theta_hat)

# Estimador Corrigido
theta_boot = theta_hat - vies_boot

estimativas = data.frame(
  medida = c("valor verdadeiro","estimativa viesada","estimativa corrigida por Bootstrap","viés estimado via Bootstrap","erro padrão estimado via Bootstrap"),
  valores = c(round(mediana.verd,4),round(theta_hat, 4),round(theta_boot, 4),round(vies_boot, 4),round(se_boot, 4))
)
estimativas
##                               medida valores
## 1                   valor verdadeiro  3.4657
## 2                 estimativa viesada  3.7930
## 3 estimativa corrigida por Bootstrap  3.5972
## 4        viés estimado via Bootstrap  0.1958
## 5 erro padrão estimado via Bootstrap  0.8296
# intervalos de confiança
# Normal
liminf_normal = theta_hat - qnorm(0.975)*se_boot
limsup_normal = theta_hat + qnorm(0.975)*se_boot
IC_normal = paste("[",round(liminf_normal,4)," ; ",round(limsup_normal,4),"]")
IC_normal
## [1] "[ 2.167  ;  5.4191 ]"
# Percentil
liminf_perc = quantile(replicas_theta_hat,0.025)
limsup_perc = quantile(replicas_theta_hat,0.975)
IC_perc = paste("[",round(liminf_perc,4)," ; ",round(limsup_perc,4),"]")
IC_perc
## [1] "[ 2.8614  ;  5.5696 ]"

Utilizando o pacote boot:

library(boot)
set.seed(1)

# A função boot() EXIGE que a função estatística receba dois parâmetros: o vetor/data frame de dados (d) e um vetor de índices de reamostragem (i).
fun_mediana <- function(d, i) {
  return(median(d[i]))
}

# executando o Bootstrap com B = 2000
resultados_boot = boot(data = x, statistic = fun_mediana, R = 2000)

# Resultados gerais
print(resultados_boot)
## 
## ORDINARY NONPARAMETRIC BOOTSTRAP
## 
## 
## Call:
## boot(data = x, statistic = fun_mediana, R = 2000)
## 
## 
## Bootstrap Statistics :
##     original    bias    std. error
## t1* 3.793029 0.2101794   0.8438646
# calculando os diferentes Intervalos de Confiança
boot.ci(resultados_boot, type = c("norm", "basic", "perc", "bca"))
## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
## Based on 2000 bootstrap replicates
## 
## CALL : 
## boot.ci(boot.out = resultados_boot, type = c("norm", "basic", 
##     "perc", "bca"))
## 
## Intervals : 
## Level      Normal              Basic         
## 95%   ( 1.929,  5.237 )   ( 2.016,  4.757 )  
## 
## Level     Percentile            BCa          
## 95%   ( 2.829,  5.570 )   ( 2.764,  5.521 )  
## Calculations and Intervals on Original Scale
# extraindo as métricas principais do objeto boot
# theta_hat (t0): Estimativa pontual original
# replicas_theta_hat (t): Vetor de réplicas bootstrap

theta_hat_pacote = resultados_boot$t0
replicas_theta_hat_pacote = resultados_boot$t
theta_bar_pacote  = mean(replicas_theta_hat_pacote)

# Vício estimado
vies_boot_pacote = theta_bar_pacote - theta_hat_pacote

# Variância do Estimador
var_boot_pacote = var(replicas_theta_hat_pacote)
se_boot_pacote = sd(replicas_theta_hat_pacote)

# Estimador Corrigido
theta_boot_pacote = theta_hat_pacote - vies_boot_pacote

comparacao = data.frame(
  medida = c("valor verdadeiro","estimativa viesada","estimativa corrigida por Bootstrap","viés estimado via Bootstrap","erro padrão estimado via Bootstrap"),
  valores_implementados = c(round(mediana.verd,4),round(theta_hat, 4),round(theta_boot, 4),round(vies_boot, 4),round(se_boot, 4)),
  valores_pacote = c(round(mediana.verd,4),round(theta_hat_pacote, 4),round(theta_boot_pacote, 4),round(vies_boot_pacote, 4),round(se_boot_pacote, 4))  
)

comparacao
##                               medida valores_implementados valores_pacote
## 1                   valor verdadeiro                3.4657         3.4657
## 2                 estimativa viesada                3.7930         3.7930
## 3 estimativa corrigida por Bootstrap                3.5972         3.5828
## 4        viés estimado via Bootstrap                0.1958         0.2102
## 5 erro padrão estimado via Bootstrap                0.8296         0.8439

Visualização gráfica da distribuição Bootstrap da mediana amostral:

hist(replicas_theta_hat, breaks = 25, col = "skyblue", border = "white",
     main = "Distribuição Amostral Bootstrap da Mediana",
     xlab = "Mediana Reamostrada", ylab = "Frequência")
abline(v = theta_hat, col = "red", lwd = 2, lty = 1)
abline(v = mean(replicas_theta_hat), col = "blue", lwd = 2, lty = 2)
legend("topright", legend = c("Mediana amostral", "Média réplicas Bootstrap"),
       col = c("red", "blue"), lty = c(1, 2), lwd = 2)


Comparação Teórica: Bootstrap vs. Jackknife

Característica Método Jackknife Método Bootstrap
Mecanismo de Reamostragem Determinístico: Remove \(1\) observação por vez (\(n\) subconjuntos). Estocástico: Sorteia \(n\) observações com reposição (\(B\) reamostras).
Tamanho da Reamostra \(n - 1\) elementos. \(n\) elementos.
Custo Computacional Baixo (\(n\) execuções). Moderado a Alto (\(B \ge 1000\) execuções).
Suavidade da Estatística Requer estatísticas suaves (falha drasticamente na mediana/quantis). Funciona muito bem para estatísticas não suaves (ex: mediana).
Estimativa da Distribuição Estima apenas viés e erro padrão. Estima toda a distribuição amostral (permite IC percentil, etc.).

Exemplo 2: Comparação com o Método Jackknife

Vamos comparar os resultados obtidos via Bootstrap e Jackknife através de um estudo de simulação.

jackknife = function(x, estatistica){
  
  n = length(x)
  
  theta_hat = estatistica(x)
  
  # Estimativas Jackknife (leave-one-out)
  theta_menosi = sapply(
    1:n,
    function(i){
      estatistica(x[-i])
    }
  )
  
  theta_bar = mean(theta_menosi)
  
  # Estimador Corrigido
  theta_jack = n*theta_hat-(n-1)*theta_bar
  
  # Vício estimado
  vies_jack = (n - 1) * (theta_bar - theta_hat)
  #theta_jack = theta_hat - vies_jack
  
  # Variância do Estimador
  var_jack = ((n - 1) / n) * sum((theta_bar - theta_menosi)^2)
  se_jack = sqrt(var_jack)  
  
  pseudovalores = n * theta_hat - (n - 1) * theta_menosi
  
  list(
    n = n,
    estimativa_viesada = theta_hat,
    estimativas_loo = theta_menosi, # leave_one_out
    media_jack = theta_bar,
    vies_jack = vies_jack,
    estimativa_jack = theta_jack,
    var_jack = var_jack,
    se_jack = se_jack,
    pseudovalores = pseudovalores
  )
}

bootstrap = function(x, estatistica, B){
  
  n = length(x)
  
  # estimativa pontual (baseada no estimador original)
  theta_hat = estatistica(x)
  
  # algoritmo Bootstrap
  replicas_theta_hat = numeric(B)

  for(b in 1:B) {
    reamostra = sample(x, size = n, replace = TRUE)
    replicas_theta_hat[b] = estatistica(reamostra)
  }

  theta_bar = mean(replicas_theta_hat)

  # Vício estimado
  vies_boot = theta_bar - theta_hat

  # Variância do Estimador
  var_boot = var(replicas_theta_hat)
  se_boot = sd(replicas_theta_hat)

  # Estimador Corrigido
  theta_boot = theta_hat - vies_boot  
  
  list(
    n = n,
    estimativa_viesada = theta_hat,
    replicas_boot = replicas_theta_hat,
    media_boot = theta_bar,
    vies_boot = vies_boot,
    estimativa_boot = theta_boot,
    var_boot = var_boot,
    se_boot = se_boot
  )
}

#____________________________
# Estudo com replicações ----

# parâmetros para geração dos dados
mu.verd = 5
sig.verd = 2

# número de replicações
M = 1000

# tamanho da amostra em cada replicação
n = 100

# número de amostras Bootstrap
B = 1000


media.mc = NULL 
mediana.mc = NULL

media.jack = NULL
mediana.jack = NULL
se.jack.media = NULL
se.jack.mediana = NULL

media.boot = NULL
mediana.boot = NULL
se.boot.media = NULL
se.boot.mediana = NULL


for(j in 1:M){
  
  # gerando amostras
  amostra = rnorm(n,mu.verd,sig.verd)
  
  # estimadores de Monte Carlo
  media.mc[j] = mean(amostra)
  mediana.mc[j] = median(amostra)
   
  # resultados Jackknife
  resultado_media.jack = jackknife(amostra,mean)
    media.jack[j] = resultado_media.jack$estimativa_jack
    se.jack.media[j] = resultado_media.jack$se_jack
  resultado_mediana.jack = jackknife(amostra,median)
    mediana.jack[j] = resultado_mediana.jack$estimativa_jack
    se.jack.mediana[j] = resultado_mediana.jack$se_jack
  
  # resultados Bootstrap
  resultado_media.boot = bootstrap(amostra,mean,B)
    media.boot[j] = resultado_media.boot$estimativa_boot
    se.boot.media[j] = resultado_media.boot$se_boot
  resultado_mediana.boot = bootstrap(amostra,median,B)
    mediana.boot[j] = resultado_mediana.boot$estimativa_boot
    se.boot.mediana[j] = resultado_mediana.boot$se_boot
  
}

se.mc.media = sd(media.mc)
se.mc.media
## [1] 0.1994753
sig.verd/sqrt(n)
## [1] 0.2
se.mc.mediana = sd(mediana.mc)
se.mc.mediana
## [1] 0.2448521
par(mfrow = c(2,2))

hist(se.jack.media,main="Erro Padrão - Média Jackknife")
abline(v=se.mc.media,col=2,lwd=2)
hist(se.boot.media,main="Erro Padrão - Média Bootstrap")
abline(v=se.mc.media,col=2,lwd=2)

hist(se.jack.mediana,main="Erro Padrão - Mediana Jackknife")
abline(v=se.mc.mediana,col=2,lwd=2)
hist(se.boot.mediana,main="Erro Padrão - Mediana Bootstrap")
abline(v=se.mc.mediana,col=2,lwd=2)


Referências

BILLINGSLEY, P. Probability and Measure. 3. ed. New York: John Wiley, 1995.

EFRON, Bradley. Bootstrap methods: another look at the jackknife. The Annals of Statistics, v. 7, n. 1, p. 1-26, 1979.

EFRON, Bradley; TIBSHIRANI, Robert J. Introduction to the Bootstrap. New York: Chapman & Hall/CRC, 1993. (Monographs on Statistics and Applied Probability, v. 57).

ROBERT, Christian P.; CASELLA, George. Monte Carlo Statistical Methods. 2. ed. New York: Springer, 2004. (Springer Texts in Statistics).

ROSS, Sheldon M. Simulation. 5. ed. San Diego: Academic Press, 2012.


  1. O nome do método deriva da expressão em inglês “to pull oneself up by one’s bootstraps” (levantar a si próprio puxando pelas alças de suas próprias botas), vinda do romance alemão As Aventuras do Barão de Munchausen, de Rudolph Raspe, no qual o herói se salva do afogamento puxando a si mesmo pelas alças de suas próprias botas (bootstraps)!. O nome refletindo a ideia de realizar inferência estatística usando apenas os próprios dados observados, sem depender de distribuições teóricas externas.↩︎