로그 정규 분포와 같이 매우 치우친 분포는 정확한 부트 스트랩 신뢰 구간을 생성하지 않습니다. 다음은 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
또한 경험적 우도는 로그 정규 분포에서 샘플링 할 때 정확한 신뢰 구간을 제공하지 못합니다.
미리 배포판을 아는 것에 의존하지 않는 범용 접근법이 있습니까? 누구든지 데이터를 Tukey 일반화 분포 에 피팅하여 평균에 대한 신뢰 구간을 얻으려고 했습니까 (이 분포는 매우 유연합니다)? CDF에 Kolmogorov-Smirnov 신뢰 구간을 사용하는 것은 어떻습니까? CDF의 상한과 하한의 평균을 계산하는 것이 엄청나게 보수적인가? 방법이 광범위하게 적용 가능하다면 일부 보수주의에 정착 할 것입니다.
목표를 다시 설명하기 위해 모집단 평균에 대한 신뢰 구간을 얻는 데 일반적으로 적용 가능한 접근법을 찾고 있습니다.
- 원시 데이터 분포가 비대칭 인 경우 간격은 비대칭입니다.
- 간격은 두 꼬리 모두 에서 올바른 범위를 갖습니다 (예 : 두 가지 모두 에서 0.025 오류 확률)
- 이 절차에서는 분석가가 기본 분포 또는 분포를 대칭으로 만드는 데 필요한 변환에 대해 아무것도 지정하지 않아도됩니다.
중심 한계 정리는 여기서 관련이 없습니다. 표본 크기가 작고 신뢰 구간이 양쪽 꼬리 모두에서 정확하도록 비대칭이어야합니다. 파라 메트릭
이것에 대해 계속 생각하면서 논의하고자하는 문제를 개념화하는 두 가지 방법이 있습니다.
- 단일 부트 스트랩이 극도로 치우친 분포의 표본에 대해 정확하게 정확한 신뢰 한계를 제공하지는 않지만 이중 부트 스트랩은 두 꼬리의 신뢰 범위를 크게 향상시킬 수 있습니다. 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)