PyMC:在拟合模型时设置约束

时间:2014-06-05 17:53:29

标签: constraints pymc mcmc stochastic

我正在尝试通过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=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

1 个答案:

答案 0 :(得分:1)

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

现在,您可以通过调用&#39; b.random()&#39;来测试变量。你应该看到一个统一的分布在上面的一个&#39; a&#39; (&#39; a.value中&#39)。

查看variables上的PyMC文档。