【问题标题】:Defining the exponential prior with jumping order of magnitude in parameter space在参数空间中定义具有跳跃数量级的指数先验
【发布时间】: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+131e16 之间以这三个数量级更快地变化。我如何定义我的先验以便在参数空间中进行相当大的更改?

【问题讨论】:

  • 我不知道如何使用pymc,但我认为你想要的是在log(M)而不是M本身中采样。
  • 另外:使用1e131e15 而不是math.pow(10,13)math.pow(10,15)
  • @AndrewJaffe 如果我使用统一的先验并根据 pymc 文档将上限和下限设置为1e161e13,则会出现无法在参数空间中正确快速移动的问题最好的解决方案是指数级的,但我不知道如何定义它也不会陷入巨大的数量级变化中。
  • 我可能完全误解了,但我认为你已经完全倒退了。您想要在log M 和因此P(M) = 1/M 中的统一先验(直到比例常数)。这意味着 1e12 到 1e13 的十年将像 1e13 到 1e14 和 1e14 到 1e15 的十年一样频繁出现。
  • @AndrewJaffe 好吧,我看到了您的个人资料,您是一名宇宙学家。因此,如果我想定义我对星系团光环质量的先验并且它遵循模拟和观察到的质量函数,它的概率是否应该遵循前面提到的指数概率类型并且可能遵循log P(M)=-M/1e15

标签: python bayesian pymc mcmc pymc3


【解决方案1】:

我发现,如果我在 [1e-2,10] 范围之间定义先验,然后为了在对数似然中使用它,只需将它与 1e15 相乘,以获得所需的幅度顺序,以便进一步分析

import pymc as pm
import numpy as np
M0=1e15

@pm.stochastic(dtype=np.float, observed=False, trace=True)
def ma(name='ma',value=0.1, rate = 1):
    """mass is a stochastic parameter with exponential distribution.p(M)~exp(-M/10^15)"""
    return pm.exponential_like(value, rate)
@pm.potential
def ma_bound(ma=ma):
    if ((ma >= 0.01) and (ma < 10)):
       return 0.0
    else:
       return -np.inf

M=pm.MCMC([ma,ma_bound])
M.sample(15000,5000,50)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2015-09-22
    • 2013-10-15
    • 2018-06-13
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    相关资源
    最近更新 更多