Dibujo de la distribución de Dirichlet

25

Digamos que tenemos una distribución de Dirichlet con vector de parámetro dimensional α = [ α 1 , α 2 , . . . , α K ] . ¿Cómo puedo extraer una muestra (un vector K- dimensional) de esta distribución? Necesito una explicación (posiblemente) simple.Kα=[α1,α2,...,αK]K

usuario1315305
fuente

Respuestas:

25

Primero, extraiga muestras aleatorias independientes y 1 , ... , y K de distribuciones gamma cada una con densidadKy1,,yK

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

y luego establecer

xi=yij=1Kyj.

Ahora, seguirá una distribución de Dirichletx1,...,xK

La página de Wikipedia sobre la distribución de Dirichlet le dice exactamente cómo tomar muestras de la distribución de Dirichlet.

Además, en la Rbiblioteca MCMCpackhay una función para muestrear variables aleatorias de la distribución Dirichlet.

Glen_b -Reinstate a Monica
fuente
2
La implementación de la función para la generación aleatoria de Dirichlet también se puede financiar en cran.r-project.org/web/packages/extraDistr
Tim
2

Un método simple (aunque no exacto) consiste en utilizar el hecho de que dibujar una distribución de Dirichlet es equivalente al experimento de la urna de Polya. (Dibujando de un conjunto de bolas de colores y cada vez que dibujas una bola, la vuelves a poner en la urna con una segunda bola del mismo color)

αi

Luego :

repetir N veces

αi

αi

final repetir

α

Si no me equivoco, ese método es asintóticamente exacto. Pero dado que N es finito, NUNCA dibujará algunas distribuciones con probabilidades previas muy pequeñas (mientras que debe dibujarlas con una frecuencia muy pequeña). Supongo que podría ser satisfactorio en la mayoría de los casos con N = K.10.

Arnaud Mégret
fuente
Sospecho que esta es la forma en que np.random.dirichletse implementa, porque genera ceros exactos en los vectores de probabilidad muestreados, aunque dichos vectores no pertenecen a ningún soporte de Dirichlet. Esto es lo que me trajo aquí.
Eli Korvigo