通过概率编程(pymc)进行开关点检测


9

我目前正在阅读《概率编程和贝叶斯黑客方法》一书。我已经阅读了几章,并且在第一章中进行思考,其中pymc的第一个示例包括检测文本消息中的巫婆点。在该示例中,用于指示切换点何时发生的随机变量用τ。MCMC步骤后, τ 给出: 在此处输入图片说明

首先,从该图可以了解到,在第45天发生转换点的可能性接近50%。如果没有转换点,该怎么办?我想确定是否确实存在一个切换点,而不是假设有一个切换点然后尝试找到它。

作者通过“没有发生变化,或者随着时间的推移变化是逐渐变化的,……的后验分布”来回答“是否发生了切换点”问题。 τ 本来可以散布的。”但是您如何以可预测性来回答这个问题,例如,发生切换点的机率是90%,而在第45天发生机率的机率是50%。

是否需要更改型号?还是可以用当前模型来回答?


提到本书作者@ Cam.Davidson.Pilon,他的答案可能比下面的答案更好。
肖恩·复活节

Answers:


6

SeanEaster有一些很好的建议。贝叶斯因子可能很难计算,但是在PyMC2中有一些专门针对贝叶斯因子的优秀博客文章

一个密切相关的问题是模型的拟合优度。一个公平的方法就是检查-后验者可以为我们提供拟合优度的证据。喜欢引用:

“没有发生任何变化,或者随着时间的推移变化是逐渐的, τ 会更加分散”

这是真的。后部在时间45附近达到最高峰。正如您所说>质量的50%在45,而如果没有切换点,则质量(理论上)应该在时间45接近1/80 = 1.125%。

您的目标是根据模型忠实地重建观察到的数据集。在第2章中,它们是生成伪造数据的模拟。如果您观察到的数据看起来与人工数据大相径庭,则可能是您的模型不合适。

对于不严谨的答案,我深表歉意,但这确实是我没有有效克服的主要困难。


也许与您的答案无关,我只是大声思考。无法将S型曲线拟合到数据,并根据beta参数确定斜率是否表示发生了变化。也许可以从示例中了解确定是否存在切换点的阈值。也许这也可以通过λ参数。如果λ1与 λ2有一个切换点,否则没有。这也可以通过从示例中学到的阈值来完成
Olivier_s_j 2014年

1
例如,拟合模型: λ1p+λ2(1p),在哪里 p=1/(1+exp(βt))?我相信这将行得通,并将允许平稳过渡。你是正确的推断β的斜率可以确定切换点是否存在。我真的很喜欢,您应该进一步探索。
Cam.Davidson.Pilon'4

关于模型拟合的问题,我补充说,后验预测p值是评估拟合的一种方法。参见本文
肖恩·复活节

2

这更多是一个模型比较问题:感兴趣的是没有开关点的模型是否比有开关点的模型更好地解释数据。回答这个问题的一种方法是在有和没有转换点的情况下计算模型的贝叶斯因子。简而言之,贝叶斯因子是两种模型下数据的概率之比:

K=Pr(D|M1)Pr(D|M2)=Pr(θ1|M1)Pr(D|θ1,M1)dθ1Pr(θ2|M2)Pr(D|θ2,M2)dθ2

如果是使用切换点的模型,而是不使用切换点的模型,则的高值可以解释为强烈支持切换点模型。(上面链接的维基百科文章提供了有关值得注意的K值的准则。)M1M2K

还要注意,在MCMC上下文中,上述积分将替换为来自MCMC链的参数值之和。此处提供有关贝叶斯因子的更详尽的示例处理。

对于计算切换点概率的问题,这相当于求解。如果您假设两个模型的先验概率相等,则模型的后验概率等于贝叶斯因子。(请参见此处的幻灯片5。)然后,这就是使用贝叶斯因子和来求解的问题。(独家)正在考虑的模型事件。P(M1|D)P(M1|D)i=1nP(Mi|D)=1

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.