Bootstrapping o morir en el intento?

Bootstrapping o morir en el intento?

Juan M. Gutierrez

Esta tecnica puede resultar controversial dado que es una forma (de las muchas que hay) de hallar "cosas" mediante iteraciones finitas (por no decir infinitas). Me estoy refiriendo a las tecnicas de muestreo aleatorio con reemplazamiento hasta encontrar aquellas propiedades que satisfagan una necesidad estadistica.

El ejemplo mas recurrente es ejecutar una regresion (cualquier tipo) y encontrar que los residuos no estan distribuidos normalmente, ni son homogeneos, o que esta violando cualquier otro supuesto asintotico. Naturalmente, quieres ejecutar un analisis parametrico... pero los resultados no son estadisticamente significativos, entonces como?

El metodo Bootstrap

El metodo que describo es el Bootstrap, un termino acunado por su creador al referirse a aplastar o manipular de forma grosera los datos hasta conseguir que cumplan los supuestos estadisticos que tratamos de cumplir (torturar los datos hasta que te digan lo que quieres).

Recordemos que por ejemplo en una regresion lineal por MCO, los coeficientes se han encontrado por la matriz (XX)1(XY)(X'X)^{-1}(X'Y) y recordaran que usaremos las medias y especialmente las varianzas para hallar la matriz de varianzas y covarianzas del modelo, sumamente utiles para hallar posteriormente las pruebas tt de significatividad individual. He aqui el kit de la cuestion.

Algunos recordaran por sus clases de estadistica inferencial o econometria aplicada que los errores estandar (SE) de los β^\hat{\beta} nos ayudan a construir el estadistico tt. Si falla y no son significativos es uno (de muchos problemas) y existen algoritmos que "vuelven a calcular" los SE, como el conocido metodo de los errores robustos de White. El Bootstrap es otro algoritmo mas potente que usa la fuerza bruta a traves de un numero elevado de repeticiones de muestras aleatorias que hallen esos nuevos valores y cumplan los supuestos esperados.

Formula del Bootstrap

Implementacion en R

En R (mi programa favorito) se puede conseguir ese efecto con un script asi de sencillito:

set.seed(4444)

bstar = NULL  # Las filas de bstar seran vectores de los coeficientes de regresion

n = length(kpl)
B = 1000

for (draw in 1:B) {
  # Muestra aleatoria de las filas de [variable], con reemplazo
  Dstar = datta[sample(1:n, size = n, replace = T), ]
  model = lm([Var_Dependiente] ~ [lista_de_variables_independientes], data = dataset)
  bstar = rbind(bstar, coef(model))
}

# Ver las primeras 5 filas de bstar
bstar[1:5, ]

El procedimiento es directo:

  1. Fijar la semilla con set.seed() para reproducibilidad.
  2. Definir el numero de iteraciones B=1000B = 1000 (o mas, segun la necesidad).
  3. En cada iteracion: extraer una muestra aleatoria con reemplazamiento del dataset original, ajustar el modelo de regresion, y almacenar los coeficientes.
  4. Resultado: una matriz bstar con BB filas, donde cada fila contiene un vector de coeficientes estimados por bootstrap.

Con esta matriz se pueden calcular los errores estandar bootstrap como la desviacion estandar de cada columna, y construir intervalos de confianza basados en los percentiles de la distribucion bootstrap.

Un saludo a tod@s y buen forecast!!

🚀Comparte este artículo

Math Chaos Texture
🎓

¿Te gustó este contenido?

Obtén certificados verificables en Python, Data Science y Machine Learning.

Ver Certificaciones Disponibles →