Des distributions très asymétriques telles que le log-normal n'entraînent pas des intervalles de confiance bootstrap précis. Voici un exemple montrant que les zones arrière gauche et droite sont loin de la valeur idéale de 0,025, quelle que soit la méthode d'amorçage que vous essayez dans R:
require(boot)
n <- 25
B <- 1000
nsim <- 1000
set.seed(1)
which <- c('basic', 'perc', 'norm', 'bca', 'stud')
mul <- 0; sdl <- 1.65 # on log scale
dist <- c('normal', 'lognormal')[2]
switch(dist, normal = {g <- function(x) x; mu <- mul},
lognormal = {g <- exp; mu <- exp(mul + sdl * sdl / 2)})
count <- matrix(0, nrow=length(which), ncol=2,
dimnames=list(which, c('lower', 'upper')))
stat <- function(x, j) {
## See http://www.psychology.mcmaster.ca/bennett/boot09/percentileT.pdf
x <- x[j]
m <- mean(x)
s <- sd(x)
n <- length(x)
sem <- s / sqrt(n)
m.var <- sem ^ 2
c(m, m.var)
}
for(i in 1 : nsim) {
if(i %% 100 == 0) cat(i, '')
x <- g(rnorm(n, mul, sdl))
b <- boot(x, stat, R=B)
ci <- boot.ci(b, type=which)
for(w in which) {
nam <- switch(w, perc='percent', norm='normal', basic='basic',
stud='student', bca='bca')
z <- rev(rev(ci[[nam]])[1:2])
count[w, 'lower'] <- count[w, 'lower'] + (z[1] > mu)
count[w, 'upper'] <- count[w, 'upper'] + (z[2] < mu)
}
}
cat('\n')
count / nsim
Le résultat est ci-dessous:
lower upper
basic 0.000 0.329
perc 0.003 0.257
norm 0.000 0.287
bca 0.015 0.185
stud 0.005 0.129
Pour simples bootstraps ne fournissent toujours pas une couverture suffisamment précise:
lower upper
basic 0.001 0.114
perc 0.005 0.093
norm 0.002 0.102
bca 0.017 0.067
stud 0.011 0.058
La probabilité empirique ne parvient pas non plus à fournir des intervalles de confiance précis lors de l'échantillonnage à partir de la distribution log-normale.
Existe-t-il une approche générale qui ne dépend pas de la connaissance préalable de la distribution? Quelqu'un a-t-il essayé d'obtenir des intervalles de confiance pour la moyenne en ajustant les données à la distribution généralisée Tukey (cette distribution est très flexible)? Qu'en est-il de l'utilisation des bandes de confiance de Kolmogorov-Smirnov pour le CDF? Le calcul de la moyenne sur les bornes supérieure et inférieure du CDF serait-il horriblement conservateur? Je me contenterais d'un certain conservatisme si une méthode a une large applicabilité.
Pour reformuler les objectifs, je recherche une approche généralement applicable pour obtenir un intervalle de confiance pour une population moyenne telle que
- l'intervalle est asymétrique si la distribution des données brutes est asymétrique
- l'intervalle a une couverture correcte dans les deux queues (par exemple, une probabilité d'erreur de 0,025 dans les deux)
- la procédure ne nécessite pas que l'analyste spécifie quoi que ce soit sur la distribution sous-jacente ou la transformation nécessaire pour rendre la distribution symétrique
Notez que le théorème central limite n'est pas pertinent ici; J'ai un petit échantillon fixe et l'intervalle de confiance doit être asymétrique pour être précis dans les deux queues. L' intervalle de confiance paramétrique basé sur sous un modèle log-normal avec et toujours une mauvaise couverture (erreur de queue gauche 0,012, droite 0,047 quand les deux devraient être 0,025).μ = 0 , σ = 1,65 n = 20000
En continuant à y penser, il y a deux grandes façons de conceptualiser le problème que j'aimerais discuter.
- La moyenne n'est pas une quantité qui se prête à l'inférence non paramétrique, du moins lorsque l'exactitude de l'inférence est requise. La médiane de l'échantillon est significative pour toute distribution continue et nous avons un intervalle de confiance exact simple pour la médiane. Dans un échantillon de taille d'une distribution normale, l'intervalle de confiance pour la médiane est plus long que l' intervalle de confiance basé sur exact pour la moyenne (voir le code ci-dessous). Ce facteur de 1,28 est peut-être un prix raisonnable à payer pour la robustesse et la liberté de distribution complète.1,28 × t
- Même si aucun bootstrap ne donnera des limites de confiance suffisamment précises pour les échantillons provenant de distributions extrêmement asymétriques, le double bootstrap peut améliorer considérablement la couverture de confiance dans les deux queues. Nankervis a de bons résultats et fournit un excellent algorithme de calcul. Mais aucun logiciel que j'ai pu trouver ne l'implémente.
Code R illustrant 1. ci-dessus:
## Exact CI for median from DescTools package SignTest.default
## See also ttp://www.stat.umn.edu/geyer/old03/5102/notes/rank.pdf,
## http://de.scribd.com/doc/75941305/Confidence-Interval-for-Median-Based-on-Sign-Test
cimed <- function(x, alpha=0.05, na.rm=FALSE) {
if(na.rm) x <- x[! is.na(x)]
n <- length(x)
k <- qbinom(p=alpha / 2, size=n, prob=0.5, lower.tail=TRUE)
## Actual CL: 1 - 2 * pbinom(k - 1, size=n, prob=0.5) >= 1 - alpha
sort(x)[c(k, n - k + 1)]
}
n <- 20
m <- 20000
cil <- cilt <- 0
z <- qt(0.975, n - 1)
for(i in 1 : m) {
x <- rnorm(n)
cil <- cil + diff(cimed(x))
cilt <- cilt + 2 * z * sqrt(var(x) / n)
}
cil <- cil / m
cilt <- cilt / m
c(cil, cilt, cilt / cil, cil / cilt)