¿Qué es el bootstrap?

Una vez tuve que explicar el bootstrap en un lugar en el que se estudiaban problemas de ingeniería hidráulica. Antes de llegar al aula atravesé una sala en la que se exponían diversas maquetas de diques, represas y esclusas. Parece ser que estas maquetas podrían ser utiles para simular a pequeña escala algunos de los fenómenos que la ingeniería tenía que resolver… y en ese momento pensé que el bootstrap es una metodología estadística que hace algo parecido. En esta entrada trato de explicarlo.

La varianza de la varianza

La varianza de un estimador determina su precisión. Si la varianza del estimador es grande obtendremos estimaciones muy diferentes para cada muestra, y entonces no es muy fiable el valor obtenido para una muestra concreta. El problema es que para aproximar la varianza de un estimador (que depende de cómo varía si lo calculamos para muchas muestras diferentes) nos tenemos que apañar con una sola muestra, la única que tenemos.

Para concretar un poco, supongamos que estamos interesados en estimar la varianza de una población \sigma^2 a partir de una muestra de n datos. Para ello, calculamos la varianza muestral S^2 de los datos. Supuestamente S^2\approx \sigma^2 con alta probabilidad, pero esto solo es así si \mbox{Var}(S^2) es pequeña. Para no liarnos, tenemos tres varianzas que son distintas:

  • La varianza de la población completa, \sigma^2.
  • La varianza muestral S^2 con la que queremos aproximar \sigma^2 a partir de los datos disponibles.
  • La varianza de la varianza muestral \mbox{Var}(S^2) que mide si son o no muy diferentes los valores de S^2 obtenidos a partir de distintas muestras. Por ejemplo, si \mbox{Var}(S^2)\approx 0, entonces S^2 valdría más o menos lo mismo para todas las muestras. Esto podría ocurrir si las muestras son muy grandes, o si la población es muy homogénea.

La pregunta es entonces, ¿cómo podemos aproximar la varianza de la varianza muestral, \mbox{Var}(S^2), a partir de la única muestra que tenemos? El bootstrap contesta a esta pregunta combinando una aproximación muy sencilla con un procedimiento de simulación.

Aproximando la varianza usando datos simulados

Si la distribución de la que proceden los datos fuese conocida podríamos usar un esquema de simulación para aproximar el valor de \mbox{Var}(S^2). Bastaría obtener un número grande de muestras (digamos 2000), calcular S^2 para cada una de ellas y finalmente calcular la varianza de los 2000 valores obtenidos. Por ejemplo, si la población es una normal estándar y consideramos muestras de tamaño n = 100, el cálculo sería así:

set.seed(100)
n <- 100 # tamaño muestral
B <- 2000 # número de muestras
S2 <- replicate(B, var(rnorm(n)))  # simulación  
var(S2)

El valor resultante es 0.021. [En este caso no hace falta simular nada ya que se sabe que en una población normal estándar, (n-1)S^2 tiene distribución \chi^2_{n-1}, de donde \mbox{Var}(S^2) = 2/(n-1)=2/99 \approx 0.02. Sin embargo, la simulación ha permitido dar una aproximación sin saber nada sobre la teoría del muestreo en poblaciones normales.]

El mundo bootstrap: una maqueta de la realidad

El problema con el cálculo anterior es que la realidad -es decir, la población de la que proceden los datos- no es conocida. Nosotros tenemos una muestra, pero no sabemos que esa muestra viene de una distribución normal estándar, así que no sabemos de qué distribución tenemos que simular los datos. En la línea #simulación del código anterior no sabemos que el comando rnorm() es el apropiado.

¿Cuál es la solución que propone el bootstrap? Sustituir la realidad por una maqueta de la realidad que se parece a ella. En lugar de usar la verdadera distribución se usa una distribución que asigna probabilidad 1/n a cada dato muestral. Como no conocemos la población, actuamos como si la muestra fuese la población. Con el siguiente código simulamos una muestra de una normal estándar, calculamos la correspondiente maqueta (que técnicamente se llama la distribución empírica) y la representamos (en ggplot2) junto con la verdadera distribución:

muestra <- rnorm(n)
datos <- data.frame(x =muestra)
ggplot(datos, aes(x)) +
  stat_ecdf() + 
  geom_function(fun = 'pnorm', xlim = c(-3,3), col = 'blue')

El resultado es el siguiente:

La línea escalonada negra es la probabilidad acumulada (la función de distribución) de asignar probabilidad 1/100 a cada dato mientras que la línea azul es la probabilidad acumulada de la distribución normal estándar (desconocida en la realidad). En nuestra simulación vamos a extraer las muestras de la distribución negra (que sí conocemos a partir de los datos) en lugar de la azul. Estamos construyendo nuestra maqueta de la población con los 100 datos muestrales.

Simulando en el mundo bootstrap

Ahora basta modificar la línea de #simulación en el código inicial. En lugar de rnorm() usamos sample() aplicado a la muestra disponible (que se generó en la primera línea del bloque de código anterior):

S2 <- replicate(B, var(sample(muestra, rep = TRUE)))  
var(valores_S2)

El valor obtenido es 0.018. Es importante notar que este valor, similar al verdadero (0.02), se ha obtenido sin usar que la muestra x procedía de una normal estándar y sin usar ninguna fórmula o teorema. Ha bastado sustituir la distribución verdadera por una aproximación muestral (lo que hemos llamado la maqueta) y luego obtener muestras de la aproximación. Este último paso es lo mismo que muestrear con reemplazamiento entre los datos muestrales. Es como si escribiéramos los valores muestrales en bolitas y las metiéramos en un bombo y entonces sacáramos bolitas con reemplazamiento. Esto es lo que se llama remuestrear y es lo que hace el comando sample() en el código anterior.

Si nos fijamos en las típicas muñecas rusas que ilustran esta entrada, podemos pensar que la muñeca más grande es la población y la siguiente la muestra. Como la población es desconocida, estamos usando la segunda muñeca como si fuera la población y sacando muestras de ella (las remuestras) que corresponderían a la tercera muñeca.

Bradley Efron

El bootstrap fue propuesto por el estadístico norteamericano Bradley Efron en 1979 en un famoso artículo que está considerado como uno de los avances más importantes de la estadística de finales del siglo XX (más de 20.000 citas según Google Académico).

La palabra bootstrap alude a una de las aventuras del Barón de Münchausen, escritas en el siglo XVIII por R. E. Raspe, según la cual el Barón cayó a las aguas de un lago y consiguió salir tirando de los cordones de sus botas (de donde procede la expresión en inglés to pull oneself up by one’s own bootstrap), o de su coleta en otras versiones.

El barón saliendo del lago.
(Foto: Axel Hindemith  /  Licencia: 
Creative Commons CC-by-sa-3.0 de)

La historia del barón transmite la idea de que con el bootstrap, sin apoyo externo o hipótesis adicionales, es posible usar los datos para obtener información sobre los propios datos. Sin embargo, en última instancia, la garantía de que el método funcione es que la maqueta se parezca a la población (lo que solo ocurrirá si tenemos una muestra suficientemente grande) y que el estadístico de interés tenga ciertas propiedades de continuidad, para que pequeños cambios en la población no produzcan grandes cambios en el estimador. Para aplicar el método bootstrap no hacen falta muchos conocimientos matemáticos pero si queremos determinar con precisión cuándo funciona y cuándo no las matemáticas son imprescindibles. Esto me parece una característica de los métodos estadísticos actuales: por su naturaleza algorítmica son fáciles de aplicar, pero entenderlos bien requiere bastante trabajo matemático.

Una introducción un poco más avanzada del bootstrap y de otros métodos que usan simulación y computación intensiva como parte de la inferencia estadística se puede encontrar en Berrendero (2015).

Referencia

Berrendero, J.R. (2015). Simulación e inferencia estadística. La Gaceta de la RSME18, 45-65.

Coda

Esta entrada participa en la Edición 12.2: Carl Friedrich Gauss del Carnaval de Matemáticas, que en esta ocasión organiza Gaussianos.

Un comentario sobre “¿Qué es el bootstrap?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s