Очень искаженные распределения, такие как log-normal, не дают точных доверительных интервалов начальной загрузки. Вот пример, показывающий, что левая и правая области хвоста далеки от идеальных 0,025 независимо от того, какой метод начальной загрузки вы используете в 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
Результат ниже:
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
Для одиночные бутстрапы по-прежнему не обеспечивают достаточно точного покрытия:
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
Эмпирическая вероятность также не дает точных доверительных интервалов при выборке из логнормального распределения.
Есть ли универсальный подход, который не зависит от знания заранее распределения? Кто-нибудь пытался получить доверительные интервалы для среднего значения, подгоняя данные к обобщенному распределению Тьюки (это распределение очень гибкое)? Как насчет использования доверительных полос Колмогорова-Смирнова для CDF? Будет ли вычисление среднего значения для верхней и нижней границ CDF ужасно консервативным? Я бы согласился на некоторый консерватизм, если метод имеет широкое применение.
Чтобы переформулировать цели, я ищу общеприменимый подход для получения доверительного интервала для среднего значения для населения, чтобы
- интервал асимметричный, если распределение необработанных данных асимметричное
- интервал имеет правильное покрытие в обоих хвостах (например, вероятность ошибки 0,025 в обоих)
- процедура не требует от аналитика указывать что-либо о базовом распределении или преобразовании, необходимом для того, чтобы распределение было симметричным
Обратите внимание, что центральная предельная теорема здесь неактуальна; У меня фиксированный небольшой размер выборки, и доверительный интервал должен быть асимметричным, чтобы быть точным в обоих хвостах. Параметрический доверительный интервал на основе в логнормальной модели с и все еще имеет плохое покрытие (ошибка левого хвоста 0,012, справа 0,047, когда оба должны быть 0,025).
Продолжая думать об этом, есть два широких способа осмысления проблемы, которые я хотел бы обсудить.
- Среднее значение не является величиной, которая поддается непараметрическому выводу, по крайней мере, когда требуется точность вывода. Медиана выборки имеет смысл для любого непрерывного распределения, и у нас есть простой точный доверительный интервал для медианы. В выборке размера от нормального распределения доверительного интервал для медианы составляет дольше , чем точный основанных доверительного интервала для среднего значения (см код ниже). Возможно, этот коэффициент в 1,28 является разумной ценой за надежность и полную свободу распределения.
- Несмотря на то, что ни один загрузчик не даст адекватно точных пределов достоверности для выборок из крайне искаженных распределений, двойной загрузчик может значительно улучшить покрытие достоверности в обоих хвостах. Nankervis имеет несколько хороших результатов и предоставляет отличный вычислительный алгоритм. Но никакое программное обеспечение, которое я не мог найти, реализует это.
R код, иллюстрирующий 1. выше:
## 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)