PyMC3确定性变量的后验预测检验

时间:2017-02-10 04:00:33

标签: python theano pymc3

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

我可能会误解,但我的目的是对dist1dist2的后代进行抽样,并将这些样本输入到确定性变量中。后验预测检查仅适用于观察到的随机变量吗?

使用dist2pymc3.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已经有了图表,这似乎很愚蠢。

1 个答案:

答案 0 :(得分:0)

是的,我误解了.sample_ppc的目的。对于未观察到的变量,您不需要它,因为它们在跟踪中有样本。观察到的变量不会被采样,因为他们的数据被观察到了,因此您需要sample_ppc来生成样本。

简而言之,我可以从跟踪中收集pm.Deterministic变量的样本。