이번 포스팅에서는 포스팅 5-1.1(https://moogie.tistory.com/108)과 5-1.2(https://moogie.tistory.com/108)를 응용하여 난수를 생성해보려고 합니다. 이론적인 부분부터 체크하고 난수 생성을 진행해 봅시다.
만일 확률변수 $Y$가 [0,1]의 균일분포를 가지고 난수를 생성하기 원하는 확률변수 $X$의 누적확률분포(CDF)의 역함수 $F_X^{-1}(x)$를 알고있다면 $X^* = F^{-1}_X(Y)$를 통해 확률변수 $X$의 난수를 추출할 수 있습니다.
$$F_{X^*}(x) = Pr[X^*<x] = Pr[F^{-1}_X(Y)<x] = Pr[Y<F_X(x)]$$
$Y$는 균일분포를 따르므로 누적확률분포 $F_Y(y) = y$ $(0<y<1)$를 만족하게 됩니다. 따라서 아래와 같이 유도 가능합니다.
$$Pr[Y<F_X(x)] = F_Y(F_X(x)) = F_X(x)$$
즉 $F_{X^*}(x) = F_X(x)$이므로 확률변수$X^* = F^{-1}_X(Y)$는 확률변수 X와 같은 변수임을 알 수 있습니다.
따라서, 누적확률분포의 역함수를 구하기 쉬운 확률변수가 존재한다면 균일분포를 사용하여 난수를 생성할 수 있게됩니다.
예시로 $X \sim U(0,2)$를 따르는 분포의 난수를 생성해 봅시다. $X$는 균일분포를 따르므로 확률분포(pdf)는 $f_X(x) = \frac{1}{2}$이며 누적확률분포는 $F_X(x) = \frac{x}{2}$입니다. 따라서 누적확률분포의 역함수는 $x=2y$ 이므로 $y$ 자리에 (0,1) 균일분포 난수를 넣어주면 $X$의 난수를 생성할 수 있습니다.
y <- runif(n=1e4, min=0, max=1) # Y ~ U(0,1)
x <- 2*y # X ~ U(0,2)
hist(x, probability = T)
누적확률분포와 역함수가 그려진 그래프를 통해 몇 좀더 자세하게 이해해봅시다.

$F(x) = Pr[X<x]$이므로 [a, b]사이의 임의의 값이 나올 확률은 [b, c] 사이의 임의의 값이 나올 확률보다 작습니다. 따라서 저희가 생성한 난수 역시 이러한 확률을 만족해야 합니다. 저희가 생성한 난수는 $F^{-1}(u)$이고 $U$는 0과 1사이의 값을 가지는 균일분포이므로 [0, 1]사이의 임의의 값을 가질 확률은 동일합니다. 따라서 x축에 있는 [0, 1] 사이에 있는 임의의 실현값 $u$에 대해 수직으로 직선을 그려서 만난 $F^{-1}(u)$의 값이 우리가 생성한 난수입니다. 처음으로 돌아와서 [a, b] 사이의 값을 가지기 위해서는 [0, $u^*$]에 속해야합니다. 반면에 [b, c] 사이의 값을 가지기 위해서는 [$u^*$, 1]에 속해야겠죠. [b, c] 사이의 값이 나올 확률이 높기 때문에 해당 구간에서 $F(x)$의 값이 크게 증가하는 것을 알 수 있습니다. 이와 유사하게 균일분포 U(0, 1)에서 나온 값이 [$u^*$, 1]에 속할 확률이 높은것을 확인할 수 있습니다.
그래프를 보면 X가 가질 수 있는 정의역은 상한은 c로 보이는데요, 균일분포를 통해 생성한 난수 역시 가질 수 있는 값이 c로 동일한 것을 확인할 수 있습니다. 마지막으로 $U_i \sim U(0, 1)$일 때 얻은 난수 $X_i = F_X^{-1}(U_i)$의 히스토그램을 그려보면 확률밀도분포($f_X(x)$)를 그리는 것을 확인할 수 있습니다.
'Statistics > Mathmetical Statistics' 카테고리의 다른 글
| [확률과 통계적 추론] 5-2.2 베타분포와 F분포 (0) | 2024.01.09 |
|---|---|
| [확률과 통계적 추론] 5-2.1 이변량 변수의 변환 (1) | 2024.01.09 |
| [확률과 통계적 추론] 5-1.2 Change-of-variable Technique (2) | 2024.01.07 |
| [확률과 통계적 추론] 5-1.1 Distribution Function Technique (1) | 2024.01.07 |
| [확률과 통계적 추론] 4-5. 이변량 정규분포 (0) | 2024.01.07 |