从具有有序均匀序列差异的狄利克雷分布生成

机器算法验证 采样 狄利克雷分布
2022-03-31 22:17:01

首先,假设我们要从Dirichlet (1,1,1,1) 分布中生成。以下方法是否正确?

  • 从 Uniform(0,1) 生成三个变量。给他们打电话x1,x2,x3.
  • 然后,订购这些0x(1)x(2)x(3)1
  • 然后,将差异返回为我们的 Dirichlet 变量:(x(1),x(2)x(1),x(3)x(2),1x(3))

这个对吗?我觉得它是正确的,但我不确定,这似乎与维基百科上描述的任何一种方法或我所做的任何其他搜索都不相同。也许它很慢或有其他问题,但我很好奇它是否正确。

假设这是正确的,它是否可以扩展到非均匀 Dirichlet,例如 Dirichlet(a,b,c,d)?

额外说明:我不是简单地问如何生成 Dirichlet;已经有很多关于这方面的信息。我只是想看看制服的方法是否可以扩展。是否有更通用的方法涉及从分布中提取,然后对这些数字进行排序,然后使用间隙?

2个回答

如果Yi是独立的Gamma(αi,β), 为了i=1,,k, 然后

(X1,,Xk)=(Y1j=1kYj,,Ykj=1kYj)Dirichlet(α1,,αk).
因此,在 R 中,只需执行类似的操作

rdirichlet <- function(a) {
    y <- rgamma(length(a), a, 1)
    return(y / sum(y))
}

并统一使用

> rdirichlet(c(1, 1, 1, 1))
[1] 0.40186737 0.03924152 0.37070316 0.18818796

或不均匀

> rdirichlet(c(3, 2.5, 9, 7))
[1] 0.1377426 0.1043081 0.4701179 0.2878314

在 Luc Devroye 的漂亮书的第 594 页上给出了证明:

http://luc.devroye.org/rnbookindex.html

PS 感谢@cardinal 提供的 R 黑客技巧。

U(1),U(2),,U(n)是来自的订单统计信息U(0,1)分配。W0=U(1),Wi=U(i+1)U(i),1in1.

然后(W0,W1,,Wn1)D(α), 带参数的狄利克雷分布αn+1,1=(1,1,,1). 那是,(W0,W1,,Wn1)均匀分布在 n 维单纯形中。