use*_*689 5 constraints stochastic mcmc pymc
我试图通过MCMC方法与PyMC拟合变量时设置约束.例如,我在PyMC中定义了以下随机模型
import pymc as pm
a=pm.Uniform('a',lower=0.,upper=1.,value=0.2)
b=pm.Uniform('b',lower=0.,upper=1.,value=0.2)
Run Code Online (Sandbox Code Playgroud)
如何定义模型以使b总是更小或等于?这是一种有效的方法吗?
a=pm.Uniform('a',lower=0.,upper=1.,value=0.2)
b=pm.Uniform('b',lower=0.,upper=b,value=0.2) #used a as the upper bound for b
Run Code Online (Sandbox Code Playgroud)
我相信你的意思是“upper=a”。
我认为您可以将“b”定义为随机变量,依赖于“a”,如下所示:
import pymc as pm
import numpy as np
import scipy.stats as scs
@pm.stochastic
def b(value=0.0, a=a):
def logp(value, a):
if 0 <= value <= a:
return np.log(1/a)
else:
return -np.inf
def random(a):
return scs.uniform(0, a).rvs()
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过调用“b.random()”来测试该变量,并且您应该看到上面以“a”(“a.value”)为界的均匀分布。
查看有关变量的 PyMC 文档。