Le distribuzioni molto distorte come il log-normal non determinano intervalli di confidenza bootstrap accurati. Ecco un esempio che mostra che le aree di coda sinistra e destra sono lontane dall'ideale 0,025, indipendentemente dal metodo bootstrap che si prova in 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
Il risultato è sotto:
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
Per singoli bootstrap non forniscono ancora una copertura sufficientemente accurata:
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
Anche la probabilità empirica non fornisce intervalli di confidenza accurati durante il campionamento dalla distribuzione lognormale.
Esiste un approccio generale là fuori che non dipende dalla conoscenza della distribuzione in anticipo? Qualcuno ha cercato di ottenere intervalli di confidenza per la media adattando i dati alla distribuzione generalizzata Tukey (questa distribuzione è altamente flessibile)? Che dire dell'utilizzo delle bande di confidenza Kolmogorov-Smirnov per il CDF? Il calcolo della media sui limiti superiore e inferiore del CDF sarebbe orribilmente conservatore? Mi accontenterei di un po 'di conservatorismo se un metodo ha un'ampia applicabilità.
Per ribadire gli obiettivi, sto cercando un approccio generalmente applicabile per ottenere un intervallo di confidenza per una popolazione significhi tale
- l'intervallo è asimmetrico se la distribuzione dei dati grezzi è asimmetrica
- l'intervallo ha una copertura corretta in entrambe le code (ad esempio, 0,025 probabilità di errore in entrambe)
- la procedura non richiede all'analista di specificare nulla sulla distribuzione sottostante o sulla trasformazione necessaria per rendere simmetrica la distribuzione
Si noti che qui il teorema del limite centrale è irrilevante; Ho una piccola dimensione del campione fissa e l'intervallo di confidenza deve essere asimmetrico per essere accurato in entrambe le code. L' intervallo di confidenza parametrico basato su in un modello lognormale con e ha ancora una cattiva copertura (errore coda sinistra 0,012, destra 0,047 quando entrambi dovrebbero essere 0,025).
Continuando a pensarci, ci sono due grandi modi di concettualizzare il problema che vorrei discutere.
- La media non è una quantità che si presta all'inferenza non parametrica, almeno quando è richiesta l'esattezza dell'inferenza. La mediana del campione è significativa per qualsiasi distribuzione continua e abbiamo un intervallo di confidenza esatto semplice per la mediana. In un campione di dimensioni da una distribuzione normale, l'intervallo di confidenza per la mediana è più lungo dell'intervallo di confidenza esatto basato su per la media (vedere il codice sotto). Forse questo fattore di 1,28 è un prezzo ragionevole da pagare per la solidità e la completa libertà distributiva.
- Anche se nessun singolo bootstrap darà limiti di confidenza adeguatamente accurati per campioni provenienti da distribuzioni estremamente distorte, il doppio bootstrap può migliorare significativamente la copertura di confidenza in entrambe le code. Nankervis ha dei buoni risultati e fornisce un eccellente algoritmo computazionale. Ma nessun software che sono riuscito a trovare implementa questo.
Codice R che illustra 1. sopra:
## 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)