在pymc3中如何配置截断的法线先验?在pymc2中,它非常简单(下图),但在pymc3中似乎不再有截断的正态分布。
Pymc2:
beforeSend
Pymc3:?
答案 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())
答案 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())