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:
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
Como quiero comparar los cálculos con los resultados del paquete 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 tM⋆μS2⋆Mσ2Mt
> 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
, simplemente puede usar replicate()
para obtener un conjunto de réplicas de arranque.
boots <- t(replicate(B, getM(DV, sample(seq(along=DV), replace=TRUE))))
Pero sigamos con los resultados 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
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α/21−α/2boot.ci()
(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 -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 ztt⋆tz
# 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 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 .
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)?