Distribuições muito distorcidas, como o log-normal, não resultam em intervalos precisos de confiança na inicialização. Aqui está um exemplo que mostra que as áreas da cauda esquerda e direita estão longe do valor ideal de 0,025, independentemente do método de inicialização que você tenta no 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
O resultado está abaixo:
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
Para os bootstraps únicos ainda não fornecem cobertura adequadamente precisa:
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
A probabilidade empírica também falha em fornecer intervalos de confiança precisos ao coletar amostras da distribuição lognormal.
Existe uma abordagem de uso geral lá fora, que não depende de conhecer a distribuição antecipadamente? Alguém tentou obter intervalos de confiança para a média ajustando os dados à distribuição generalizada Tukey (essa distribuição é altamente flexível)? Que tal usar faixas de confiança Kolmogorov-Smirnov para o CDF? A computação da média nos limites superior e inferior do CDF seria terrivelmente conservadora? Eu aceitaria algum conservadorismo se um método tivesse ampla aplicabilidade.
Para reafirmar os objetivos, estou buscando uma abordagem geralmente aplicável para obter um intervalo de confiança para uma população com um tamanho tal que
- o intervalo é assimétrico se a distribuição de dados brutos for assimétrica
- o intervalo tem cobertura correta em ambas as caudas (por exemplo, probabilidade de erro de 0,025 em ambas)
- o procedimento não exige que o analista especifique nada sobre a distribuição subjacente ou a transformação necessária para tornar a distribuição simétrica
Observe que o teorema do limite central é irrelevante aqui; Eu tenho um tamanho de amostra pequeno fixo e o intervalo de confiança deve ser assimétrico para ser preciso nas duas caudas. O paramétrico baseados intervalo de confiança sob um modelo lognormal com e ainda tem má cobertura (erro cauda esquerda 0,012, certo 0,047 quando ambos devem estar 0,025).
Continuando a pensar sobre isso, há duas maneiras amplas de conceituar o problema que eu gostaria de discutir.
- A média não é uma quantidade que se presta a inferência não paramétrica, pelo menos quando a exatidão da inferência é necessária. A mediana da amostra é significativa para qualquer distribuição contínua e temos um intervalo de confiança exato e simples para a mediana. Em uma amostra de tamanho de uma distribuição normal, o intervalo de confiança para a mediana é maior que o intervalo de confiança exato baseado em para a média (consulte o código abaixo). Talvez esse fator de 1,28 seja um preço razoável a pagar pela robustez e completa liberdade distributiva.
- Embora nenhum bootstrap único forneça limites de confiança adequadamente precisos para amostras de distribuições extremamente distorcidas, o bootstrap duplo pode melhorar significativamente a cobertura de confiança nas duas caudas. Nankervis tem alguns bons resultados e fornece um excelente algoritmo computacional. Mas nenhum software que eu encontrei implementa isso.
Código R ilustrativo 1. acima:
## 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)