逆関数法(ぎゃくかんすうほう、英: inversion method, inverse transform method)とは、累積分布関数の逆関数を用いて、標準一様分布に従う確率変数から、所望の分布に従う確率変数を生成させる方法[1][2][3]。逆関数サンプリング法(ぎゃくかんすうサンプリングほう、英: inverse transform sampling)とも呼ばれる。計算機シミュレーションにおいて、一様分布に従う乱数から、所望の乱数を生成させるのに用いられる。
X を生成させたい確率分布に従う確率変数とし、 F(x) =Pr{X ≤ x}をその累積分布関数とする。y=F(x) が連続な単調増加関数であれば、逆関数 F-1(y) が存在する。U を[0,1)上の一様分布に従う確率変数とすると、
-
は累積分布関数 F(x) をもつ確率分布に従う確率変数となる。実際、これは
-
であることから確認できる。
一般に F(x) は右連続な単調非減少関数であり、通常の意味での逆関数が存在するとは限らないが、その逆関数 F-1(y) を
-
で定義すれば、同様な結果が得られる[1][2]。このように、一様分布に従う確率変数 U と累積分布関数の逆関数 F−1(y) から所望の分布に従う確率変数 X=F−1(U) を生成させる方法を逆関数法という。逆関数法は、原理的には連続分布、離散分布に適用可能であるが、必ずしも逆関数が容易にも求まるとは限らず、また高速な乱数生成が得られるとは限らない[2]。
期待値を μ > 0 とする指数分布の累積分布関数
-
に対し、逆関数は
-
であり、
-
となる。1 − U も標準一様分布に従うため、高速化のために1 − U を U で置き換えた
-
を使うことができる。この場合、U=0での処理に注意する必要がある。
尺度母数(英語版)を σ > 0 とするコーシー分布の累積分布関数
-
に対し、その逆関数は
-
であり、
-
となる。
離散分布に従う確率変数 X についても、累積分布関数の逆関数をF−1(y)=inf{x | F(x) ≥ y}と定義することで、逆関数法を適用できる[2]。値 x1, x2, … ,を取る確率が p1, p2, … , である離散分布において、
-
が満たされるならば、
-
であるから、
-
となる。但し、この方法は X の取りうる値が多いと大小関係の評価時間がかかり、高速化には不向きである。
逆関数が陽に求まり、逆関数法が直接適用できる連続分布として、以下の例がある[4]。
分布 |
|
|
指数分布 (平均値:μ>0) |
|
|
ワイブル分布 (尺度母数:η>0、形状母数:β>0) |
|
|
ガンベル分布 (尺度母数:η>0、位置母数:−∞<μ<+∞) |
|
|
コーシー分布 (尺度母数:η>0) |
|
|
ロジスティック分布 (尺度母数:η>0、位置母数:−∞<μ<+∞) |
|
|
パレート分布 (尺度母数:b >0、形状母数:a >0) |
|
|
逆関数サンプリング法では与えられた確率分布の累積分布関数とその逆関数を計算する必要がある。それらの関数の解析解が既知である場合は、単純なプログラムで与えられた分布に従う擬似乱数を生成することができる。しかしこれらを解析的に求めるのは困難な場合もある。
確率密度関数を数値積分して累積分布関数の 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]。計算が高速な手法としてはジッグラト法(英語版)がある。