Ile stron ma kość? Wnioskowanie bayesowskie w JAGS


9

Problem

Chciałbym wyciągnąć wnioski na temat systemu analogicznego do śmierci z nieznaną liczbą stron. Kostka jest walcowana kilka razy, po czym chciałbym wywnioskować rozkład prawdopodobieństwa dla parametru odpowiadającego liczbie boków matrycy, θ.

Intuicja

Jeśli po 40 rzutach zaobserwowałeś 10 czerwonych, 10 niebieskich, 10 zielonych i 10 żółtych, wydaje się, że θ powinno osiągać wartość szczytową przy 4, a stronniczość przewracania z każdej strony to rozkłady wyśrodkowane na 1/4.

θ ma trywialną dolną granicę, będącą liczbą różnych stron zaobserwowanych w danych.

Górna granica jest nadal nieznana. Może istnieć piąta strona, która prawdopodobnie miałaby niski poziom uprzedzeń. Im więcej danych obserwujesz bez piątej kategorii, tym wyższe prawdopodobieństwo z tyłu θ = 4.

Podejście

Użyłem JAGS do podobnych problemów (przez R i rjags), co wydaje się odpowiednie tutaj.

W odniesieniu do danych, powiedzmy, obs <- c(10, 10, 10, 10)że odpowiadają one obserwacjom w powyższym przykładzie.

Myślę, że obserwacje należy modelować z rozkładem wielomianowym obs ~ dmulti(p, n), gdzie p ~ ddirch(alpha)i n <- length(obs).

θ jest powiązany z liczbą kategorii implikowanych przez alpha, więc w jaki sposób mogę modelować w alphacelu uwzględnienia różnej możliwej liczby kategorii?

Alternatywy?

Jestem całkiem nowy w analizach bayesowskich, więc może całkowicie szczekam na niewłaściwym drzewie, czy istnieją alternatywne modele, które mogą dostarczyć różnych informacji na temat tego problemu?

Wielkie dzięki! David

Odpowiedzi:


6

Jest to interesujący problem zwany „próbkowaniem gatunków”, który przez lata cieszył się dużym zainteresowaniem i obejmuje wiele innych problemów z szacowaniem (takich jak przechwytywanie znaków). Wystarczy powiedzieć, że JAGS nie pomoże ci w tym przypadku - JAGS nie obsługuje łańcuchów Markowa o zmiennym wymiarze w iteracjach. Należy skorzystać ze schematu MCMC zaprojektowanego dla takich problemów, takich jak MCMC z odwracalnym skokiem.

Oto jedno podejście, które jest odpowiednie dla opisywanego modelu, które po raz pierwszy spotkałem w pracy Jeffa Millera ( opracowane ).

Część I (oryginalne pytanie)

Przyjmę jedno założenie, że obserwacja danej kategorii implikuje istnienie kategorii o niższej randze. Oznacza to, że obserwowanie rzutu kostką na stronie 9 implikuje istnienie stron 1-8. To nie muszą być w ten sposób - kategorie może być dowolna - ale będę zakładać, więc w moim przykładzie. Oznacza to, że można zaobserwować wartości 0, w przeciwieństwie do innych problemów z szacowaniem gatunków.

Powiedzmy, że mamy próbkę wielomianową,

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

gdzie to maksymalna zaobserwowana kategoria, to (nieznana) liczba kategorii, a wszystkie równe 0. Parametr jest skończony i potrzebujemy przeor za to. Każdy dyskretny, odpowiedni wcześniej ze wsparciem dla będzie działał; weźmy na przykład skróconą przez zero Poissona:mn{ym+1,,yn}n[1,)

nP(λ),n>0

Dirichlet jest wygodnym wstępem dla prawdopodobieństw wielomianowych,

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

I dla uproszczenia załóżmy, że .α1=α2==αn=α~

Aby uprościć problem, marginalizujemy wagi:

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

Co w tym przypadku prowadzi do dobrze zbadanego rozkładu wielomianowego Dirichleta . Celem jest zatem oszacowanie warunkowego tylnego,

p(n|Y,α~,λ)=p(Y|n,α~)p(n|λ)p(Y|α~,λ)

Tam, gdzie wyraźnie zakładam, że i są stałymi hiperparametrami. Łatwo zauważyć, że:α~λ

p(Y|α~,λ)=n=1p(Y|n,α~)p(n|λ)

Gdzie gdzie . Ta nieskończona seria powinna zbiegać się dość szybko (o ile ogon poprzedzający nie jest zbyt ciężki), a zatem jest łatwy do przybliżenia. Dla obciętego Poissona ma on postać:p(Y|n,α~)=0n<m

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

Prowadzący do:

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

Który ma wsparcie dla . W tym przypadku nie ma potrzeby MCMC, ponieważ nieskończoną serię w mianowniku reguły Bayesa można przybliżać bez większego wysiłku.[m,)

Oto niechlujny przykład w języku 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")

Twoja intuicja jest prawidłowa: rzadkie pobieranie próbek między kategoriami prowadzi do większej niepewności co do całkowitej liczby kategorii. Jeśli chcesz traktować jako nieznany parametr, musisz użyć MCMC i alternatywnych aktualizacji i .α~nα~

Oczywiście jest to jedno podejście do szacowania. Z łatwością znajdziesz inne (smaki bayesowskie i nie bayesowskie) z odrobiną poszukiwań.

Część II (odpowiedź na komentarz)

Y={y1,,ym,ym+1,,yn} to częściowo obserwowany wektor wielomianowy z odpowiednimi prawdopodobieństwami : Ω={ω1,,ωm,ωm+1,,ωn}

Pr(Y|Ω,n)=Γ(i=1nyi+1)i=1nΓ(yi+1)i=1nωiyi

Gdzie , i ale poza tym indeksy są arytmetyczne. Tak jak poprzednio, problemem jest wnioskowanie o prawdziwej liczbie kategorii , a zaczynamy od znaku poprzedzającego na takiego jak Poisson o zerowym skróceniu: yNy1ym>0ym+1yn=0nn

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

Podobnie jak poprzednio, traktujemy prawdopodobieństwa wielomianowe jak Dirichleta dystrybuowanego z hiperparametrem symetrycznym , tj. Dla danego , Ωα~n

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

Całkowanie (marginalizacja) ponad wektorem prawdopodobieństw daje wielomianowy Dirichlet:

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

Tutaj odbiegamy od modelu w części I powyżej. W części I zawarto niejawne uporządkowanie kategorii: na przykład w matrycy stronnej kategorie (boki) mają domyślny porządek, a obserwacja dowolnej kategorii implikuje istnienie mniejszych kategorii . W części II mamy częściowo zaobserwowany wielomianowy losowy wektor, który nie ma niejawnego uporządkowania. Innymi słowy, dane reprezentują nieuporządkowany podział punktów danych na obserwowanych kategorii. Oznaczę nieuporządkowaną partycję wynikającą z powiększonej o nieobserwowane kategorie, jako .ni{1n}j<imnYnmP[Y]

Prawdopodobieństwo nieuporządkowanej partycji uwarunkowanej prawdziwą liczbą kategorii można znaleźć, biorąc pod uwagę liczbę permutacji kategorii, które prowadzą do tej samej partycji: n

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

I można to zintegrować za pomocą aby uzyskać: n

Pr(P[Y]|α~,λ)=j=mPr(P[Y]|α~,n)Pr(n|λ)

Użycie reguły Bayesa do pobrania tylnej:

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

Po prostu podłącz powyższe definicje. Ponownie mianownik jest nieskończoną serią, która szybko się zbiegnie: w tym prostym modelu MCMC nie wymaga odpowiedniego przybliżenia.

Zmieniając kod R z części 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))

Wielkie dzięki za bardzo kompletną odpowiedź. (Przepraszam za moją bardzo powolną odpowiedź). Wróciłem do tego rodzaju pytań i wciąż pracuję nad matematyką. W moim systemie kategorie nie są porządkowe, więc założenie, że obserwacja danej kategorii implikuje istnienie kategorii o niższej randze, jest nieważne.
davipatti

@davipatti Odpowiedzi w drugiej części.
Nate Pope
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.