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.