前回、正規乱数と一様乱数の生成方法を紹介したところで、次はsample()関数による無作為抽出のシミュレーションを行っていきます。sample()関数が、前回紹介したdnorm()関数などどう違うのかというと、引数probによって各事象の出現確率を指定できるという点です。
まずは文字列ベクトルで、おみくじの運勢を作ってみます。
luck <- c(“凶”,”小吉”,”中吉”, “大吉”)
そしてsample関数で無作為抽出を行います。
> sample (luck, size =1)
[1] “凶”
無作為抽出なので同じコマンドでももう一回やると結果が変わります。
> sample (luck, size =1)
[1] “大吉”
今年の運勢は凶とは我ながらツキがないですね。まだ初詣でおみくじ引いてないので、実質これが2017年最初のおみくじなのに・・・。
ちなみにsizeの数値を増やすことで抽出できる事象の数は増えます。
> sample (luck, size =10,replace=T)
[1] “大吉” “中吉” “凶” “中吉” “中吉” “小吉” “小吉” “大吉” “大吉” “大吉”
反復抽出を行うときはreplace=Tが必須です。
そしてtable()関数で出た事象(ここでいう運勢)の集計をします。
>omikuji<-table(kuji)
そして、これをヒストグラムにしてやるとこうなります
> barplot(omikuji)
sample()関数はデフォルトだとどの事象も、均等に出現する一様乱数となっています。
というわけで次は本題である引数probを使った事象確率の操作に入ります。
> omikiji<- sample(luck, size =1000, replace = T, prob = c(0.2, 0.4, 0.3,0.1))
> barplot(table(omikuji))
プロットするとこんな感じになります。
probで各事象に対応する事象の出現確率を設定できます。
上の場合だと
luck<-c(“凶” “小吉” “中吉” “大吉)
prob = c(0.2, 0.4, 0.3,0.1)
に対応しているので凶が20%、小吉が40%、中吉が30%、大吉が10%の確率で出ることになります。
もちろんprobのベクトルの合計は、確率の合計である1にしなければいけません。ここは少数ではなく、1/10といったような分数で指定することもできます。
関連記事
コメント