Berapa banyak sisi yang dimiliki die? Kesimpulan Bayesian dalam JAGS

9

Masalah

Saya ingin melakukan beberapa kesimpulan tentang sistem analog dengan mati dengan jumlah sisi yang tidak diketahui. Die digulung beberapa kali, setelah itu saya ingin menyimpulkan distribusi probabilitas atas parameter yang sesuai dengan jumlah sisi yang dimiliki die, θ.

Intuisi

Jika setelah 40 gulungan Anda telah mengamati 10 merah, 10 biru, 10 hijau dan 10 kuning, tampaknya θ harus memuncak pada 4, dan bias dari setiap sisi bergulir adalah distribusi yang berpusat pada 1/4.

θ memiliki batas bawah yang sepele, menjadi jumlah sisi yang berbeda yang diamati dalam data.

Batas atas masih belum diketahui. Mungkin ada sisi kelima yang mungkin memiliki bias yang rendah. Semakin banyak data yang Anda amati tanpa kategori kelima, semakin tinggi probabilitas posterior of = 4.

Pendekatan

Saya telah menggunakan JAGS untuk masalah yang sama (via R dan rjags) yang sepertinya cocok di sini.

Sehubungan dengan data, katakanlah obs <- c(10, 10, 10, 10)sesuai dengan pengamatan pada contoh di atas.

Saya pikir pengamatan harus dimodelkan dengan distribusi multinomial obs ~ dmulti(p, n), di mana p ~ ddirch(alpha)dan n <- length(obs).

θ ditautkan dengan jumlah kategori yang tersirat alpha, jadi bagaimana saya bisa memodelkan alphauntuk mencakup berbagai kategori yang berbeda?

Alternatif?

Saya cukup baru dalam analisis Bayesian, jadi mungkin menyalak sepenuhnya, apakah ada model alternatif yang mungkin memberikan wawasan berbeda tentang masalah ini?

Terimakasih banyak! David

davipatti
sumber

Jawaban:

6

Masalah yang menarik ini disebut 'pengambilan sampel spesies', yang telah menerima banyak perhatian selama bertahun-tahun, dan mencakup banyak masalah estimasi lainnya (seperti mark-recapture). Cukuplah untuk mengatakan, JAGS tidak akan membantu Anda dalam hal ini - JAGS tidak dapat menangani rantai Markov dengan dimensi variabel di seluruh iterasi. Seseorang harus beralih ke skema MCMC yang dirancang untuk masalah seperti itu, seperti MCMC lompat terbalik.

Inilah satu pendekatan yang cocok untuk model spesifik yang Anda gambarkan, yang pertama kali saya temui dalam karya Jeff Miller ( arxived ).

Bagian I (Pertanyaan awal)

Satu asumsi yang akan saya buat adalah bahwa pengamatan kategori tertentu menyiratkan adanya kategori dengan peringkat yang lebih rendah. Artinya, mengamati gulungan mati di sisi 9 menyiratkan keberadaan sisi 1-8. Tidak harus seperti ini - kategorinya bisa sewenang-wenang - tetapi saya akan berasumsi demikian dalam contoh saya. Ini berarti bahwa 0 nilai dapat diamati, berbeda dengan masalah estimasi spesies lainnya.

Katakanlah kita memiliki sampel multinomial,

Y={y1,y2,,ym,ym+1,,yn}M({p1,p2,,pm,pm+1,,pn})

mn{ym+1,,yn}n[1,)

nP(λ),n>0

Sebelum nyaman untuk probabilitas multinomial adalah Dirichlet,

P={p1,,pn}D({α1,,αn})

α1=α2==αn=α~

Untuk membuat masalah lebih mudah ditangani, kami meminggirkan bobot:

p(Y|α~,n)=Pp(Y|P,n)p(P|α~,n)dP

Yang dalam hal ini memimpin distribusi Dirichlet-multinomial yang dipelajari dengan baik . Tujuannya kemudian untuk memperkirakan posterior bersyarat,

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!

Menuju ke:

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

[m,)

Berikut ini contoh ceroboh dalam 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α~

Tentu saja, ini adalah salah satu pendekatan untuk estimasi. Anda akan segera menemukan orang lain (dari rasa Bayesian dan non-Bayesian) dengan sedikit pencarian.

Bagian II (Jawaban untuk berkomentar)

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+

Ωα~n

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

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

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]|α~,λ)

Cukup colokkan dari definisi di atas. Sekali lagi, penyebutnya adalah seri tak terbatas yang akan menyatu dengan cepat: dalam model sederhana ini, MCMC tidak perlu memberikan perkiraan yang memadai.

Dengan memodifikasi kode R dari Bagian I:

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))
Nate Pope
sumber
Terima kasih banyak atas jawaban Anda yang sangat lengkap. (Maaf atas tanggapan saya yang sangat lambat). Saya kembali ke jenis pertanyaan ini dan saya masih mengerjakan matematika. Dalam sistem saya, kategorinya tidak ordinal, jadi asumsi bahwa pengamatan kategori tertentu menyiratkan keberadaan kategori dengan peringkat yang lebih rendah tidak valid.
davipatti
@davipatti Menjawab di bagian kedua.
Nate Pope