Bu, 'tür örnekleme' olarak adlandırılan, yıllar boyunca çok dikkat çeken ve diğer birçok tahmin problemini (mark-recapture gibi) kapsayan ilginç bir sorundur. JAGS bu durumda size yardımcı olmayacaktır - JAGS, iterasyonlar boyunca değişken bir boyuta sahip Markov zincirlerini işleyemez. Geri dönüşümlü atlama MCMC gibi sorunlar için tasarlanmış bir MCMC planına başvurulmalıdır.
Jeff Miller'ın ( arxived ) çalışmasında ilk karşılaştığım, tanımladığınız belirli model için uygun olan bir yaklaşım .
Bölüm I (Orijinal soru)
Yapacağım bir varsayım, belirli bir kategorideki bir gözlemin, daha düşük seviyedeki kategorilerin varlığını ima ettiği. Yani, 9 tarafındaki bir kalıp rulosunun gözlemlenmesi, 1-8 taraflarının varlığını ima eder. Bu şekilde olmak zorunda değil - kategoriler keyfi olabilir - ama örneğimde bunu varsayacağım. Bu, diğer tür tahmini problemlerinin aksine 0 değerlerinin gözlemlenebilir olduğu anlamına gelir.
Diyelim ki çok terimli bir örneğimiz var,
Y={y1,y2,…,ym,ym+1,…,yn}∼M({p1,p2,…,pm,pm+1,…,pn})
nerede m gözlemlenen maksimum kategori, n (bilinmeyen) kategori sayısı ve tümü {ym+1,…,yn} 0'a eşittir. nsonlu ve bunun için bir önceliğe ihtiyacımız var. Herhangi bir ayrık, uygun destek ile önce[1,∞)çalışacak; örneğin sıfır kesilmiş bir Poisson'u ele alalım:
n∼P(λ),n>0
Çok terimli olasılıklar için uygun bir öneri Dirichlet'tir,
P={p1,…,pn}∼D({α1,…,αn})
Ve basit bir şekilde α1=α2=⋯=αn=α~.
Sorunu daha izlenebilir hale getirmek için ağırlıkları marjinalleştiriyoruz:
p(Y|α~,n)=∫Pp(Y|P,n)p(P|α~,n)dP
Bu durumda, iyi çalışılmış Dirichlet-multinom dağılımına yol açar . Amaç, koşullu posterioru tahmin etmektir,
p(n|Y,α~,λ)=p(Y|n,α~)p(n|λ)p(Y|α~,λ)
Açıkça varsaydığım yer α~ ve λsabit hiperparametrelerdir. Bunu görmek kolaydır:
p(Y|α~,λ)=∑n=1∞p(Y|n,α~)p(n|λ)
Nerede p(Y|n,α~)=0 nerede n<m. Bu sonsuz seri oldukça hızlı bir şekilde birleşmelidir (önceki kuyruk çok ağır olmadığı sürece) ve bu yüzden yaklaşık olarak kolay. Kesik Poisson için şu şekle sahiptir:
p(Y|α~,λ)=1(eλ−1)∑n=m∞Γ(nα~)∏ni=1Γ(yi+α~)Γ(nα~+∑ni=1yi)Γ(α~)n⋅λnn!
Giden:
p(n|Y,α~,λ)=Γ(nα~)∏ni=1Γ(yi+α~)Γ(nα~+∑ni=1yi)Γ(α~)n⋅λnn!⋅(∑j=m∞Γ(jα~)∏ji=1Γ(yi+α~)Γ(jα~+∑ji=1yi)Γ(α~)j⋅λjj!)−1
Hangi desteği var [m,∞). Bu durumda MCMC'ye ihtiyaç yoktur, çünkü Bayes kuralının paydasında sonsuz seriler çok fazla çaba sarf edilmeden yaklaşık olarak tahmin edilebilir.
İşte R'de özensiz bir örnek:
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")
Sezginiz doğrudur: Kategoriler arasında seyrek örnekleme, toplam kategori sayısı hakkında daha fazla belirsizlik yaratır. Tedavi etmek istersenα~ bilinmeyen bir parametre olarak, MCMC'yi ve alternatif güncellemelerini kullanmanız gerekir. n ve α~.
Tabii ki, bu kestirime bir yaklaşımdır. Biraz arama yaparak diğerlerini (Bayesian ve Bayes dışı lezzetler) kolayca bulacaksınız.
Bölüm II (Yoruma cevap)
Y= {y1, … ,ym,ym + 1, … ,yn} karşılık gelen olasılıkları olan kısmen gözlenen bir multinomiyal vektördür Ω = {ω1, … ,ωm,ωm + 1, … ,ωn}:
P r (Y| Ω,n)=Γ (Σni = 1yben+ 1 )Πni = 1Γ (yben+ 1 )Πi = 1nωybenben
Nerede y∈ N, y1...ym> 0 ve ym + 1...yn= 0ancak aksi halde endeksler abitrary'dir. Daha önce olduğu gibi, sorun gerçek kategori sayısını çıkarmaktırnve bir önceki n sıfır kesik Poisson gibi:
P r (n | λ)=λn( exp{ λ } - 1 ) n !, n ∈ Z+
Ayrıca daha önce olduğu gibi, çok terimli olasılıkları ele alıyoruz Ω Dirichlet'in simetrik hiperparametre ile dağıtılması α~, yani belirli bir n,
P r (Ω |α~, n ) =Γ ( nα~)Γ (α~)nΠi = 1nωα~- 1ben
Olasılıklar vektörü üzerine entegrasyon (marjinalleştirme), çok terimli Dirichlet'i verir:
P r (Y|α~,n)=∫Pr(Y|Ω,n)Pr(Ω|α~,n)=Γ(nα~)Γ(∑ni=1yi+nα~)Γ(α~)n∏i=1nΓ(yi+α~)
Burada, yukarıdaki Bölüm I'deki modelden ayrıldığımız yer. Bölüm I'de, kategoriler için örtük bir sıralama vardı: örneğin,ntaraflı kalıp, kategoriler (taraflar) örtülü bir sıralamaya ve herhangi bir kategorinin gözlemlenmesine sahiptir i∈{1…n} daha küçük kategorilerin varlığını ima eder j<i. Kısım II'de, örtük bir sıralaması olmayan, kısmen gözlenen çok terimli rastgele bir vektörünüz vardır. Başka bir deyişle, veriler veri noktalarının sırasız bir bölümünüm≤ngözlenen kategoriler. Kaynaklanan bölümlenmemiş bölümü göstereceğimY tarafından artırıldı n−m gözlemlenmeyen kategoriler, P[Y].
Gerçek sayıda kategoriye bağlı koşulsuz bölümlemenin olasılığı n, aynı bölümle sonuçlanan kategorilerin permütasyon sayısı dikkate alınarak bulunabilir:
Pr(P[Y]|α~,n)=n!(n−m)!Pr(Y|α~,n)
Ve bu entegre edilebilir n vermek:
P r ( P[ Y] |α~, λ ) =Σj = m∞P r ( P[ Y] |α~, n ) P r ( n | λ )
Posterioru almak için Bayes kuralını kullanma:
P r (n | P[ Y] ,α~, λ ) =P r ( P[ Y] | n ,α~) P r ( n | λ )P r ( P[ Y] |α~, λ )
Sadece yukarıdaki tanımlardan takın. Yine, payda hızlı bir şekilde yakınlaşacak sonsuz bir seridir: bu basit modelde, MCMC'nin yeterli bir yaklaşım göstermesine gerek yoktur.
Bölüm I'deki R kodunu değiştirerek:
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))