逆関数法

提供: testwiki
ナビゲーションに移動 検索に移動
逆関数法の概念図。テンプレート:Math を確率変数 テンプレート:Mvar の従う確率分布の累積分布関数とし、テンプレート:Mvar を標準一様分布に従う確率変数とする。このとき、確率変数 テンプレート:Mathテンプレート:Mvar と同じ確率分布に従う。

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

方法

累積分布関数の逆関数 テンプレート:Math の定義。一般に テンプレート:Math は逆関数を持つとは限らないが、右連続かつ単調非減少であり、テンプレート:Math} で定義することができる。

テンプレート:Mvar を生成させたい確率分布に従う確率変数とし、 テンプレート:Mathをその累積分布関数とする。テンプレート:Math連続単調増加関数であれば、逆関数 テンプレート:Math が存在する。テンプレート:Mvarテンプレート:Math上の一様分布に従う確率変数とすると、

X:=F1(U)

は累積分布関数 テンプレート:Math をもつ確率分布に従う確率変数となる。実際、これは

Pr{F1(U)x}=Pr{UF(x)}=F(x)

であることから確認できる。

一般に テンプレート:Math右連続単調非減少関数であり、通常の意味での逆関数が存在するとは限らないが、その逆関数 テンプレート:Math

F1(y):=inf{x|F(x)y},0y1

で定義すれば、同様な結果が得られる[1][2]。このように、一様分布に従う確率変数 テンプレート:Mvar と累積分布関数の逆関数 テンプレート:Math から所望の分布に従う確率変数 テンプレート:Math を生成させる方法を逆関数法という。逆関数法は、原理的には連続分布、離散分布に適用可能であるが、必ずしも逆関数が容易にも求まるとは限らず、また高速な乱数生成が得られるとは限らない[2]

指数分布

期待値を テンプレート:Math とする指数分布の累積分布関数

F(x)=1ex/μ

に対し、逆関数は

F1(y)=μln(1y)

であり、

X=μln(1U)

となる。テンプレート:Math も標準一様分布に従うため、高速化のためにテンプレート:Mathテンプレート:Mvar で置き換えた

X=μln(U)

を使うことができる。この場合、テンプレート:Mathでの処理に注意する必要がある。

コーシー分布

テンプレート:Illテンプレート:Math とするコーシー分布の累積分布関数

F(x)=12+1πarctanxσ

に対し、その逆関数は

F1(y)=σtanπ(y12)

であり、

X=σtanπ(U12)

となる。

離散分布

離散分布に従う確率変数 テンプレート:Mvar についても、累積分布関数の逆関数をテンプレート:Mathと定義することで、逆関数法を適用できる[2]。値 テンプレート:Mathを取る確率が テンプレート:Math である離散分布において、

i=1k1pi<yi=1kpi

が満たされるならば、

F1(y)=xk

であるから、

X=xk,ifi=1k1pi<Ui=1kpi

となる。但し、この方法は テンプレート:Mvar の取りうる値が多いと大小関係の評価時間がかかり、高速化には不向きである。

一覧

逆関数が陽に求まり、逆関数法が直接適用できる連続分布として、以下の例がある[4]

分布 F(x) X=F1(U)
指数分布
(平均値:テンプレート:Math
1exp(xμ),x0 μln(1U)
ワイブル分布
(尺度母数:テンプレート:Math、形状母数:テンプレート:Math
1exp((xη)β),x0 η((ln(1U))1/β
ガンベル分布
(尺度母数:テンプレート:Math、位置母数:テンプレート:Math
exp(exp((xμη))),<x<+ μηln(lnU)
コーシー分布
(尺度母数:テンプレート:Math
12+1πarctanxη,<x<+ ηtanπ(U12)
ロジスティック分布
(尺度母数:テンプレート:Math、位置母数:テンプレート:Math
11+exp(xμη),<x<+ μ+ηln(U1U)
パレート分布
(尺度母数:テンプレート:Math、形状母数:テンプレート:Math
1(bx)a,xb b(1U)1/a

積分や逆関数を求めるのが困難な場合

逆関数サンプリング法では与えられた確率分布の累積分布関数とその逆関数を計算する必要がある。それらの関数の解析解が既知である場合は、単純なプログラムで与えられた分布に従う擬似乱数を生成することができる。しかしこれらを解析的に求めるのは困難な場合もある。

求根アルゴリズムを使用する方法

確率密度関数を数値積分して累積分布関数の 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]。計算が高速な手法としてはテンプレート:仮リンクがある。

出典

テンプレート:脚注ヘルプ テンプレート:Reflist

参考文献

関連項目

テンプレート:確率分布の一覧