我正在尝试使用贝叶斯定理进行一些统计分析。因此,我想将以前的MCMC运行的后验用作新的后验。我正在python 3.6中使用emcee软件包
我尝试在后链上使用get_lnprob函数来获取给定位置的概率。我也尝试过使用不可能性,但这只是给了我每个步骤的每个步行者的概率矩阵,但不包括位置信息。
我以前使用的采样器的先验概率和高斯概率均相同,现在获取了一些链(用于2维,10个助步器,100个步幅)
然后我要像下面这样使用先验链构建新的后验:
logprior = chain
def post_new(x, data, logprior, cov, length, c_raw):
lp = logprior.get_lnprob(x)
print(lp)
if not np.isfinite(lp):
return -np.inf
return lp + like(x, data, cov, length, c_raw)
其中x是我的(长度2)位置矢量,logprior是我从上次运行中获得的链,而like(args)是我的数据集的对数似然性
然后我要运行此文件:
sampler = emcee.EnsembleSampler(nwalkers, ndim, post_new, args=(data, logprior, cov, length, c_raw))
sampler.run_mcmc(p0, 1000)
我期望get_lnprob函数在我的旧后验/新先验分布的位置x处给出对数概率。 但是,即使当我在空间中传递明确的位置,例如
logprior.get_lnprob([0.5,0.5])
我收到以下错误:
File "iterative.py", line 95, in <module>
print(prior_new.get_lnprob(pos))
File "(...)\lib\site-packages\emcee\sampler.py", line 116, in get_lnprob
return self.lnprobfn(p, *self.args, **self.kwargs)
TypeError: __call__() takes 2 positional arguments but 7 were given
据我了解,get_lnprob函数期望我给它提供2个参数(我做了什么?)却收到了7个?
我在这里做什么错了?