Estoy buscando una forma simple de muestrear de una distribución multivariada de von Mises-Fisher en Python. He buscado en el módulo de estadísticas en scipy y en el módulo numpy, pero solo encontré la distribución univariante de von Mises. ¿Hay algún código disponible? No he encontrado aún.
Aparentemente, Wood (1994) ha diseñado un algoritmo para el muestreo de la distribución vMF de acuerdo con este enlace , pero no puedo encontrar el documento.
- editar Para mayor precisión, me interesa el algoritmo que es difícil de encontrar en la literatura (la mayoría de los artículos se centran en ). El artículo seminal (Wood, 1994) no se puede encontrar de forma gratuita, que yo sepa.
scipy.stats.vonmises
puede ser de tipo matriz, por lo que puede especificar la distribución como unarray
. Vea este ejemploK = vonmises.pdf([x,x], kappa=[[1],[10]])
. Un vMF 2-D debe tener solo un real como parámetro. ¿Estás de acuerdo?Respuestas:
Finalmente lo tengo. Aquí está mi respuesta.
Finalmente puse mis manos en Estadísticas Direccionales (Mardia y Jupp, 1999) y en el algoritmo de Ulrich-Wood para el muestreo. Publico aquí lo que entendí de él, es decir, mi código (en Python).
El esquema de muestreo de rechazo:
Entonces, el muestreo deseado es , dondewes el resultado del esquema de muestreo de rechazo, yvse muestrea de manera uniforme sobre la hiperesfera.v 1 - w2------√+ w μ w v
Y, para un muestreo efectivo con este código, aquí hay un ejemplo:
fuente
(Pido disculpas por el formato aquí, creé una cuenta solo para responder a esta pregunta, ya que también estaba tratando de resolver esto recientemente).
y reemplazar
en el ejemplo del micrófono con una llamada a
fuente