Log-normal gibi çok eğimli dağılımlar, doğru önyükleme güven aralıklarıyla sonuçlanmaz. Aşağıda sol ve sağ kuyruk bölgelerinin R'de hangi önyükleme yöntemini kullandığınızdan bağımsız olarak ideal 0.025'ten uzak olduğunu gösteren bir örnek verilmiştir:
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
Sonuç aşağıdadır:
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
For tek göbeğini hala yeterince hassas kapsama vermeyin:
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
Ampirik olabilirlik, lognormal dağılımdan örnekleme yaparken doğru güven aralıkları sağlamada başarısız olur.
Hedefleri yeniden başlatmak için, popülasyon için bir güven aralığı elde etmek için genel olarak uygulanabilir bir yaklaşım arıyorum.
- Ham veri dağılımı asimetrik ise aralık asimetriktir
- aralık her iki kuyrukta da doğru kapsama sahip (örn. her ikisinde de 0,025 hata olasılığı)
- prosedür analistin, dağılımı simetrik hale getirmek için gerekli olan dağıtım veya gerekli dönüşüm hakkında bir şey belirlemesini gerektirmez.
hala kapsamı kötüdür (her ikisi de 0.025 olması gerektiğinde sol kuyruk hatası 0.012, sağ 0.047).
Bunu düşünmeye devam ederken tartışmak istediğim sorunu kavramsallaştırmanın iki geniş yolu vardır.
- Hiçbir önyükleme dizisi aşırı derecede eğri dağılımlardan alınan numuneler için yeterince kesin güven sınırları vermese de, çift önyükleme her iki kuyruktaki güven kapsamını önemli ölçüde artırabilir. Nankervis bazı güzel sonuçlara sahip ve mükemmel bir hesaplama algoritması sunuyor. Ancak bulabildiğim hiçbir yazılım bunu yapmıyor.
Yukarıdaki 1'i gösteren R kodu:
## 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)