【发布时间】: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
我不会以任何方式更改(至少在不知情的情况下)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))
【问题讨论】:
-
您似乎已经在先前定义的区域之外初始化了一些步行者。在这种情况下,它们可能需要很长时间才能“吸回”到可行区域。
标签: python montecarlo emcee