Esta confusión entre los procedimientos de arranque y los procedimientos de Monte Carlo sigue siendo recurrente, por lo que quizás este sea un lugar tan bueno como cualquier otro para abordarlo. (Los ejemplos de R
código también pueden ayudar con la tarea).
Considere esta implementación del bootstrap en R
:
boot <- function(x, t) { # Exact bootstrap of procedure t on data x
n <- length(x) # Must lie between 2 and 7 inclusive.
if (n > 7) {
stop("Sample size exceeds 7; use an approximate method instead.")
}
p <- c(n, 1:(n-1))
a <- rep(x, n^(n-1))
dim(a) <- rep(n, n)
y <- as.vector(a)
while (n > 1) {
n <- n-1
a <- aperm(a, p)
y <- cbind(as.vector(a), y)
}
apply(y, 1, t)
}
Un vistazo rápido confirmará que se trata de un cálculo determinista : no se generan ni utilizan valores aleatorios. (Dejaré los detalles de su funcionamiento interno para que los lectores interesados lo descubran por sí mismos).
Los argumentos para boot
son un lote de datos numéricos en la matriz x
y una referencia t
a una función (que se puede aplicar a las matrices exactamente como x
) para devolver un único valor numérico; en otras palabras, t
es una estadística . Genera todas las muestras posibles con reemplazo x
y se aplica t
a cada una de ellas, produciendo así un número para cada muestra: ese es el resumen en pocas palabras. El valor de retorno es una matriz que representa la distribución exacta de bootstrap de t
la muestra x
.
Como pequeño ejemplo , arranquemos la media de una muestra x
= c(1,3)
:
> boot(c(1,3), mean)
> [1] 1 2 2 3
2( 1 , 3 )( 1 , 1 )( 1 , 3 )( 3 , 1 )( 3 , 3 )boot
t
t
1223, respectivamente, como se muestra en la salida.
( 1 , 3 , 3 , 4 , 7 )
hist(boot(c(1,3,3,4,7), sd))
Ahora estamos preparados para hablar sobre la simulación de Monte Carlo.5 5
> set.seed(17)
> quantile(boot(runif(5, min=0, max=10), sd), .95)[1]
95%
3.835870
El resultado para esta muestra aleatoria particular es 3.83587. Esto es definitivo: si llamara boot
nuevamente con el mismo conjunto de datos, la respuesta sería exactamente la misma. Pero, ¿cómo podría cambiar la respuesta con diferentes muestras aleatorias? Descúbrelo repitiendo este proceso varias veces y dibujando un histograma de los resultados:
> boot.sd <- replicate(100, quantile(boot(runif(5, min=0, max=10), sd), .95)[1])
> hist(boot.sd)
0 01010 / 12--√≈ 2.887
> length(boot.sd[boot.sd >= 10/sqrt(12)]) / length(boot.sd)
[1] 0.75
¡Pero eso no se acerca al 95% nominal que especificamos (y esperábamos)! Este es un valor de la simulación: compara nuestras esperanzas con lo que realmente está sucediendo. (¿Por qué la discrepancia? Creo que es porque el arranque de una SD no funciona bien con muestras realmente pequeñas).
revisión
Las estadísticas de Bootstrap son conceptualmente iguales a cualquier otra estadística, como una desviación estándar o media; solo tienden a tomar mucho tiempo para calcular. (¡Vea el mensaje de advertencia en el boot
código!)
La simulación de Monte-Carlo puede ser útil para estudiar cómo varía la estadística de bootstrap debido a la aleatoriedad en la obtención de muestras. La variación observada en dicha simulación se debe a la variación en las muestras, no a la variación en el bootstrap.
nortenortenorte