12 votos

La cobertura de las probabilidades de la básica Intervalo de confianza bootstrap

Tengo la siguiente pregunta para un curso en el que estoy trabajando:

Realizar un estudio de Monte Carlo para estimar la cobertura de las probabilidades de la normal estándar intervalo de confianza bootstrap y la base de la confianza bootstrap intervalo. Muestra de una población normal y verificación empírica de la tasa de cobertura de la la media de la muestra.

La cobertura de las probabilidades para el normal estándar bootstrap CI 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

De lo que me han enseñado en este curso básico de bootstrap intervalo de confianza 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);

Que tiene sentido. Lo que no entiendo es cómo calcular la cobertura de probabilidades para el bootstrap CI. Entiendo que la probabilidad de cobertura representaría el número de veces que el CI contiene el valor verdadero (en este caso, mu). Puedo simplemente ejecutar la boot función muchas veces?

¿Cómo puedo abordar esta cuestión de manera diferente?

17voto

ashwnacharya Puntos 3144

La terminología es, probablemente, no se utilizan de forma sistemática, por lo que la siguiente es sólo la forma en la que entiendo la pregunta original. Desde mi entender, el normal CIs calcula no son lo que se le pidió. Cada conjunto de bootstrap replica le da un intervalo de confianza, no muchos. La manera de calcular las diferentes CI-tipos a partir de los resultados de un conjunto de bootstrap replica es la siguiente:

B    <- 999                  # number of replicates
muH0 <- 100                  # for generating data: true mean
sdH0 <- 40                   # for generating data: true sd
N    <- 200                  # sample size
DV   <- rnorm(N, muH0, sdH0) # simulated data: original sample

Ya quiero comparar los cálculos de los resultados de paquete boot, la primera vez que definir una función que será llamada para cada repetición. Sus argumentos son la muestra original, y un índice del vector de la especificación de los casos para una sola repetición. Devuelve $M^{\star}$, el plug-in de estimación de $\mu$, así como el $S_{M}^{2\star}$, el plug-in de estimación de la varianza de la media de $\sigma_{M}^{2}$. El último será necesaria únicamente para el bootstrap $t$-CI.

> getM <- function(orgDV, idx) {
+     bsM   <- mean(orgDV[idx])                       # M*
+     bsS2M <- (((N-1) / N) * var(orgDV[idx])) / N    # S^2*(M)
+     c(bsM, bsS2M)
+ }

> library(boot)                                       # for boot(), boot.ci()
> bOut <- boot(DV, statistic=getM, R=B)
> boot.ci(bOut, conf=0.95, type=c("basic", "perc", "norm", "stud"))
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 999 bootstrap replicates
CALL : 
boot.ci(boot.out = bOut, conf = 0.95, type = c("basic", "perc", "norm", "stud"))

Intervals : 
Level      Normal            Basic         Studentized        Percentile    
95%   ( 95.6, 106.0 )   ( 95.7, 106.2 )  ( 95.4, 106.2 )   ( 95.4, 106.0 )  
Calculations and Intervals on Original Scale

Sin usar el paquete boot usted puede simplemente utilizar replicate() para obtener un conjunto de bootstrap repeticiones.

boots <- t(replicate(B, getM(DV, sample(seq(along=DV), replace=TRUE))))

Pero sigamos con los resultados de boot.ci() para tener una referencia.

boots   <- bOut$t                     # estimates from all replicates
M       <- mean(DV)                   # M from original sample
S2M     <- (((N-1)/N) * var(DV)) / N  # S^2(M) from original sample
Mstar   <- boots[ , 1]                # M* for each replicate
S2Mstar <- boots[ , 2]                # S^2*(M) for each replicate
biasM   <- mean(Mstar) - M            # bias of estimator M

La básica, percentil, y $t$-CI dependen de la distribución empírica de bootstrap estimaciones. Para obtener el $\alpha/2$ $1 - \alpha/2$ cuantiles, nos encontramos con los índices correspondientes a los ordenados vector de estimaciones bootstrap (tenga en cuenta que boot.ci() va a hacer más complicado de interpolación para encontrar los cuantiles empíricos cuando los índices no son números naturales).

(idx <- trunc((B + 1) * c(0.05/2, 1 - 0.05/2)) # indices for sorted vector of estimates
[1] 25 975

> (ciBasic <- 2*M - sort(Mstar)[idx])          # basic CI
[1] 106.21826  95.65911

> (ciPerc <- sort(Mstar)[idx])                 # percentile CI
[1] 95.42188 105.98103

Para el $t$-CI, necesitamos el bootstrap $t^{\star}$ estimaciones para calcular la crítica $t$-valores. Para el normal estándar de CI, el valor crítico será sólo el $z$-valor de la distribución normal estándar.

# standard normal CI with bias correction
> zCrit   <- qnorm(c(0.025, 0.975))   # z-quantiles from std-normal distribution
> (ciNorm <- M - biasM + zCrit * sqrt(var(Mstar)))
[1] 95.5566 106.0043

> tStar <- (Mstar-M) / sqrt(S2Mstar)  # t*
> tCrit <- sort(tStar)[idx]           # t-quantiles from empirical t* distribution
> (ciT  <- M - tCrit * sqrt(S2M))     # studentized t-CI
[1] 106.20690  95.44878

Para la estimación de la cobertura de las probabilidades de estas CI-tipos, usted tendrá que ejecutar esta simulación muchas veces. Simplemente envuelva el código en una función, devuelve una lista con los CI-resultados y ejecutarlo con replicate() como se demostró en este gist.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X