逆関数法

逆関数法(ぎゃくかんすうほう、テンプレート:Lang-en-short)とは、累積分布関数の逆関数を用いて、標準一様分布に従う確率変数から、所望の分布に従う確率変数を生成させる方法[1][2][3]。逆関数サンプリング法(ぎゃくかんすうサンプリングほう、テンプレート:Lang-en-short)とも呼ばれる。計算機シミュレーションにおいて、一様分布に従う乱数から、所望の乱数を生成させるのに用いられる。
方法

テンプレート:Mvar を生成させたい確率分布に従う確率変数とし、 テンプレート:Mathをその累積分布関数とする。テンプレート:Math が連続な単調増加関数であれば、逆関数 テンプレート:Math が存在する。テンプレート:Mvar をテンプレート:Math上の一様分布に従う確率変数とすると、
は累積分布関数 テンプレート:Math をもつ確率分布に従う確率変数となる。実際、これは
であることから確認できる。
一般に テンプレート:Math は右連続な単調非減少関数であり、通常の意味での逆関数が存在するとは限らないが、その逆関数 テンプレート:Math を
で定義すれば、同様な結果が得られる[1][2]。このように、一様分布に従う確率変数 テンプレート:Mvar と累積分布関数の逆関数 テンプレート:Math から所望の分布に従う確率変数 テンプレート:Math を生成させる方法を逆関数法という。逆関数法は、原理的には連続分布、離散分布に適用可能であるが、必ずしも逆関数が容易にも求まるとは限らず、また高速な乱数生成が得られるとは限らない[2]。
例
指数分布
期待値を テンプレート:Math とする指数分布の累積分布関数
に対し、逆関数は
であり、
となる。テンプレート:Math も標準一様分布に従うため、高速化のためにテンプレート:Math を テンプレート:Mvar で置き換えた
を使うことができる。この場合、テンプレート:Mathでの処理に注意する必要がある。
コーシー分布
テンプレート:Illを テンプレート:Math とするコーシー分布の累積分布関数
に対し、その逆関数は
であり、
となる。
離散分布
離散分布に従う確率変数 テンプレート:Mvar についても、累積分布関数の逆関数をテンプレート:Mathと定義することで、逆関数法を適用できる[2]。値 テンプレート:Mathを取る確率が テンプレート:Math である離散分布において、
が満たされるならば、
であるから、
となる。但し、この方法は テンプレート:Mvar の取りうる値が多いと大小関係の評価時間がかかり、高速化には不向きである。
一覧
逆関数が陽に求まり、逆関数法が直接適用できる連続分布として、以下の例がある[4]。
| 分布 | ||
|---|---|---|
| 指数分布 (平均値:テンプレート:Math) |
||
| ワイブル分布 (尺度母数:テンプレート:Math、形状母数:テンプレート:Math) |
||
| ガンベル分布 (尺度母数:テンプレート:Math、位置母数:テンプレート:Math) |
||
| コーシー分布 (尺度母数:テンプレート:Math) |
||
| ロジスティック分布 (尺度母数:テンプレート:Math、位置母数:テンプレート:Math) |
||
| パレート分布 (尺度母数:テンプレート:Math、形状母数:テンプレート:Math) |
積分や逆関数を求めるのが困難な場合
逆関数サンプリング法では与えられた確率分布の累積分布関数とその逆関数を計算する必要がある。それらの関数の解析解が既知である場合は、単純なプログラムで与えられた分布に従う擬似乱数を生成することができる。しかしこれらを解析的に求めるのは困難な場合もある。
求根アルゴリズムを使用する方法
確率密度関数を数値積分して累積分布関数の F(x) を求め、F(x) = u は F(x) - u = 0 の事なので求根アルゴリズム(ニュートン法など)で x を求めてサンプリングする方法もある。F(x) - u の導関数は P(x) なので、それを求根アルゴリズムでは使用できる。
区分的線形累積分布関数を使用する方法
確率密度関数から区分的線形累積分布関数を作り、そこから求める方法もある[5]。
同時確率分布の場合
条件付き確率の定義 P(A, B) = P(B | A) P(A) を使い、単変量サンプリング問題に分割し、A → B と順番にサンプリングする方法もある。ただし、問題によっては、マルコフ連鎖モンテカルロ法などの他のサンプリング法を使用した方が良い場合もある。
正規分布の場合
正規分布に従う擬似乱数の生成法としては、ボックス=ミュラー法などが知られる。正規分布の分位関数は解析的に求められないが、分位関数の多項式近似を用いた逆関数法でも十分に精度よく正規分布に従う擬似乱数を生成することができ、実際にR言語では正規分布に従う擬似乱数の生成に逆関数サンプリング法が使われている[6]。計算が高速な手法としてはテンプレート:仮リンクがある。