対数正規分布などの非常に歪んだ分布では、正確なブートストラップ信頼区間が得られません。これは、Rでどのブートストラップ方法を試しても、左右のテール領域が理想的な0.025から遠く離れていることを示す例です。
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にKolmogorov-Smirnov信頼バンドを使用するのはどうですか?CDFの上限と下限の平均を計算することは恐ろしく保守的でしょうか?メソッドの適用範囲が広い場合は、保守主義に落ち着くでしょう。
目標を再度述べるために、母平均の信頼区間を取得するための一般的に適用可能なアプローチを探しています。
- 生データの分布が非対称の場合、間隔は非対称です
- 間隔は、両方のテールで正しいカバレッジを持ちます(たとえば、両方で0.025のエラー確率)
- この手順では、分析者が、基礎となる分布または分布を対称にするために必要な変換について何も指定する必要はありません。
ここでは中心極限定理は無関係であることに注意してください。固定された小さなサンプルサイズを使用しており、信頼区間は両方のテールで正確であるために非対称でなければなりません。、および対数正規モデルの下でのパラメトリックベースの信頼区間は、依然として悪いカバレッジです(両方とも0.025である必要がある場合、左テールエラー0.012、右0.047)。
これについて考え続けることで、私が議論したい問題を概念化する2つの広い方法があります。
- 平均は、少なくとも推論の正確さが要求される場合、ノンパラメトリック推論に役立つ量ではありません。サンプルの中央値は、連続分布に対して意味があり、中央値の単純な正確な信頼区間があります。正規分布からのサイズサンプルでは、中央値の信頼区間は、平均の正確なベースの信頼区間よりも長くなります(以下のコードを参照)。おそらく、この1.28の係数は、堅牢性と完全な流通の自由のために支払う妥当な価格です。
- 単一のブートストラップが極端に歪んだ分布からのサンプルに対して十分に正確な信頼限界を与えることはありませんが、ダブルブートストラップは両方のテールの信頼カバレッジを大幅に改善できます。 Nankervisにはいくつかの素晴らしい結果があり、優れた計算アルゴリズムを提供します。しかし、私が見つけることができるソフトウェアはこれを実装していません。
上記1を示すRコード:
## 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)