我试图在通过 PyMC 的 MCMC 方法拟合变量时设置约束
例如,我在 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)
如何定义模型以使 b 始终小于或等于 a?
这是一种有效的方法吗?
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
最佳答案
我相信你的意思是“上= 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()
现在您可以通过调用 'b.random()' 来测试变量,您应该看到一个以 'a' ('a.value') 为界的均匀分布。
查看 variables 上的 PyMC 文档.
关于constraints - PyMC:拟合模型时设置约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24066886/