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 rowsLa 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
bootestá 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
bootstrapcontiene 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.