PyMC采样会忽略参数的范围

时间:2018-10-03 12:14:54

标签: python sampling pymc mcmc

我想在PyMC2中使用切片采样。我有一个自定义的log_likelihood函数,以及一个带有4个统一参数且具有上下限的模型。

当我运行采样时,PyMC会忽略参数界限并在界限之外生成值。

我写了一个简单的例子:

import pymc as pm
X = pm.Uniform('X', 0, 1, value=0.45)

@pm.potential
def log_l(X=X):
    print 'X = ',X
    logp = -X**2 / 5.
    print 'logp = ',logp
    return logp


m = pm.MCMC([X, log_l])
m.use_step_method(pm.Slicer, X)
m.sample(iter=1)

示例输出:

X =  -0.0287598536765
logp =  -0.000165425836698
X =  -1.02875985368
logp =  -0.211669367307
X =  -2.02875985368
logp =  -0.823173308778
X =  0.971240146324
logp =  -0.188661484366
X =  1.97124014632
logp =  -0.777157542896
X =  -0.157629460676
logp =  -0.00496940937459

因此,尽管统一先验指定下限为0,但抽样仍会产生X值为负的值。

有人对这种情况为什么发生有直觉吗?

0 个答案:

没有答案