如何从非负整数的离散分布中采样?

机器算法验证 采样 马尔可夫链蒙特卡罗 计算统计 重要性抽样 拒绝抽样
2022-03-29 08:11:51

我有以下离散分布,其中是已知常数:α,β

p(x;α,β)=Beta(α+1,β+x)Beta(α,β)for x=0,1,2,

有哪些方法可以有效地从这个分布中采样?

2个回答

鉴于随着减少,我建议生成一个统一变量并计算累积和直到实现然后等于对应的自从

Beta(α+1,β+x)Beta(α,β)=αα+β+xβ+x1α+β+x1βα+β
xuU(0,1)
Sk=x=0kBeta(α+1,β+x)Beta(α,β)
Sk>u
k
Rx=Beta(α+1,β+x)Beta(α,β)=αα+β+xβ+x1α+β+x1βα+β=α+β+x1α+β+xβ+x1α+β+x1Rx1=β+x1α+β+xRx1
计算可以完全避免使用 Gamma 函数。
Sk=Sk1+Rk

这是一个Beta 负二项分布,在您的情况下参数,使用 Wikipedia 表示法。为整数时,它也称为Beta-Pascal分布。正如您在评论中指出的那样,这是贝叶斯负二项式模型中的预测分布,在成功概率上具有共轭 Beta。r=1r

因此,您可以通过对变量进行采样,然后对负二项式变量进行采样(,即说几何分布)。Beta(α,β)uNB(r,u)r=1

此分发在 R 包中实现brr采样器有 name rbeta_nbinom, pmf 有 namedbeta_nbinom等。符号是查看:a=rc=αd=β

> Alpha <- 2; Beta <- 3
> a <- 1
> all.equal(brr::dbeta_nbinom(0:10, a, Alpha, Beta), beta(Alpha+a, Beta+0:10)/beta(Alpha,Beta))
[1] TRUE

查看代码,可以看到它实际上调用了包的ghyper(广义超几何)分布族SuppDists

brr::rbeta_nbinom
function(n, a, c, d){
  rghyper(n, -d, -a, c-1)
}

事实上,BNB 分布被称为IV 型广义超几何分布。ghyper请参阅包中的帮助SuppDists我相信这也可以在 Johnson & al 的《单变量离散分布》一书中找到。