logo

一変量確率変数のサンプリング方法 📂数理統計学

一変量確率変数のサンプリング方法

概要

確率変数の具体的な実現を求める方法だ。

定理

単変量確率変数 TT累積分布関数 F=FTF = F_{T}増加関数だとする。そうすると、一様分布に従う確率変数 UU(0,1)U \sim U \left( 0,1 \right) に対して次が成立する。 T=F1(U) T = F^{-1} \left( U \right)

説明

累積分布関数の値域は常に [0,1][0,1] であることを考えると、当たり前だけど賢い方法だ。とにかく 00 から 11 の間のどれか一つだけ値を求めれば、必ず FF の値域に落ちるし、それに対応する逆像を探せば、TT がどんな分布でもサンプリングできるからだ。実際に厳密に言えば、どんな分布でも可能ってわけじゃないけど、ある点に UU が落ちるのを逆算するアイディアは、どんな分布にも効果的だ。

UU はどうやって見つける?

UU さえあれば、求める単変量確率変数の累積分布関数を見つけられるだろうけど、実はその UU を抽出するとき、この方法を使えなくて、UU は別の方法でサンプリングしなければならない。

アナログに一様分布に従う UU の実現を抽出する方法は、例えば次の通りだ:

  • (1) ランダム数表(0から9までの数字がランダムに書かれた表)を準備する。
  • (2) 与えられたシードナンバー ss に従い、ランダム数表の前部分を捨てて、ss から数表を読む。
  • (3) 十分に長い長さ nn まで書く。例えば、34920 73125 から n=4n=4 番目まで書くと決めたら、3492になる。
  • (4) 最初に 0.0. をつければいい。例を続けて書くと、u=0.3492u = 0.3492 を得る。

デジタルに一様分布に従う UU の実現を抽出する方法は、例えば次の通りだ:

  • (1) ランダムナンバージェネレーター(0と1を擬似ランダム数として返すアルゴリズム)を準備する。
  • (2) 十分に長い nn-bitメモリを準備する。
  • (3) シードナンバー ss に従い、メモリに nn 個の 00 もしくは 11 を保存する。例えば、10110 10011 で n=4n=4-bitなら、1011だ。
  • (4) メモリに書かれた二進数を十進数に変換して (2n1)\left( 2^{n}-1 \right) で割る。例を続けると、10112=111011_{2} = 11 で、241=152^{4}-1 = 15 なので、u=0.733u = 0.733 \cdots を得る。

証明

P(F1(U)t)=F(t)P \left( F^{-1} (U) \le t \right) = F(t) を示せばいい。FF は増加関数なので、逆関数 F1F^{-1} が存在し、全ての tRt \in \mathbb{R} に対して P(F1(U)t)=P(F(F1(U))F(t))=P(UF(t))=F(t) \begin{align*} & P \left( F^{-1} (U) \le t \right) \\ =& P \left( F \left( F^{-1} (U) \right) \le F (t) \right) \\ =& P \left( U \le F (t) \right) \\ =& F(t) \end{align*} 最後の等式は UU が一様分布に従うために成立する。

F1F^{-1} が存在しない場合は?

サポートが接続されていない、つまり確率密度関数に00 の部分があれば、証明で使われた F1F^{-1} が存在しない可能性がある。例えば、中央が完全に 00 の二つのピークを持つ確率密度関数 ff があれば、FF は増加関数ではなくなり、定理の内容が適用されない。

しかし、私たちは直感的に、私たちのランダムサンプルが正確にその点に当たることはほとんどないと知っている。もっと正確に言うと、正確にその点が抽出される確率は00 であることを知っているが、このような厄介な場合は、測度論の内容を引っ張ってきて、FF の値域で増加しない点の集合を考えたとき、それが零集合であることを指摘して、ほぼ確実にサンプリングに問題がないことを示せばいい。

ただ、このような考察は「単変量確率変数サンプリング」という単純な内容に比べて過度に複雑で、一様分布から求めるランダムサンプルをどのように抽出するかの原理だけ正確に理解しておけば十分だ。