確率統計2022 R 入門 2章 確率と統計

乱数によるサイコロのシミュレーション

乱数を用いて,通常の6面体のサイコロにおいて,1の目がでる確率が1/6と なるかどうか,確かめてみよう。

サイコロを600回,6000回,60000回,600000回,振り, 1の目がでる回数が1/6に近いかどうを調べる。

1~7未満の乱数を一回発生させる

runif
r は random, unif はuniform
(dice <- runif(1, min=1, max=7))
3.3882096176967

1~6の間の整数 (サイコロの目)にする

(dice <- floor(runif(1, min=1, max=7)))
1

100回振る

(dice <- floor(runif(100, min=1, max=7)))
 [1] 6 6 5 3 6 6 6 1 2 2 6 3 6 6 1 6 3 1 6 4 2 6 3 4 2 5 6 5 1 1 3 4 6 3 2 5 2
[38] 3 5 4 6 3 2 6 6 5 6 2 5 2 4 5 5 3 2 3 2 5 1 4 3 3 6 2 4 6 4 2 3 3 5 3 5 6
[75] 6 6 2 2 5 5 3 4 4 2 1 4 6 1 4 4 1 1 6 2 4 4 1 5 5 5

1の目の数を数える

length(dice[dice==1])
11
(dice <- floor(runif(1, min=1, max=7)))
2

一様乱数を発生させる関数は第1回目の演習で紹介したrunifを使う。 これを 使って、次のようにすれば、100回のサイコロ振りをシミュレーションできる。

x <- floor(runif(100,1,7))

この結果、xには1,2,3,4,5,6のいずれかの数、合計100個の数を要素とするベクトルが値になる。そこで、1の目の出現回数は次のようにして求められる:

length(x[x==1])

もしくは、次のようなコードを書いても良いだろう: (nの値は適宜変える)

sim <- function(n=100) { x <- floor(runif(n,1,7)) for(y in 1:6) { cat(y,"=>\t",length(x[x==y]),"\t",length(x[x==y])/n, "\n") } }

Author: suzuki@iwate-u.ac.jp 鈴木正幸,非常勤講師

Created: 2022-05-17 火 21:03

Validate