Rでサイコロの和のシミュレートをしてグラフ化する

[公開日]2017/04/19[更新日]2017/09/08 [カテゴリー]R言語入門 Written by  IMIN

R言語はシミュレーターとして使うことができます。例えば、コインを100回投げたときに表が何枚出るのかを、実際にやってみるのは大変です。また、サイコロを1000回ふって、実際にどの目も(約)6分の1の確率で出ることを体感して確認しようとしたらなかなか骨の折れる作業になるでしょう。この場合、Rのシミュレーターを使えば、実際にコインやサイコロを投げるという試行をしなくても、プログラムによって、シミュレーションを行うことができます。今回は、Rを使った、サイコロ投げのシミュレーションを行う方法をご紹介します。また複数のサイコロの場合、「試行回数が多いとサイコロの目の和正規分布に従う」という性質をR上で棒グラフを描くことによって確認していきたいと思います。

 
 

sample関数を用いたR上でのシミュレーション

R言語で、シミュレーションを行うときは、sample関数を使います。具体的には以下のようにします。

sample(ベクトル,size=シュミレート回数,replace=TRUEorFALSE)

これによって、指定したベクトルの要素からランダムに一つ取り出すという試行を指定したシミュレート回数、シミュレーションを行います。また、反復試行の際に前回取り出した要素を戻すかどうかをreplaceによって指定します。TRUEの場合は、戻して、反復試行、FALSEの場合は戻さずにベクトルの要素を一つ減らして、試行を行います。

具体的に、コインの場合とサイコロの場合でシミュレートしたプログラムは以下のようになります。

プログラム

coin = c("表","裏")

sample(coin,size=10,replace = TRUE)

 [1] "裏" "裏" "裏" "裏" "表" "裏" "裏" "表" "裏" "表"

dice = 1:6

sample(dice,size=100,replace = TRUE)

[1] 3 1 2 1 4 2 5 3 5 2 4 1 4 1 2 6 1 5 1 1 2 1 6 5 3 6 3 4 4 3 6 4 2 1 5 3 5 4 3 3 1 5 1 5 6 1 6 1
[49] 6 3 6 5 2 1 4 6 3 4 6 1 5 2 2 4 1 1 4 2 1 2 5 2 4 3 4 5 4 6 2 4 2 1 4 5 3 6 6 5 3 4 3 2 4 2 6 6
[97] 2 6 1 5

シミュレートしたサイコロの合計を棒グラフ化

試行回数が多く、サイコロも多い場合、その分布は正規分布に近くと言われています。それが本当に正しいのか、Rのシミュレート機能によって検証してみました。シミュレート回数は1万回に設定しました。

サイコロが2個の場合

プログラム

dice <- 1:6

sumr = 0

for(i in 1:10000)

{

a= sample(dice, size = 2, replace = TRUE)

sum = sum(a)

sumr= c(sumr,sum)

}

sumr = sumr[-1]

table = table(sumr)

barplot(table,col="blue")

 

サイコロが5この場合

プログラム

dice <- 1:6

sumr = 0

for(i in 1:10000)

{

a= sample(dice, size = 5, replace = TRUE)

sum = sum(a)

sumr= c(sumr,sum)

}

sumr = sumr[-1]

table = table(sumr)

barplot(table,col= "red")

サイコロ5個色カラフル版

RColorBrewerというパッケージを使って、グラフの色をカラフルにしてみました。(レインボー)

プログラム

library(RColorBrewer)

dice <- 1:6

sumr = 0

for(i in 1:10000)

{

a= sample(dice, size = 5, replace = TRUE)

sum = sum(a)

sumr= c(sumr,sum)

}

sumr = sumr[-1]

table = table(sumr)

barplot(table,col=brewer.pal(11, "Spectral"))

 

  • スポンサーリンク

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA