Tengo la siguiente pregunta para un curso en el que estoy trabajando:
Realice un estudio de Monte Carlo para estimar las probabilidades de cobertura del intervalo de confianza de arranque normal estándar y el intervalo de confianza de arranque básico. Muestra de una población normal y verifique las tasas de cobertura empírica para la media muestral.
Las probabilidades de cobertura para el CI de arranque normal estándar son fáciles:
n = 1000;
alpha = c(0.025, 0.975);
x = rnorm(n, 0, 1);
mu = mean(x);
sqrt.n = sqrt(n);
LNorm = numeric(B);
UNorm = numeric(B);
for(j in 1:B)
{
smpl = x[sample(1:n, size = n, replace = TRUE)];
xbar = mean(smpl);
s = sd(smpl);
LNorm[j] = xbar + qnorm(alpha[1]) * (s / sqrt.n);
UNorm[j] = xbar + qnorm(alpha[2]) * (s / sqrt.n);
}
mean(LNorm < 0 & UNorm > 0); # Approximates to 0.95
# NOTE: it is not good enough to look at overall coverage
# Must compute separately for each tail
Por lo que me han enseñado para este curso, el intervalo de confianza básico de arranque se puede calcular así:
# Using x from previous...
R = boot(data = x, R=1000, statistic = function(x, i){ mean(x[i]); });
result = 2 * mu - quantile(R$t, alpha, type=1);
Eso tiene sentido. Lo que no entiendo es cómo calcular las probabilidades de cobertura para el CI básico de arranque. Entiendo que la probabilidad de cobertura representaría la cantidad de veces que el IC contiene el valor verdadero (en este caso mu
). ¿Simplemente ejecuto la boot
función muchas veces?
¿Cómo puedo abordar esta pregunta de manera diferente?
fuente
size=100
Eres un error tipográfico? No creo que esté obteniendo los límites superior e inferior correctos ya que el tamaño de muestra implícito parece ser 1000 cuando calcula sus CI en el ciclo (ya que los usasqrt.n
en el cálculo). Además, ¿por qué se comparamu
y no 0 directamente (siendo esta última la verdadera media)?smpl = x[sample(1:n, size = 100, replace = TRUE)];
se puede simplificar asmpl = sample(x, size=100, replace=TRUE)
.mu
0. El CI normal funciona bien, es el CI básico de arranque con el que tengo dificultades.Respuestas:
La terminología probablemente no se usa de manera consistente, por lo que lo siguiente es solo cómo entiendo la pregunta original. Según tengo entendido, los CI normales que calculó no son lo que se le pidió. Cada conjunto de réplicas de arranque le brinda un intervalo de confianza, no muchos. La forma de calcular diferentes tipos de CI a partir de los resultados de un conjunto de réplicas de arranque es la siguiente:
Como quiero comparar los cálculos con los resultados del paqueteM⋆ μ S2⋆M σ2M t
boot
, primero defino una función que se llamará para cada réplica. Sus argumentos son la muestra original y un vector índice que especifica los casos para una sola réplica. Devuelve , la estimación del complemento para , así como , la estimación del complemento para la varianza de la media . Esto último solo será necesario para el bootstrap -CI. μ S 2 ⋆ M σ 2 M tSin usar el paquete
boot
, simplemente puede usarreplicate()
para obtener un conjunto de réplicas de arranque.Pero sigamos con los resultados
boot.ci()
para tener una referencia.El básico, el percentil y el -CI dependen de la distribución empírica de las estimaciones de arranque. Para obtener los cuantiles y , encontramos los índices correspondientes al vector ordenado de las estimaciones de bootstrap (tenga en cuenta que hará una interpolación más complicada para encontrar los cuantiles empíricos cuando los índices no son números naturales) .α / 2 1 - α / 2t α/2 1−α/2
boot.ci()
Para el -CI, necesitamos las estimaciones de arranque para calcular los valores críticos . Para el CI normal estándar, el valor crítico será solo el valor de la distribución normal estándar.t ⋆ t zt t⋆ t z
Para estimar las probabilidades de cobertura de estos tipos de CI, deberá ejecutar esta simulación muchas veces. Simplemente envuelva el código en una función, devuelva una lista con los resultados de CI y ejecútelo
replicate()
como se muestra en este resumen .fuente
computeCIs
y llaméresults = replicate(500, computeCIs());
. Al finalcomputeCIs
vuelvec(ciBasic, ciPerc)
. Para probar las probabilidades de cobertura, ¿no debería probar paramean(results[1, ] < 0 & results[2, ] > 0)
probar todos los IC básicos que contienen la media real (la probabilidad de cobertura)? Cuando ejecuto esto, me sale1
cuando creo que debería hacerlo0.95
.pastebin.com/qKpNKK0D
está roto. Agradecería si lo actualiza y proporciona la función completa y la simulación completa. Gracias