Reamostragem com o pacote Bootstrap.jl

Ferramentas

Aprenda a utilizar o pacote Bootstrap.jl, que permite, de forma prática e acessível, realizar reamostragem bootstrap em Julia a fim de obter estimativas e intervalos de confiança.

Autores
Afiliação

Universidade Estadual de Campinas

Universidade Estadual de Campinas

Data de Publicação

4 de novembro de 2025

Introdução

Em muitos problemas de Estatística, calcular a variância exata ou assintótica de um estimador é muito dificil (ou sua forma exata é mesmo desconhecida), tornando a tarefa de obter intervalos de confiança bastante dificil ou impossível. Mesmo em situações nas quais a variância assintótica é facil de ser obtida, estes resultados apenas são válidos se dispomos de um número grande de observações (o que nem sempre é possível). Nesses casos, a técnica de Bootstrap pode ser extremamente útil. Ela consiste em realizar reamostragem (com reposição dos dados originais no caso do Bootstrap não paramétrico) e, a partir disso, fazer correção do estimador, estimar a variância, construir intervalos de confiança, fazer testes de hipóteses, etc.

Em Julia, há uma maneira bastante prática de aplicar esse processo por meio do pacote Bootstrap.jl. Neste post, aprenderemos o passo a passo de como utilizar esse pacote.

Bootstrap

Em primeiro lugar, vamos instalar e carregar os pacotes necessários:

Pkg.add("Bootstrap")
Pkg.add("Statistics")
using Bootstrap
using Statistics

Para realizar o processo de reamostragem, usamos a função bootstrap(), que recebe três argumentos principais: a estatística de interesse, o conjunto de dados (amostra original) e o método de reamostragem (incluindo o número de amostras).

A seguir, geramos um vetor de 100 observações de uma normal padrão e realizamos o processo de reamostragem 200 vezes, utilizando o método mais tradicional (amostragem aleatória com reposição):

dados = randn(100);
resultado = bootstrap(mean, dados, BasicSampling(200))
Bootstrap Sampling
  Estimates:
     Var │ Estimate   Bias       StdError
         │ Float64    Float64    Float64
    ─────┼────────────────────────────────
       1 │ 0.0651882  0.0106154  0.108924
  Sampling: BasicSampling
  Samples:  200
  Data:     Vector{Float64}: { 100 }

O pacote oferece diversos tipos de métodos de reamostragem bootstrap, que podem ser especificados alterando o último argumento da função:

  • BasicSampling: arealiza mostragem aleatória com reposição;
  • AntitheticSampling: introduz correlação negativa entre as amostras;
  • BalancedSampling: reduz o viés;
  • ExactSampling: executa todas as amostras possíveis;
  • ResidualSampling e WildSampling: arealizam mostragem de resíduos para modelos lineares generalizados;
  • MaximumEntropySampling: utilizado para séries temporais dependentes.

Intervalos de Confiança

Também podemos utilizar o objeto gerado pelo bootstrap() para calcular um Intervalo de Confiança (IC) da estatística de interesse. Para isso, usamos a função confint, que recebe o objeto criado pela função bootstrap e o método do cálculo (com o nível de confiança) como argumentos.

Por exemplo, vamos calcular um IC de 95% para o cenário criado anteriormente:

IC = confint(resultado, PercentileConfInt(.95))
((0.06518824234986356, -0.14299926700667398, 0.26475132945553614),)

O pacote nos fornece diversos métodos de cálculo de IC, que podem ser selecionados alterando o último argumento da função:

  • BasicConfInt: método ingênuo de calcular;
  • PercentileConfInt: utiliza os percentis empíricos;
  • NormalConfInt: assume que a estatística segue a distribuição normal;
  • StudentConfInt: aplica uma correção considerando a variância de cada amostra;
  • BCaConfInt: aplica uma correção no viés e considera possível assimetria.

Estimando uma Regressão

Como o exemplo aplicado, vamos utilizar o Bootstrap para calcular intervalos de confiança dos coeficientes de uma Regressão Linear Simples.

Em primeiro lugar, vamos carregar os pacotes necessários:

Pkg.add("DataFrames")
Pkg.add("GLM")
using GLM
using DataFrames

Agora, vamos criar nossos dados:

x = 1:20;
y = 5 .+ 2 .* x .+ randn(20);
dados = DataFrame(x = x, y = y)
20×2 DataFrame
 Row │ x      y
     │ Int64  Float64
─────┼─────────────────
   1 │     1   7.26581
   2 │     2   8.19057
   3 │     3  11.6905
   4 │     4  13.0762
   5 │     5  14.1493
   6 │     6  15.6661
   7 │     7  17.8914
   8 │     8  20.7538
  ⋮  │   ⋮       ⋮
  14 │    14  32.5221
  15 │    15  35.3383
  16 │    16  38.4726
  17 │    17  38.0351
  18 │    18  41.068
  19 │    19  43.7006
  20 │    20  44.9016
         5 rows omitted

Em seguida, precisamos definir uma função que, a partir das determinadas observações selecionadas, ajusta o modelo e retorna os coeficientes para utilizarmos no bootstrap().

function betas(linhas)
    dados_amostra = dados[linhas, :]
    return coef(lm(@formula(y ~ x), dados_amostra))
end
betas (generic function with 1 method)

Com isso, podemos realizar o Bootstrap e obter um IC para os coeficientes.

reamostragem = bootstrap(betas, collect(1:nrow(dados)), BasicSampling(200))
Bootstrap Sampling
  Estimates:
     Var │ Estimate  Bias         StdError
         │ Float64   Float64      Float64
    ─────┼──────────────────────────────────
       1 │  4.70248  -0.0099246   0.465964
       2 │  2.03707   3.09535e-5  0.0336911
  Sampling: BasicSampling
  Samples:  200
  Data:     Vector{Int64}: { 20 }
IC = confint(reamostragem, PercentileConfInt(.95))
((4.702481030710368, 3.8549579410140318, 5.588119259864807), (2.037067194740162, 1.9778498227118255, 2.10798824786047))

Conclusão

O Bootstrap é uma técnica muito útil quando temos poucos dados ou quando não sabemos a distribuição exata da estatística de interesse. Apesar de não ser uma solução mágica para todos os problemas, trata-se de uma abordagem prática e flexível de melhorar nossas análises e ganhar mais confiança nos resultados.

Portanto, com o pacote Bootstrap.jl, conseguimos aplicar essa ideia de forma rápida em Julia, seja para calcular médias, proporções ou até intervalos de confiança de modelos de regressão (e coisas muito mais complexas).

Nota

Ferramentas de IA foram utilizadas para correção ortográfica e aprimoramento do texto.