ベータ分布とディリクレ分布



ベータ分布とディリクレ分布が、それぞれ2項分布、多項分布の共役事前分布であることを昨日の記事に書いた(こちら)

はてな記事で参考になるのはこちら

ベータ分布はディリクレ分布のうち、項数が2の場合である。これをRのベータ分布乱数発生関数 rbeta とディリクレ分布乱数発生関数(gregmiscパッケージのrdirichlet 関数)とを使って確認する。

頻度が7対3変数を10000個、発生させたいとき。rbeta関数の第1引数に発生させる乱数の個数を、第2、第3の引数には、7対3の数値を与える。7対3の数値の大きさに応じて、得られる乱数の分散が異なる。大きい値を与えるほど分散は小さくなる。


> x<-rbeta(10000,7,3)
> mean(x)
[1] 0.701697
> var(x)
[1] 0.01948588
> hist(x)

ディリクレ分布の場合は、第1引数に乱数の数、第2引数にリストを与える。rbetaのときに2数を与えた代わりに、長さ2のリストを与える。

得られる乱数は、7対3の7側に対応する乱数がy[,1]に10000個格納され、3側に対応する乱数がy[,2]に10000個格納される。


library(gregmisc)
> y<-rdirichlet(10000,c(7,3))
> mean(y[,1])
[1] 0.6995191
> mean(y[,2])
[1] 0.3004809
> var(y[,1])
[1] 0.01945666
> var(y[,2])
[1] 0.01945666
> hist(y[,1])
> hist(y[,2])

ベータの場合の乱数列とディリクレの場合の第1乱数列との分布が同じであうことは掲載図の通り。

ディリクレの多項に対応させるには、与えるリストの長さを2より大にすればよい


> y<-rdirichlet(10000,c(7,2,1))
> hist(y)
> mean(y[,1])
[1] 0.7014506
> mean(y[,2])
[1] 0.1988899
> mean(y[,3])
[1] 0.09965948
>