【发布时间】:2014-07-22 12:53:44
【问题描述】:
我想为参数定义一个指数先验如下
因此我在pymc中定义了它
@pm.stochastic
def MASS(value=math.pow(10,15), rate = math.pow(10,15)):
"""mass is a stochastic parameter with exponential distribution.p(M)~exp(-M/10^15)"""
return pm.exponential_like(value, rate)
@pm.potential
def MASS_bound(MASS=MASS):
if ((MASS >= math.pow(10,13)) and (MASS < math.pow(10,16))):
return 0.0
else:
return -np.inf
我也希望它满足
但是当我运行我的 MCMC 代码 MASS 时发生的事情变化非常缓慢,而我希望它在 1e+13 和 1e16 之间以这三个数量级更快地变化。我如何定义我的先验以便在参数空间中进行相当大的更改?
【问题讨论】:
-
我不知道如何使用pymc,但我认为你想要的是在
log(M)而不是M本身中采样。 -
另外:使用
1e13和1e15而不是math.pow(10,13)和math.pow(10,15)。 -
@AndrewJaffe 如果我使用统一的先验并根据 pymc 文档将上限和下限设置为
1e16和1e13,则会出现无法在参数空间中正确快速移动的问题最好的解决方案是指数级的,但我不知道如何定义它也不会陷入巨大的数量级变化中。 -
我可能完全误解了,但我认为你已经完全倒退了。您想要在
log M和因此P(M) = 1/M中的统一先验(直到比例常数)。这意味着 1e12 到 1e13 的十年将像 1e13 到 1e14 和 1e14 到 1e15 的十年一样频繁出现。 -
@AndrewJaffe 好吧,我看到了您的个人资料,您是一名宇宙学家。因此,如果我想定义我对星系团光环质量的先验并且它遵循模拟和观察到的质量函数,它的概率是否应该遵循前面提到的指数概率类型并且可能遵循
log P(M)=-M/1e15?
标签: python bayesian pymc mcmc pymc3