La terminologie n'est probablement pas utilisée de manière cohérente, donc ce qui suit n'est que la façon dont je comprends la question d'origine. D'après ma compréhension, les IC normaux que vous avez calculés ne sont pas ce qui a été demandé. Chaque jeu de répliques bootstrap vous donne un intervalle de confiance, pas plusieurs. La façon de calculer différents types de CI à partir des résultats d'un ensemble de répliques bootstrap est la suivante:
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
Comme je veux comparer les calculs avec les résultats du package boot
, je définis d'abord une fonction qui sera appelée pour chaque réplique. Ses arguments sont l'échantillon d'origine et un vecteur d'index spécifiant les cas pour une seule réplique. Il renvoie , l'estimation du plug-in pour , ainsi que , l'estimation du plug-in pour la variance de la moyenne . Cette dernière ne sera requise que pour le 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
Sans utiliser de package, boot
vous pouvez simplement utiliser replicate()
pour obtenir un ensemble de répliques bootstrap.
boots <- t(replicate(B, getM(DV, sample(seq(along=DV), replace=TRUE))))
Mais restons sur les résultats de boot.ci()
pour avoir une référence.
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
Les valeurs basique, percentile et -CI reposent sur la distribution empirique des estimations bootstrap. Pour obtenir les quantiles et , nous trouvons les indices correspondants au vecteur trié des estimations de bootstrap (notez que cela fera une interpolation plus compliquée pour trouver les quantiles empiriques lorsque les indices ne sont pas des nombres naturels) .α / 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
Pour le -CI, nous avons besoin des estimations bootstrap pour calculer les valeurs critiques . Pour l'IC normal standard, la valeur critique sera juste la valeur de la distribution normale standard.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
Afin d'estimer les probabilités de couverture de ces types de CI, vous devrez exécuter cette simulation plusieurs fois. Enveloppez simplement le code dans une fonction, renvoyez une liste avec les résultats CI et exécutez-la avec replicate()
comme illustré dans cet essentiel .
size=100
une faute de frappe? Je ne crois pas que vous obteniez les bonnes limites supérieure et inférieure, car la taille d'échantillon implicite semble être de 1000 lorsque vous calculez vos IC dans la boucle (puisque vous utilisezsqrt.n
dans le calcul). Aussi, pourquoi comparez-vous àmu
et non directement à 0 (ce dernier étant la vraie moyenne)?