Я написал следующий код для MCMC, используя пакет EMCEE Python
В функции log_prior
я определил диапазон параметров, по которым EMCEE перемещается между ними, а не за их пределами.
Но проблема в том, что в результатах я вижу, что, например, od0
имеет значение типа 0.64
, которого нет в 0.68 < od0 < 0.70
У меня есть эта проблема даже для b
.
Интересно, как заставить EMCEE находиться точно между диапазонами, которые я определил.
Модель очень чувствительна к значениям, и я просто хочу исследовать между 0.68 < od0 < 0.70
, не больше или меньше, чем это.
def log_prior(H0, od0, c, b, M):
if not 0.68 < od0 < 0.70 and 60 < H0 < 80 and -20 < M < -18.5 and 0.045 < b < 0.065 :
#return 0.0
return -np.inf
mu = 0.878
sigma = 0.0004
return np.log(1.0/(np.sqrt(2*np.pi)*sigma))-0.5*(c-mu)**2/sigma**2
без Gaussian prior
код:
def log_prior(H0, od0, c, b, M):
if 0.68 < od0 < 0.70 and 60 < H0 < 80 and -20 < M < -18.5 and 0.045 < b < 0.065 :
return 0.0
return -np.inf