狄利克雷分佈的matlab程式碼實現和R語言函式呼叫
阿新 • • 發佈:2019-02-18
主要參考的是:https://www.douban.com/note/45584915/
和 http://www.biostatistic.net/thread-33740-1-1.html
最近需要用到狄利克雷分佈,但是找了半天發現matlab沒有現成的工具可用。只能自己實現,下面是我搜到的一個實現狄利克雷分佈的matlab程式碼
function r = drchrnd(a,n) % take a sample from a dirichlet distribution p = length(a); r = gamrnd(repmat(a,n,1),1,n,p); r = r ./ repmat(sum(r,2),1,p);
用法:
a= drchrnd([1 1 1],10)
(此程式碼不充分解釋:充分利用了dirichlet distribution和gamma分佈之間的關係。經過推導可以證明,dirichlet distribution可以看作是多個gamma(ai,1)的乘積(包括除)。同時利用了gamma的分佈的一個重要性質,xi~gamma(ai,b)分佈,則sum(xi)~gamma(sum(ai),b)分佈。)
除了matlab,R語言也有狄利克雷分佈的實現函式。
Dirichlet(DIRECT)
Dirichlet()所屬R語言包:DIRECT
用法為:rDirichlet (n, alpha)
引數:alpha
Shape parameter vector.
可以認為是確定輸出向量的列數
引數:n
Number of realizations (vectors) to generate.
生成alpha向量的維數(即確定輸出向量的行數)
以上是我找到的狄利克雷分佈的實現