이 생성기는 무엇을 하나요
이 도구는 로그정규분포(log-normal distribution)를 따르는 의사난수 목록을 만들어 줍니다. 어떤 확률변수 X의 자연로그 \(\ln(X)\)가 정규분포를 따를 때, X를 로그정규분포라고 부릅니다. 이 생성기는 먼저 고전적인 Box-Muller 변환으로 표준정규 난수를 만든 뒤, 이를 원하는 정규분포 \(N(\mu, \sigma^2)\)에 맞게 변환하고, 마지막으로 지수함수를 취해 항상 양수인 로그정규 값을 얻습니다.
중요: μ와 σ가 의미하는 것
매개변수 \(\mu\)와 \(\sigma\)는 \(\ln(X)\), 즉 바탕이 되는 정규분포의 평균과 표준편차입니다. X 자체의 평균과 표준편차가 아니라는 점에 주의하세요. X의 실제 평균은 \(\exp(\mu + \sigma^2/2)\), 중앙값은 \(\exp(\mu)\), 분산은 \((\exp(\sigma^2) - 1)\cdot\exp(2\mu + \sigma^2)\)로 계산됩니다. 이 이론값들은 생성된 표본과 함께 표시되므로, 출력 결과가 올바른지 검산하는 데 활용할 수 있습니다.
$$\begin{aligned} \text{Mean} &= \exp\!\left(\mu + \tfrac{1}{2}\sigma^{2}\right) \\ \text{Median} &= \exp\!\left(\mu\right) \\ \text{Var} &= \left(e^{\sigma^{2}} - 1\right) e^{\,2\mu + \sigma^{2}} \end{aligned}$$사용 방법
\(\mu\)(임의의 실수), \(\sigma\)(0 이상의 값), 그리고 생성할 난수의 개수(1~1000개)를 입력하세요. 표시할 유효숫자 자릿수도 선택합니다. 실행할 때마다 새로운 균등 난수를 뽑기 때문에 값은 매번 달라집니다. Box-Muller 방식은 균등 난수 한 쌍에서 정규 난수를 두 개씩 만들어 내므로, 개수를 홀수로 지정하면 남는 한 개의 난수는 그냥 버립니다.
공식 설명
(0,1] 구간의 균등 난수 \(U_1, U_2\)에 대해 \(Z = \sqrt{-2\ln U_1}\,\cos(2\pi U_2)\)를 계산하면 \(Z \sim N(0,1)\)을 얻습니다. 그다음 \(Y = \mu + \sigma\, Z\)는 \(N(\mu, \sigma^2)\)를 따르고, \(X = \exp(Y)\)는 로그정규분포가 됩니다. \(\ln(0)\)을 계산하는 일을 막기 위해 \(U_1\)은 아주 작은 엡실론(epsilon) 값으로 하한을 둡니다.
$$\begin{gathered} X = \exp\!\left(\mu + \sigma\, Z\right) \\[1.5em] \text{where}\quad \left\{ \begin{aligned} Z &= \sqrt{-2\ln U_1}\,\cos(2\pi U_2) \\ U_1, U_2 &\sim \text{Uniform}(0,1) \end{aligned} \right. \end{gathered}$$
계산 예시
\(\mu = 1\), \(\sigma = 2\)로 두고 \(U_1 = 0.5\), \(U_2 = 0.25\)를 사용해 봅시다. 그러면 \(R = \sqrt{-2\ln 0.5} = 1.17741\)입니다. \(Z_1 = R\cos(\pi/2) = 0\)이고 \(Z_2 = R\sin(\pi/2) = 1.17741\)이 됩니다. 따라서
$$X_1 = \exp(1) = 2.71828, \quad X_2 = \exp(1 + 2\cdot 1.17741) = \exp(3.35482) \approx 28.64$$이론적 평균 \(\exp(3) = 20.0855\)와 중앙값 \(\exp(1) = 2.71828\)과도 잘 들어맞습니다.
자주 묻는 질문
왜 실행할 때마다 값이 다른가요? Math.random()을 사용하는 확률적 생성기이기 때문입니다. 시드(seed)를 고정하지 않으면 실행할 때마다 결과가 달라집니다.
σ = 0이면 어떻게 되나요? 분포가 퇴화(degenerate)되어 모든 값이 \(\exp(\mu)\)로 동일해집니다.
값이 음수가 될 수도 있나요? 아닙니다. 로그정규분포의 정의역은 \((0, \infty)\)이므로 모든 출력값은 항상 양수입니다.