How to | モンテカルロシミュレーションを行う方法

モンテカルロ法は,ランダムに生成された数や事象を使って,ランダムな過程のシミュレーションを行い,複雑な結果を推定する.例えばこれは,金融システムのモデル化,電気通信網のシミュレーション,物理の高次元積分の結果の計算等に使用される.モンテカルロシミュレーションは,Wolfram言語の組込みの乱数生成関数を使って直接構築することができる.

乱数列が,非常に簡単なモンテカルロシミュレーションである場合もある.例えば,平均値0の正規分布から独立して生成された乱数のリストは,ホワイトノイズ過程のシミュレーションを行うことができる.

RandomVariateNormalDistributionと一緒に使って,平均値が0で標準偏差が1の正規分布に従う20個の数の数列を生成する:

In[1]:=
Click for copyable input
Out[1]=

ListPlotを使ってデータを可視化する:

In[2]:=
Click for copyable input
Out[2]=

これでデータからランダムウォークを構築することができる:

In[3]:=
Click for copyable input
Out[3]=

ウォークをゼロで始めるために,ゼロをリストの先頭に加える:

In[4]:=
Click for copyable input
Out[4]=
In[5]:=
Click for copyable input
Out[5]=

Accumulateを使って連続的にデータの総和を求め,その後それをListLinePlotで可視化する:

In[6]:=
Click for copyable input
Out[6]=

以下の定義は上のコマンドを組み合せてランダムウォークを生成する.このランダムウォークを使うと,多くのランダムウォークのシミュレーションを行い,その特性を分析することができる.

長さnのランダムウォークを生成する関数を定義する:

In[7]:=
Click for copyable input

Tableを使って長さ100の5つのランダムウォークを作成する.その後このランダムウォークをListLinePlotで可視化する:

In[8]:=
Click for copyable input
Out[8]=

今度は,それぞれが長さ100である1000個のウォークを生成する.結果を見る必要はないので,セミコロン()で非表示にする:

In[9]:=
Click for copyable input

これでランダムウォークのどの部分についてでも記述的統計を計算することができる.ここでは各ウォークの最後の位置が分析されている.

Part関数の簡略形)を使って,各ランダムウォークの最終データ点を得る:

In[10]:=
Click for copyable input

1000個のランダムウォークから最終データ点についてさまざまな統計を計算する:

In[11]:=
Click for copyable input
Out[11]=
    

モンテカルロ法は,定数,数値積分等の値を近似するために使うこともできる.例えば以下では,半径1の円を囲む正方形にランダムな点を生成し,正方形と円の面積の関係を使うことによって, の値を近似する.

{-1,-1}および{1,1}の境界を持つ正方形内に1万個の点を生成する:

In[1]:=
Click for copyable input

生成された点を示す:

In[2]:=
Click for copyable input
Out[2]=

正方形の面積に,原点を中心とする半径1の円の中にある点の割合を掛け, の近似を得ることができる.

正方形の面積(4)に,円の中にある点の割合を掛ける:

In[3]:=
Click for copyable input
Out[3]=

より多くの点を使うか,いくつかの近似値を平均するかすると,通常よりよい近似値が得られる.

大きさが の標本から を近似する関数を定義する:

In[4]:=
Click for copyable input

100万個の点を使って を近似する:

In[5]:=
Click for copyable input
Out[5]=

大きさ1万個の標本から50個の近似値を平均して, の近似値を求める:

In[6]:=
Click for copyable input
Out[6]=
    

モンテカルロシミュレーションは,関心を持つシステムの性質が複雑である場合に最も役に立つ.ベイズ分析では,分布を互いに従う2つの分布のパラメータと組み合せて,二変量分布を生成したい場合がよくある.個々の分布は相互に関連しているため,点を反復的に生成して別の分布に挿入し,二変量分布から標本抽出しなくてはならない.

このような種類の組合せはギブス抽出法と呼ばれる.反復期間の後,生成された点はこの組合せに密接に従う.反復の期間はバーンイン期間と呼ばれる.

例として,平均値は既知であるが,標準偏差は既知ではない正規分布を使うことがある.しかし,標準偏差は既知の形状パラメータ1つと既知の平均値を持つ正規分布に関係する形状パラメータ1つを持つベータ分布に従うことが分かっている.

この正規分布に従う乱数を生成する関数を定義する:

In[1]:=
Click for copyable input

ベータ分布の乱数を生成する関数を定義する.ベータ分布の第2形状パラメータは,標準変量の絶対値になる:

In[2]:=
Click for copyable input

正規標準偏差の初期値を選んでから,正規分布とベータ分布から乱数を連続的に生成することによって,二変量分布からの点のシミュレーションを行うことができる.標準変量は,正規標準偏差の初期値を使うことによって生成する.その標準変量をベータ分布の未知の形状パラメータとして使うことによって,その後ベータ変量を生成する.このベータ変量を今度は新しい正規分布の未知の標準偏差として使うという風に続けられる.この過程が何度か反復され,最終的な標準変量とベータ変量がシミュレーションで生成された点の座標である.

.5の標準偏差値で始まり,バーンイン期間として千回の反復を使用する,500個の点を生成する:

In[3]:=
Click for copyable input

ListPlotを使って結果の点を可視化する:

In[4]:=
Click for copyable input
Out[4]=

Histogram3Dを使って点の密度を可視化する:

In[5]:=
Click for copyable input
Out[5]=

推定のためのモンテカルロ法の別の例としては,最適化と高次元積分が挙げられる.NMinimizeおよびNIntegrateは,これらの手法を使って最適化と数値積分を行う方法を持つ.