Vamos utilizar uma aplicação bastante simples de glm, com apenas n=15 observações, para ilustrar o uso de simulação (bootstrap não paramétrico) para estimar o viés e o erro padrão das estimativas, bem como obter intervalos de confiança para os parâmetros do modelo.

Vamos usar a função Boot do pacote car para realização das simulações. Antes de usar a função, vamos usar o R para fazer “na mão” um ou dois passos do algoritmo, para que você entenda o que é feito.

Passo 1

Entrada dos dados e ajuste de um MLG Poisson.

Variável explicativa.

Variável resposta, discreta com valores positivos. Vamos usar o modelo de Poisson.

## 
## Call:
## glm(formula = y ~ x, family = "poisson", data = dados)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.2083  -0.6926  -0.2858   0.7530   1.7735  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)   
## (Intercept)   0.3396     0.3501    0.97  0.33207   
## x             0.9196     0.2821    3.26  0.00111 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 29.385  on 14  degrees of freedom
## Residual deviance: 19.083  on 13  degrees of freedom
## AIC: 64.841
## 
## Number of Fisher Scoring iterations: 5

Observe as estimativas, os erros padrões assintóticos e os testes para as hipóteses de nulidade dos parâmetros do modelo.

## Waiting for profiling to be done...
##                  2.5 %    97.5 %
## (Intercept) -0.3778400 0.9982974
## x            0.3626389 1.4721078
##                  2.5 %   97.5 %
## (Intercept) -0.3465971 1.025746
## x            0.3667752 1.472423

Passo 2

Primeiros passos do bootstrap não paramétrico (à mão, para ilustração)

##  [1] 14 14 10  3  3 15  8  5 11  4 10  3  7 14 12

Armazenamos em indices os índices das observações que vão compor a primeira re-amostra. Observe que algumas observações vão aparecer mais de uma vez,outras não aparecerão na reamostra.

##        x  y
## 14   1.0  3
## 14.1 1.0  3
## 10   0.4  0
## 3    1.4  5
## 3.1  1.4  5
## 15   0.8  4
## 8    0.6  0
## 5    1.6 11
## 11   1.4  4
## 4    0.9  6
## 10.1 0.4  0
## 3.2  1.4  5
## 7    0.5  4
## 14.2 1.0  3
## 12   0.6  4

dadosb1 é a base de dados correspondente à primeira reamostra. Vamos ajustar o modelo de Poisson para essa primeira reamostra.

## (Intercept)           x 
##   0.3395743   0.9195993

Estimativas dos betas geradas pelo modelo ajustado com a amostra original…

## (Intercept)           x 
##  -0.1168241   1.3654160

Estimativas dos betas geradas pelo modelo ajustado

Com a primeira reamostra bootstrap. Você pode observar que as estimativas são diferentes daquelas obtidas no primeiro ajuste, o que já era de se esperar (a base é outra).

## 
## Call:
## glm(formula = y ~ x, family = "poisson", data = dadosb1)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.0093  -0.6521  -0.2664   0.9033   1.4959  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -0.1168     0.4432  -0.264 0.792072    
## x             1.3654     0.3641   3.750 0.000177 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 34.484  on 14  degrees of freedom
## Residual deviance: 19.211  on 13  degrees of freedom
## AIC: 63.6
## 
## Number of Fisher Scoring iterations: 5

Fazendo uma segunda vez:

##  [1] 12  9 10 15  2  3 14 12 13  3 10 13  6  9  1
##        x y
## 12   0.6 4
## 9    0.4 2
## 10   0.4 0
## 15   0.8 4
## 2    1.1 3
## 3    1.4 5
## 14   1.0 3
## 12.1 0.6 4
## 13   1.9 5
## 3.1  1.4 5
## 10.1 0.4 0
## 13.1 1.9 5
## 6    0.6 2
## 9.1  0.4 2
## 1    1.0 2

A base correspondente aos índices selecionados (nossa segunda reamostra).

## (Intercept)           x 
##   0.3720940   0.7289805

A ideia é repetir esses passos um grande número de vezes (gerando um grande número de estimativas) e estimar os parâmetros com base na distribuição das estimativas geradas pelas reamostras, conforme discutido em sala de aula. Fica como exercício para os alunos programar esse procedimento sem usar alguma função específica do R.

Passo 3

Vamos usar a função Boot, do pacote car, para a execução do bootstrap.

##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
## [1,]    1    1    1    0    2    1    0    0    3     1     1     0     1
## [2,]    0    0    2    1    2    2    0    0    3     1     2     0     0
## [3,]    1    1    0    1    1    2    0    2    0     2     1     2     2
## [4,]    1    1    0    2    2    0    0    2    1     0     2     2     0
## [5,]    1    1    2    1    0    1    1    1    2     0     1     1     1
## [6,]    3    1    0    1    0    0    1    0    2     3     1     1     1
##      [,14] [,15]
## [1,]     2     1
## [2,]     2     0
## [3,]     0     0
## [4,]     2     0
## [5,]     2     0
## [6,]     1     0

Com a função boot.array podemos verificar a composição (os índices)
em cada reamostra. Observar que cada linha se refere a uma reamostra.

## 
## Number of bootstrap replications R = 999 
##             original  bootBias  bootSE bootMed
## (Intercept)  0.33957 -0.078691 0.44947 0.31055
## x            0.91960  0.060629 0.39496 0.93700

Estimativas geradas pelo modelo inicial (com a base original); Estimativas bootstrap para o vício; Estimativas bootstrap para o erro padrão; Mediana das estimativas bootstrap. Comparar as duas últimas colunas com os resultados correspondentes no summary do modelo original.

##             Estimate Std. Error
## (Intercept)   0.3396     0.3501
## x             0.9196     0.2821
## Bootstrap bca confidence intervals
## 
##                  2.5 %   97.5 %
## (Intercept) -0.6575624 1.028130
## x            0.3161908 1.799637
## Bootstrap percent confidence intervals
## 
##                  2.5 %   97.5 %
## (Intercept) -0.7607477 1.006801
## x            0.3401830 1.845118
##                  2.5 %   97.5 %
## (Intercept) -0.3465971 1.025746
## x            0.3667752 1.472423

Intervalos de confiança usando bootstrap (de duas formas diferentes)
e os intervalos assintóticos. Repare que os intervalos assintóticos são, indevidamente, mais precisos.

Agora, usando Bootstrap para estimar a resposta esperada para x = 1,5. exp(beta0 + beta1 * 1,5).

## (Intercept)           x 
##   0.3395743   0.9195993
## Bootstrap percent confidence intervals
## 
##                2.5 %   97.5 %
## (Intercept) 3.921622 8.764966
##        1        1 
## 4.014595 7.752459

Exercício - Usar bootstrap para produzir inferências para o problema dos sinistros (estimar os erros padrões, calcular ICs). Comparar com os correspondentes resultados assintóticos.