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.
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.
Respostas:
Primeiro, extraia amostras aleatórias independentes das distribuições Gamma, cada uma com densidade
e depois defina
Agora, seguirá uma distribuição Dirichlet
A página da Wikipedia na distribuição Dirichlet mostra exatamente como obter amostras da distribuição Dirichlet.
Além disso, na R
biblioteca, MCMCpack
há uma função para amostragem de variáveis aleatórias da distribuição Dirichlet.
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.
Então :
repita N vezes
-> desenha um i usando a distribuição multinomial
-> adicione 1 a
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.
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.