【问题标题】:emcee - why values outside of prior spaceemcee - 为什么值超出先前空间
【发布时间】:2018-04-10 15:43:46
【问题描述】:

我通过以下方式指定我的先验不是负面的:

def lnprior(theta):
    sig,mu  = theta
    if 0.01 < sig < 2.0 and 0.01 < mu < 1.0:
        return(0.0)
    return(-np.inf)

然后我按照emcee 网页上的食谱进行操作:

def lnprob(theta,lightcurve,noisecurve):
    lp = lnprior(theta)
    if not np.isfinite(lp):
        return(-np.inf)
    return(lp + lnlike(theta,lightcurve,noisecurve)) # lightcurve and noisecurve are np.arrays

我不会以任何方式更改(至少在不知情的情况下)mulnlike....

当我使用fig = corner.corner(samples, labels=["$\sigma$", "$\mu$",'$c$'],color=sns.xkcd_rgb["amber"]) 生成一个角图时,其中角是corner,我仍然得到几个落在下两个象限的点。为什么是这样 ?


这是我定义 lnlike 的方式:

def lnlike(theta,lightcurve,noisecurve):
    sig = theta[0]
    mu = theta[1]
    lightcurve = adder(lightcurve,mu) #simply adding lightcurve + mu 
    x = binMaker(mu,lightcurve,noisecurve) # computing x values as a function of mu
    y, yerr = detectionFrequency(lightcurve,noisecurve,mu) # a function which computes a real valued number based on f(x,mu,lightcurve,noisecurve)
    return(np.sum((y-PDF(x,sig,np.log(mu)))**2/yerr))

【问题讨论】:

  • 您似乎已经在先前定义的区域之外初始化了一些步行者。在这种情况下,它们可能需要很长时间才能“吸回”到可行区域。

标签: python montecarlo emcee


【解决方案1】:

我也遇到过这个问题,即使步行者在之前的区域内初始化也是如此。一种(生硬的)解决方案是简单地将 lnprior 中的 if 语句添加到您的 lnlike 函数中。

【讨论】:

  • 您还在关注 EMCEE 主题吗?我有一个问题,请
【解决方案2】:

要获得每个参数在其先前范围内的最佳拟合值,只需将先前范围放在括号 () 中,即

def lnprior(theta):
sig,mu  = theta
if (0.01 < sig < 2.0 and 0.01 < mu < 1.0):
    return(0.0)
return(-np.inf)

希望这对你有用。请让我进一步了解。

【讨论】:

    猜你喜欢
    • 2020-09-01
    • 2017-05-26
    • 1970-01-01
    • 2022-09-29
    • 2014-04-06
    • 2016-04-14
    • 2022-01-26
    • 2020-11-10
    相关资源
    最近更新 更多