Ich suche nach einer einfachen Möglichkeit, eine multivariate von Mises-Fisher-Distribution in Python abzutasten. Ich habe im Statistikmodul in Scipy und im Numpy-Modul nachgesehen, aber nur die univariate von Mises-Verteilung gefunden. Gibt es einen Code zur Verfügung? Habe ich noch nicht gefunden.
Anscheinend hat Wood (1994) einen Algorithmus zum Abtasten von der vMF-Verteilung gemäß diesem Link entworfen , aber ich kann das Papier nicht finden.
- edit Aus Gründen der Genauigkeit interessiert mich der Algorithmus, der in der Literatur schwer zu finden ist (die meisten Arbeiten konzentrieren sich auf ). Meines Wissens kann der wegweisende Artikel (Wood, 1994) nicht kostenlos gefunden werden.
scipy.stats.vonmises
kann ein Array sein, sodass Sie die Verteilung als angeben könnenarray
. Siehe dieses BeispielK = vonmises.pdf([x,x], kappa=[[1],[10]])
. Ein 2D-vMF sollte nur ein reelles als Parameter haben. Sind Sie einverstanden?Antworten:
Endlich hab ich es. Hier ist meine Antwort.
Ich habe schließlich die Richtungsstatistik (Mardia und Jupp, 1999) und den Ulrich-Wood-Algorithmus für die Stichprobenentnahme in die Hand genommen . Ich poste hier, was ich davon verstanden habe, dh meinen Code (in Python).
Stichprobenplan für die Ablehnung:
Und um effektiv mit diesem Code zu arbeiten, hier ein Beispiel:
quelle
(Ich entschuldige mich für die Formatierung hier. Ich habe ein Konto erstellt, um auf diese Frage zu antworten, da ich kürzlich auch versucht habe, dies herauszufinden.)
Die Antwort von mic ist nicht ganz richtig, der Vektorv muss kommen aus Sp - 2 im tangentialen Raum zu μ , das ist, v sollte ein Einheitsvektor orthogonal zu sein μ . Ansonsten der Vektorv 1 - w2------√+ w μ wird nicht norm eins haben. Dies können Sie dem Beispiel von mic entnehmen. Verwenden Sie zum Beheben dieses Problems Folgendes:
und ersetzen
in mic's beispiel mit einem anruf an
quelle