Bootstrap, Monte Carlo

12

Me han hecho la siguiente pregunta como parte de la tarea:

Diseñe e implemente un estudio de simulación para examinar el rendimiento del bootstrap para obtener intervalos de confianza del 95% en la media de una muestra univariada de datos. Su implementación puede ser en R o SAS.

Los aspectos de rendimiento que puede considerar son la cobertura del intervalo de confianza (es decir, qué proporción de veces el intervalo de confianza contiene la media real) y la variación de Monte Carlo (es decir, cuánto varían los límites de confianza superior e inferior entre simulaciones) '

¿Alguien sabe cómo abordar el aspecto de variación de Monte Carlo de esto? Parece que ni siquiera puedo resolver un algoritmo ni nada. ¿Tiene que ver con la integración de Monte Carlo? ¡Gracias!

Sarah
fuente

Respuestas:

18

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 Rcó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 xy una referencia ta una función (que se puede aplicar a las matrices exactamente como x) para devolver un único valor numérico; en otras palabras, tes una estadística . Genera todas las muestras posibles con reemplazo xy se aplica ta 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 tla 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)boottt1223, respectivamente, como se muestra en la salida.

(1,3,3,4,7)

hist(boot(c(1,3,3,4,7), sd))

Histograma de la SD

Ahora estamos preparados para hablar sobre la simulación de Monte Carlo.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 bootnuevamente 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)

Histograma de simulaciones.

01010/122.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 bootcó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.

  • nnn

whuber
fuente
+1 Esto es muy bueno. ¡No creo que podría haberlo hecho mejor! Solo agregaría que tengo algunos documentos sobre el rendimiento del bootstrap en la estimación de la tasa de error y los intervalos de confianza al estimar las variaciones. Estos resultados se pueden encontrar en la segunda edición de mi libro de métodos de bootstrap y mi libro sobre bootstrapping con aplicaciones para R.
Michael R. Chernick
Los enlaces de Amazon a los libros están aquí: amazon.com/… amazon.com/Introduction-Bootstrap-Methods-Applications/dp/…
Michael R. Chernick
Solo diría que la idea es simular datos de distribuciones conocidas aplicando el procedimiento de arranque de interés (por ejemplo, intervalos de confianza para un parámetro o estimación de la tasa de error de un clasificador) y puede evaluar qué tan bien funciona porque sabe la verdad.
Michael R. Chernick
5

El bootstrap es una técnica de Monte Carlo, ya que implica algún tipo de muestreo aleatorio. Si ejecuta el programa de arranque dos veces en el mismo conjunto de datos, obtendrá diferentes respuestas. Cuantas más muestras uses en tu bootstrap, menos variación obtendrás.

La cobertura se refiere a la variación de los resultados en diferentes conjuntos de datos de la misma distribución de muestreo hipotética.

Simon Byrne
fuente
gracias, supongo que solo significa crear un código para ver si los límites de confianza varían entre las simulaciones.
Sarah
77
Para ser precisos (¿pedante?), Debemos aclarar que el bootstrap no es per se una técnica de Monte Carlo. Sin embargo, generalmente se aproxima utilizando la simulación de Monte Carlo, ya que a menudo no es manejable calcular las cantidades particulares de interés. ¡También encuentro que la redacción del problema es muy propensa a malas interpretaciones! Hay que tener cuidado de distinguir el error de muestreo del error de aproximación de Monte Carlo . Este último solo se estima de manera sensata repitiendo la aproximación de arranque MC muchas veces en la misma muestra, como usted señala. :)
cardenal
1

Tampoco estoy seguro de qué se entiende exactamente por " variación de Monte Carlo " per se. Ciertamente, debería ser posible observar cuánta variación hay entre las iteraciones en cosas como el valor del límite superior (o inferior), por ejemplo (pista). ¿Quizás solo quieren que hagas esto por el Monte Carlo, y no por el bootstrap? Sin embargo, ese no es un requisito que tendría para un ejercicio. Puede ser mejor preguntar qué significa esa frase.

gung - Restablece a Monica
fuente
¡Gracias por tu ayuda! Tal vez solo miraré la variación entre los límites superior e inferior por ahora y preguntaré sobre Monte Carlo más adelante. Ahora solo para averiguar cómo hago eso ...
Sarah
Hay varias posibilidades aquí. Uno es superior-inferior (es decir, la diferencia). Mi interpretación de la redacción en la pregunta es la variación en la parte superior y la variación en la parte inferior (es decir, 2 variaciones diferentes), pero supongo que no puedo estar seguro. En una nota diferente, ¿es parte de su pregunta cómo realizar la simulación de MC en R?
gung - Restablece a Monica
Llegué a la conclusión de que también estaba buscando 2 variaciones diferentes, ¡así que creo que lo intentaré!
Sarah
1
Bien, lo que me pregunto ahora es, ¿estás listo para llegar a este punto, o necesitas pistas adicionales sobre cómo abordar lo que supusimos que está preguntando?
gung - Restablece a Monica
1
Entonces, en cada iteración, ¿está almacenando los límites superior e inferior (pista)?
gung - Restablece a Monica
1

Entiendo que esta tarea es que te está pidiendo que hagas una simulación de Monte Carlo para una determinada técnica estadística. Es decir, simula un conjunto de conjuntos de datos aleatorios, aplica esta técnica a estos conjuntos de datos y almacena los números para resumirlos más tarde de manera conveniente (medias, probabilidades simuladas, etc.)

Ahora, la técnica en cuestión es la rutina de arranque, que implica la simulación de Monte Carlo dentro de ella (a menos que, como lo demostró Whuber, se le pida que realice la rutina de arranque exacta, lo cual es muy poco probable). Entonces, como resultados de sus simulaciones, puede estar almacenando la media de la muestra, la desviación estándar de la muestra y los límites del intervalo de confianza para la media obtenida por el bootstrap.

n=10

StasK
fuente
3
Una cosa que aprendí al trabajar con el bootstrap exacto es que el CI estándar de teoría normal a menudo funcionará mucho mejor con muestras pequeñas, incluso cuando están sesgadas. El bootstrap se destaca con grandes muestras: la teoría es asintótica, no exacta.
whuber
2
@whuber, esa es una observación interesante. Usualmente enfatizo la naturaleza asintótica del bootstrap (vea el libro The Bootstrap and Edgeworth Expansions de Peter Hall para entender por qué), pero esta vez no lo hice.
StasK