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 = 1∞p ( 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 α~) ∏ni = 1Γ ( yio+ α~)Γ ( n α~+ ∑ni = 1yio) Γ ( α~)n⋅ λnn !
Portando a:
p ( n | Y, α~, λ ) = Γ ( n α~) ∏ni = 1Γ ( yio+ α~)Γ ( n α~+ ∑ni = 1yio) Γ ( α~)n⋅ λnn !⋅ ( ∑j = m∞Γ ( j α~) ∏ji = 1Γ ( yio+ α~)Γ ( j α~+ ∑ji = 1yio) Γ ( α~)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}
P r (Y| Ω,n)= Γ ( ∑ni = 1yio+ 1 )Πni = 1Γ ( yio+ 1 )Πi = 1nωyioio
y∈ Ny1... ym> 0ym + 1... yn= 0nn
P r (n | λ)= λn( exp{ λ } - 1 ) n !, n ∈ Z +
Ωα~n
P r (Ω | α~, n ) = Γ ( n α~)Γ ( α~)nΠi = 1nωα~- 1io
P r (Y| α~, n ) = ∫P r (Y| Ω,n) P r (Ω | α~, n ) = Γ ( n α~)Γ ( ∑ni = 1yio+ n α~) Γ ( α~)nΠi = 1nΓ ( yio+ α~)
nio ∈ { 1 ... n }j < im ≤ nYn - mP[ Y]
n
P r ( P[ Y] | α~, n ) = n !( n - m ) !P r (Y| α~, n )
n
P r ( P[ Y] | α~, λ ) = ∑j = m∞P r ( P[ Y] | α~, n ) P r ( n | λ )
P r (n | P[ Y] , α~, λ ) = P r ( P[ Y] | n , α~) P r ( n | λ )P r ( 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))