2015-04-24 17 views
29

Ich habe ein Modell, das wie in diesem Diagramm strukturiert:PyMC: Unter Ausnutzung der spärlichen Modellstruktur in Adaptive Metropolis MCMC

Model diagram

Ich habe eine Population von mehreren Personen (1 indiziert ... 5 in diesem Bild). Populationsparameter (A und B, aber es können mehr sein) bestimmen die Verteilungen für jeden individuellen Latent variable L[i]. Die latente Variable L[i] bestimmt die Wahrscheinlichkeit X[i] probabilistisch. Dieses Modell ist "spärlich" in dem Sinne, dass die meisten Knoten keine Kanten haben, die sie direkt verbinden.

Ich versuche PyMC zu verwenden, um die Populationsparameter, sowie jedes Einzelnen latente Variable abzuleiten. (. Eine weitere Frage, die detaillierter mein spezielles Szenario beschreibt, ist here) Meine Frage ist: sollte ich Adaptive Metropolis werden anstelle eines anderen Verfahrens, und wenn ja, gibt es eine „Trick“, um die Gruppierung der stochastischen Variablen richtig ?

Wenn ich Adaptive Metropolis Sampling richtig verstehe (und ich kann nicht ...), schlägt dieser Algorithmus neue Werte für die Unbekannten (A, B und alle L[i]) durch Berücksichtigung von, wie diese Variablen in der korrelierten hintere Verteilung, die bisher im Lauf konstruiert wurde. Wenn A und B negativ korreliert sind, dann ist ein Vorschlag, die A erhöht tendenziell B zu verringern, und umgekehrt, die Chance zu erhöhen, dass der Vorschlag angenommen wird.

Die Sache ist die, in diesem Modell, die jeweils L[i] ist ein unabhängiger Zug von der zugrunde liegenden Bevölkerungsverteilung bestimmt durch A und B. So, während sie in den hinteren korrelieren zu sehen sind, sind diese Korrelationen wirklich wegen A und B allein, und so sind sie irgendwie „verwechselt.“ Also, wenn ich die Funktion aufrufen,

M.use_step_method(pymc.AdaptiveMetropolis, stochastics) 

sollten alle L[i] sein zusammen in der Liste der Stochastik? Oder sollte ich mehrmals aufrufen use_step_method, jedes Mal mit stochastics=[A, B, L[i]] für nur eine der L[i]? Mein Gedanke war, dass das mehrmalige Aufrufen der Funktion für verschiedene Gruppen von Stochastik das Problem strukturieren und es PyMC erleichtern würde, indem es ihm befahl, sich nur auf die relevanten Zusammenhänge zu konzentrieren. Ist das richtig?

Antwort

1

Dies kann eine unbefriedigende Antwort sein, aber es scheint, dass PyMC3 ein Beispiel für ein sehr ähnliches hierarchisches Modell hat: https://pymc-devs.github.io/pymc3/GLM-hierarchical/ Durch die Migration Ihres Codes auf PyMC3 erhalten Sie Zugriff auf neuere Samples wie den No-U-Turn Sampler (NUTS)