Я хочу использовать выборку срезов в 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
Таким образом, выборка генерирует значения X, которые являются отрицательными, несмотря на то, что единообразный априор определяет нижнюю границу 0.
Есть ли у кого-нибудь интуиция относительно того, почему это так?происходит?