부트 스트랩 간격에 끔찍한 적용 범위가있는 이유는 무엇입니까?


29

나는 t-interval을 부트 스트랩 간격과 비교하고 두 범위의 적용 확률을 계산하는 클래스 데모를 원했습니다. 데이터가 기울어 진 분포에서 나오기를 원했기 때문에 exp(rnorm(10, 0, 2)) + 1시프트 된 로그 노멀에서 크기가 10 인 표본으로 데이터를 생성하기로 결정했습니다 . 나는 1000 개의 표본을 추출하는 스크립트를 작성했으며, 각 표본에 대해 1000 개의 반복 실험을 기반으로 95 % t 간격과 95 % 부트 스트랩 백분위 간격을 계산했습니다.

스크립트를 실행할 때 두 방법 모두 매우 비슷한 간격을 제공하고 두 범위 모두 50-60 %의 적용 확률을 갖습니다. 부트 스트랩 간격이 더 좋을 것이라고 생각했기 때문에 놀랐습니다.

내 질문은

  • 코드에서 실수를 했습니까?
  • 구간 계산에 실수를 했습니까?
  • 부트 스트랩 간격이 더 나은 범위 속성을 가질 것으로 예상하여 실수를 했습니까?

또한이 상황에서보다 안정적인 CI를 구성 할 수있는 방법이 있습니까?

 tCI.total <- 0
 bootCI.total <- 0
 m <- 10 # sample size
 true.mean <- exp(2) + 1

for (i in 1:1000){
 samp <- exp(rnorm(m,0,2)) + 1
 tCI <- mean(samp) + c(1,-1)*qt(0.025,df=9)*sd(samp)/sqrt(10)

 boot.means <- rep(0,1000)
 for (j in 1:1000) boot.means[j] <- mean(sample(samp,m,replace=T))
 bootCI <- sort(boot.means)[c(0.025*length(boot.means), 0.975*length(boot.means))]

 if (true.mean > min(tCI) & true.mean < max(tCI)) tCI.total <- tCI.total + 1
 if (true.mean > min(bootCI) & true.mean < max(bootCI)) bootCI.total <- bootCI.total + 1 
}
tCI.total/1000     # estimate of t interval coverage probability
bootCI.total/1000  # estimate of bootstrap interval coverage probability

3
식별하고 해결하려면 : 사람들은 종종 다른 부트 스트랩을 사용 잊지 편견을 . 부트 스트랩에 바이어스 수정을 포함 시키면 CI에서 훨씬 더 나은 성능을 얻을 수있을 것으로 생각됩니다.
whuber

@ whuber : 좋은 점, +1. 내가 기억 하는 한 Davison & Hinkley의 부트 스트랩 방법 및 응용 프로그램 은 바이어스 수정 및 부트 스트랩의 기타 개선 사항에 대한 훌륭하고 접근하기 쉬운 소개를 제공합니다.
S. Kolassa-복원 Monica Monica

1
다른 부트 스트랩 변형, 특히 기본 부트 스트랩을 사용해 볼 가치가 있습니다.
Frank Harrell

3
n=10

답변:


16

Canto, Davison, Hinkley & Ventura (2006)의 부트 스트랩 진단 및 치료 는 논리적 출발점으로 보인다. 부트 스트랩이 고장날 수있는 여러 가지 방법에 대해 논의하고 더 중요한 것은 진단 및 가능한 해결책을 제공합니다.

  1. 특이 치
  2. 잘못된 리샘플링 모델
  3. 비피 보리 티
  4. 부트 스트랩 방법의 불일치

이 상황에서는 1, 2 및 4에 문제가 없습니다. @Ben Ogorek이 언급 한 것처럼 (정상적인 논의는 빨간색 청어 일 수 있다는 @Glen_b에 동의하지만) 부트 스트랩의 유효성은 우리가 관심있는 통계의 중추성에 달려 있습니다.

Canty et al. 리샘플링 내 재 샘플링을 통해 각 부트 스트랩 리 샘플 내의 파라미터 추정치에 대한 바이어스 및 분산 측정 값을 얻을 수 있습니다. 다음은 p의 공식을 복제하는 코드입니다. 기사 15 개 :

library(boot)
m <- 10 # sample size
n.boot <- 1000
inner.boot <- 1000

set.seed(1)
samp.mean <- bias <- vars <- rep(NA,n.boot)
for ( ii in 1:n.boot ) {
    samp <- exp(rnorm(m,0,2)) + 1
    samp.mean[ii] <- mean(samp)
    foo <- boot(samp,statistic=function(xx,index)mean(xx[index]),R=inner.boot)
    bias[ii] <- mean(foo$t[,1])-foo$t0
    vars[ii] <- var(foo$t[,1])
}

opar <- par(mfrow=c(1,2))
    plot(samp.mean,bias,xlab="Sample means",ylab="Bias",
        main="Bias against sample means",pch=19,log="x")
    abline(h=0)
    plot(samp.mean,vars,xlab="Sample means",ylab="Variance",
        main="Variance against sample means",pch=19,log="xy")
par(opar)

부트 스트랩 진단

로그 스케일이 기록됩니다. 로그가 없으면 훨씬 더 명백합니다. 부트 스트랩 평균 추정값의 분산이 부트 스트랩 샘플의 평균과 어떻게 다른지 잘 볼 수 있습니다. 저에게 이것은 낮은 신뢰 구간 적용 범위의 범인으로 비피 벌리 티에 책임을 부여하기에 충분한 흡연 총처럼 보입니다.

그러나 많은 방법으로 후속 조치를 취할 수 있다는 점을 기쁘게 생각합니다. 예를 들어 특정 부트 스트랩 복제의 신뢰 구간에 실제 평균이 포함되는지 여부는 특정 복제의 평균에 따라 어떻게 달라지는 지 살펴볼 수 있습니다.

구제책에 관해서는, Canty et al. 변환에 대해 토론하고 로그가 여기에 떠 오릅니다 (예 : 부트 스트랩 및 신뢰 구간을 평균이 아니라 기록 된 데이터의 평균에 대해 작성). 그러나 실제로 작동시킬 수는 없습니다.

Canty et al. 중요도 샘플링 및 평활화를 통해 내부 부트 스트랩 수와 남은 소음을 줄이면서 피벗 플롯에 신뢰 구간을 추가하는 방법에 대해 계속 논의합니다.

이것은 똑똑한 학생을위한 재미있는 논문 프로젝트 일 수 있습니다. 내가 잘못한 곳과 다른 문헌에 대한 조언을 부탁드립니다. 그리고 나는 diagnostic이 질문에 태그를 추가 할 자유를 가질 것 입니다.


13

μ^μ
μ^t
mμ^μσ^

그런 다음 전체 설정에 대해 조금 더 생각했습니다. 관측치가 10 개이고 분포가 극도로 치우친 경우, 올바른 범위로 신뢰 구간을 구성 하는 것 외에 평균 을 비모수 적으로 추정하는 것이 기본적으로 불가능하지 않습니까?

e2+1=8.39P(X2)=0.84XN(0,4)0.840.8410=0.178. 따라서 사례의 18 % 미만에서 가장 큰 관측치가 평균보다 작습니다. 0.82보다 큰 범위를 얻으려면 평균이 최대 관측 값을 초과하는 평균에 대한 신뢰 구간을 구성해야합니다. 분포가 극도로 치우친다는 사전의 가정없이 그러한 구성이 어떻게 만들어지고 정당화 될 수 있는지 상상하기가 어렵습니다. 그러나 나는 어떤 제안이라도 환영합니다.


동의합니다. 이 배포본에서 하나의 샘플을 얻은 사람의 관점에서 그것에 대해 정말로 생각하고 싶었습니다. 이 경우 부트 스트랩을 거칠게 사용하는 것이 안전하지 않다는 것을 어떻게 알 수 있습니까? 내가 생각할 수있는 유일한 생각은 분석을 수행하기 전에 로그를 가져 왔을 수도 있지만 다른 응답자 중 하나는 이것이 실제로 도움이되지 않는다고 말합니다.
Flounderer

1
10 개의 데이터 포인트만으로 안전하거나 안전하지 않은지 알 수 없습니다. 왜도 또는 두꺼운 꼬리가 의심되는 경우 솔루션은 평균과 다른 매개 변수에 초점을 맞출 수 있습니다. 예를 들어, 로그 평균 또는 중앙값. 이것은 추가 가정을하지 않는 한 평균의 추정치 (또는 신뢰 구간)를 제공하지는 않지만 분포의 꼬리에 덜 민감한 모수에 초점을 맞추는 것이 좋습니다.
NRH

6

계산은 옳았습니다. 잘 알려진 패키지 부트 와 교차 확인했습니다 . 또한 백분위 수 부트 스트랩 간격의 바이어스 수정 버전 인 BCa 간격 (Efron)을 추가했습니다.

for (i in 1:1000) {
  samp <- exp(rnorm(m, 0, 2)) + 1

  boot.out <- boot(samp, function(d, i) sum(d[i]) / m, R=999)
  ci <- boot.ci(boot.out, 0.95, type="all")

  ##tCI <- mean(samp) + c(1,-1)*qt(0.025,df=9)*sd(samp)/sqrt(10)
  tCI <- ci$normal[2:3]
      percCI <- ci$perc[4:5]
  bcaCI <- ci$bca[4:5]
      boottCI <- ci$student[4:5]

  if (true.mean > min(tCI) && true.mean < max(tCI)) tCI.total <- tCI.total + 1
  if (true.mean > min(percCI) && true.mean < max(percCI)) percCI.total <- percCI.total + 1 
  if (true.mean > min(bcaCI) && true.mean < max(bcaCI)) bcaCI.total <- bcaCI.total + 1
}

tCI.total/1000     # estimate of t interval coverage probability
0.53
percCI.total/1000  # estimate of percentile interval coverage probability
0.55
bcaCI.total/1000  # estimate of BCa interval coverage probability
0.61

원래 샘플 크기가 10보다 큰 경우 간격이 훨씬 더 좋을 것이라고 가정합니다 (20 또는 50).

또한 bootstrap-t 방법은 일반적으로 왜곡 된 통계에 대한 더 나은 결과를 가져 옵니다 . 그러나 중첩 루프가 필요하므로 계산 시간이 20 배 이상 늘어납니다.

가설 검정의 경우 단면 적용 범위가 양호해야합니다. 따라서 양면 커버리지 만 보는 것이 종종 오도 될 수 있습니다.


1
n<100

5

나도 이것에 대해 혼란 스러웠고, 1996 년 DiCiccio와 Efron 페이퍼 부트 스트랩 신뢰 구간 에 많은 시간을 보냈다 .

실제로 부트 스트랩을 덜 일반적인 목적으로 생각하게 만들었습니다. 나는 당신이 정말로 갇혀있을 때 잼에서 당신을 끌어낼 무언가로 생각했습니다. 그러나 나는 더러운 작은 비밀을 배웠습니다. 부트 스트랩 신뢰 구간은 모두 어떤 식 으로든 정상 성을 기반으로합니다. 설명해주세요.

xN(μ,σ2)
σ
z=xμσN(0,1)
μPr(1.96xμσ1.96)=0.95

신뢰 구간과 관련된 정규 분포의 백분위 수를 정당화하는 것에 대해 생각할 때 이는 전적으로이 편리한 중추적 수량을 기반으로합니다. 임의 분포의 경우 샘플링 분포의 백분위 수와 신뢰 구간 사이에 이론적 링크가 없으며 부트 스트랩 샘플링 분포의 원시 비율을 취해도 절단되지 않습니다.

따라서 Efron의 BCa (바이어스 수정) 간격은 변환을 사용하여 정규성을 근사화하고 부트 스트랩 -t 방법은 결과적으로 t- 통계량이 대략 중추적 인 결과에 의존합니다. 이제 부트 스트랩은 순간적으로 지옥을 추정 할 수 있으며 항상 정규성을 가정하고 표준 +/- 2 * SE를 사용할 수 있습니다. 그러나 부트 스트랩으로 비모수 적 인 모든 작업을 고려할 때 상당히 공평하지 않은가?


2
내가 뭔가를 놓쳤을 수도 있지만 부트 스트랩이 중추적이거나 거의 중추적 인 수량과 관련이 있다는 사실 자체가 정상 성과의 연관성을 암시하지는 않습니다. Pivotal 수량은 특정 상황에서 모든 방식의 분포를 가질 수 있습니다. 또한 두 번째 마지막 단락의 이탤릭체로 된 문장이 어떻게 나오는지 알 수 없습니다.
Glen_b-복지 주 모니카

1
그러면 정규성과 관련된 주장은 어떻게됩니까?
Glen_b-복지 주 모니카

1
모든 연속 분포 는 정규성으로 정확하게 변환 되므로 ( 는 항상 표준 정규), 모든 근사 분포를 정규 근사에 근간으로 배제한 것처럼 보입니다. Φ - 1 [ F ( X ) ]FΦ1[F(X)]
Glen_b-복지 주 모니카

2
아직 모른다면 를 식별하는 것은 쉬운 일이 아닙니다. 요점은 단순히 그러한 변화가 분명히 존재한다는 것이었다. Efron은 더 나은 간격을 얻으려고 노력하고 있습니다. 그가 대략 정규 변환 / 간격 만들기 / 간격 변환 / 변환 백을 통과한다고해서 그 자체가 정규 성과의 특별한 연결을 가정하고 있다는 것을 암시하지는 않습니다. F
Glen_b-복지 주 모니카

2
@Glen_b에 추가하려면 정규 분포로의 변환이 있어야 방법이 올바른지 증명할 수 있습니다. 메소드를 사용하기 위해 찾을 필요는 없습니다. 또한 정규 분포가 마음에 들지 않으면 다른 대칭적이고 연속적인 분포로 전체 증거를 다시 작성할 수 있습니다. 정규 분포를 사용하는 것은 기술적으로 유용하지만 반드시 필요한 것은 아닙니다. 데이터 소스 나 표본 평균에 대해서는 아무 것도 말하지 않습니다.
피터

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.