狄利克雷分布的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向量的维数(即确定输出向量的行数)


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

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值