逆関数法の証明について解説

に公開

はじめに

乱数を自分で作るときに便利な「逆関数法」。
この方法の根本にあるのが、
X=F^{-1}(U)とするとXが元の分布に従う」という定理です。
この証明は直感的には少し分かりづらいこともあるのでまとめてみました。

用語の整理

まず用語を整理しましょう。

  • 確率分布は Q_* と表します。
  • 累積分布関数は F_*(x) = P(X_* \leq x) という形で表現します。
    (ここでのPは「確率」を意味し、分布の記号Qとは区別しています。)
  • 実際に分布からサンプルされた値は X_*U と呼びます。
    累積分布関数は、ある値 x 以下になる確率を表し、通常は0から1まで単調増加します。

「分布に従う」とはどう示す?

「分布が同じだ」ということを証明するにはどうすればよいでしょうか?
分布そのものは直接比較できないため、累積分布関数がすべてのxで一致することを示せばよいです。
具体的には、

F_1(x) = F_2(x) \Leftrightarrow P(X_1 \leq x) = P(X_2 \leq x) \Leftrightarrow Q_1 = Q_2

となります。
これは、「どんな値xでもそれ以下になる確率が同じなら分布も同じ」という意味です。

一様分布の性質

一様分布とは、区間[0,1]の範囲で「どの値も同じ確率で出る」分布のことです。
たとえば、0.1が出る確率も0.5が出る確率も0.9が出る確率も同じです。
この一様分布Uの累積分布関数F_u(x)は、

F_u(x) = P(U \leq x)

で定義されます。
区間[0,1]の中で、Ux以下の値をとる確率は、
区間の長さで考えると単純に「0からxまでの幅」なので、
P(U \leq x) = x \quad (0 \leq x \leq 1)

となります。
つまり、たとえばx=0.3なら、Uが0.3以下になる確率は0.3、
x=0.75なら確率は0.75、というわけです。
このように、一様分布の累積分布関数は単純にxと一致します。

逆関数法の証明

いよいよ本題です。
逆関数法では、
Uを一様分布の乱数(0から1の間)としてX = F^{-1}(U)とすると、Xは元の分布に従う」
ということを示します。
そのために、Xの累積分布関数 G(x) と元の累積分布関数 F(x) が等しいことを証明します。
まずは累積分布関数の定義から。

G(x) = P(X \leq x) = P(F^{-1}(U) \leq x)

ここで、F^{-1}Fの逆関数で、Fは単調増加関数なので、
F^{-1}(U) \leq x \iff U \leq F(x)

となりますので、
G(x) = P(F^{-1}(U) \leq x) = P(U \leq F(x))

さらにUは一様分布なので、

P(U \leq F(x)) = F(x)

ちなみに範囲条件については累積分布関数は元々0 \leq F(x) \leq 1なので不要です。
これを使うと、
G(x) = P(U \leq F(x)) = F(x)

となり、晴れてXの分布が元の分布と一致することを示せました。

おわりに

一様分布の生成は多くの言語でパッケージとして共有されているので、これを使えば自前で表現でできる分布の幅が広がりそうですね。
ここまで見ていただきありがとうございました。

Discussion