Sección 6 Bootstrap no paramétrico

Bootstrap: to pull oneself up by one’s bootstrap

Estas notas se desarrollaron con base en Efron and Tibshirani (1993), adicionalmente se usaron ideas de Hesterberg (2015). Abordamos los siguientes temas:

  • Muestras aleatorias
  • El principio del plug-in
  • Bootstrap no paramétrico
  • Ejemplos: componentes principales, ajuste de curvas, muestreo.

Ejemplo: aspirina y ataques cardiacos

Como explican Efron y Tibshirani, las explicaciones del bootstrap y otros métodos computacionales involucran las ideas de inferencia estadistica tradicional. Las ideas báscias no han cambiado pero la implementación de estas sí.

Los tres conceptos básicos de estadística son:

  1. Recolección de datos,

  2. resúmenes (o descriptivos) de datos y

  3. inferencia.

Veamos un ejemplo de estos conceptos y como se introduce bootstrap. Usaremos datos de un estudio clínico de consumo de aspirina y ataques cardiacos cuyos resultados fueron publicados en el New York Times:

Planteamiento: se diseñó un estudio para investigar si el consumo de dosis bajas de aspirina podía prevenir los ataques cardiacos en hombres sanos en edad media.

Recolección de datos: Se hizo un diseño controlado, aleatorizado y doblemente ciego. La mitad de los participantes recibieron aspirina y la otra mitad un placebo.

Descriptivos: Las estadísticas descriptivas del artículo son muy sencillas:

grupo ataques cardiacos sujetos
aspirina 104 11037
placebo 189 11034

De manera que la estimación del cociente de las tasas es \[\hat{\theta}=\frac{104/11037}{189/11034} = 0.55\] En la muestra los individuos que toman aspirina tienen únicamente 55% de los ataques que los que toman placebo. Sin embargo, lo que realmente nos interesa es \(\theta\): el cociente de tasas que observaríamos si pudieramos tratar a todos los hombres y no únicamente a una muestra.

Inferencia: aquí es donde recurrimos a inferencia estadística:

\[0.43 < \theta < 0.70\] El verdadero valor de \(\theta\) esta en el intervalo \((0.43,0.70)\) con una confianza del 95%.

Ahora, el bootstrap es un método de simulación basado en datos para inferencia estadística. La idea detrás es que si una muestra es una aproximación de la población que la generó, entoces podemos hacer muestreos de la muestra para calcular una estadística de interés y medir la exactitud en la misma.

En este caso tenemos los resultados del experimento en la variable trial.

trial <- data_frame(patient = 1:22071, 
  group = ifelse(patient <= 11037, "aspirin", "control"), 
  heart_attack = c(rep(TRUE, 104), rep(FALSE, 10933), rep(TRUE, 189), 
      rep(FALSE, 10845)))
trial
#> # A tibble: 22,071 x 3
#>    patient group   heart_attack
#>      <int> <chr>   <lgl>       
#>  1       1 aspirin TRUE        
#>  2       2 aspirin TRUE        
#>  3       3 aspirin TRUE        
#>  4       4 aspirin TRUE        
#>  5       5 aspirin TRUE        
#>  6       6 aspirin TRUE        
#>  7       7 aspirin TRUE        
#>  8       8 aspirin TRUE        
#>  9       9 aspirin TRUE        
#> 10      10 aspirin TRUE        
#> # ... with 22,061 more rows

Y calculamos el cociente de las tasas:

summ_stats <- trial %>% 
  group_by(group) %>%
  summarise(
    n_attacks = sum(heart_attack), 
    n_subjects = n(),
    rate_attacks = n_attacks / n_subjects * 100
  )
summ_stats
#> # A tibble: 2 x 4
#>   group   n_attacks n_subjects rate_attacks
#>   <chr>       <int>      <int>        <dbl>
#> 1 aspirin       104      11037        0.942
#> 2 control       189      11034        1.71

ratio_rates <- summ_stats$rate_attacks[1] / summ_stats$rate_attacks[2]

Después calculamos 1000 replicaciones bootstrap de \(\hat{\theta*}\)

boot_ratio_rates <- function(){
  boot_sample <- trial %>%
    group_by(group) %>%
    sample_frac(replace = TRUE)
  rates <- boot_sample %>% 
      summarise(rate_attacks = sum(heart_attack) / n()) %>%
      pull(rate_attacks)
  rates[1] / rates[2]
} 

boot_ratio_rates <- rerun(1000, boot_ratio_rates()) %>% 
  map_dbl(~.x)

Las replicaciones se pueden utilizar para hacer inferencia de los datos. Por ejemplo, podemos estimar el error estándar de \(\theta\):

se <- sd(boot_ratio_rates)
comma(se)
#> [1] "0.068"

Referencias

Efron, Bradley, and Robert J. Tibshirani. 1993. An Introduction to the Bootstrap. Monographs on Statistics and Applied Probability 57. Boca Raton, Florida, USA: Chapman & Hall/CRC.

Hesterberg, Tim C. 2015. “What Teachers Should Know About the Bootstrap: Resampling in the Undergraduate Statistics Curriculum.” The American Statistician 69 (4). Taylor & Francis:371–86. https://doi.org/10.1080/00031305.2015.1089789.