2.5% 97.5% 0.9633408 11.1649572
Los métodos Monte Carlo y Bootstrap
En ocasiones observo que algunas personas no diferencian entre estos dos métodos estadísticos, así que veamos un ejemplo. Suponga que se quiere mostrar que para una muestra de tamaño n, digamos 10, extraída de una población normal de media 5 y desviación estándar 1.41, el intervalo de confianza para la media basado en el Bootstrap al 95% de confianza, realmente tiene una cobertura del 95%. Para esto veamos primero la construcción de un intervalo de confianza bootstrap al 95% de confianza para una muestra de tamaño 10:
# Primero generemos una muestra aleatoria de tamaño 10 en R:
> x = rnorm(10,5,1.41)
# Ahora calculamos la media muestral
> mediax = mean(x)
[1] 5.187179
# Luego, a partir de la muestra original x, extraemos 500 muestras con reemplazo del mismo tamaño
# (muestras bootstrap)
> muestras = replicate(500, sample(x,10,replace=T))
# Cada columna en "muestras" tiene una muestra bootstrap de "x" y con cada una calculamos la media muestral
> medbos = apply(muestras,2,mean)
# El método bootstrap percentil nos dice que un intervalo al 95% de confianza para la media se calcula
# a parti de los cuantiles 0.025 y 0.975 de las medias bootstrap:
> c(quantile(mdbos,0.975) , quantile(mdbos,0.975))
# También podemos ver la distribución bootstrap de la media muestral a partir de las muestras bootstrap
> plot(density(medbos))
Ahora bien, para demostrar que vía simulación de Monte Carlo que la cobertura de este tipo de intervalos es realmente del 95% debemos realizar el anterior procedimiento bootsrap un número grande de veces, 1000 por ejemplo, y calcular la probabilidad empírica de cobertura.
# Construyamos primero una función que realice todo el procedimiento boobstrap anteriormente descrito
> fboot = function(x,B=500){
muestras = replicate(B, sample(x,length(x),replace=T))
medbos = apply(muestras,2,mean)
c(quantile(medbos,0.025) , quantile(medbos,0.975))
}
# Ahora otra función que genera muestras x normales con media y desviación específicas y verifica
# si la media real está contenida en el intervalo
> fg = function(n,media,desv){
x = rnorm(n,media,desv)
IC = fboot(x,B=500)
(media>IC[1] & media<IC[2])
}
# Finalmente replicamos este último 1000 veces
> mont = replicate(1000, fg(10, 5, 1.41))
> prob_mont = mean(mont)
> prob_mont
[1] 0.875
# La probabilidad de cobertura para el intervalo bootstrap, bajo las condiciones específicas dadas,
# es realmente del 87.5% y no del 95%
Así, en el Bootstrap se toman muestras con reemplazo de la muestra original para obtener alguna estadística y realizar inferencias. El método Monte Carlo permite evaluar un método estadístico a partir de la extracción de muchas muestras de la población.
Para más aplicaciones del Bootstrap y el método Monte Carlo recomiendo:
- Shao y Tu (1995) The Jackknife and Bootstrap. Springer.
- Dagpunar, J.S. (2007) Simulation and Monte Carlo: with applications in finance and MCMC. John Wiley & Sons.
Comparte esto: