Este es un problema interesante denominado 'muestreo de especies', que ha recibido mucha atención a lo largo de los años, y abarca muchos otros problemas de estimación (como la recuperación de marcas). Baste decir que JAGS no lo ayudará en este caso: JAGS no puede manejar cadenas de Markov con una dimensión variable a través de iteraciones. Uno debe recurrir a un esquema MCMC diseñado para tales problemas, como el MCMC de salto reversible.
Aquí hay un enfoque que es adecuado para el modelo específico que está describiendo, que encontré por primera vez en el trabajo de Jeff Miller ( presentado ).
Parte I (Pregunta original)
Una suposición que haré es que una observación de una categoría dada implica la existencia de categorías de menor rango. Es decir, observar un lanzamiento de dado en el lado 9 implica la existencia de los lados 1-8. No tiene por qué ser así, las categorías pueden ser arbitrarias, pero supongo que sí en mi ejemplo. Esto significa que los valores 0 son observables, en contraste con otros problemas de estimación de especies.
Digamos que tenemos una muestra multinomial,
Y={y1,y2,…,ym,ym+1,…,yn}∼M({p1,p2,…,pm,pm+1,…,pn})
donde es la categoría máxima observada, es el número (desconocido) de categorías, y todas iguales a 0. El parámetro es finito y necesitamos Un previo para ello. Cualquier previo discreto y adecuado con soporte en funcionará; tomemos, por ejemplo, un Poisson truncado a cero:mn{ym+1,…,yn}n[1,∞)
n∼P(λ),n>0
Un previo conveniente para las probabilidades multinomiales es el Dirichlet,
P={p1,…,pn}∼D({α1,…,αn})
Y para asumir de manera simple .α1=α2=⋯=αn=α~
Para hacer el problema más manejable, marginamos los pesos:
p(Y|α~,n)=∫Pp(Y|P,n)p(P|α~,n)dP
Lo que en este caso conduce a la bien estudiada distribución multinomial de Dirichlet . El objetivo es entonces estimar el posterior condicional,
p(n|Y,α~,λ)=p(Y|n,α~)p(n|λ)p(Y|α~,λ)
Donde supongo explícitamente que y son hiperparámetros fijos. Es fácil ver eso:α~λ
p(Y|α~,λ)=∑n=1∞p(Y|n,α~)p(n|λ)
Donde donde . Esta serie infinita debería converger bastante rápido (siempre que la cola de la anterior no sea demasiado pesada), por lo que es fácil de aproximar. Para el Poisson truncado, tiene la forma:p(Y|n,α~)=0n<m
p(Y|α~,λ)=1(eλ−1)∑n=m∞Γ(nα~)∏ni=1Γ(yi+α~)Γ(nα~+∑ni=1yi)Γ(α~)n⋅λnn!
Llevando a:
p(n|Y,α~,λ)=Γ(nα~)∏ni=1Γ(yi+α~)Γ(nα~+∑ni=1yi)Γ(α~)n⋅λnn!⋅(∑j=m∞Γ(jα~)∏ji=1Γ(yi+α~)Γ(jα~+∑ji=1yi)Γ(α~)j⋅λjj!)−1
Que tiene soporte en . No hay necesidad de MCMC en este caso, ya que las series infinitas en el denominador de la regla de Bayes se pueden aproximar sin demasiado esfuerzo.[m,∞)
Aquí hay un ejemplo descuidado en 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")
Su intuición es correcta: el escaso muestreo entre categorías genera una mayor incertidumbre sobre el número total de categorías. Si desea tratar como un parámetro desconocido, necesitaría usar MCMC y actualizaciones alternativas de y .α~nα~
Por supuesto, este es un enfoque para la estimación. Encontrarás fácilmente otros (de sabores bayesianos y no bayesianos) con un poco de búsqueda.
Parte II (respuesta al comentario)
Y={y1,…,ym,ym+1,…,yn} es un vector multinomial parcialmente observado con probabilidades correspondientes :
Ω={ω1,…,ωm,ωm+1,…,ωn}
Pr(Y|Ω,n)=Γ(∑ni=1yi+1)∏ni=1Γ(yi+1)∏i=1nωyii
Donde , e pero, de lo contrario, los índices son arbitrarios. Como antes, el problema es inferir el verdadero número de categorías , y comenzamos con un anterior en como un Poisson truncado a cero:
y∈Ny1…ym>0ym+1…yn=0nn
Pr(n|λ)=λn(exp{λ}−1)n!, n∈Z+
También como antes, tratamos las probabilidades multinomiales como Dirichlet distribuido con un hiperparámetro simétrico , es decir, para un dado ,
Ωα~n
Pr(Ω|α~,n)=Γ(nα~)Γ(α~)n∏i=1nωα~−1i
Integrar (marginar) sobre el vector de probabilidades da el Dirichlet multinomial:
Pr(Y|α~,n)=∫Pr(Y|Ω,n)Pr(Ω|α~,n)=Γ(nα~)Γ(∑ni=1yi+nα~)Γ(α~)n∏i=1nΓ(yi+α~)
Aquí es donde divergemos del modelo en la Parte I anterior. En la Parte I, había un orden implícito para las categorías: por ejemplo, en un dado de lados, las categorías (lados) tienen un orden implícito y la observación de cualquier categoría implica el existencia de categorías menores . En la Parte II, tenemos un vector aleatorio multinomial parcialmente observado que no tiene un orden implícito. En otras palabras, los datos representan una partición desordenada de los puntos de datos en categorías observadas. Denotaré la partición desordenada que resulta de aumentada por categorías no observadas, como .ni∈{1…n}j<im≤nYn−mP[Y]
La probabilidad de que la partición desordenada esté condicionada a un número verdadero de categorías , se puede encontrar considerando el número de permutaciones de categorías que resultan en la misma partición:
n
Pr(P[Y]|α~,n)=n!(n−m)!Pr(Y|α~,n)
Y esto se puede integrar sobre para dar:
n
Pr(P[Y]|α~,λ)=∑j=m∞Pr(P[Y]|α~,n)Pr(n|λ)
Usando la regla de Bayes para recuperar la parte posterior:
Pr(n|P[Y],α~,λ)=Pr(P[Y]|n,α~)Pr(n|λ)Pr(P[Y]|α~,λ)
Simplemente conéctese desde las definiciones anteriores. Nuevamente, el denominador es una serie infinita que convergerá rápidamente: en este modelo simple, no es necesario que MCMC dé una aproximación adecuada.
Al modificar el código R de la 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))