如何制作截断的正常事先:将pymc2转换为pymc3

时间:2015-09-18 03:49:25

标签: mcmc pymc3

在pymc3中如何配置截断的法线先验?在pymc2中,它非常简单(下图),但在pymc3中似乎不再有截断的正态分布。

Pymc2:

beforeSend

Pymc3:?

3 个答案:

答案 0 :(得分:11)

在PyMC3中,您可以使用Bound截断任何分布。 首先,您必须构造有界分布(此处称为BoundedNormal),然后创建一个变量,您可以在其中输入基础分布的常用参数:

with pm.Model() as model:
    BoundedNormal = pm.Bound(pm.Normal, lower=0, upper=1)
    n = BoundedNormal('n', mu=0, tau=10)
    tr = pm.sample(2000, pm.NUTS())

生成的分布如下所示: KDE and trace of the bounded normal distribution

答案 1 :(得分:2)

以下代码适用于Pymc3 3.0版

   a, b=np.float32(0.0), np.float32(10.0)

   K_lo,  K_hi = 0.0, 1.0

   BoundedNormal = pm.Bound(pm.Normal, lower=K_lo, upper=K_hi)

   with pm.Model() as model:

          n = BoundedNormal('n', mu=a, tau=b)

          tr = pm.sample(2000, pm.NUTS())

          traceplot(tr)

答案 2 :(得分:0)

这里是TruncatedNormal的完整代码,类似于PyMC3 3.6版中Meysam Hashemi和Kiudee以前的解决方案:

import pymc3 as pm

with pm.Model() as model:
    n = pm.TruncatedNormal('n', mu=0, tau=10, lower=0, upper=1)
    tr = pm.sample(2000, pm.NUTS())