在 python 中拟合 monte carlo

Fitting with monte carlo in python

我使用一个名为 emcee 的 python 程序包来将函数拟合到某些数据点。拟合看起来不错,但是当我想在每一步绘制每个参数的值时,我得到这个:

在他们的示例中(具有不同的函数和数据点)他们得到了这个:

为什么我的函数收敛得这么快,为什么它一开始的形状很奇怪。我使用似然和后验概率应用 MCMC。即使拟合看起来非常好,函数参数的误差也非常小(比实际值小 10^10),我认为这是因为随机游走。知道如何解决吗?这是他们的拟合代码:http://dan.iel.fm/emcee/current/user/line/ 我使用了相同的代码,但对我的数据点和拟合函数进行了明显的修改。

我不会说您的函数比您链接到的 emcee 线拟合示例收敛得更快。在示例中,步行者几乎立即开始探索参数 space 中最可能的值,而在您的情况下,它需要超过 200 次迭代才能到达高概率区域。

跟踪图中的跳跃看起来像老化。这是 MCMC 采样算法的一个共同特征,在这种算法中,步行者的起点远离大部分后验,然后必须找到通往它的路。在您的情况下,似然函数看起来相当平滑,因此您只需要一百次左右的迭代即可实现这一点,从而为您的函数提供您正在谈论的 "weird shape"。

如果你能更好地约束起点,就这样做;如果不是,您可能会考虑在进行进一步分析之前丢弃此初始长度(有关燃烧长度的讨论,请参阅 here and here)。

至于误差是否符合实际,你需要检查得到的后验模型,因为实际参数值与其不确定性的比值在这方面没有发言权。例如,如果我们使用您的链接 example 并将 b 的真实值更改为 10^10,则产生的误差将小十个数量级,同时保持完全有效。