정규 분포의 드로우를 사용하여 균일 분포의 드로우 시뮬레이션


15

최근 에 확률 질문 중 하나 인 다음과 같은 데이터 과학 인터뷰 리소스 를 구입했습니다 .

알려진 모수를 가진 정규 분포에서 추출한 경우 균일 분포에서 추출을 어떻게 시뮬레이션 할 수 있습니까?

원래의 생각 과정은 불연속 랜덤 변수의 경우 각 분포가 정규 곡선 아래에서 동일한 면적을 갖는 K 개의 고유 한 하위 구역으로 정규 분포를 나눌 수 있다는 것입니다. 그런 다음 변수가 떨어지는 정규 곡선의 영역을 인식하여 변수가 어떤 K 값을 사용할지 결정할 수 있습니다.

그러나 이것은 불연속 랜덤 변수에 대해서만 작동합니다. 연속 랜덤 변수에 대해 어떻게 똑같이 할 수 있는지에 대한 연구를했지만 불행히도 균일 한 랜덤 변수 를 입력 으로 사용하고 다른 분포에서 랜덤 변수를 출력 할 수있는 역 변환 샘플링과 같은 기술 만 찾을 수있었습니다 . 균일 한 무작위 변수를 얻기 위해이 과정을 반대로 수행 할 수 있다고 생각하고 있습니까?

또한 선형 랜덤 생성기의 입력으로 Normal 랜덤 변수를 사용하는 방법에 대해 생각했지만 이것이 작동하는지 확실하지 않습니다.

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

답변:


30

정규 분포의 계산과 관련이없는 간단한 대수 계산 사용하는 정신으로 , 나는 다음에 기대어 들었습니다. 그것들은 내가 생각한대로 (따라서 점점 더 창의적이 되려면) 주문되었지만, 나는 가장 훌륭하고 가장 놀라운 것을 마지막으로 구했습니다.

  1. Box-Mueller 기술 반전 : 각 법선 쌍 에서 두 개의 독립적 인 유니폼을 다음과 같이 구성 할 수 있습니다.(엑스,와이) (간격에서 [ - π , π ] ) 및 EXP ( - ( X 2 + Y 2 ) / 2 ) ( [ 0 , 1 ] 간격으로).아탄 2(와이,엑스)[π,π]특급((엑스2+와이2)/2)[0,1]

  2. 두 그룹의 법선을 취하여 일련 수득 그 제곱의 합 variates Y 1 , Y 2 , ... , Y , ... . 쌍에서 얻은 표현χ22Y1,Y2,,Yi,

    엑스나는=와이2나는와이2나는1+와이2나는

    균일 한 분포 를 갖습니다 .Beta(1,1)

    이것은 기본적이고 간단한 산술 만 필요하다는 것을 분명히해야합니다.

  3. 때문에 피어슨 상관 계수의 정확한 분포 표준 변량 정규 분포 네 쌍의 시료를 균일에 분포 , 우리는 단순히 (즉, 여덟 개 값 네 쌍의 그룹이 법선 걸릴 수도 각 세트) 및 이러한 쌍의 상관 계수를 반환합니다. (이에는 간단한 산술과 2 제곱근 연산이 포함됩니다.)[1,1]

  4. 고대부터 구의 원통형 투영 (3 공간의 표면)은 같은 면적 으로 알려져 있습니다 . 이것은 구에 균일 한 분포를 투영 할 때 수평 좌표 (경도에 해당)와 수직 좌표 (위도에 해당)가 균일 한 분포를 갖음을 의미합니다. 3 변량 표준 정규 분포는 구형 대칭이므로 구면으로 의 투영은 균일합니다. 경도를 얻는 것은 본질적으로 Box-Mueller 방법 ( qv ) 의 각도와 동일한 계산 이지만 투영 된 위도는 새로운 것입니다. 구면으로의 투영은 3 배의 좌표 이 시점에서 z 는 투영 된 위도입니다. 따라서 3, X 3 i - 2 , X 3 i - 1 , X 3 i 그룹으로 정규 변량을 취하고계산(x,y,z)zX3i2,X3i1,X3i

    X3iX3i22+X3i12+X3i2

    위한 .i=1,2,3,

  5. 대부분의 컴퓨팅 시스템에 숫자를 나타내므로 , 등번호의 생성은 일반적으로 균일하게 분포 생성함으로써 시작 정수 사이 2 32 - 1 (또는 높은 전력 2 컴퓨터 워드 길이에 관한) 필요에 따라이를 재조정. 이러한 정수는 내부적으로 32 개의 이진수로 표시됩니다. Normal 변수를 중간 값과 비교하여 독립적 인 임의의 비트를 얻을 수 있습니다. 따라서 Normal 변수를 원하는 비트 수와 동일한 크기의 그룹으로 나누고 각 변수를 평균과 비교하고 결과의 참 / 거짓 결과 시퀀스를 이진수로 어셈블하면 충분합니다. 쓰기 k02321232k비트 수 및 부호 (즉, H (H x > 0 x ) = 1 이고그렇지 않으면 H ( x ) = 0 ) 를 공식과 함께정규화 된 균일 값을 [ 0 , 1로 표현할 수 있음 )H(x)=1x>0H(x)=0[0,1)

    j=0k1H(Xkij)2j1.

    variates는 에서 도출 될 수 있는 그 중간 인 연속 분포 0 (예를 들면, 표준 정규 등); 그것들은 k 개의 그룹으로 처리되며 , 각 그룹은 하나의 의사-균일 값을 생성합니다.Xn0k

  6. 거부 샘플링 은 임의 분포에서 랜덤 변량을 추출 하는 유연하고 강력한 표준 방법입니다. 목표 분포에 PDF 가 있다고 가정합니다 . PDF 를 사용한 다른 분포 에 따라 값 Y 가 그려집니다.fY. 거부 단계에서 0 g ( Y ) 사이의 균일 한 값 U Y 와독립적으로그리고 f ( Y ) 와 비교됩니다. 더 작 으면 YgU0g(Y)Yf(Y)Y유지되지만 그렇지 않으면 프로세스가 반복됩니다. 그러나이 접근법은 원형으로 보입니다. 처음에 균일 한 변이가 필요한 프로세스로 어떻게 균일 한 변이를 생성합니까?

    답은 거부 단계를 수행하기 위해 실제로 균일 한 변이가 필요하지 않다는 것입니다. 대신 ( 이라고 가정 ) 공정한 동전을 뒤집어 0 또는 1을 무작위로 얻을 수 있습니다 . 이는 간격 [ 0 , 1 ) 에서 균일 한 변이 U 의 이진 표현에서 첫 번째 비트로 해석됩니다 . 결과물 인 경우 0 것을 의미 0 U < 1 / 2 ; 그렇지 않으면, 1 / 2 U < 1 . g(Y)001U[0,1)00U<1/21/2U<1 시간의 절반이 거부 단계를 결정하기에 충분하다 : 만약 이지만 동전은 0입니다 .f(Y)/g(Y)1/20 허용되어야는; 만약 F ( Y ) / g ( Y ) < 1 / 2 이지만 경화은 1 , Y는 거부한다; 그렇지 않으면 U 의 다음 비트를 얻기 위해 동전을 다시 뒤집어 야합니다. 어떤 가치 f ( YYf(Y)/g(Y)<1/21YU 못한 -가 1 / 2 각 플립 후에 중지 확률은 플립의 예상 개수에만 1 / 2 ( 1 ) + 1 / 4 ( 2 ) + 1 / 8 ( 3 ) + + 2 - n ( n ) + = 2 입니다.f(Y)/g(Y)1/21/2(1)+1/4(2)+1/8(3)++2n(n)+=2

    거부 횟수가 적 으면 거부 샘플링이 가치 있고 효율적일 수 있습니다. Normal PDF 아래에 가장 큰 사각형 (균일 분포를 나타냄)을 맞추면됩니다.

    일반 및 균일 PDF

    미적분학을 사용하여 사각형의 면적을 최적화하면 끝 점이 이고 높이가 exp ( 1 / 2 ) / 와 같아야합니다.±1, 면적이0.48보다 약간 큽니다. 등이 정상적 밀도 사용하여g을하고 거부하는 모든 값의 간격 외측[-1,1]자동 그렇지 거부 절차를 적용하여, 우리는 균일에서 variates 얻[-1,1]효율적 :exp(1/2)/2π0.2419710.48g[1,1][1,1]

    • 분획에는 시간 정상 변량 너머 [ - 1 , 1 ] 과 즉시 거절된다. ( Φ 는 표준 Normal CDF입니다.)2Φ(1)0.317[1,1]Φ

    • 남은 시간에 이진 기각 절차를 따라야하며 평균에 두 개의 정규 변이가 더 필요합니다.

    • 전체 절차에는 평균 단계.1/(2exp(1/2)/2π)2.07

    각 균일 한 결과를 생성하는 데 필요한 정규 변량의 예상 수는 다음과 같습니다.

    2eπ(12Φ(1))2.82137.

    이 꽤 효율적 일반 PDF (1) 계산이 지수 (2) 값 계산 있어야한다는 사실을 명심해야하지만 한번에 미리 계산해야합니다. Box-Mueller 방법 ( qv ) 보다 계산이 약간 적습니다 .Φ(1)

  7. 균일 분포 의 순서 통계 에는 지수 격차가 있습니다. 두 노멀 (제로 평균)의 제곱의 합은 지수이기 때문에, 우리는 그러한 노멀의 쌍의 제곱을 합산하고, 이들의 누적 합을 계산하고, 간격에 해당하는 결과의 크기를 재조정함으로써 독립적 인 유니폼 의 실현을 생성 할 수 있습니다 [ 0 , 1 ] 이고 마지막 것을 삭제합니다 (항상 1 ). 이 방법은 단일 구간의 제곱, 합산 및 끝 부분 만 필요하므로 만족스러운 방법입니다.n[0,1]1

    값이 자동으로 오름차순 것이다. 이러한 정렬이 필요한 경우, 이 방법은 정렬 의 O ( n log ( n ) ) 비용을 피하는 한 다른 모든 방법보다 계산 상 우수합니다 . 그러나 일련의 독립적 인 유니폼이 필요한 경우 이러한 n 값을 임의로 정렬 하면 트릭을 수행합니다. (Box-Mueller 방법, qv ) 에서 볼 수 있듯이 각 법선 쌍의 비율은 각 쌍의 제곱의 합과 무관하므로 무작위 순열을 얻을 수있는 수단이 이미 있습니다 : 누적 합을 해당 비율로 정렬하십시오 . ( n이nO(nlog(n))nn이 프로세스 는 효율성이 거의없는 작은 그룹의 에서 수행 될 수 있습니다 . 왜냐하면 각 그룹은 k 균일 한 값 을 생성하기 위해 2 ( k + 1 )의 법선 만 필요하기 때문 입니다. 고정 k 의 경우 점근 적 계산 비용은 O ( n log ( k ) ) = O ( n ) 이며 n 개의 균일 한 값 을 생성하기 위해 2 n ( 1 + 1 / k ) 정규 변이가 필요 합니다.)k2(k+1)kkO(nlog(k))O()2(1+1/케이)

  8. 최상의 근사치로, 표준 편차가 큰 정규 변량 은 훨씬 작은 값 범위에서 균일하게 보입니다 . 이 분포를 범위로 롤링하면 (값의 소수 부분 만 취함으로써) 모든 실제적인 목적에 대해 균일 한 분포를 얻습니다. 이것은 매우 효율적이며 모두의 가장 간단한 산술 연산 중 하나를 필요로합니다. 각 법선 변량을 가장 가까운 정수로 반올림하고 초과 량을 유지하십시오. 실제 구현을 살펴보면 이 접근 방식의 단순성이 매력적입니다 .[0,1]R

    rnorm(n, sd=10) %% 1
    

    안정적으로 생산 n범위의 균일 한 값을 단의 비용으로 통상 variates과 거의 계산.[0,1]n

    (표준 편차가 인 경우에도이 근사값의 PDF는 다음 그림과 같이 균일 한 PDF와 10 8 에서 한 부분 미만으로 차이가 있습니다 ! 안정적으로 감지하려면 10 16 값 의 샘플이 필요합니다. 표준 편차가 클수록 불균일성이 너무 작아 계산조차 할 수 없습니다 (예 : 코드에 표시된 SD가 10 인 경우 유니폼의 최대 편차) PDF가 아니라 (10) - (857) .)110810161010857

    대략적인 PDF


모든 경우에 "알려진 매개 변수가있는"정규 변수는 쉽게 추정되고 위에서 가정 한 표준 법선으로 스케일링 될 수 있습니다. 그 후, 결과적으로 균일하게 분포 된 값은 원하는 간격을 포함하도록 최신 화되고 크기를 조정할 수 있습니다. 여기에는 기본 산술 연산 만 필요합니다.

이러한 구성의 용이성은 다음 R코드에 의해 입증됩니다. 다음 코드는 대부분 한두 줄만 사용합니다. 이들 결과의 정확성이 거의 균일 목격된다에 기초 히스토그램 각각의 경우에 독립적 인 값 (일곱 시뮬레이션 약 12 초 필요). 참고로 (이 도표에 나타나는 변동량이 걱정되는 경우) 균일 한 난수 생성기로 시뮬레이션 된 균일 한 값의 히스토그램 이 끝에 포함됩니다.100,000R

히스토그램

이러한 모든 시뮬레이션은 1000 개의 빈을 기반으로 한 테스트를 사용하여 균일성에 대해 테스트되었습니다 . 어느 것도 상당히 불균일 한 것으로 간주 될 수 없었다 (최저의 p- 값은 3 % - '실제 균일 숫자 생성기에서 생성 된 결과 의 경우!').χ210003%R

set.seed(17)
n <- 1e5
y <- matrix(rnorm(floor(n/2)*2), nrow=2)
x <- c(atan2(y[2,], y[1,])/(2*pi) + 1/2, exp(-(y[1,]^2+y[2,]^2)/2))
hist(x, main="Box-Mueller")

y <- apply(array(rnorm(4*n), c(2,2,n)), c(3,2), function(z) sum(z^2))
x <- y[,2] / (y[,1]+y[,2])
hist(x, main="Beta")

x <- apply(array(rnorm(8*n), c(4,2,n)), 3, function(y) cor(y[,1], y[,2]))
hist(x, main="Correlation")

n.bits <- 32; x <-  (2^-(1:n.bits)) %*% matrix(rnorm(n*n.bits) > 0, n.bits)
hist(x, main="Binary")

y <- matrix(rnorm(n*3), 3)
x <- y[1, ] / sqrt(apply(y, 2, function(x) sum(x^2)))
hist(x, main="Equal area")

accept <- function(p) { # Using random normals, return TRUE with chance `p`
  p.bit <- x <- 0
  while(p.bit == x) {
    p.bit <- p >= 1/2
    x <- rnorm(1) >= 0
    p <- (2*p) %% 1
  }
  return(x == 0)
}
y <- rnorm(ceiling(n * sqrt(exp(1)*pi/2))) # This aims to produce `n` uniforms
y <- y[abs(y) < 1]
x <- y[sapply(y, function(x) accept(exp((x^2-1)/2)))]
hist(x, main="Rejection")

y <- matrix(rnorm(2*(n+1))^2, 2)
x <- cumsum(y)[seq(2, 2*(n+1), 2)]
x <- x[-(n+1)] / x[n+1]
x <- x[order(y[2,-(n+1)]/y[1,-(n+1)])] 
hist(x, main="Ordered")

x <- rnorm(n) %% 1 # (Use SD of 5 or greater in practice)
hist(x, main="Modular")

x <- runif(n)      # Reference distribution
hist(x, main="Uniform")

2
Z=(X1X2)/(X3X4)X )이며 cdf가 좋습니다.
추기경

1
보다 일반적으로, 원리는 계산 가능한 cdf로 샘플에서 중추적 인 양 을 찾는 것 입니다. 이는 신뢰 구간과 가설 검정을 구성하는 것과 밀접하게 관련되어 있으며, 후자의 경우보다는 사용 된 요소의 수를 최적화하여 고정 된 표본 크기의 정보를 최대화하는 데 더 중점을두고 있습니다.
추기경

@Cardinal 흥미로운 의견과 9 번째 방법 (코시)에 감사드립니다. 좋은 근사값 만 찾으면 중추적 인 양을 찾는 것조차 불필요합니다. 예를 들어 (8)은 소수의 초기 결과를 예약하여 대략적인 규모를 설정하면 완벽하게 작동합니다.
whuber

8

엑스(μ,σ2)Φμ,σ2Φμ,σ2(엑스)(0,1)(0,1) 우리가 볼을

(Φμ,σ2(엑스))=(엑스Φμ,σ21())=

11Φμ,σ2(엑스)(0,1)σ아르 자형


4
역변환 샘플링의 역수입니다!
Roger Fan

두 번째 단락의 두 번째 문장에 대해 자세히 설명해 주시겠습니까? 나는 다음을 이해하는데 어려움을 겪고있다 : "이것은 Borel σ- 대수의 발전기에 대해 상응하는 측정 값이 같다는 것을 보여 주었으므로 Φμ, σ2 (X)가 (0,1)에 균일하게 분포되어 있음을 보여주기에 충분하다 ℝ에. "
웰링턴

실제 임의 변수를 보여주기 위해 엑스분포가 균등하므로 해당 측정 값이 엑스()모든 실제 선 집합에 대한 균일 분포 분포와 동일합니다. 그러나 실제로 일부 발전기를 고려하면 충분합니다.σ측정 정리의 독창성으로 인해 대수-. 생성기 세트에서 동일하면 측정 가능한 모든 세트에서 동일합니다. 이것은 대답에 대한 측정 이론적 인 첨부 파일 일뿐입니다.
swmo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.