一个骰子有多少面?JAGS中的贝叶斯推断


9

问题

我想对类似于死边数未知的系统进行一些推断。模具被轧制了几次,然后我想推断出与模具具有的边数θ相对应的参数的概率分布。

直觉

如果在40次滚动后您观察到10个红色,10个蓝色,10个绿色和10个黄色,似乎θ应该在4处达到峰值,并且每侧滚动的偏差都是以1/4为中心的分布。

θ有一个很小的下限,即在数据中观察到的不同边的数量。

上限仍然未知。可能存在第五个方面,可能具有较低的偏见。您观察到的缺少第五类的数据越多,θ= 4的后验概率越高。

方法

我已经使用JAGS解决了类似的问题(通过R和rjags),这在这里似乎很合适。

关于数据,可以说obs <- c(10, 10, 10, 10)对应于以上示例中的观察结果。

我认为观测值应该用多项式分布建模obs ~ dmulti(p, n),其中p ~ ddirch(alpha)n <- length(obs)

θ与所隐含的类别数量相关联alpha,那么如何建模alpha以涵盖不同的可能类别数量?

备择方案?

我对贝叶斯分析还很陌生,因此可能完全是在树错了树,是否有替代模型可以对这个问题提供不同的见解?

非常感谢!大卫

Answers:


6

这是一个有趣的问题,称为“物种抽样”,多年来受到了广泛关注,并且还包含许多其他估计问题(例如商标重新获得)。可以说,在这种情况下,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,)

nP(λ),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=1p(Y|n,α~)p(n|λ)

其中其中。这个无穷级数应该很快收敛(只要前一个的尾巴不太重),因此很容易近似。对于截断的泊松,其形式为:p(Y|n,α~)=0n<m

p(Y|α~,λ)=1(eλ1)n=mΓ(nα~)i=1nΓ(yi+α~)Γ(nα~+i=1nyi)Γ(α~)nλnn!

导致:

p(n|Y,α~,λ)=Γ(nα~)i=1nΓ(yi+α~)Γ(nα~+i=1nyi)Γ(α~)nλnn!(j=mΓ(jα~)i=1jΓ(yi+α~)Γ(jα~+i=1jyi)Γ(α~)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)=Γ(i=1nyi+1)i=1nΓ(yi+1)i=1nωiyi

其中,且但否则索引是任意的。如前所述,问题是推断类别的真实数量,我们开始与现有上例如零截短的泊松: yNy1ym>0ym+1yn=0nn

Pr(n|λ)=λn(exp{λ}1)n!, nZ+

同样像以前一样,我们将多项式概率视为具有对称超参数 Dirichlet分布,即对于给定的, Ωα~n

Pr(Ω|α~,n)=Γ(nα~)Γ(α~)ni=1nωiα~1

对概率向量进行积分(边际化)得到多项式Dirichlet:

Pr(Y|α~,n)=Pr(Y|Ω,n)Pr(Ω|α~,n)=Γ(nα~)Γ(i=1nyi+nα~)Γ(α~)ni=1nΓ(yi+α~)

这是我们与上面第一部分中的模型有所不同的地方。在第I部分中,类别具有隐式排序:例如,在边模具中,类别(边)具有隐式排序,并且观察任何类别都意味着存在较小类别。在第二部分中,我们有一个没有隐式排序的部分观察的多项式随机向量。换句话说,数据表示将数据点无序划分为观察类别。我将表示无序分区从结果增强由未观察到的类别,如。ni{1n}j<imnYnmP[Y]

可以通过考虑导致同一分区的类别的排列数来找到以真实数目的类别为条件的无序分区的概率: n

Pr(P[Y]|α~,n)=n!(nm)!Pr(Y|α~,n)

可以在上积分得到: n

Pr(P[Y]|α~,λ)=j=mPr(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))

非常感谢您的完整答复。(对不起,我的回复很慢)。我回到了这种类型的问题,并且仍在通过数学努力。在我的系统中,类别不是顺序的,因此假设观察到给定类别意味着存在等级较低的类别是无效的。
davipatti

@davipatti在第二部分中回答。
Nate Pope
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.