- 読書ノート アーカイブ:http://yagays.github.com/blog/2012/10/20/archive-introducing-monte-carlo-methods-with-r/
練習問題 2.18
a. f(x)とMg(x)をプロットする
定数Mは例2.7のようにoptimize()関数で求めている.以下の図はfとgの分布を図示したもので,黒い曲線fに対して,青い曲線Mg(x)が全体を覆い被さるようになっていることがわかる.
1 2 3 4 5 6 7 |
|
b. 受理・棄却アルゴリズムを使ってfから2500個の乱数を生成する
ここで標準正規分布からの乱数を使うのは,g(x)が標準正規密度だから(P.59の受理・棄却法のアルゴリズムの1.にあるの部分に該当する).
この問題では2500個の受理された乱数が欲しいので,P.61のコードを真似て作成している.ただし,このコードは少々効率が悪く,決められた数の乱数を作ったらループが終わりというものではない(受理確率を元にして多めに作ってる)ので,ヒストグラムとして図示する際には2500個のみを取り出して作図している.
1 2 3 4 5 6 7 8 9 |
|
概ねfの分布に沿った乱数が生成されているようだ.乱数が2500個だけでは少し不明瞭のため,Nsimの数を104 にして再試したのが下の図.
c. シミュレーションから得られた受理率から正規化定数を求める
P.60にあるように,受理確率は基本的に1/Mだけれども,正規化されていない関数に関しては定数CがMに吸収されているので注意が必要となる.今回の場合,シミュレーションから求めた受理確率rを使うことで,以下の式から正規化定数を近似することができる.
今回の場合,Mは10.94,rは0.54となったので,Cは0.17程度だと見積もった.
1 2 3 4 5 6 7 8 9 10 |
|
1 2 3 4 |
|
さて,答え合わせ(?)だが,正規化定数は単純にfのの積分を求めることによって計算することができる.これにはRのintegrate()関数を使って-infからinfまでを計算すればよい.確率分布の定義から,これが1になるように正規化定数を定めれば良いということで,以下のように計算した結果,0.1696543となった.
1 2 |
|
練習問題 2.19 二重指数分布が候補分布の受理・棄却アルゴリズムにおいて標準正規分布から乱数を生成する際のMとg(x)の最適化
より,上界Mを取るときのx_maxの値を調べるには,とりあえずxで微分して0になるときの値を求めれば良い.expの部分を微分するとみたいな項が出てくるので,(厳密には).
次に,受理率を最適化するということは1/Mの値を大きくすれば良いので,結局はMの値の最大値を求めれば良い.のときのMをに関して微分して0になるときの値ということで計算していくと みたいな項が出てくるので,つまりの時にMが最大値を取り,受理率が最適化される.
練習問題 2.22 切断正規分布から正規乱数を生成する
a. 切断正規分布から乱数を生成する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
b. シミュレーションので受理する確率を求める
上で示したアルゴリズムで考える.z < aならアタリ,それ以外ならハズレというようなときにどれだけ数を撃てばz<aに入るかということを考えると,正規分布のz < aの面積を求めればいいことがわかる.なお,ここで出てくるという関数は定義されていないが,以下のような累積標準正規分布(本書P.78に出てくる)のことだと思われる.
この形式になるように,aからの累積正規分布を変形していけばよい.
ここで,とおくと,, のとき,をとる.よって,
となる.
また,aの値が裾にある(値が大きくなる)と,の値が小さくなるので,シミュレーション回数が多くなる.
c. 切断正規分布の乱数を正規分布から生成することを考える
- 目標分布;
- 候補分布:
より
となり候補分布の制約を満たすので,正規候補にもとづく受理・棄却アルゴリズムは切断正規分布から乱数を生成するために使える.
次に,このときの最適なMを考える.x=aにおいてより,この式をで微分すると
となるので,Mはのとき最適値をとる.
d. 候補分布に指数分布を使うことを考える
- 目標分布;
- 候補分布:
より,
となる.上式を前と同じように微分するとが出てくるので,のとき最大値を取り,で極限が与えられる.
次に,の場合に正当な候補密度になることを導く.f/gの比が0より大きいことを示せば良いのだが,上式を見ると結局expの外側の,つまりを調べないといけない.ということで,で微分して最適値の時の値を求める.
のときなので,
より
よって,となる.
じゃあプラスかマイナスかどっちなんだという話になるのだが,ここでという前提条件を使うと,
が成り立つ. というのはaよりちょっとだけ大きい数なので,上式を満たすaはとなり,この式は常に正である.よって,の場合に,正当な候補密度になる.