¿Por qué mi intervalo de arranque tiene una cobertura terrible?

29

Quería hacer una demostración de clase donde comparo un intervalo t con un intervalo de arranque y calculo la probabilidad de cobertura de ambos. Quería que los datos provengan de una distribución sesgada, así que elegí generar los datos como exp(rnorm(10, 0, 2)) + 1, una muestra de tamaño 10 de un lognormal desplazado. Escribí un script para dibujar 1000 muestras y, para cada muestra, calcular un intervalo t del 95% y un intervalo de percentil de arranque del 95% basado en 1000 repeticiones.

Cuando ejecuto el script, ambos métodos dan intervalos muy similares y ambos tienen una probabilidad de cobertura del 50-60%. Me sorprendió porque pensé que el intervalo de arranque sería mejor.

Mi pregunta es si tengo

  • cometió un error en el código?
  • cometió un error al calcular los intervalos?
  • cometió un error al esperar que el intervalo de arranque tenga mejores propiedades de cobertura?

Además, ¿hay alguna manera de construir un IC más confiable en esta situación?

 tCI.total <- 0
 bootCI.total <- 0
 m <- 10 # sample size
 true.mean <- exp(2) + 1

for (i in 1:1000){
 samp <- exp(rnorm(m,0,2)) + 1
 tCI <- mean(samp) + c(1,-1)*qt(0.025,df=9)*sd(samp)/sqrt(10)

 boot.means <- rep(0,1000)
 for (j in 1:1000) boot.means[j] <- mean(sample(samp,m,replace=T))
 bootCI <- sort(boot.means)[c(0.025*length(boot.means), 0.975*length(boot.means))]

 if (true.mean > min(tCI) & true.mean < max(tCI)) tCI.total <- tCI.total + 1
 if (true.mean > min(bootCI) & true.mean < max(bootCI)) bootCI.total <- bootCI.total + 1 
}
tCI.total/1000     # estimate of t interval coverage probability
bootCI.total/1000  # estimate of bootstrap interval coverage probability
Flounderer
fuente
3
Las personas a menudo olvidan otro uso del bootstrap: para identificar y corregir sesgos . Sospecho que si incluyera una corrección de sesgo dentro de su rutina de arranque, podría obtener un rendimiento mucho mejor del CI.
whuber
@whuber: buen punto, +1. Hasta donde recuerdo, los métodos Bootstrap y sus aplicaciones de Davison & Hinkley ofrecen una introducción agradable y accesible a la corrección de sesgos y otras mejoras en el bootstrap.
S. Kolassa - Restablece a Monica el
1
Vale la pena probar las otras variantes de bootstrap, especialmente el bootstrap básico.
Frank Harrell
3
Bootstrapping es un procedimiento de muestra grande. no es grande, especialmente para datos de registro normal . n=10
Cliff AB

Respuestas:

16

El diagnóstico y los remedios de Bootstrap de Canto, Davison, Hinkley y Ventura (2006) parecen ser un punto de partida lógico. Discuten múltiples formas en que la rutina de arranque puede descomponerse y, lo que es más importante aquí, ofrecen diagnósticos y posibles soluciones:

  1. Valores atípicos
  2. Modelo de remuestreo incorrecto
  3. No confidencialidad
  4. Inconsistencia del método bootstrap

No veo un problema con 1, 2 y 4 en esta situación. Veamos 3. Como señala @Ben Ogorek (aunque estoy de acuerdo con @Glen_b en que la discusión sobre la normalidad puede ser una pista falsa), la validez del bootstrap depende de la pivotalidad de la estadística que nos interesa.

La sección 4 de Canty et al. sugiere remuestreo dentro de resamples para obtener una medida de sesgo y varianza para la estimación del parámetro dentro de cada remuestreo bootstrap . Aquí hay un código para replicar las fórmulas de p. 15 del artículo:

library(boot)
m <- 10 # sample size
n.boot <- 1000
inner.boot <- 1000

set.seed(1)
samp.mean <- bias <- vars <- rep(NA,n.boot)
for ( ii in 1:n.boot ) {
    samp <- exp(rnorm(m,0,2)) + 1
    samp.mean[ii] <- mean(samp)
    foo <- boot(samp,statistic=function(xx,index)mean(xx[index]),R=inner.boot)
    bias[ii] <- mean(foo$t[,1])-foo$t0
    vars[ii] <- var(foo$t[,1])
}

opar <- par(mfrow=c(1,2))
    plot(samp.mean,bias,xlab="Sample means",ylab="Bias",
        main="Bias against sample means",pch=19,log="x")
    abline(h=0)
    plot(samp.mean,vars,xlab="Sample means",ylab="Variance",
        main="Variance against sample means",pch=19,log="xy")
par(opar)

diagnóstico de arranque

Tenga en cuenta las escalas de registro: sin registros, esto es aún más evidente. Vemos muy bien cómo la varianza de la estimación media de bootstrap aumenta con la media de la muestra de bootstrap. Para mí, esto parece una pistola humeante como para culpar a la falta de vitalidad como culpable de la baja cobertura del intervalo de confianza.

Sin embargo, felizmente admitiré que uno podría hacer un seguimiento de muchas maneras. Por ejemplo, podríamos ver cómo si el intervalo de confianza de una réplica de arranque específica incluye la media real depende de la media de la réplica particular.

En cuanto a los remedios, Canty et al. discuta las transformaciones, y los logaritmos vienen a mi mente aquí (p. ej., bootstrap y construir intervalos de confianza no para la media, sino para la media de los datos registrados), pero realmente no pude hacerlo funcionar.

Canty y col. continúe discutiendo cómo se puede reducir tanto el número de bootstraps internos como el ruido restante mediante muestreo y suavizado importantes, así como agregar bandas de confianza a los gráficos de pivote.

Este podría ser un proyecto de tesis divertido para un estudiante inteligente. Agradecería cualquier indicador de dónde me equivoqué, así como cualquier otra literatura. Y me tomaré la libertad de agregar la diagnosticetiqueta a esta pregunta.

S. Kolassa - Restablece a Monica
fuente
13

Si bien estoy de acuerdo con el análisis y la conclusión de Stephan Kolassa, with la media de la muestra definitivamente no es un pivote aproximado, permítanme hacer un comentario adicional. Investigué el uso de -statistic junto con bootstrapping. El resultado fue una cobertura de alrededor de 0.8. No es una solución completa, sino una mejora. μ t

μ^μ
μ^t
mμ^μσ^

Luego pensé un poco más sobre toda la configuración. Con solo 10 observaciones y una distribución extremadamente sesgada, ¿no es básicamente imposible estimar de manera no paramétrica la media y mucho menos construir intervalos de confianza con la cobertura adecuada?

La distribución logarítmica normal considerada tiene una media . ¡Dado que cuando la media es la cantidad de de la distribución! Significa que la probabilidad de que las 10 observaciones sean más pequeñas que la media es . Entonces, en poco menos del 18% de los casos, la observación más grande es menor que la media. Para obtener una cobertura mayor a 0.82 necesitamos una construcción de un intervalo de confianza para la media que se extiende más allá de la observación más grande. Me resulta difícil imaginar cómo se puede hacer (y justificar) tal construcción sin suposiciones previas de que la distribución es extremadamente sesgada. Pero agradezco cualquier sugerencia. P ( X 2 ) = 0.84 X N ( 0 , 4 ) 0.84 0.84 10 = 0.178e2+1=8.39P(X2)=0.84XN(0,4)0.840.8410=0.178

NRH
fuente
Estoy de acuerdo contigo. Realmente quería pensarlo desde el punto de vista de alguien que haya obtenido una muestra de esta distribución. ¿Cómo podría saber que no es seguro usar alegremente el bootstrap en este caso? Lo único que puedo pensar es que bien podría haber tomado registros antes de hacer el análisis, pero uno de los otros encuestados dice que esto realmente no ayuda.
Flounderer
1
No sabrá si es seguro o inseguro solo desde los 10 puntos de datos. Si sospecha asimetría o colas pesadas, la solución podría ser centrarse en un parámetro diferente a la media. Por ejemplo, la media logarítmica o la mediana. Esto no le dará una estimación (o intervalo de confianza) de la media a menos que haga suposiciones adicionales, pero podría ser una mejor idea enfocarse en un parámetro que sea menos sensible a las colas de la distribución.
NRH
6

Los cálculos fueron correctos, verifiqué con el conocido paquete de arranque . Además, agregué el intervalo BCa (por Efron), una versión con corrección de sesgo del intervalo de arranque percentil:

for (i in 1:1000) {
  samp <- exp(rnorm(m, 0, 2)) + 1

  boot.out <- boot(samp, function(d, i) sum(d[i]) / m, R=999)
  ci <- boot.ci(boot.out, 0.95, type="all")

  ##tCI <- mean(samp) + c(1,-1)*qt(0.025,df=9)*sd(samp)/sqrt(10)
  tCI <- ci$normal[2:3]
      percCI <- ci$perc[4:5]
  bcaCI <- ci$bca[4:5]
      boottCI <- ci$student[4:5]

  if (true.mean > min(tCI) && true.mean < max(tCI)) tCI.total <- tCI.total + 1
  if (true.mean > min(percCI) && true.mean < max(percCI)) percCI.total <- percCI.total + 1 
  if (true.mean > min(bcaCI) && true.mean < max(bcaCI)) bcaCI.total <- bcaCI.total + 1
}

tCI.total/1000     # estimate of t interval coverage probability
0.53
percCI.total/1000  # estimate of percentile interval coverage probability
0.55
bcaCI.total/1000  # estimate of BCa interval coverage probability
0.61

Supongo que los intervalos serían mucho mejores si el tamaño de la muestra original es mayor que 10, digamos 20 o 50.

Además, el método bootstrap-t generalmente conduce a mejores resultados para estadísticas sesgadas. Sin embargo, necesita un bucle anidado y, por lo tanto, más de 20 veces más tiempo de cálculo.

Para la prueba de hipótesis también es muy importante que las coberturas de 1 lado sean buenas. Por lo tanto, mirar solo las coberturas de dos lados a menudo puede ser engañoso.

lambruscoAcido
fuente
1
Además de su comentario sobre el tamaño de la muestra: Bien, en sus Métodos de remuestreo (3a ed., 2006, p. 19) señala que el bootstrap puede ser inestable para tamaños de muestra . Desafortunadamente, no tengo el libro a mano, así que no puedo buscar su argumentación ni ninguna referencia. n<100
S. Kolassa - Restablece a Mónica el
5

También estaba confundido acerca de esto, y pasé mucho tiempo en los intervalos de confianza de Bootstrap de DiCiccio y Efron en 1996 , sin mucho que mostrar.

En realidad, me llevó a pensar menos en el bootstrap como un método de propósito general. Solía ​​pensarlo como algo que te sacaría de apuros cuando estabas realmente atascado. Pero he aprendido su pequeño secreto sucio: los intervalos de confianza de bootstrap se basan en la normalidad de una forma u otra. Permíteme explicarte.

El bootstrap te da una estimación de la distribución de muestreo del estimador, que es todo lo que podrías esperar, ¿verdad? Pero recuerde que el vínculo clásico entre la distribución de muestreo y el intervalo de confianza se basa en encontrar una cantidad fundamental . Para cualquiera que esté oxidado, considere el caso en el que se conoce y . Entonces la cantidad es fundamental, es decir, su distribución no depende de . Por lo tanto, y el resto es historia.σ z = x - μ

xN(μ,σ2)
σ
z=xμσN(0,1)
μPr(1.96xμσ1.96)=0.95

Cuando piensa en lo que justifica que los percentiles de la distribución normal se relacionen con los intervalos de confianza, se basa completamente en esta conveniente cantidad fundamental. Para una distribución arbitraria, no existe un vínculo teórico entre los percentiles de la distribución de muestreo y los intervalos de confianza , y tomar proporciones crudas de la distribución de muestreo bootstrap no es suficiente.

Por lo tanto, los intervalos BCa (sesgo corregido) de Efron usan transformaciones para llegar a la normalidad aproximada y los métodos bootstrap-t dependen de que las estadísticas t resultantes sean aproximadamente fundamentales. Ahora el bootstrap puede estimar el infierno de los momentos, y siempre puedes asumir la normalidad y usar el estándar +/- 2 * SE. Pero teniendo en cuenta todo el trabajo que se hizo para no ser paramétrico con el bootstrap, no parece del todo justo, ¿verdad?

Ben Ogorek
fuente
2
Es posible que me haya perdido algo, pero el hecho de que el bootstrapping esté asociado con cantidades pivotantes o casi pivotales no implica en sí mismo ninguna asociación con la normalidad. Las cantidades fundamentales pueden tener todo tipo de distribuciones en circunstancias particulares. Tampoco veo cómo sigue la oración en cursiva en su segundo último párrafo.
Glen_b: reinstala a Mónica el
1
¿Cómo entonces sigue la afirmación relacionada con la normalidad?
Glen_b -Reinstate Monica el
1
Dado que cada distribución continua tiene una transformación exacta a la normalidad ( siempre es normal normal), parece que acaba de excluir todas las distribuciones continuas como enraizadas en una aproximación normal. Φ - 1 [ F ( X ) ]FΦ1[F(X)]
Glen_b -Reinstale a Mónica el
2
No es trivial identificar si aún no lo sabemos; el punto era simplemente que tales transformaciones existen claramente. Efron está tratando de obtener mejores intervalos; el hecho de que vaya a través de transformar a aproximadamente normal / hacer un intervalo / transformar de nuevo no implica en sí mismo que esté asumiendo una conexión especial con la normalidad. F
Glen_b -Reinstate a Mónica el
2
Para agregar a @Glen_b: la transformación a una distribución normal solo necesita existir para probar que el método es correcto. No necesita encontrarlo para usar el método. Además, si no le gustan las distribuciones normales, puede volver a escribir la prueba completa con alguna otra distribución simétrica y continua. El uso de distribuciones normales es técnicamente útil, pero no estrictamente necesario, no dice nada sobre la fuente de los datos o la media de la muestra.
Peter