1. 程式人生 > >狄利克雷分佈的matlab程式碼實現和R語言函式呼叫

狄利克雷分佈的matlab程式碼實現和R語言函式呼叫

主要參考的是: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向量的維數(即確定輸出向量的行數)

以上是我找到的狄利克雷分佈的實現