狄利克雷分布的matlab代码实现和R语言函数调用

来源:互联网 发布:手机淘宝产品链接 编辑:程序博客网 时间:2024/04/30 02:40

主要参考的是: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 distributionp = 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向量的维数(即确定输出向量的行数)


以上是我找到的狄利克雷分布的实现

0 0
原创粉丝点击