PyMC3 确定性变量的后验预测检查
Posterior Predictive Check on PyMC3 Deterministic Variable
TL;博士
对 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
的后验概率进行采样,并将这些样本输入确定性变量。是否只能对观察到的随机变量进行后验预测检查?
使用 pymc3.sampling.sample_ppc
从 dist2
和其他随机变量中获取后验预测样本很简单,但我模型的大部分值都来自 val1
和 [= 的状态20=],给定这些样本。
问题出现在 pm.Deterministic(.)
似乎 return 和 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
已经有了图表,这似乎很愚蠢。
是的,我误解了 .sample_ppc
的目的。对于未观察到的变量,您不需要它,因为它们在跟踪中有样本。观察到的变量不是从中采样的,因为它们的数据是观察到的,因此您需要 sample_ppc
来生成样本。
简而言之,我可以从跟踪中收集 pm.Deterministic
个变量的样本。
TL;博士
对 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
的后验概率进行采样,并将这些样本输入确定性变量。是否只能对观察到的随机变量进行后验预测检查?
使用 pymc3.sampling.sample_ppc
从 dist2
和其他随机变量中获取后验预测样本很简单,但我模型的大部分值都来自 val1
和 [= 的状态20=],给定这些样本。
问题出现在 pm.Deterministic(.)
似乎 return 和 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
已经有了图表,这似乎很愚蠢。
是的,我误解了 .sample_ppc
的目的。对于未观察到的变量,您不需要它,因为它们在跟踪中有样本。观察到的变量不是从中采样的,因为它们的数据是观察到的,因此您需要 sample_ppc
来生成样本。
简而言之,我可以从跟踪中收集 pm.Deterministic
个变量的样本。