Quante facce ha un dado? Inferenza bayesiana in JAGS


9

Problema

Vorrei fare una certa deduzione su un sistema analogo a morire con un numero sconosciuto di lati. Il dado viene lanciato più volte, dopo di che desidero inferire una distribuzione di probabilità su un parametro corrispondente al numero di lati del dado, θ.

Intuizione

Se dopo 40 tiri hai osservato 10 rossi, 10 blu, 10 verdi e 10 gialli, sembra che θ dovrebbe raggiungere il picco a 4, e la tendenza al rotolamento di ogni lato sono distribuzioni centrate su 1/4.

θ ha un limite inferiore banale, essendo il numero di lati diversi osservati nei dati.

Il limite superiore è ancora sconosciuto. Potrebbe esserci un quinto lato che probabilmente avrebbe un basso pregiudizio. Più dati osservi mancano di una quinta categoria, maggiore è la probabilità posteriore di θ = 4.

Approccio

Ho usato JAGS per problemi simili (tramite R e rjags) che qui sembrano appropriati.

Rispetto ai dati, diciamo obs <- c(10, 10, 10, 10)che corrisponda alle osservazioni nell'esempio sopra.

Penso che le osservazioni dovrebbero essere modellate con una distribuzione multinomiale obs ~ dmulti(p, n), dove p ~ ddirch(alpha)e n <- length(obs).

θ è collegato al numero di categorie implicite alpha, quindi come posso modellare alphaper includere diversi possibili numeri di categorie?

Alternative?

Sono abbastanza nuovo nelle analisi bayesiane, quindi potrebbe abbaiare completamente l'albero sbagliato, ci sono modelli alternativi che potrebbero fornire approfondimenti diversi su questo problema?

Grazie molto! David

Risposte:


6

Questo è un problema interessante chiamato "campionamento delle specie", che ha ricevuto molta attenzione nel corso degli anni e comprende molti altri problemi di stima (come la ricaduta dei segni). Basti dire che JAGS non ti aiuterà in questo caso - JAGS non può gestire catene di Markov con una dimensione variabile tra le iterazioni. È necessario ricorrere a uno schema MCMC progettato per tali problemi, come MCMC a salto reversibile.

Ecco un approccio adatto al modello specifico che stai descrivendo, che ho incontrato per la prima volta nel lavoro di Jeff Miller ( arxived ).

Parte I (domanda originale)

Un presupposto che farò è che un'osservazione di una determinata categoria implica l'esistenza di categorie di rango inferiore. Cioè, osservare un tiro di dado sul lato 9 implica l'esistenza dei lati 1-8. Non deve essere così - le categorie potrebbero essere arbitrarie - ma lo suppongo nel mio esempio. Ciò significa che sono osservabili valori 0, in contrasto con altri problemi di stima delle specie.

Diciamo che abbiamo un campione multinomiale,

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

dove è la categoria massima osservata, n è il numero (sconosciuto) di categorie e tutto { y m + 1 , , y n } è uguale a 0. Il parametro n è finito e per questo è necessario un precedente. Qualsiasi precedente discreto e appropriato con supporto su [ 1 , ) funzionerà; prendiamo ad esempio un Poisson a zero tronchi:mn{ym+1,...,yn}n[1,)

n~P(λ),n>0

Un priore conveniente per le probabilità multinomiali è il Dirichlet,

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

E per assumere in modo semplice .α1=α2==αn=α~

Per rendere il problema più trattabile, emarginiamo i pesi:

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

Che in questo caso guida la ben studiata distribuzione multinomiale di Dirichlet . L'obiettivo è quindi stimare il posteriore condizionale,

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

Dove presumo esplicitamente che e λ siano iperparametri fissi. È facile vedere che:α~λ

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

Dove dove n < m . Questa serie infinita dovrebbe convergere piuttosto rapidamente (purché la coda del precedente non sia troppo pesante), quindi è facile da approssimare. Per il Poisson troncato, ha la forma:p(Y|n,α~)=0n<m

p(Y|α~,λ)=1(eλ-1)Σn=mΓ(nα~)Πio=1nΓ(yio+α~)Γ(nα~+Σio=1nyio)Γ(α~)nλnn!

Portando a:

p(n|Y,α~,λ)=Γ(nα~)Πio=1nΓ(yio+α~)Γ(nα~+Σio=1nyio)Γ(α~)nλnn!(Σj=mΓ(jα~)Πio=1jΓ(yio+α~)Γ(jα~+Σio=1jyio)Γ(α~)jλjj!)-1

[m,)

Ecco un esempio sciatto in 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α~

Naturalmente, questo è un approccio alla stima. Troverai prontamente altri (dai sapori bayesiani e non bayesiani) con un po 'di ricerca.

Parte II (Risposta al commento)

Y={y1,...,ym,ym+1,...,yn}Ω={ω1,...,ωm,ωm+1,...,ωn}

Pr(Y|Ω,n)=Γ(Σio=1nyio+1)Πio=1nΓ(yio+1)Πio=1nωioyio

yNy1...ym>0ym+1...yn=0nn

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

Ωα~n

Pr(Ω|α~,n)=Γ(nα~)Γ(α~)nΠio=1nωioα~-1

Pr(Y|α~,n)=Pr(Y|Ω,n)Pr(Ω|α~,n)=Γ(nα~)Γ(Σio=1nyio+nα~)Γ(α~)nΠio=1nΓ(yio+α~)

nio{1...n}j<iomnYn-mP[Y]

n

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

Basta collegare dalle definizioni sopra. Ancora una volta, il denominatore è una serie infinita che converge rapidamente: in questo semplice modello, non è necessario che MCMC fornisca un'adeguata approssimazione.

Modificando il codice R dalla parte 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))

Mille grazie per la tua risposta molto completa. (Mi dispiace per la mia risposta molto lenta). Sono tornato a questo tipo di domanda e sto ancora facendo progressi nella matematica. Nel mio sistema le categorie non sono ordinali, quindi l'ipotesi che un'osservazione di una determinata categoria implichi l'esistenza di categorie di un rango inferiore non è valida.
davipatti,

@davipatti Ha risposto nella seconda parte.
Nate Pope,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.