エントリを起こすほどのことでもない単なるメモですが、ちょっとググった感じでは日本語でrmultinom()関数の使い方がぱっと分かるように書かれたページがぱっとは見つからなかったので、一応書いておきます。ヘルプをみればぱっと分かりますが。
スプラトゥーンで弱い味方と連続でマッチングすることが多いので(言い訳)、「不公平なモデル」と「公平なモデル」の挙動をみて自分を精神的に納得させるためにシミュレーションしようと考えていて、パーツとして使い方を確認したものです。
引数はn、size、probとあり、
- nには試行回数(サンプルサイズ)を入れる。
- sizeには、1回の試行における頻度の総数を入れる。
- probに入れるベクトルが、クラス数と、各クラスの実現確率を表す。確率は足して1になってなくても自動的に正規化される。
すると、行がクラス、列が各回の試行、値は各試行時の各クラスの頻度になっている行列が帰ってきます。
Rのヘルプにも、「単に見るだけなら転置したほうが見やすいよね」と書いてあるので、転置させた表示もしておきます。
> d <- rmultinom(n=30, size = 50, prob = c(0.1,0.5,3,1)) # 乱数を発生 > print(d) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [1,] 1 2 1 2 0 1 1 1 0 0 0 2 2 2 1 0 1 1 0 2 1 [2,] 5 6 6 5 9 6 4 5 3 4 7 2 3 9 5 5 4 5 4 7 8 [3,] 33 34 32 34 29 36 36 36 30 33 34 35 36 28 36 30 35 35 36 32 30 [4,] 11 8 11 9 12 7 9 8 17 13 9 11 9 11 8 15 10 9 10 9 11 [,22] [,23] [,24] [,25] [,26] [,27] [,28] [,29] [,30] [1,] 1 0 2 0 1 3 0 1 0 [2,] 7 3 5 3 8 9 3 5 8 [3,] 36 32 28 33 30 27 34 36 35 [4,] 6 15 15 14 11 11 13 8 7 > print(t(d)) # 転置して表示 [,1] [,2] [,3] [,4] [1,] 1 5 33 11 [2,] 2 6 34 8 [3,] 1 6 32 11 [4,] 2 5 34 9 [5,] 0 9 29 12 [6,] 1 6 36 7 [7,] 1 4 36 9 [8,] 1 5 36 8 [9,] 0 3 30 17 [10,] 0 4 33 13 [11,] 0 7 34 9 [12,] 2 2 35 11 [13,] 2 3 36 9 [14,] 2 9 28 11 [15,] 1 5 36 8 [16,] 0 5 30 15 [17,] 1 4 35 10 [18,] 1 5 35 9 [19,] 0 4 36 10 [20,] 2 7 32 9 [21,] 1 8 30 11 [22,] 1 7 36 6 [23,] 0 3 32 15 [24,] 2 5 28 15 [25,] 0 3 33 14 [26,] 1 8 30 11 [27,] 3 9 27 11 [28,] 0 3 34 13 [29,] 1 5 36 8 [30,] 0 8 35 7
当然ですが、sizeを1にすると、probで設定した確率でいずれか1つのクラスが「1」になります。確率に傾斜のある選択を表現するのに便利ですね。