균등분포를 이용해서 표본을 뽑아낼 수 있다.
방법
- 균등분포에서 표본을 뽑아낸다.
- X의 분포함수의 역함수를 이용, X의 표본을 생성한다.
- 보통 변수변환을 사용해 역함수를 만든다.
- 그래도 안되면 수치해석을 이용한다.
- X의 히스토그램을 작성하고, X의 확률함수와 비교한다.
예시 1
Y = F_X(x) \sim U(0,1)
F_X~^{-1}~(Y) = X
여기서 역함수를 구해보면 다음과 같다.
F_X(x) = 1 - e^{-x},
\kern{10pt}
y = 1 - e^{-x},
\kern{10pt}
e^{-x} = 1-y \\[20pt]
\log(e^{-x}) = \log(1-y)\\[10pt]
-x = \log(1-y)
예시 2
f_X(x) = \dfrac{k}{x}~~I(1\le X \le5)
X의 표본을 추출하기 위해 U[0, 1]을 이용.
우선 k값을 구한다.
P(-\infty \le X \le \infty) = \int_{1}^{5}~\dfrac{k}{x}dx =
k \cdot log(x)\biggr\rvert_{1}^{5}
\\[10pt]
= k [\log(5) - \log(1)] = k\cdot\log(5) = 1
\\[20pt]
\therefore~k = \dfrac{1}{\log(5)}
이를 이용해 역함수를 구한다.
F_X(x) = \dfrac{log(x)}{log(5)}
~\rightarrow~
y = \dfrac{log(x)}{log(5)}
\\[20pt]
log(x) = log(5) \cdot y,
\kern{10pt}
e^{log(x)} = e^{log(5) \cdot y}
\\[20pt]
x = 5^y,\kern{10pt}
F_X~^{-1}~(y) = 5^y
R언어를 이용한다.
r
xx = 10000
y = runif(xx) # 균등분포에서 10000개 표본추출
x = 5**y # 역함수
curve(1/(x*log(5)), 1, 5) # 원래 그래프 모양
hist(y, nclass=30) # y의 히스토그램
hist(x, nclass=30) # x의 히스토그램
curve() 사용 시, 원래 확률함수의 그래프가 다음과 같이 나온다. 범위는 지시함수에서 표시된대로 1~5로 설정했다.
결과는 다음과 같다.