부트 스트랩, 몬테카를로


12

숙제의 일부로 다음 질문을 설정했습니다.

일 변량 데이터 표본의 평균에 대한 95 % 신뢰 구간을 얻기 위해 부트 스트랩의 성능을 검사하기위한 시뮬레이션 연구를 설계하고 구현합니다. 구현은 R 또는 SAS에있을 수 있습니다.

보고자하는 성능 측면은 신뢰 구간 적용 범위 (즉, 신뢰 구간에 실제 평균이 포함되는 비율)와 Monte Carlo 변동 (즉, 상한과 하한 신뢰 한계가 시뮬레이션마다 얼마나 다른가)입니다. '

몬테 카를로 변형의 측면에 대해 어떻게 아는 사람이 있습니까? 알고리즘이나 다른 것을 해결할 수도 없습니다. Monte Carlo 통합과 관련이 있습니까? 감사!

답변:


18

부트 스트랩 절차와 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)입니다. 즉, tA는 통계 . 교체 가능한 모든 샘플을 생성하고 각 샘플에 x적용 t하여 각 샘플마다 하나의 숫자를 생성합니다. 즉, 간단히 말해서 부트 스트랩입니다. 반환 값은 샘플 의 정확한 부트 스트랩 분포 를 나타내는 배열 입니다.tx

작은 예를 들어 ,의는 샘플의 평균을 부트 스트랩하자 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)boottt1223

여기서 어디로 가는지는 부트 스트랩 사용 방법에 따라 다릅니다. 전체 부트 스트랩에 대한 정보가 너무 그것을 표시하는 좋은 아이디어는 보통이다,이 출력 배열에 포함되어 있습니다. 다음은 표준 편차가 표본 에서 부트 스트랩되는 예입니다 .(1,3,3,4,7)

hist(boot(c(1,3,3,4,7), sd))

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/122.887

> length(boot.sd[boot.sd >= 10/sqrt(12)]) / length(boot.sd)
[1] 0.75

그러나 그것은 우리가 지정한 명목상의 95 % 근처 (그리고 기대하고있는) 어디에도 없습니다! 이것은 시뮬레이션의 한 가지 가치입니다. 우리의 희망을 실제로 일어나고있는 것과 비교합니다. (불일치 이유는 무엇입니까? SD 부트 스트래핑이 실제로 작은 샘플에서는 제대로 작동하지 않기 때문이라고 생각합니다.)

리뷰

  • 부트 스트랩 통계는 개념적으로 평균 또는 표준 편차와 같은 다른 통계와 동일합니다. 계산하는 데 시간이 오래 걸리는 경향이 있습니다. ( boot코드 의 경고 메시지를 참조하십시오 !)

  • 몬테카를로 시뮬레이션은 부트 스트랩 통계가 샘플을 획득함에있어 무작위성으로 인해 어떻게 변하는 지 연구하는 데 유용 할 수 있습니다. 이러한 시뮬레이션에서 관찰 된 변화는 부트 스트랩의 변화가 아니라 샘플의 변화 때문 입니다.

  • 부트 스트랩 통계 (명백하게, 최대 계산을 많이 취할 수 있기 때문에 (여기서는 도시하지 않음) 크기의 샘플 계산 )는 편리 근사 부트 스트랩 분포. 이것은 일반적으로 "블랙 박스"프로그램을 생성하여 실제 부트 스트랩 배포에서 무작위로 하나의 값을 얻고 해당 프로그램을 반복적으로 호출하여 수행됩니다. 집합 적 출력은 정확한 분포와 비슷합니다. 블랙 박스의 무작위성으로 인해 근사치가 다를 수 있지만 그 차이는 근사 절차의 결과입니다. 부트 스트랩 절차 자체에는 (개념적으로) 고유하지 않습니다. nnnn


+1 매우 좋습니다. 나는 그것을 더 잘 할 수 있다고 생각하지 않습니다! 나는 오차율 추정에서 부트 스트랩의 성능과 분산을 추정 할 때 신뢰 구간에 대한 논문을 가지고 있다고 덧붙였다. 이러한 결과는 부트 스트랩 방법 책의 두 번째 판과 R에 응용 프로그램을 사용한 부트 스트랩 관련 책에서 확인할 수 있습니다.
Michael R. Chernick

이 책에 대한 아마존 링크는 다음과 같습니다. amazon.com/… amazon.com/Introduction-Bootstrap-Methods-Applications/dp/…
Michael R. Chernick

알려진 분포의 데이터를 시뮬레이션하여 관심있는 부트 스트랩 절차 (예 : 모수에 대한 신뢰 구간 또는 분류기의 오류율 추정)를 시뮬레이션하는 것이 아이디어라고 생각합니다. 진실을 알고 있기 때문에 데이터가 얼마나 잘 수행되는지 평가할 수 있습니다.
Michael R. Chernick

5

부트 스트랩은 몬테 카를로 기법으로, 임의 유형의 임의 샘플링이 포함됩니다. 동일한 데이터 세트에서 부트 스트랩을 두 번 실행하면 다른 답변을 얻을 수 있습니다. 부트 스트랩에 더 많은 샘플을 사용할수록 변형이 줄어 듭니다.

적용 범위는 동일한 가상 샘플링 분포에서 다른 데이터 세트에 대한 결과의 변동을 나타냅니다.


고마워, 나는 그것이 신뢰 한계가 시뮬레이션마다 다르다는 것을 알기 위해 코드를 생각해내는 것을 의미한다고 가정 할 것이다!
Sarah

7
정확하게 (pedantic?), 부트 ​​스트랩 자체가 Monte Carlo 기술 이 아님을 명확히해야합니다 . 그러나 특정 관심 수량을 계산하는 것은 종종 다루기 어렵 기 때문에 일반적으로 Monte Carlo 시뮬레이션을 사용하여 근사화 됩니다. 나는 문제의 말이 잘못 해석되기 쉽다는 것을 안다! 하나는 구별 할주의해야 오류를 샘플링 에서 몬테 카를로 근사 오류입니다. 후자는 동일한 샘플 에서 MC 부트 스트랩 근사를 여러 번 반복하여 지적한대로 현명하게 추정됩니다 . :)
추기경

1

" 몬테카를로 변형"자체 가 정확히 무엇을 의미하는지 잘 모르겠습니다 . 확실히 상한 (또는 하한)의 값 (예 : 힌트)과 같은 것들에서 반복들 사이에 얼마나 많은 변화가 있는지를 볼 수 있어야합니다. 아마도 그들은 당신이 부트 스트랩이 아닌 몬테 카를로를 위해 이것을하기를 원합니까? 그래도 운동에 필요한 조건은 아닙니다. 해당 문구가 무엇을 의미하는지 묻는 것이 가장 좋습니다.


당신의 도움을 주셔서 감사합니다! 아마도 지금은 상한과 하한의 변동을 살펴보고 나중에 몬테 카를로에 대해 물어볼 것입니다. 이제 그 일을 어떻게 처리해야하는지 ..
Sarah

여기에는 몇 가지 가능성이 있습니다. 하나는 더 낮습니다 (즉, 차이). 문제의 문구에 대한 나의 해석은 상한의 변이 및 하한의 변이 (즉, 2 개의 다른 변이)이지만 확실하지 않다고 생각합니다. 다른 참고로, R에서 MC 시뮬레이션을 수행 하는 방법 에 대한 질문의 일부 입니까?
gung-모니 티 복원

나는 2 가지 변형을 찾고 있다는 결론에 도달 했으므로 시도해 볼 것입니다!
Sarah

1
공평하게, 내가 지금 궁금해하는 것은, 지금 당신은이 시점에 나가는 것이 좋습니까, 아니면 우리가 그 질문이 요구하는 것에 접근하는 방법에 대한 추가 힌트가 필요합니까?
gung-복직 모니카

1
따라서 각 반복마다 상한 및 하한 (힌트)을 저장합니까?
gung-복직 모니카

1

이 숙제 과제에 대한 나의 이해는 특정 통계 기법에 대해 Monte Carlo 시뮬레이션을 수행하도록 요구한다는 것입니다. 즉, 임의의 데이터 세트를 시뮬레이션하고,이 기술을이 데이터 세트에 적용하고, 나중에 편리한 방법 (평균, 시뮬레이션 된 확률 등)으로 요약하기 위해 숫자를 저장합니다.

문제의 기술은 부트 스트랩인데, 여기에는 Monte Carlo 시뮬레이션이 포함됩니다 (whuber가 시연 한 것처럼 정확한 부트 스트랩을 수행하도록 요청받지 않은 경우). 따라서 시뮬레이션 결과로 표본 평균, 표본 표준 편차 및 부트 스트랩으로 얻은 평균의 신뢰 구간 한계를 저장할 수 있습니다.

n=10


3
정확한 부트 스트랩으로 작업하면서 배운 것 중 하나는 표준 정규 이론 CI 가 기울어 진 경우에도 작은 샘플에서 훨씬 더 잘 작동 한다는 것입니다. 부트 스트랩은 큰 표본으로 나옵니다. 이론은 정확한 것이 아니라 점근 적입니다.
whuber

2
@ whuber, 그것은 흥미로운 관찰입니다. 나는 보통 부트 스트랩의 점근 적 특성을 강조하지만 (Peter Hall의 Bootstrap and Edgeworth Expansions 책을 참조하여 이유를 이해하십시오) 이번에는 실패했습니다.
StasK
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.