Pkg.add("Bootstrap")
Pkg.add("Statistics")
using Bootstrap
using StatisticsReamostragem com o pacote Bootstrap.jl
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.
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:
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;ResidualSamplingeWildSampling: 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 DataFramesAgora, 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))
endbetas (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).
Ferramentas de IA foram utilizadas para correção ortográfica e aprimoramento do texto.