Regression using PYMC3
我在这里发布了一个 IPython 笔记本 http://nbviewer.ipython.org/gist/dartdog/9008026
我通过标准 Statsmodels OLS 工作,然后通过 Pandas 提供的数据与 PYMC3 类似,顺便说一句,这部分工作得很好。
我看不到如何从 PYMC3 中获取更多标准参数?这些示例似乎只是使用 OLS 来绘制基本回归线。看来PYMC3模型数据应该可以给出回归线的参数了吧?除了可能的痕迹,即最高概率??线是什么?
欢迎对 Alpha、Beta 和 sigma 的解释进行任何进一步的解释!
另外如何使用 PYMC3 模型来估计 y 的未来值给定一个新的 x ie 预测具有一定的概率?
最后,PYMC3 有一个新的 GLM package器,我试过了,但它似乎搞砸了? (不过也可能是我)
- 好吧,我很有希望,但我知道这个问题对 SO 来说有点不集中。仍然不确定如何/从哪里获得帮助?
glm 子模块设置了一些默认的先验,这很可能不适用于您的所有情况。您可以使用 family 参数来更改它们,例如:
1 2
| pm.glm.glm('y ~ x', data,
family=pm.glm.families.Normal(priors={'sd': ('sigma', pm.Uniform.dist(0, 12000))})) |
不幸的是,这还没有很好的记录,需要一些很好的例子。
- 非常感谢!干得好,我希望通过其中的一些工作可以帮助文档流程!关于使用概率模型得出"最可能"回归而不是仅仅覆盖频率回归的任何建议?即如何从pymc3模型中提取一些有用的参数?
-
我认为 #11 单元格中的后验预测是贝叶斯方法来做到这一点。要获得度量,您可以计算每个采样回归线的残差并将它们平均(这样您就可以进行模型比较)。
-
无法弄清楚如何将解决方案应用于我的代码,当我尝试按照提供的方式运行代码时,我得到模块不可调用,当我尝试将代码放在"with"子句中时它会爆炸......(所以我没有正确翻译。)我试图在"with"中使用 Family=clause 给出 KeyError: 0
-
vars = pm.glm.glm(y ~ x, data, family=pm.glm.glm.families.Normal(priors={sd: {sigma: pm.Uniform.dist(0, 12000)}})) 给我AttributeError:函数对象没有属性族
-
对不起@dartdog,稍后再看看!
-
在那之前,您可能只是标准化您的数据,这应该使 sd 达到更合理的范围。
-
抱歉,这花了一些时间,但我更新了上面现在应该可以工作的代码(在您的示例中尝试过并获得与手动相同的结果)。你会看到,不是传递一个字典,而是先验定义一个元组对(名称,分布)。