9

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

Pymc2:

TruncatedNormal('gamma_own_%i_' % i, mu=go, tau=v_gamma_inv, value=0, a=-np.inf, b=0)

Pymc3:?

4

3 回答 3

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 和有界正态分布的迹

于 2015-09-18T14:48:44.913 回答
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)
于 2017-04-27T14:31:18.713 回答
0

以下是截断法线的完整代码,类似于来自 Meysam Hashemi 和 Kiudee 的先前解决方案,来自 PyMC3 版本 3.6:

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())
于 2019-01-17T04:45:42.607 回答