Je voulais faire une démonstration de classe où je compare un intervalle t à un intervalle de bootstrap et calcule la probabilité de couverture des deux. Je voulais que les données proviennent d'une distribution asymétrique, j'ai donc choisi de générer les données sous la forme d' exp(rnorm(10, 0, 2)) + 1
un échantillon de taille 10 à partir d'un lognormal décalé. J'ai écrit un script pour dessiner 1000 échantillons et, pour chaque échantillon, calculer à la fois un intervalle t à 95% et un intervalle de centile de bootstrap à 95% sur la base de 1000 répétitions.
Lorsque j'exécute le script, les deux méthodes donnent des intervalles très similaires et les deux ont une probabilité de couverture de 50 à 60%. J'ai été surpris car je pensais que l'intervalle de bootstrap serait meilleur.
Ma question est, ai-je
- fait une erreur dans le code?
- fait une erreur dans le calcul des intervalles?
- fait une erreur en s'attendant à ce que l'intervalle de bootstrap ait de meilleures propriétés de couverture?
De plus, existe-t-il un moyen de construire un CI plus fiable dans cette situation?
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