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))
我可能是誤會,但我的本意是爲dist1
和dist2
後驗進行採樣,併爲那些樣品喂入確定性變量。後驗預測檢查是否只能在觀察到的隨機變量上進行?
它的簡單,從使用pymc3.sampling.sample_ppc
dist2
和其他隨機變量得到後預測的樣本,但大多數我的模型的價值是從val1
和val2
狀態得出,給出的樣本。
問題出現在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
已經有圖表。