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)

我如何定义模型使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

我想你的意思是'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()

现在您可以通过调用'b.random()'来测试变量,您应该可以看到一个均匀分布,上面以'a' ('a.value')为界。

查看PyMC关于变量的文档

最新更新