我已经使用EMCEE Python包为MCMC编写了以下代码
在log_prior函数中,我定义了要在它们之间移动的参数范围,而不是它们之外的参数。但问题是,在结果中,例如od0的值,像0.64,不在0.68 < od0 < 0.70中,我甚至在b中也有这个问题。
我想知道如何强制主持人恰好在我定义的范围内。这个模型对值非常敏感,我只想探索不大于或小于这个值的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发布于 2019-12-09 23:29:04
在逻辑语句中使用括号。例如,对于od0 = 0.64,H0 = 50,其中优先级应为-inf
not 0.68 < od0 < 0.70 and 60 < H0 < 80
>> False因此,先验概率为负的对数概率,但如果您添加括号:
not (0.68 < od0 < 0.70 and 60 < H0 < 80)
>> True哪一项驱动-inf的正确值之前
发布于 2020-03-28 22:53:16
要获得每个参数在其先验范围内的最佳拟合值,只需将先验范围放入bracks ()中,即
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希望这对你有用。请让我进一步了解。
https://stackoverflow.com/questions/55780582
复制相似问题