기본 부트 스트랩 신뢰 구간의 적용 확률


11

작업중 인 과정에 대해 다음과 같은 질문이 있습니다.

Monte Carlo 연구를 수행하여 표준 일반 부트 스트랩 신뢰 구간 및 기본 부트 스트랩 신뢰 구간의 적용 확률을 추정하십시오. 정규 모집단에서 표본을 추출하고 표본 평균에 대한 경험적 적용률을 확인하십시오.

표준 일반 부트 스트랩 CI의 적용 확률은 쉽습니다.

n = 1000;
alpha = c(0.025, 0.975);
x = rnorm(n, 0, 1);
mu = mean(x);
sqrt.n = sqrt(n);

LNorm = numeric(B);
UNorm = numeric(B);

for(j in 1:B)
{
    smpl = x[sample(1:n, size = n, replace = TRUE)];
    xbar = mean(smpl);
    s = sd(smpl);

    LNorm[j] = xbar + qnorm(alpha[1]) * (s / sqrt.n);
    UNorm[j] = xbar + qnorm(alpha[2]) * (s / sqrt.n);
}

mean(LNorm < 0 & UNorm > 0); # Approximates to 0.95
# NOTE: it is not good enough to look at overall coverage
# Must compute separately for each tail

이 과정에서 배운 내용에서 기본 부트 스트랩 신뢰 구간 은 다음과 같이 계산할 수 있습니다.

# Using x from previous...
R = boot(data = x, R=1000, statistic = function(x, i){ mean(x[i]); });
result = 2 * mu - quantile(R$t, alpha, type=1);

말이 되네요 내가 이해하지 못하는 것은 기본 부트 스트랩 CI의 적용 범위 확률 을 계산하는 방법 입니다. 적용 확률은 CI에 실제 값이 포함 된 횟수 (이 경우 mu)를 나타냅니다. 단순히 boot함수를 여러 번 실행 합니까?

이 질문에 어떻게 다르게 접근 할 수 있습니까?


귀하가 size=100오타는? 루프에서 CI를 계산할 때 암시 적 샘플 크기가 1000으로 표시되므로 계산에 사용하기 때문에 올바른 상한과 하한을 얻는다고 생각하지 않습니다 sqrt.n. 또한 mu0과 직접 비교 하지 않는 이유는 무엇입니까 (후자는 실제 평균)?
추기경

또한 smpl = x[sample(1:n, size = 100, replace = TRUE)]; 로 단순화 할 수 있습니다 smpl = sample(x, size=100, replace=TRUE).
추기경

@cardinal-그렇습니다. 오타 mu로 0 과 같습니다 . 일반 CI는 정상적으로 작동합니다. 기본 부트 스트랩 CI로 어려움을 겪었습니다.
TheCloudlessSky

답변:


16

이 용어는 일관되게 사용되지 않을 수 있으므로 다음은 원래 질문을 이해하는 방법 일뿐입니다. 내가 이해 한 바에 따르면 계산 한 일반 CI는 요청 된 것이 아닙니다. 각 부트 스트랩 복제 세트는 하나의 신뢰 구간을 제공합니다. 부트 스트랩 복제 세트의 결과에서 다른 CI 유형을 계산하는 방법은 다음과 같습니다.

B    <- 999                  # number of replicates
muH0 <- 100                  # for generating data: true mean
sdH0 <- 40                   # for generating data: true sd
N    <- 200                  # sample size
DV   <- rnorm(N, muH0, sdH0) # simulated data: original sample

bootMμSM2σM2t

> getM <- function(orgDV, idx) {
+     bsM   <- mean(orgDV[idx])                       # M*
+     bsS2M <- (((N-1) / N) * var(orgDV[idx])) / N    # S^2*(M)
+     c(bsM, bsS2M)
+ }

> library(boot)                                       # for boot(), boot.ci()
> bOut <- boot(DV, statistic=getM, R=B)
> boot.ci(bOut, conf=0.95, type=c("basic", "perc", "norm", "stud"))
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 999 bootstrap replicates
CALL : 
boot.ci(boot.out = bOut, conf = 0.95, type = c("basic", "perc", "norm", "stud"))

Intervals : 
Level      Normal            Basic         Studentized        Percentile    
95%   ( 95.6, 106.0 )   ( 95.7, 106.2 )  ( 95.4, 106.2 )   ( 95.4, 106.0 )  
Calculations and Intervals on Original Scale

패키지 boot를 사용하지 않고 간단히 replicate()부트 스트랩 복제 세트를 얻는 데 사용할 수 있습니다 .

boots <- t(replicate(B, getM(DV, sample(seq(along=DV), replace=TRUE))))

그러나 boot.ci()참조 결과를 얻은 결과를 고수합시다 .

boots   <- bOut$t                     # estimates from all replicates
M       <- mean(DV)                   # M from original sample
S2M     <- (((N-1)/N) * var(DV)) / N  # S^2(M) from original sample
Mstar   <- boots[ , 1]                # M* for each replicate
S2Mstar <- boots[ , 2]                # S^2*(M) for each replicate
biasM   <- mean(Mstar) - M            # bias of estimator M

tα/21α/2boot.ci()

(idx <- trunc((B + 1) * c(0.05/2, 1 - 0.05/2)) # indices for sorted vector of estimates
[1] 25 975

> (ciBasic <- 2*M - sort(Mstar)[idx])          # basic CI
[1] 106.21826  95.65911

> (ciPerc <- sort(Mstar)[idx])                 # percentile CI
[1] 95.42188 105.98103

tttz

# standard normal CI with bias correction
> zCrit   <- qnorm(c(0.025, 0.975))   # z-quantiles from std-normal distribution
> (ciNorm <- M - biasM + zCrit * sqrt(var(Mstar)))
[1] 95.5566 106.0043

> tStar <- (Mstar-M) / sqrt(S2Mstar)  # t*
> tCrit <- sort(tStar)[idx]           # t-quantiles from empirical t* distribution
> (ciT  <- M - tCrit * sqrt(S2M))     # studentized t-CI
[1] 106.20690  95.44878

이러한 CI 유형의 적용 범위 확률을 추정하려면이 시뮬레이션을 여러 번 실행해야합니다. 코드를 함수로 감싸고 CI 결과가있는 목록을 반환 하고이 요지replicate() 에서 설명한 것처럼 실행하십시오 .


와! -내가 뭘 잘못했는지에 대한 멋진 설명. 또한 코드 팁에 감사드립니다! 이것은 완벽하게 작동합니다!
TheCloudlessSky

마지막 질문은 다음과 같습니다.이 정보를 복제하려고 할 때 함수 computeCIs를 만들고을 호출했습니다 results = replicate(500, computeCIs());. computeCIs그것 의 끝에 반환합니다 c(ciBasic, ciPerc). 커버리지 확률을 테스트하기 mean(results[1, ] < 0 & results[2, ] > 0)위해 실제 평균 (커버리지 확률)을 포함하는 모든 기본 CI를 테스트하도록 테스트 해서는 안 됩니까? 내가 이것을 실행할 때, 나는 내가 받아야 1한다고 생각할 때 얻는다 0.95.
TheCloudlessSky

@TheCloudlessSky 취재 주파수의 측면에서 예상되는 결과와 함께 완전한 기능 및 전체 시뮬레이션을 참조 pastebin.com/qKpNKK0D
스라소니

그렇습니다, 나는 바보입니다 :) ... 나는 R로 코드를 복사 할 때 오타를 만들었습니다 ... 모든 도움을 주셔서 감사합니다! :)
TheCloudlessSky

좋은 답변을 주셔서 감사합니다 @ caracal. 링크 pastebin.com/qKpNKK0D가 끊어졌습니다. 업데이트하고 완벽한 기능과 전체 시뮬레이션을 제공하면 감사하겠습니다. 감사합니다
MYaseen208 5
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.