Esse é um problema interessante denominado 'amostragem de espécies', que recebeu muita atenção ao longo dos anos e abrange muitos outros problemas de estimativa (como a recuperação de marcas). Basta dizer que o JAGS não ajudará nesse caso - o JAGS não pode manipular cadeias de Markov com uma dimensão variável nas iterações. É preciso recorrer a um esquema MCMC projetado para problemas como o MCMC de salto reversível.
Aqui está uma abordagem adequada ao modelo específico que você está descrevendo, que eu encontrei pela primeira vez no trabalho de Jeff Miller ( arxived ).
Parte I (questão original)
Uma suposição que farei é que uma observação de uma determinada categoria implica a existência de categorias de menor classificação. Ou seja, observar um rolo de dado no lado 9 implica na existência dos lados 1-8. Não precisa ser assim - as categorias podem ser arbitrárias -, mas eu assumo isso no meu exemplo. Isso significa que 0 valores são observáveis, em contraste com outros problemas de estimativa de espécies.
Digamos que temos uma amostra multinomial,
Y= { y1 1, y2, … , Ym, ym + 1, … , Yn} ∼ M ( { p1 1, p2, … , Pm, pm + 1, … , Pn} )
onde é a categoria máxima observada, é o número (desconhecido) de categorias e todos iguais a 0. O parâmetro é finito e precisamos um prior para isso. Qualquer prévia discreta e adequada com suporte em funcionará; Tomemos, por exemplo, um Poisson truncado com zero:n { y m + 1 , … , y n } n [ 1 , ∞ )mn{ ym + 1, … , Yn}n[ 1 , ∞ )
n ∼ P( λ ) , n > 0
Um prior conveniente para as probabilidades multinomiais é o Dirichlet,
P= { p1 1, … , Pn} ∼ D ( { α1 1, … , Αn} )
E, por simplicidade, assuma .α1 1= α2= ⋯ = αn= α~
Para tornar o problema mais tratável, marginalizamos os pesos:
p ( Y| α~, n ) = ∫Pp ( Y| P, n ) p ( P| α~, n ) dP
Que neste caso lidera a bem estudada distribuição multinomial de Dirichlet . O objetivo é estimar o posterior condicional,
p ( n | Y, α~, λ ) = p ( Y| n, α~) p ( n | λ )p ( Y| α~, λ )
Onde eu estou assumindo explicitamente que e são hiperparâmetros fixos. É fácil ver que: λα~λ
p ( Y| α~, λ ) = ∑n = 1∞p ( Y| n, α~) p ( n | λ )
Onde onde . Essa série infinita deve convergir rapidamente (desde que a cauda do prior não seja muito pesada) e, portanto, fácil de aproximar. Para o Poisson truncado, ele tem a forma:n < mp ( Y| n, α~) = 0n < m
p ( Y| α~, λ ) = 1( eλ- 1 )∑n = m∞Γ ( n α~) ∏ni = 1Γ ( yEu+ α~)Γ ( n α~+ ∑ni = 1yEu) Γ ( α~)n⋅ λnn !
Levando a:
p ( n | Y, α~, λ ) = Γ ( n α~) ∏ni = 1Γ ( yEu+ α~)Γ ( n α~+ ∑ni = 1yEu) Γ ( α~)n⋅ λnn !⋅ ( ∑j = m∞Γ ( j α~) ∏ji = 1Γ ( yEu+ α~)Γ ( j α~+ ∑ji = 1yEu) Γ ( α~)j⋅ λjj !)- 1
Que tem suporte em . Não há necessidade de MCMC nesse caso, pois as séries infinitas no denominador da regra de Bayes podem ser aproximadas sem muito esforço.[ m , ∞ )
Aqui está um exemplo desleixado em 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")
Sua intuição está correta: a amostragem esparsa entre categorias leva a uma maior incerteza sobre o número total de categorias. Se você deseja tratar como um parâmetro desconhecido, precisará usar o MCMC e atualizações alternativas de e .α~nα~
Obviamente, essa é uma abordagem para a estimativa. Você encontrará facilmente outros (de sabores bayesianos e não bayesianos) com um pouco de pesquisa.
Parte II (Resposta ao comentário)
Ω = { ω 1 , … , ω m ,Y= { y1 1, … , Ym, ym + 1, … , Yn} é um vetor multinomial parcialmente observado com probabilidades correspondentes :
Ω = { ω1 1, … , Ωm, ωm + 1, … , Ωn}
P r (Y| Ω,n)= Γ ( ∑ni = 1yEu+ 1 )∏ni = 1Γ ( yEu+ 1 )∏i = 1nωyEuEu
Onde , e mas, caso contrário, os índices são abitrários. Como antes, o problema é inferir o número real de categorias , e começamos com um prior em como um Poisson truncado com zero:
y 1 … y m >y∈ Ny1 1… ym> 0ym +1… yn= 0nn
Pr(n|λ)=λn(exp{λ}−1)n!, n∈Z+
Também como antes, tratamos as probabilidades multinomiais como Dirichlet distribuído com um hiperparâmetro simétrico , ou seja, para um dado ,
˜Ωα~n
Pr(Ω|α~,n)=Γ(nα~)Γ(α~)n∏i=1nωα~−1i
A integração (marginalização) sobre o vetor de probabilidades fornece ao Dirichlet multinomial:
Pr(Y|α~,n)=∫Pr(Y|Ω,n)Pr(Ω|α~,n)=Γ(nα~)Γ(∑ni=1yi+nα~)Γ(α~)n∏i=1nΓ(yi+α~)
Aqui é onde divergimos do modelo na Parte I acima. Na Parte I, havia uma ordem implícita para categorias: por exemplo, em um dado de lados, as categorias (lados) têm uma ordem implícita e a observação de qualquer categoria implica a existência de categorias menores . Na Parte II, temos um vetor aleatório multinomial parcialmente observado, que não possui ordem implícita. Em outras palavras, os dados representam uma partição não ordenada dos pontos de dados em categorias observadas. Denotarei a partição não ordenada que resulta de aumentada por categorias não observadas, como .ni∈{1…n}j<im≤nYn−mP[Y]
A probabilidade da partição não ordenada condicional a um número real de categorias pode ser encontrada considerando o número de permutações de categorias que resultam na mesma partição:
n
Pr(P[Y]|α~,n)=n!(n−m)!Pr(Y|α~,n)
E isso pode ser integrado sobre para fornecer:
P r ( P [ Y ] |n
Pr(P[Y]|α~,λ)=∑j=m∞Pr(P[Y]|α~,n)Pr(n|λ)
Usando a regra de Bayes para recuperar o posterior:
Pr(n|P[Y],α~,λ)=Pr(P[Y]|n,α~)Pr(n|λ)Pr(P[Y]|α~,λ)
Basta conectar a partir das definições acima. Novamente, o denominador é uma série infinita que convergirá rapidamente: nesse modelo simples, não há necessidade de o MCMC fornecer uma aproximação adequada.
Modificando o código R da 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))