Desenho da distribuição Dirichlet

25

Digamos que tenhamos uma distribuição de Dirichlet com o parâmetro do vetor dimensional . Como posso desenhar uma amostra (um vetor dimensional ) dessa distribuição? Eu preciso de uma (possivelmente) explicação simples.Kα=[α1,α2,...,αK]K

user1315305
fonte

Respostas:

25

Primeiro, extraia amostras aleatórias independentes das distribuições Gamma, cada uma com densidadeKy1,,yK

Gamma(αi,1)=yiαi1eyiΓ(αi),

e depois defina

xi=yij=1Kyj.

Agora, seguirá uma distribuição Dirichletx1,...,xK

A página da Wikipedia na distribuição Dirichlet mostra exatamente como obter amostras da distribuição Dirichlet.

Além disso, na Rbiblioteca, MCMCpackhá uma função para amostragem de variáveis ​​aleatórias da distribuição Dirichlet.

Glen_b -Reinstate Monica
fonte
2
A implementação da função para geração aleatória de Dirichlet também pode ser financiada em cran.r-project.org/web/packages/extraDistr
Tim
2

Um método simples (embora não exato) consiste em usar o fato de que desenhar uma distribuição de Dirichlet é equivalente ao experimento de urna da Polya. (Desenho de um conjunto de bolas coloridas e cada vez que você desenha uma bola, coloca-a de volta na urna com uma segunda bola da mesma cor)

Considere os parâmetros do Dirichlet como uma distribuição não normalizada sobre i.αi

Então :

repita N vezes

-> desenha um i usando a distribuição multinomialαi

-> adicione 1 aαi

repetição final

Normalize para obter sua distribuiçãoα

Se não estou errado, esse método é assintoticamente exato. Mas como N é finito, você NUNCA desenhará algumas distribuições com probabilidades anteriores muito pequenas (enquanto você deve desenhá-las com uma frequência muito pequena). Eu acho que pode ser satisfatório na maioria dos casos com N = K.10.

Arnaud Mégret
fonte
Suspeito que é assim que np.random.dirichleté implementado, porque gera zeros exatos nos vetores de probabilidade amostrados, embora esses vetores não pertençam a nenhum suporte ao Dirichlet. Foi isso que me trouxe aqui.
Eli Korvigo 11/07