Statsmodels в Python glm создает PerfectSeparationError, R возвращает результаты - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь перенести некоторый прототип кода R в Python, и у меня возникают проблемы с отображением из stats :: glm в R. Первый набор тестов возвращает разумно выглядящие значения в R, но не в Python.

Код Python:

import numpy
import pandas
from statsmodels.formula.api import glm
from statsmodels.api import families
from statsmodels.genmod.families.links import logit

my_data = pandas.DataFrame({
    'success': [1, 0, 1, 1, 0, 0, 1, 1, 0, 1],
    'col_a': [5000.0, 10000.0, 11000, 20000.0, 20000.0, 25000.0, 30000.0, 30000.0, 40000.0, 41000.0],
    'col_b': ['a', 'a', 'b', 'b', None, 'b', 'c', 'c', None, 'd'],
    'col_c': [5487.0, 5654, numpy.NaN, 2918.0, 912.0, numpy.NaN, 1236.0, 234.0, 2390.0, 21092.0],
})
formula = 'success ~ col_a + col_b + col_c'

result = glm(formula, family=families.Binomial(link=logit), data=my_data, missing='drop').fit()

# Throws statsmodels.tools.sm_exceptions.PerfectSeparationError:
#    Perfect separation detected, results not available

Код R

library(stats)
my_data = data.frame(
    success=c(1, 0, 1, 1, 0, 0, 1, 1, 0, 1),
    col_a=c(5000.0, 10000.0, 11000.0, 20000.0, 20000.0, 25000.0, 30000.0, 30000.0, 40000.0, 41000.0),
    col_b=c('a', 'a', 'b', 'b', NA, 'b', 'c', 'c', NA, 'd'),
    col_c=c(5487.0, 5654.0, NA, 2918, 912.0, NA, 1236.0, 234.0, 2390.0, 21092.0)
)
myFormula <- stats::formula(paste0("success ~ col_a + col_b + col_c"))
fit <- stats::glm(myFormula, data=my_data, family=stats::binomial(link="logit"), na.action=stats::na.exclude) 
summary(fit)

Call:
stats::glm(formula = myFormula, family = stats::binomial(link = "logit"), 
    data = my_data, na.action = stats::na.exclude)

Deviance Residuals: 
 [1]  0  0     0        0  0     0

Coefficients:
              Estimate Std. Error z value Pr(>|z|)
(Intercept)  7.370e+01  1.026e+06       0        1
col_a       -9.826e-03  3.757e+01       0        1
col_bb       1.474e+02  7.500e+05       0        1
col_bc       2.457e+02  1.334e+06       0        1
col_bd       3.538e+02  2.943e+06       0        1
col_c        3.282e-12  1.849e+02       0        1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 5.4067e+00  on 5  degrees of freedom
Residual deviance: 2.5720e-10  on 0  degrees of freedom
  (4 observations deleted due to missingness)
AIC: 12

Number of Fisher Scoring iterations: 23

При чтении других сообщений StackOverflow типичной проблемой является переменная успеха с одним значением или один предикторкоторый отлично отражает переменную успеха.Однако, по крайней мере, человеческим осмотром, которого здесь нет (а R не указывает на это).Мне интересно, есть ли какие-то скрытые значения по умолчанию, которые отличаются между Python и R, но беглый анализ не нашел ни одного.

...