これは、「種サンプリング」と呼ばれる興味深い問題であり、長年にわたって多くの注目を集めており、他の多くの推定問題(マークの再取得など)を網羅しています。この場合、JAGSは役に立ちません。JAGSは、反復全体で可変次元のマルコフ連鎖を処理できません。リバーシブルジャンプMCMCなど、このような問題のために設計されたMCMCスキームに頼る必要があります。
ここに、あなたが説明している特定のモデルに適したアプローチの1つを示します。これは、Jeff Miller(arxived)の作業で最初に出会ったものです。
パートI(元の質問)
私が行う1つの仮定は、与えられたカテゴリの観察はより低いランクのカテゴリの存在を意味するということです。つまり、サイド9のサイコロを観察すると、サイド1〜8が存在することになります。この方法である必要はありません-カテゴリは任意である可能性があります-しかし、私の例ではそれを仮定します。これは、他の種の推定問題とは対照的に、0の値が観測可能であることを意味します。
多項式サンプルがあるとしましょう。
Y= { y1、y2、… 、yメートル、ym + 1、… 、yん} 〜M({ P1、p2、… 、pメートル、pm + 1、… 、pん} )
メートルん{ ym + 1、… 、yん}ん[1,∞)
n∼P(λ),n>0
多項確率の便利な事前分布はディリクレです。
P={p1,…,pn}∼D({α1,…,αn})
α1=α2=⋯=αn=α~
問題を扱いやすくするために、重みを取り除きます。
p(Y|α~,n)=∫Pp(Y|P,n)p(P|α~,n)dP
この場合、これはよく研究されたディリクレ多項分布を導きます。目標は、条件付き事後を推定することです。
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
[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")
α~nα~
もちろん、これは推定方法の1つです。少し検索するだけで、他の(ベイジアンフレーバーと非ベイジアンフレーバー)を簡単に見つけることができます。
パートII(コメントへの回答)
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+
Ωα~n
Pr(Ω|α~,n)=Γ(nα~)Γ(α~)n∏i=1nωα~−1i
Pr(Y|α~,n)=∫Pr(Y|Ω,n)Pr(Ω|α~,n)=Γ(nα~)Γ(∑ni=1yi+nα~)Γ(α~)n∏i=1nΓ(yi+α~)
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が適切な近似を行う必要はありません。
パートIの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))