2017-02-10 6 views
0

TL; DRPosterior Predictive Check auf Deterministische Variable PyMC3

Was ist der richtige Weg für posterior-prädiktive Prüfungen an pm.Deterministic Variablen, die Stochastik (die deterministische auch stochastische) als Eingabe nehmen?

Zu kurz; Nicht verstehen

sagen, wir haben ein pymc3 Modell wie folgt aus:

import pymc3 as pm 

with pm.Model() as model: 
    # Arbitrary, trainable distributions. 
    dist1 = pm.Normal("dist1", 0, 1) 
    dist2 = pm.Normal("dist2", dist1, 1) 

    # Arbitrary, deterministic theano math. 
    val1 = pm.Deterministic("val1", arb1(dist2)) 

    # Arbitrary custom likelihood. 
    cdist = pm.DensityDistribution("cdist", logp(val1), observed=get_data()) 

    # Arbitrary, deterministic theano math. 
    val2 = pm.Deterministic("val2", arb2(val1)) 

ich Missverständnis sein, aber meine Absicht ist, für die Posteriorbedingungen dist1 und dist2 abgetastet werden, und für die Proben eingespeist in die deterministischen Variablen. Ist die posteriore Vorhersage nur bei beobachteten Zufallsvariablen möglich?

Es ist einfach posterior prädiktive Proben aus dist2 und anderen Zufallsvariablen zu erhalten pymc3.sampling.sample_ppc verwenden, aber die Mehrheit des Wertes meines Modells ist aus dem Stand der val1 und val2, die Proben gegeben abgeleitet.

Das Problem tritt auf, pm.Deterministic(.) scheint eine th.TensorVariable zurückgeben. So wird, wenn dieses genannt:

ppc = pm.sample_ppc(_trace, vars=[val1, val2])["val1", "val2"] 

... und pymc3 versucht dieser Code-Block in pymc3.sampling:

410  for var in vars: 
--> 411   ppc[var.name].append(var.distribution.random(point=param, 
    412               size=size)) 

... es beschwert sich, weil ein th.TensorVariable offensichtlich kein .distribution haben.

Also, was ist der richtige Weg, um die posterioren Proben der Stochastik durch Deterministik zu tragen? Muss ich explizit eine th.function erstellen, die stochastische posteriore Proben nimmt und die deterministischen Werte berechnet? Das scheint albern angesichts der Tatsache, dass pymc3 bereits die Grafik an Ort und Stelle hat.

Antwort

0

Ja, ich missverstand den Zweck von .sample_ppc. Sie brauchen es nicht für unbeobachtete Variablen, da diese Samples im Trace enthalten. Beobachtete Variablen werden nicht abgetastet, da ihre Daten beobachtet werden. Daher benötigen Sie sample_ppc, um Proben zu generieren.

Kurz gesagt, kann ich Proben der pm.Deterministic Variablen aus der Spur sammeln.

Verwandte Themen