Excelで計算をする際に利用する乱数生成方法のまとめ。一様乱数を起点として、様々な分布に従う乱数を生成する方法をまとめます(正規分布、指数分布、ポアソン分布、ベータ分布)。乱数の生成には逆関数法を使用しています(詳細はこちら)。乱数は通常、モンテカルロシミュレーションなどに使用する目的で生成することが多いと思うので、ワークシート上で乱数を生成してもあまり意味はないかもしれませんが、WorksheetFunctionを使用してVBAからも呼ぶことは可能です。
正規分布(正規乱数)
正規分布の累積分布関数の逆関数は「NORM.S.INV」という名前の関数です。以下のような関数の組み合わせで正規分布に従う乱数を得ることができます。
正規乱数
= NORM.S.INV(Rand())
乱数の生成結果
指数分布に従う乱数
指数分布の逆関数は直接的には用意されていませんが、ガンマ分布の逆関数がエクセルには備わっています。詳細な説明は省きますが、指数分布はガンマ分布のパラメータが特殊なときの一例になっているので、ガンマ分布に適切なパラメータを与えてやれば指数分布を表現することが可能です。
ガンマ分布の逆関数は「GAMMA.INV([確率], [α], [β])」で得られます。「α = 1」の時が指数分布になります。
指数分布に従う乱数
= GAMMA.INV(rand(), 1, [β])
乱数の生成結果(β=2)
ポアソン分布
ランダムに発生する事象を表す確率分布であるポアソン分布の累積分布関数の逆関数もエクセルで用意されていますが、少し確率分布に関する知識が必要になります。エクセルにはガンマ分布と呼ばれる確率分布の逆関数が用意されているのですが、ポアソン分布はガンマ分布の特殊例なので、このガンマ分布の逆関数を利用してポアソン分布の逆関数を求めます。
ポアソン分布はガンマ分布と違って整数値しかとらないので、近似的に値を整数値に丸めるようにしています。
ポアソン分布に従う乱数
= Round(GAMMA.INV(rand(), [α], 1), 0)
乱数の生成結果(α = 4)
ベータ分布に従う乱数
ベイズ統計などで使われるベータ分布の逆関数はエクセルで用意されています。逆関数は「BETA.INV([確率] , [α], [β])」 で与えられます。
ベータ分布に従う乱数
= BETA.INV(rand(), [α], [β])
乱数の生成結果(α = 2, β = 3)