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

    xiaoxiao2021-03-26  56

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

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

    转载请注明原文地址: https://ju.6miu.com/read-658961.html

    最新回复(0)