5

我试图在通过 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
4

1 回答 1

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()

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

查看有关变量的 PyMC 文档。

于 2016-12-14T03:13:38.843 回答