我正在尝试使用简单的多级模型进行PyMC3。当使用伪造和真实数据时,随机效果分布的轨迹彼此移动(见下图)并且看起来是相同轨迹的偏移。这是NUTS的预期工件还是模型问题的指示?
以下是实际数据的跟踪图:
以下是模型的IPtyhon notebook以及用于创建虚假数据的函数。这是corresponding gist。
答案 0 :(得分:2)
我希望这会根据alpha上的群组均值分布发生。如果你考虑一下,如果群体意味着转移它会影响所有alphas到相同程度。你可以通过对一些alphas进行组均值跟踪的散点图来确认这一点。对于大多数采样器而言,分层模型通常很难,因为组均值和方差与各个RV之间存在这些复杂的相互依赖关系。有关详细信息,请参阅http://arxiv.org/abs/1312.0906。
在你的具体情况下,跟踪对我来说看起来并不太令人担忧,特别是在迭代1000之后。所以你可能只是放弃那些作为老化,并记住你有一些采样噪音,但可能得到右后方整体。此外,您可能希望执行后验预测检查,以查看模型是否可以重现您感兴趣的数据中的模式。
或者,您可以尝试使用pm.find_hessian()
估算更好的粗体,例如https://github.com/pymc-devs/pymc/blob/3eb2237a8005286fee32776c304409ed9943cfb3/pymc/examples/hierarchical.py#L51
我还发现这篇看起来很有趣的论文(还没有读过它,但在PyMC3中可能很酷):arxiv-web3.library.cornell.edu/pdf/1406.3843v1.pdf