表計算ソフトウェアでシミュレーション(1)確率に応じて事象が出現するようにする

モデル化とシミュレーション

こんにちは。前回までは、テキストマイニングを続けてきました。

もう少し、現行の学習指導要領で関係する内容も扱おうと思います。

出来上がった結果を載せるのではなく、つくり上げていく過程がわかるような感じになると、いいかな・・・と思ってまとめていきます。

しばらく、モデル化とシミュレーションに関係する内容について書いていくことにします。

ワンテーマずつ取り扱うので、記事の1本1本は短くなる予定です。

確率に応じて事象が起こるようにする

事前に確率がわかっているであるとき、その確率に応じてそれぞれの事象を発生させてみます。

具体例がないとわかりにくいので、次の表のように各事象が起こると仮定します。

事象確率
事象A0.08
事象B0.40
事象C0.10
事象D0.20
事象E0.07
事象F0.15

ここで注意が必要なのは、確率は 0 ~ 1 の範囲の値をとり、全事象の合計が 1 になるということです。

少し大変ですが、A1 のセルに =rand() を使って乱数を発生させて、

=IF(A1<0.08,"A",IF(A1<0.48,"B",IF(A1<0.58,"C",IF(A1<0.78,"D",IF(A1<0.85,"E","F")))))

としても上の表の確率で各事象が起こります。

事象の数が 6 種類ではなくて、30 種類あったらどうしますか・・・?

次に、その工夫をしてみましょう。

みんな大好き VLOOKUP 関数

表計算ソフトウェア大好き先生定番の VLOOKUP 関数を使うと、簡単に確率に応じて事象を発生させることができます。

こんな表を作ってみましょう。

A列の確率はそれぞれの事象の起こる確率に応じて入力しておいてください。

B列に累積確率を求めておきます。表計算ソフトウェアを使っているにも関わらず、人間が計算をするのでは無駄です。

表計算ソフトウェアに計算させましょう。次のように入力します。

  B2のセル … 0

  B3のセル … =B2+A2

  B4以下のセル … B3のセルをオートフィル(または コピー&ペースト)

さて、これで実際にどの事象が起こるかやってみましょう。

先ほどの累積確率もあわせて、数式表示で表示してみました。VLOOKUP 関数を使うと、次のようにそれぞれの事象に変換できます。

これならば、事象の種類が増えても、VLOOKUP 関数の第 2 引数の範囲を変えるだけで大丈夫です。

VLOOKUP 関数を使う際の注意としては、第 2 引数で指定する表では、最も左の列が累積確率になるということです。

実際に事象がどれくらい起こったか?

実行結果を見てみましょう。試しに100万回試行してみました。

確率との誤差も確率―出現率で求めてみました。1000分の1未満の誤差ということで、概ね問題なさそうです。

このようにして、偶然に左右される事象のシミュレーションができそうです。

今回はこれでおしまいにします。それではまた。

Posted by 春日井 優