2017-02-10 61 views
0

TL; DRPyMC3確定性變量的後驗預測性檢查

對隨機變量(呈現確定性也是隨機的)作爲輸入的變量進行後驗預測檢驗的正確方法是什麼?

太短;不明白

說我們有一個pymc3模式是這樣的:

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)) 

我可能是誤會,但我的本意是爲dist1dist2後驗進行採樣,併爲那些樣品喂入確定性變量。後驗預測檢查是否只能在觀察到的隨機變量上進行?

它的簡單,從使用pymc3.sampling.sample_ppcdist2和其他隨機變量得到後預測的樣本,但大多數我的模型的價值是從val1val2狀態得出,給出的樣本。

問題出現在pm.Deterministic(.)似乎返回th.TensorVariable。所以,當這被稱爲:

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

...和pymc3嘗試在pymc3.sampling的代碼塊:

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

...它抱怨,因爲th.TensorVariable顯然不具有.distribution

那麼,通過確定性來推導隨機樣本後驗樣本的正確方法是什麼?我是否需要明確創建一個採用隨機後驗樣本並計算確定性值的th.function?這看起來很愚蠢,因爲pymc3已經有圖表。

回答

0

是的,我誤解了.sample_ppc的目的。您不需要它用於未觀察到的變量,因爲這些變量具有跟蹤中的樣本。觀察到的變量不是從中採樣的,因爲它們的數據是被觀察到的,因此您需要sample_ppc來生成樣本。

總之,我可以從跟蹤中收集pm.Deterministic變量的樣本。