부트 스트랩 절차와 Monte Carlo 절차 간의 이러한 혼동은 계속 반복되므로이 문제를 해결하기에 가장 좋은 장소 일 것입니다. ( R
코드 예제 도 숙제에 도움이 될 수 있습니다.)
다음 의 부트 스트랩 구현을 고려하십시오 .R
boot <- function(x, t) { # Exact bootstrap of procedure t on data x
n <- length(x) # Must lie between 2 and 7 inclusive.
if (n > 7) {
stop("Sample size exceeds 7; use an approximate method instead.")
}
p <- c(n, 1:(n-1))
a <- rep(x, n^(n-1))
dim(a) <- rep(n, n)
y <- as.vector(a)
while (n > 1) {
n <- n-1
a <- aperm(a, p)
y <- cbind(as.vector(a), y)
}
apply(y, 1, t)
}
훑어 보면 이것이 결정론적인 계산 임을 확인할 수 있습니다 . 임의의 값이 생성되거나 사용되지 않습니다. (관심있는 독자들이 스스로 알아볼 수 있도록 내부 작업의 세부 사항을 남겨 두겠습니다.)
인수 boot
는 배열의 숫자 데이터 배치이며 단일 숫자 값을 반환하는 함수에 x
대한 참조 t
(정확하게 배열에 적용 가능 x
)입니다. 즉, t
A는 통계 . 교체 가능한 모든 샘플을 생성하고 각 샘플에 x
적용 t
하여 각 샘플마다 하나의 숫자를 생성합니다. 즉, 간단히 말해서 부트 스트랩입니다. 반환 값은 샘플 의 정확한 부트 스트랩 분포 를 나타내는 배열 입니다.t
x
작은 예를 들어 ,의는 샘플의 평균을 부트 스트랩하자 x
= c(1,3)
:
> boot(c(1,3), mean)
> [1] 1 2 2 3
으로부터 대체 된 크기 의 4 개의 가능한 샘플이 실제로 있으며 ; 즉, , , 및 입니다. 목록에 표시된 순서대로 모든 항목을 생성하고 각 항목에 적용 합니다. 이 경우 출력에 표시된 대로 평균과 평균 이 각각 , , 및 으로 계산됩니다.( 1 , 3 ) ( 1 , 1 ) ( 1 , 3 ) ( 3 , 1 ) ( 3 , 3 ) 1 2 2 32( 1 , 3 )( 1 , 1 )( 1 , 3 )( 3 , 1 )( 3 , 3 )boot
t
t
122삼
여기서 어디로 가는지는 부트 스트랩 사용 방법에 따라 다릅니다. 전체 부트 스트랩에 대한 정보가 너무 그것을 표시하는 좋은 아이디어는 보통이다,이 출력 배열에 포함되어 있습니다. 다음은 표준 편차가 표본 에서 부트 스트랩되는 예입니다 .( 1 , 3 , 3 , 4 , 7 )
hist(boot(c(1,3,3,4,7), sd))
이제 Monte Carlo 시뮬레이션 에 대해 이야기 할 준비가되었습니다 . 예를 들어 부트 스트랩 분포의 상위 95 번째 백분위 수를 사용하여 표본 에서 SD의 95 % 상한 신뢰 한계를 부트 스트랩한다고 가정 합니다. 이 절차에는 어떤 속성이 있습니까? 알아내는 한 가지 방법 은 샘플이 균일 한 분포로부터 무작위로 획득되었다고 가정 하는 것입니다. (이 응용 프로그램은 종종 합리적인 분포 가정이 무엇인지 나타낼 것입니다. 여기서는 계산이 간단하지만 분석적으로 다루기가 쉽지 않은 것을 임의로 선택했습니다.) 우리는 그러한 샘플을 가져 와서 UCL을 계산하여 발생하는 상황을 시뮬레이션 할 수 있습니다.5
> set.seed(17)
> quantile(boot(runif(5, min=0, max=10), sd), .95)[1]
95%
3.835870
이 특정 랜덤 샘플 의 결과 는 3.83587입니다. 이것은 분명합니다. 동일한 데이터 세트로 boot
다시 전화를 걸면 답은 정확히 같습니다. 그러나 다른 무작위 샘플로 어떻게 대답이 바뀔 수 있습니까? 이 과정을 몇 번 반복하고 결과의 히스토그램을 그려서 확인하십시오.
> boot.sd <- replicate(100, quantile(boot(runif(5, min=0, max=10), sd), .95)[1])
> hist(boot.sd)
또 다른 시뮬레이션을해야한다면, 무작위 추첨이 다르게 나오며 (약간) 다른 히스토그램을 만들지 만이 것과는 크게 다르지 않습니다. SD의 부트 스트랩 UCL이 어떻게 작동하는지 이해하기 위해 확신을 가지고 사용할 수 있습니다. 참고로, 균일 분포의 표준 편차 ( 여기에 지정된 범위 에서 까지의 범위 )는 . 소금에 걸 맞는 UCL을 원 하듯이 히스토그램 값의 대부분 (3/4 또는 0.75)이 다음을 초과합니다.10 10 / √01010 / 12−−√≈ 2.887
> length(boot.sd[boot.sd >= 10/sqrt(12)]) / length(boot.sd)
[1] 0.75
그러나 그것은 우리가 지정한 명목상의 95 % 근처 (그리고 기대하고있는) 어디에도 없습니다! 이것은 시뮬레이션의 한 가지 가치입니다. 우리의 희망을 실제로 일어나고있는 것과 비교합니다. (불일치 이유는 무엇입니까? SD 부트 스트래핑이 실제로 작은 샘플에서는 제대로 작동하지 않기 때문이라고 생각합니다.)
리뷰
부트 스트랩 통계는 개념적으로 평균 또는 표준 편차와 같은 다른 통계와 동일합니다. 계산하는 데 시간이 오래 걸리는 경향이 있습니다. ( boot
코드 의 경고 메시지를 참조하십시오 !)
몬테카를로 시뮬레이션은 부트 스트랩 통계가 샘플을 획득함에있어 무작위성으로 인해 어떻게 변하는 지 연구하는 데 유용 할 수 있습니다. 이러한 시뮬레이션에서 관찰 된 변화는 부트 스트랩의 변화가 아니라 샘플의 변화 때문 입니다.
부트 스트랩 통계 (명백하게, 최대 계산을 많이 취할 수 있기 때문에 (여기서는 도시하지 않음) 크기의 샘플 계산 )는 편리 근사 부트 스트랩 분포. 이것은 일반적으로 "블랙 박스"프로그램을 생성하여 실제 부트 스트랩 배포에서 무작위로 하나의 값을 얻고 해당 프로그램을 반복적으로 호출하여 수행됩니다. 집합 적 출력은 정확한 분포와 비슷합니다. 블랙 박스의 무작위성으로 인해 근사치가 다를 수 있지만 그 차이는 근사 절차의 결과입니다. 부트 스트랩 절차 자체에는 (개념적으로) 고유하지 않습니다. n엔엔엔