\(U\)を一様分布\(U(0,1)\)に従う乱数とする。このとき、ある確率密度関数\(f(x)\)に対する累積分布関数\(F(x)\)の逆関数\(F^{-1}\)を用いて、乱数\(X\)を\(X=F^{-1}(U)\)と定義すると\(X\)は分布\(f(x)\)に従う。
証明
まず、一般的な確率密度関数\(f(x)\)は
\[ f(x)\geqq 0,\qquad\int_{-\infty}^{+\infty}f(t)\mathrm{d}t=1\tag{1}\]
を満たしていて、その累積分布関数\(F(x)\)は次のようになる。
\[ \mathrm{P}[X\leqq x]=F(x)=\int_{-\infty}^xf(t)\mathrm{d}t\tag{2}\]
この定義による関数\(F(x)\)は必ず単調増加関数になるので累積分布関数には必ず逆関数\(F^{-1}\)がある。これを踏まえて、一様分布\(U(0,1)\)に従う確率変数\(U\)と何らかの累積分布関数の逆関数\(F^{-1}\)によって定義される確率変数\(X=F^{-1}(U)\)がどのような分布に従うかを計算してみると次のようになる。
\[ \mathrm{P}[a\leqq X\leqq b]= \int_{F(a)}^{F(b)}f_u(u)\mathrm{d}u= \int_{F(a)}^{F(b)}\mathrm{d}u\tag{3}\]
ここで、\(a,b\ (a\lt b)\)は適当な実数、\(f_u(u)\)は一様分布\(U(0,1)\)の確率密度関数で\(u\in[0,1]\)のとき\(f_u(u)=1\)、それ以外の時\(f_u(u)=0\)になる。累積分布関数は\([0,1]\)の範囲の値しかとらないからこのように積分する区間を変えずに変形できる。次に\(u=F(t)\)と変数変換する。累積分布関数を微分すると確率密度分布になることに注意すると
\[ \mathrm{d}u=\frac{\mathrm{d}F(t)}{\mathrm{d}t}\mathrm{d}t=f(t)\mathrm{d}t\]
さらに、\(u\)が\(F(a)\)から\(F(b)\)のとき\(t\)は\(a\)から\(b\)より、
\[ \mathrm{P}[a\leqq X\leqq b]= \int_{F(a)}^{F(b)}f_u(u)\mathrm{d}u= \int_{a}^{b}f(t)\mathrm{d}t\tag{4}\]
となって、これは\(X\)が確率密度分布\(f(x)\)で表される分布に従うことの定義そのもの、つまり\(X\)は分布\(f(x)\)に従うことが示された。
例
指数分布
\[ f_\lambda(x)=\lambda e^{-\lambda x},\qquad(x\geqq 0)\tag{5}\]
に従う乱数を生成する。まず累積分布関数を計算すると、
\[ F_\lambda (x)=\int_0^xf_\lambda(t)\mathrm{d}t= \int_0^x\lambda e^{-\lambda x}\mathrm{d}t= 1-e^{-\lambda x}\tag{6}\]
となる。この逆関数は
\[ F^{-1}(u)=-\frac1\lambda \log(1-u)\tag{7}\]
より、一様分布に従う乱数\(U\)として\(X=-(1/\lambda)\log(1-U)\)とすれば\(X\)は指数分布\(f_\lambda(x)\)に従う。 ここで、\(U\)が\([0,1]\)の一様分布ならば\(1-U\)も\([0,1]\)の一様分布になるから実際に指数分布を生成する場合は\(X=-(1/\lambda)\log U\)とした方が僅かに効率がよい。