6.5 Bootstrap en R
Es común crear nuestras propias funciones cuando usamos bootstrap, sin embargo, en R también hay alternativas que pueden resultar convenientes, mencionamos 3:
- El paquete
rsample
(forma parte de la colección tidymodels) y tiene una funciónbootsrtraps()
que regresa un arreglo cuadrangular (tibble
,data.frame
) que incluye una columna con las muestras bootstrap y un identificador del número y tipo de muestra.
Veamos un ejemplo donde seleccionamos muestras del conjunto de datos
muestra_computos
que contiene 10,000 observaciones.
library(rsample)
library(estcomp)
muestra_computos <- sample_n(election_2012, 10000)
muestra_computos
#> # A tibble: 10,000 x 23
#> state_code state_name state_abbr district_loc_17 district_fed_17 polling_id
#> <chr> <chr> <chr> <int> <int> <int>
#> 1 27 Tabasco TAB 5 5 120510
#> 2 15 México MEX 32 24 70680
#> 3 09 Ciudad de… CDMX 20 17 29697
#> 4 21 Puebla PUE 16 12 102052
#> 5 12 Guerrero GRO 17 1 43875
#> 6 30 Veracruz VER 8 7 131313
#> 7 11 Guanajuato GTO 18 7 42010
#> 8 12 Guerrero GRO 4 4 45915
#> 9 30 Veracruz VER 25 19 137278
#> 10 15 México MEX 29 15 66959
#> # … with 9,990 more rows, and 17 more variables: section <int>, region <chr>,
#> # polling_type <chr>, section_type <chr>, pri_pvem <int>, pan <int>,
#> # panal <int>, prd_pt_mc <int>, otros <int>, total <int>, nominal_list <int>,
#> # pri_pvem_pct <dbl>, pan_pct <dbl>, panal_pct <dbl>, prd_pt_mc_pct <dbl>,
#> # otros_pct <dbl>, winner <chr>
Generamos 100 muestras bootstrap, y la función nos regresa un arreglo con 100 renglones, cada uno corresponde a una muestra bootstrap.
set.seed(839287482)
computos_boot <- bootstraps(muestra_computos, times = 100)
computos_boot
#> # Bootstrap sampling
#> # A tibble: 100 x 2
#> splits id
#> <list> <chr>
#> 1 <split [10K/3.6K]> Bootstrap001
#> 2 <split [10K/3.6K]> Bootstrap002
#> 3 <split [10K/3.7K]> Bootstrap003
#> 4 <split [10K/3.7K]> Bootstrap004
#> 5 <split [10K/3.7K]> Bootstrap005
#> 6 <split [10K/3.7K]> Bootstrap006
#> 7 <split [10K/3.7K]> Bootstrap007
#> 8 <split [10K/3.7K]> Bootstrap008
#> 9 <split [10K/3.6K]> Bootstrap009
#> 10 <split [10K/3.7K]> Bootstrap010
#> # … with 90 more rows
La columna splits
tiene información de las muestras seleccionadas, para la
primera vemos que de 10,000 observaciones en la muestra original la primera
muestra bootstrap contiene 10000-3647=6353.
Y podemos obtener los datos de la muestra bootstrap con la función
as.data.frame()
as.data.frame(first_computos_boot)
#> # A tibble: 10,000 x 23
#> state_code state_name state_abbr district_loc_17 district_fed_17 polling_id
#> <chr> <chr> <chr> <int> <int> <int>
#> 1 01 Aguascali… AGS 18 3 1308
#> 2 15 México MEX 17 18 68217
#> 3 02 Baja Cali… BC 10 6 4504
#> 4 16 Michoacán MICH 8 2 78876
#> 5 09 Ciudad de… CDMX 7 9 24951
#> 6 05 Coahuila COAH 15 7 10402
#> 7 26 Sonora SON 20 7 119582
#> 8 09 Ciudad de… CDMX 4 2 23677
#> 9 30 Veracruz VER 14 12 133755
#> 10 30 Veracruz VER 24 19 136925
#> # … with 9,990 more rows, and 17 more variables: section <int>, region <chr>,
#> # polling_type <chr>, section_type <chr>, pri_pvem <int>, pan <int>,
#> # panal <int>, prd_pt_mc <int>, otros <int>, total <int>, nominal_list <int>,
#> # pri_pvem_pct <dbl>, pan_pct <dbl>, panal_pct <dbl>, prd_pt_mc_pct <dbl>,
#> # otros_pct <dbl>, winner <chr>
Una de las principales ventajas de usar este paquete es que es eficiente en el uso de memoria.
library(pryr)
#> Registered S3 method overwritten by 'pryr':
#> method from
#> print.bytes Rcpp
#>
#> Attaching package: 'pryr'
#> The following objects are masked from 'package:purrr':
#>
#> compose, partial
object_size(muestra_computos)
#> 1.41 MB
object_size(computos_boot)
#> 5.49 MB
# tamaño por muestra
object_size(computos_boot)/nrow(computos_boot)
#> 54.9 kB
# el incremento en tamaño es << 100
as.numeric(object_size(computos_boot)/object_size(muestra_computos))
#> [1] 3.894717
- El paquete
boot
está asociado al libro Bootstrap Methods and Their Applications (Davison and Hinkley (1997)) y tiene, entre otras, funciones para calcular replicaciones bootstrap y para construir intervalos de confianza usando bootstrap:- calculo de replicaciones bootstrap con la función
boot()
, - intervalos normales, de percentiles y \(BC_a\) con la función
boot.ci()
, - intevalos ABC con la función `abc.ci().
- calculo de replicaciones bootstrap con la función
- El paquete
bootstrap
contiene datos usados en Efron and Tibshirani (1993), y la implementación de funciones para calcular replicaciones y construir intervalos de confianza:- calculo de replicaciones bootstrap con la función
bootstrap()
, - intervalos \(BC_a\) con la función
bcanon()
, - intevalos ABC con la función `abcnon().
- calculo de replicaciones bootstrap con la función
Referencias
Davison, A. C., and D. V. Hinkley. 1997. Bootstrap Methods and Their Applications. Cambridge: Cambridge University Press. http://statwww.epfl.ch/davison/BMA/.
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.