我想在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值为负的值。
有人对这种情况为什么发生有直觉吗?