Я пытаюсь реализовать смешанные эффекты логистики c регрессия в python. Для сравнения я использую функцию glmer
из пакета lme4
в R.
Я обнаружил, что модуль statsmodels
имеет BinomialBayesMixedGLM
, который должен подойдет такая модель. Однако я столкнулся с рядом проблем:
- Мне кажется, что документация для функции
statsmodels
не совсем полезна или не ясна, поэтому я не совсем уверен, как использовать эту функцию - До сих пор мои попытки не дали результатов, которые повторяли бы то, что я получаю при подборе модели с
glmer
в R. - Я ожидаю, что функция
BinomialBayesMixedGLM
не вычисляет p -значения, поскольку он байесовский, но я не могу понять, как получить доступ к полным апостериорным распределениям для параметров.
В качестве теста я использую titani c доступный набор данных здесь .
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 реализации регрессий со смешанным эффектом логистики c, которые больше похожи на реализацию в R?