Python ValueError:使用emcee软件包时概率函数返回NaN

Python ValueError:使用emcee软件包时概率函数返回NaN,python,valueerror,emcee,Python,Valueerror,Emcee,我使用emcee软件包来确定应遵循泊松分布的测量数据集的最佳参数。我使用的代码是 def lnL_Poisson(theta,x,y,yerr): logA,beta = theta A = 10**logA model = the Poisson likelihood return np.sum(model) def lnprior(theta): logA,beta = theta if -5 < logA < 0 and -

我使用emcee软件包来确定应遵循泊松分布的测量数据集的最佳参数。我使用的代码是

def lnL_Poisson(theta,x,y,yerr):

    logA,beta = theta
    A = 10**logA
    model = the Poisson likelihood
    return np.sum(model)

def lnprior(theta):

    logA,beta = theta
    if -5 < logA < 0 and -2 < beta < 4:
        return 0.0
    return -np.inf


def lnprob_Poisson(theta, x, y, yerr):

    lp = lnprior(theta)
    if not np.isfinite(lp):
        return -np.inf
    return lp + lnL_Poisson(theta, x, y, yerr)

def lnL_Poisson(θ,x,y,yerr):
logA,β=θ
A=10**logA
模型=泊松似然
返回np.和(模型)
def lnprior(θ):
logA,β=θ
如果-5
但是,当运行此代码时,它会返回

ValueError                                Traceback (most recent call last)
<ipython-input-81-460e20ecdf72> in <module>
      1 sampler_2 = emcee.EnsembleSampler(nwalkers, ndim, lnprob_Poisson, args=(x, y_obs, dy))
----> 2 tmp = sampler_2.run_mcmc(pos, 500) #Run the sampler 500 times
      3 samples_2 = sampler_2.chain[:, 50:, :].reshape((-1, 2))
      4 fig = corner.corner(samples_2, labels=[r"$\log(A)$", r"$\beta$"],quantiles=[0.16, 0.5, 0.84], show_titles=True,label_kwargs=dict(fontsize=15))

~\Anaconda3\lib\site-packages\emcee\ensemble.py in run_mcmc(self, initial_state, nsteps, **kwargs)
    382 
    383         results = None
--> 384         for results in self.sample(initial_state, iterations=nsteps, **kwargs):
    385             pass
    386 

~\Anaconda3\lib\site-packages\emcee\ensemble.py in sample(self, initial_state, log_prob0, rstate0, blobs0, iterations, tune, skip_initial_state_check, thin_by, thin, store, progress)
    283             state.blobs = blobs0
    284         if state.log_prob is None:
--> 285             state.log_prob, state.blobs = self.compute_log_prob(state.coords)
    286         if np.shape(state.log_prob) != (self.nwalkers,):
    287             raise ValueError("incompatible input dimensions")

~\Anaconda3\lib\site-packages\emcee\ensemble.py in compute_log_prob(self, coords)
    454         # Check for log_prob returning NaN.
    455         if np.any(np.isnan(log_prob)):
--> 456             raise ValueError("Probability function returned NaN")
    457 
    458         return log_prob, blob

ValueError: Probability function returned NaN
ValueError回溯(最近一次调用)
在里面
1名采样器_2=主持人。全体采样器(nwalkers、ndim、lnprob_Poisson、args=(x、y_obs、dy))
---->2 tmp=取样器2.运行mcmc(位置500)#运行取样器500次
3个样本_2=取样器_2.链[:,50:,:]重塑(-1,2))
4图=角点。角点(样本2,标签=[r“$\log(A)$”,r“$\beta$”],分位数=[0.16,0.5,0.84],显示标题=真,标签=dict(fontsize=15))
运行中的~\Anaconda3\lib\site packages\emcee\emblue.py\u mcmc(自身、初始状态、nsteps、**kwargs)
382
383结果=无
-->384对于self.sample(初始_状态,迭代次数=nsteps,**kwargs)中的结果:
385通行证
386
样本中的~\Anaconda3\lib\site packages\emcee\emble.py(self、初始状态、log\u prob0、rstate0、blobs0、迭代、调优、跳过初始状态检查、精简、存储、进度)
283 state.blobs=blobs0
284如果state.log_prob为无:
-->285 state.log\u prob,state.blobs=self.compute\u log\u prob(state.coords)
286如果np.形状(状态日志问题)!=(self.nwalkers):
287提升值错误(“不兼容的输入尺寸”)
计算日志prob中的~\Anaconda3\lib\site packages\emcee\emessle.py(self,coords)
454#检查是否存在日志问题。
455如果np.any(np.isnan(日志问题)):
-->456 raise VALUERROR(“概率函数返回NaN”)
457
458返回日志问题,blob
ValueError:返回的概率函数为NaN
当使用高斯对数似然性时,代码确实起作用。我猜这与某个地方的概率为0,然后除以这个值有关。然而,我不知道如何解决这个问题。有人有这方面的经验吗