从狄利克雷多项式采样

机器算法验证 采样 狄利克雷分布
2022-03-09 18:10:10
1个回答

由于积分表示意味着\Pr(\mathbf{x}\mid\boldsymbol{\alpha})\Pr( \mathbf{x},\mathbf{p}\mid\boldsymbol{\alpha})因此,生成\mathbf{x}的结果是生成\mathbf p,然后以\mathbf p为条件生成\mathbf{x}这意味着生成机制是

Pr(xα)=pPr(xp)Pr(pα)dp
Pr(xα)Pr(x,pα)xpxp

  1. 生成p1B(α)i=1Kxiαi1Dir(α1,,αK)分布
  2. 生成x|pn!x1!xK!p1x1pKxKMult(p1,,pK)分布

希望这两个步骤都很简单。

例如,这里是对应于上述的 R 命令:

k=5  # dimension of the problem
n=75 # sample size
alpha=runif(k) # value of alpha, here chosen at random
p=rgamma(k,alpha) # pre-simulation of the Dirichlet
y=sample(1:k,n,prob=p/sum(p),rep=TRUE) # Multinomial
x=sum(y==1)
for (i in 2:k) x=c(x,sum(y==i))

或者,当使用 rmultinom 时:

x=rmultinom(1,n,p)

举个例子

> alpha
[1] 0.2216704 0.6642411 0.2528082 0.6309828 0.6942128
> p/sum(p)
[1] 0.02193043 0.07335277 0.23146885 0.00250276 0.67074519
> x
[1]  1  6 15  0 53