这是一个有趣的问题,称为“物种抽样”,多年来受到了广泛关注,并且还包含许多其他估计问题(例如商标重新获得)。可以说,在这种情况下,JAGS不能为您提供帮助-JAGS无法处理迭代过程中尺寸可变的Markov链。人们必须求助于针对此类问题而设计的MCMC方案,例如可逆跳MCMC。
这是一种适合您所描述的特定模型的方法,这是我在Jeff Miller(精打细算)的工作中首次遇到的。
第一部分(原始问题)
我将做出的一个假设是,对给定类别的观察意味着存在等级较低的类别。即,观察在侧面9上的模具辊意味着侧面1-8的存在。它不具有是这个样子-分类可以是任意的-但我会在我的例子假设如此。这意味着与其他物种估计问题相反,可以观察到0值。
假设我们有一个多项式样本,
Y={y1,y2,…,ym,ym+1,…,yn}∼M({p1,p2,…,pm,pm+1,…,pn})
其中是观察到的最大类别,是类别的(未知)数目,并且所有等于0。参数是有限的,我们需要先验。任何支持适当先验都可以使用;以零截断的Poisson为例:mn{ym+1,…,yn}n[1,∞)
n∼P(λ),n>0
多项式概率的一个便捷先验是Dirichlet,
P={p1,…,pn}∼D({α1,…,αn})
为了简单起见,假设。α1=α2=⋯=αn=α~
为了使问题更易于处理,我们将权重边缘化:
p(Y|α~,n)=∫Pp(Y|P,n)p(P|α~,n)dP
在这种情况下,它导致了经过充分研究的Dirichlet多项式分布。然后,目标是估计条件后验,
p(n|Y,α~,λ)=p(Y|n,α~)p(n|λ)p(Y|α~,λ)
我明确假设和是固定的超参数。很容易看到:α~λ
p(Y|α~,λ)=∑n=1∞p(Y|n,α~)p(n|λ)
其中其中。这个无穷级数应该很快收敛(只要前一个的尾巴不太重),因此很容易近似。对于截断的泊松,其形式为:p(Y|n,α~)=0n<m
p(Y|α~,λ)=1(eλ−1)∑n=m∞Γ(nα~)∏ni=1Γ(yi+α~)Γ(nα~+∑ni=1yi)Γ(α~)n⋅λnn!
导致:
p(n|Y,α~,λ)=Γ(nα~)∏ni=1Γ(yi+α~)Γ(nα~+∑ni=1yi)Γ(α~)n⋅λnn!⋅(∑j=m∞Γ(jα~)∏ji=1Γ(yi+α~)Γ(jα~+∑ji=1yi)Γ(α~)j⋅λjj!)−1
在上有支持。在这种情况下,不需要MCMC,因为无需太多努力就可以近似贝叶斯法则的分母中的无穷级数。[m,∞)
这是R中的草率示例:
logPosteriorN <- function(max, Y, lambda, alpha){
m <- length(Y)
sumy <- sum(Y)
pp <- sapply(1:max, function(j){
prior <- log(lambda)*j - log(exp(lambda)-1) - lgamma(j+1)
posterior <- lgamma(alpha*j) + sum(lgamma(Y + alpha)) - j*lgamma(alpha) - lgamma(sumy + j*alpha)
if( j > m ) { posterior <- posterior + (j-m)*lgamma(alpha) }
else if( j < m ) { posterior = -Inf }
prior + posterior
})
evidence <- log(sum(exp(pp))) # there's no check that this converges
pp - evidence
}
## with even representation of sides
Y <- c(10, 10, 10, 10)
post <- logPosteriorN(30, Y, 10, 1.2)
plot(1:30, exp(post), pch=19, type="b")
## with uneven representation of sides
Y <- c(1, 2, 1, 0, 0, 2, 1, 0, 1)
post <- logPosteriorN(30, Y, 10, 1.2)
plot(1:30, exp(post), pch=19, type="b")
您的直觉是正确的:跨类别的稀疏抽样会导致类别总数的更大不确定性。如果希望将视为未知参数,则需要使用MCMC以及和备用更新。α~nα~
当然,这是一种估算方法。稍作搜索,您将轻松找到其他(贝叶斯和非贝叶斯口味)。
第二部分(评论意见)
Y={y1,…,ym,ym+1,…,yn}是部分观测的多项式矢量,具有相应的概率:
Ω={ω1,…,ωm,ωm+1,…,ωn}
Pr(Y|Ω,n)=Γ(∑ni=1yi+1)∏ni=1Γ(yi+1)∏i=1nωyii
其中,且但否则索引是任意的。如前所述,问题是推断类别的真实数量,我们开始与现有上例如零截短的泊松:
y∈Ny1…ym>0ym+1…yn=0nn
Pr(n|λ)=λn(exp{λ}−1)n!, n∈Z+
同样像以前一样,我们将多项式概率视为具有对称超参数 Dirichlet分布,即对于给定的,
Ωα~n
Pr(Ω|α~,n)=Γ(nα~)Γ(α~)n∏i=1nωα~−1i
对概率向量进行积分(边际化)得到多项式Dirichlet:
Pr(Y|α~,n)=∫Pr(Y|Ω,n)Pr(Ω|α~,n)=Γ(nα~)Γ(∑ni=1yi+nα~)Γ(α~)n∏i=1nΓ(yi+α~)
这是我们与上面第一部分中的模型有所不同的地方。在第I部分中,类别具有隐式排序:例如,在边模具中,类别(边)具有隐式排序,并且观察任何类别都意味着存在较小类别。在第二部分中,我们有一个没有隐式排序的部分观察的多项式随机向量。换句话说,数据表示将数据点无序划分为观察类别。我将表示无序分区从结果增强由未观察到的类别,如。ni∈{1…n}j<im≤nYn−mP[Y]
可以通过考虑导致同一分区的类别的排列数来找到以真实数目的类别为条件的无序分区的概率:
n
Pr(P[Y]|α~,n)=n!(n−m)!Pr(Y|α~,n)
可以在上积分得到:
n
Pr(P[Y]|α~,λ)=∑j=m∞Pr(P[Y]|α~,n)Pr(n|λ)
使用贝叶斯规则检索后验:
Pr(n|P[Y],α~,λ)=Pr(P[Y]|n,α~)Pr(n|λ)Pr(P[Y]|α~,λ)
只需插入上面的定义即可。同样,分母是一个快速收敛的无穷级数:在这个简单的模型中,不需要MCMC给出足够的近似值。
通过修改第一部分中的R代码:
logPosteriorN_2 <- function(max, Y, lambda, alpha){
m <- length(Y)
sumy <- sum(Y)
pp <- sapply(1:max, function(j){
prior <- log(lambda)*j - log(exp(lambda)-1) - lgamma(j+1)
likelihood <- lchoose(j, m) + lgamma(m + 1) + lgamma(alpha*j) + sum(lgamma(Y + alpha)) - j*lgamma(alpha) - lgamma(sumy + j*alpha)
if( j > m ) { likelihood <- likelihood + (j-m)*lgamma(alpha) }
else if( j < m ) { likelihood = -Inf }
prior + likelihood
})
evidence <- log(sum(exp(pp))) # there's no check that this converges
pp - evidence
}
Y_1 <- rep(10, 15)
pos_1 <- logPosteriorN_2(50, Y_1, 6, 1)
plot(1:50, exp(pos_1))