主持人 - 为什么在先前空间之外的价值观

时间:2017-10-29 15:41:46

标签: python montecarlo emcee

我通过以下方式指定我的先辈们没有否定:

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

我不会以任何方式改变mu中的lnlike(至少不是故意)......

然后当我使用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))

enter image description here

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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