読者です 読者をやめる 読者になる 読者になる

StatsBeginner: 初学者の統計学習ノート

初学者が統計学、機械学習、R、Pythonの勉強の過程をメモっていくノート。

R での多項分布に従う乱数の発生(単なるメモ)

 エントリを起こすほどのことでもない単なるメモですが、ちょっとググった感じでは日本語で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」になります。確率に傾斜のある選択を表現するのに便利ですね。