Quantos lados tem um dado? Inferência bayesiana no JAGS

9

Problema

Eu gostaria de fazer alguma inferência em um sistema análogo para morrer com um número desconhecido de lados. O dado é rolado várias vezes, após o qual eu gostaria de inferir uma distribuição de probabilidade sobre um parâmetro correspondente ao número de lados do dado, θ.

Intuição

Se, após 40 jogadas, você tivesse observado 10 vermelhos, 10 azuis, 10 verdes e 10 amarelos, parece que θ deveria ter um pico em 4, e os vieses de rolar cada lado são distribuições centradas em 1/4.

θ possui um limite inferior trivial, sendo o número de lados diferentes observado nos dados.

O limite superior ainda é desconhecido. Poderia haver um quinto lado que provavelmente teria um viés baixo. Quanto mais dados você observar sem uma quinta categoria, maior a probabilidade posterior de θ = 4.

Aproximação

Eu usei o JAGS para problemas semelhantes (via R e rjags), o que parece apropriado aqui.

Com relação aos dados, digamos obs <- c(10, 10, 10, 10)que correspondam às observações no exemplo acima.

Eu acho que as observações devem ser modeladas com uma distribuição multinomial obs ~ dmulti(p, n), onde p ~ ddirch(alpha)e n <- length(obs).

θ está vinculado ao número de categorias implícitas por alpha, então como posso modelar alphapara abranger diferentes números possíveis de categorias?

Alternativas?

Eu sou bastante novo nas análises bayesianas; portanto, pode estar latindo completamente a árvore errada; existem modelos alternativos que podem fornecer insights diferentes sobre esse problema?

Muito Obrigado! David

davipatti
fonte

Respostas:

6

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,y2,,ym,ym+1,,yn}M({p1,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,)

nP(λ),n>0

Um prior conveniente para as probabilidades multinomiais é o Dirichlet,

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

E, por simplicidade, assuma .α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=1p(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α~)i=1nΓ(yi+α~)Γ(nα~+i=1nyi)Γ(α~)nλnn!

Levando a:

p(n|Y,α~,λ)=Γ(nα~)i=1nΓ(yi+α~)Γ(nα~+i=1nyi)Γ(α~)nλnn!(j=mΓ(jα~)i=1jΓ(yi+α~)Γ(jα~+i=1jyi)Γ(α~)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,,ym,ym+1,,yn} é um vetor multinomial parcialmente observado com probabilidades correspondentes : Ω={ω1,,ωm,ωm+1,,ωn}

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

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 1y m >yNy1ym>0ym+1yn=0nn

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

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α~)Γ(α~)ni=1nωiα~1

A integração (marginalização) sobre o vetor de probabilidades fornece ao Dirichlet multinomial:

Pr(Y|α~,n)=Pr(Y|Ω,n)Pr(Ω|α~,n)=Γ(nα~)Γ(i=1nyi+nα~)Γ(α~)ni=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{1n}j<imnYnmP[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!(nm)!Pr(Y|α~,n)

E isso pode ser integrado sobre para fornecer: P r ( P [ Y ] |n

Pr(P[Y]|α~,λ)=j=mPr(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))
Nate Pope
fonte
Muito obrigado pela sua resposta muito completa. (Desculpe pela minha resposta muito lenta). Voltei a esse tipo de pergunta e ainda estou trabalhando na matemática. No meu sistema, as categorias não são ordinais; portanto, a suposição de que uma observação de uma determinada categoria implica a existência de categorias de uma classificação menor é inválida.
Davipatti
@davipatti Respondeu na segunda parte.
Nate Pope