いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)正規分布に従う乱数を生成する方法

 Excelで、正規分布に従う乱数を出力させる方法についてです。

  • NORMINV関数とRAND関数(複数の乱数を得る場合はRANDARRAY関数)を組み合わせることで、正規分布に従う乱数を生成することができます。
  • 「データ」タブから「データ分析」メニューを選択し、「乱数発生」メニューを選択することで正規分布する乱数を生成できます。ただし分析ツールアドインを追加しておく必要があります。

関数を使う方法

NORMINV関数について

 NORMINV関数は、正規分布の累積分布関数の逆関数を返すものです。
 正規分布の平均(第2引数)と標準偏差(第3変数)、そして累積確率(第1引数)を与えれば対応する確率変数の値を返します。
 画像ではB3セルで平均を、C3セルで標準偏差を設定し、それを参照する形で5つの累積確率に対応する値を得ています

 C7セル

=NORMINV(B7:B11,B3,C3)

 累積確率が0.5に達するのは確率変数の平均(期待値)ですので0が返っているのがわかります。
 また、累積確率が1に達する確率変数の値は無限大ですのでエラーが返っています。累積確率として0以下または1以上の数値を指定するとエラーになります。



 より細かく値を指定してグラフにすると次の画像のようになります。
 このグラフを斜め45度線を軸にして折り返すと累積確率分布(逆関数)のグラフになることがわかります。

乱数を発生させる

 NORMINV関数の第1引数としてRAND関数(0から1の一様分布を返す関数)を指定すると、正規分布に従う乱数が得られます。
 平均及び標準偏差はもちろんNORMINV関数で指定したものに従います。

 B7セル

=NORMINV(RAND(),B3,C3)



 多数の乱数を発生させる場合はRAND関数の代わりにRANDARRAY関数を用います。
 次の画像ではRANDARRAY関数の第2、第3引数(行数、列数)をそれぞれ10,5と指定することで50個の乱数を得ています。

 B7セル

=NORMINV(RANDARRAY(10,5),B3,C3)

 次の画像ではRANDARRAY関数を使って10000個の乱数を生成し、さらにFREQUENCY関数と組み合わせることで、(乱数そのものを表示させることなく)乱数の度数分布を作成しています。
 隣にグラフを表示させていますが、正規分布独特の釣り鐘型の形状になっているのがわかります。

 D7セル

=FREQUENCY(NORMINV(RANDARRAY(10000),B3,C3),C7:C20)

 C7:C20の範囲に入力されている数値は度数分布の階級の境界値を設定するためのもので、結果(度数)及びその階級の意味はそれぞれD7:D21及びB7:B21の範囲に表示されているとおりです。

「データ分析」メニューを使う方法(分析ツールアドインが必要)

 分析ツールアドインを使ってメニューから乱数を生成する方法です。
 「データ」タブをクリックし、リボン内にある「データ分析」をクリックします。
 このメニューがない場合はアドインが追加されていないので、「ファイル」→「その他」「オプション」と進んで「Excelのオプション」画面から「アドイン」を選択して分析ツールを追加しておく必要があります。



 ダイアログが現れます。メニューを下にスクロールさせていくと「乱数発生」というメニューがありますので、これを選択してOKします。



 新たなダイアログが現れます。
 「変数の数」「乱数の数」はそれぞれ発生させる乱数の列数と行数を表しますので、ここではそれぞれ2,10と指定してみます(合計20個の乱数が生成されます)。
 そして「分布」のプルダウンからはもちろん「正規」を選択します。
 あとの項目については欲しい正規分布のパラメータや出力先に応じて設定します。

 なお「ランダムシード」というのは1から32767までの整数を指定でき、同じ値を指定すれば毎回同じ乱数列が生成されます。



 OKをクリックすると乱数が生成されます。
 ここでは出力先として「新規ワークシート」を指定していたので、新しいワークシート上に乱数が生成されました。