エクセルを使って正規分布の乱数を生成する方法をわかりやすく解説
エクセルで正規分布乱数を生成したい
モンテカルロシミュレーションでは、大量の乱数を使ってシミュレーションを繰り返しますので、コンピュータで乱数を高速に生成する必要があります。
しかしコンピュータで乱数を生成させることは大変です。
専門に研究している人が大勢いるくらいです。
予測不可能で、再現不可能な乱数を、人間が命令しないと動かないコンピュータに作らせるのは難しいのです。
しかし、物流のシミュレーションでは、そんなに厳密な乱数である必要はありません。
たまに同じ数の並びが出ても別に問題ないのです。
そのレベルの乱数生成ならばエクセルで十分にできます。
今回は、正規分布に従う乱数をエクセルで生成させる方法を紹介します。
正規分布乱数を作る原理
正規分布の確率密度関数
正規分布の確率密度関数はこんな感じでした。
全体の面積が1になることがポイントです。
もし特定のデータ区間の確率を知りたい時には、その間の面積を求めれば分かります。
このように縦軸は確率密度を表しているため、確率密度関数と呼ばれるのです。
正規分布の累積分布関数
このような確率密度関数の他に、累積分布関数というのもあります。
例えば、下図は平均50、標準偏差6の正規分布の累積分布関数です。
このグラフの縦軸は、横軸の数字以下になる確率を表しています。
例えば、50以下の数字になる確率は0.5、70以下の数字になる確率は1といった具合です。
つまり、横軸の数字までの累積確率を表しているため、累積分布関数と呼ばれるのです。
累積分布関数から逆関数で乱数を作る
そして、正規分布乱数を生成するためには、この累積分布関数が使われます。
理由は3つあります。
1つは縦軸の値が0から1であること。
2つめは縦軸の値から横軸の値が一意に決まること。
そして3つめが、0から1までの数が同じ確率で生成された場合、その数に応じた横軸の値が正規分布に準ずる分布になるためです。
でも普通、関数というと、x(横軸の値)からy(縦軸の値)を求めるものです。
yからxを求める関数を逆関数と言います。
従って、累積分布関数の逆関数が分かれば、0から1の数をランダムに入れることにより、正規分布に従う乱数を求めることができます。
エクセルでの入力方法
この累積分布関数とその逆関数は、エクセルに用意されています。
累積分布関数:
確率 = NORM.DIST(確率変数、平均、標準偏差、TRUE)
累積分布関数の逆関数:
確率変数 = NORM.INV(確率、平均、標準偏差)
正規分布乱数を生成するのは逆関数の方です。
「確率」のところに、0から1までの数をランダムに入れればいいだけです。
ランダムにというのは、偏りなく一様に数を生成するということです。
この関数もエクセルに用意されています。
=RAND()
と入力することにより、Enterキーを押すごとに、そのセルには0から1までの一様乱数が生成されます。
これを累積分布関数の逆関数の「確率」入れてやれば、正規分布の乱数が生成されます。
例えば、下記のように入力することにより、平均100、標準偏差50の正規分布に従う乱数を生成することができるのです。