TL; DR
对采用随机指标(将确定性也随机性)作为输入的pm.Deterministic
变量进行后验预测检查的正确方法是什么?
太短;没有理解
假设我们有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
的后代进行抽样,并将这些样本输入到确定性变量中。后验预测检查仅适用于观察到的随机变量吗?
使用dist2
从pymc3.sampling.sample_ppc
和其他随机变量获取后验预测样本很简单,但我的模型的大部分值来自{{{}的状态1}}和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
已经有了图表,这似乎很愚蠢。
答案 0 :(得分:0)
是的,我误解了.sample_ppc
的目的。对于未观察到的变量,您不需要它,因为它们在跟踪中有样本。观察到的变量不会被采样,因为他们的数据被观察到了,因此您需要sample_ppc
来生成样本。
简而言之,我可以从跟踪中收集pm.Deterministic
变量的样本。