【发布时间】:2020-02-25 21:43:56
【问题描述】:
我正在尝试在 python 中实现混合效果逻辑回归。作为比较点,我使用的是 R 中 lme4 包中的 glmer 函数。
我发现statsmodels 模块有一个BinomialBayesMixedGLM 应该能够适应这样的模型。但是,我遇到了一些问题:
- 我发现
statsmodels函数的文档并不完全有用或清晰,因此我不完全确定如何正确使用该函数。 - 到目前为止,我的尝试并没有产生与我在 R 中使用
glmer拟合模型时得到的结果相同的结果。 - 我预计
BinomialBayesMixedGLM函数不会计算 p 值,因为它是贝叶斯,但我似乎无法弄清楚如何访问参数的完整后验分布。
作为测试用例,我使用的是可用的泰坦尼克数据集here。
import os
import pandas as pd
import statsmodels.genmod.bayes_mixed_glm as smgb
titanic = pd.read_csv(os.path.join(os.getcwd(), 'titanic.csv'))
r = {"Pclass": '0 + Pclass'}
mod = smgb.BinomialBayesMixedGLM.from_formula('Survived ~ Age', r, titanic)
fit = mod.fit_map()
fit.summary()
# Type Post. Mean Post. SD SD SD (LB) SD (UB)
# Intercept M 3.1623 0.3616
# Age M -0.0380 0.0061
# Pclass V 0.0754 0.5669 1.078 0.347 3.351
但是,除了 Age 的斜率之外,这似乎与我在 R 中得到的 glmer(Survived ~ Age + (1 | Pclass), data = titanic, family = "binomial") 不匹配:
Random effects:
Groups Name Variance Std.Dev.
Pclass (Intercept) 0.8563 0.9254
Number of obs: 887, groups: Pclass, 3
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.961780 0.573402 1.677 0.0935 .
Age -0.038708 0.006243 -6.200 5.65e-10 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
那么在 python 中创建模型时我犯了什么错误?而且,一旦解决了这个问题,我该如何提取后验值或 p 值?最后,他们是否有任何混合效应逻辑回归的 Python 实现更类似于 R 中的实现?
【问题讨论】:
-
@petezurich -- 据我所知,为什么要编辑标题,这样就不再清楚地表明我的问题是关于如何在 python 中拟合这种类型的模型?对于寻找类似问题的答案的其他人来说,新标题的描述性似乎应该更小。
-
这就是标签的用途。见this post“在你的问题标题中包含标签是完全没有必要的。”
-
顺便说一句:您的问题似乎跑题了,很可能会被关闭。来自help center:“要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,描述问题以及迄今为止为解决该问题所做的工作。”
-
@petezurich 感谢您的澄清和提示。经过更多的工作,我更新了我的问题。
-
可能是 Bambi 或 Pymer4
标签: python logistic-regression mixed-models