Почему statsmodels не может воспроизвести мои результаты R логистической регрессии?

Меня смущает, почему мои модели логистической регрессии в R и statsmodels не согласуются.

Если я подготовлю некоторые данные в R с

# From https://courses.edx.org/c4x/MITx/15.071x/asset/census.csv
library(caTools) # for sample.split
census = read.csv("census.csv")
set.seed(2000)
split = sample.split(census$over50k, SplitRatio = 0.6)
censusTrain = subset(census, split==TRUE)
censusTest = subset(census, split==FALSE)

а затем запустить логистическую регрессию с

CensusLog1 = glm(over50k ~., data=censusTrain, family=binomial)

я вижуРезультаты лайк

                                           Estimate Std. Error z value Pr(>|z|)    
(Intercept)                              -8.658e+00  1.379e+00  -6.279 3.41e-10 ***
age                                       2.548e-02  2.139e-03  11.916  < 2e-16 ***
workclass Federal-gov                     1.105e+00  2.014e-01   5.489 4.03e-08 ***
workclass Local-gov                       3.675e-01  1.821e-01   2.018 0.043641 *  
workclass Never-worked                   -1.283e+01  8.453e+02  -0.015 0.987885    
workclass Private                         6.012e-01  1.626e-01   3.698 0.000218 ***
workclass Self-emp-inc                    7.575e-01  1.950e-01   3.884 0.000103 ***
workclass Self-emp-not-inc                1.855e-01  1.774e-01   1.046 0.295646    
workclass State-gov                       4.012e-01  1.961e-01   2.046 0.040728 *  
workclass Without-pay                    -1.395e+01  6.597e+02  -0.021 0.983134   
...

но я использую те же данные в Python, сначала экспортируя из R с

write.csv(censusTrain,file="traincensus.csv")
write.csv(censusTest,file="testcensus.csv")

а затем импортировать в Python с

import pandas as pd

census = pd.read_csv("census.csv")
census_train = pd.read_csv("traincensus.csv")
census_test = pd.read_csv("testcensus.csv")

Я получаю ошибки и странные результаты, которые не имеют никакого отношения к тем, которые я получаю в R.

Если я просто попробую

import statsmodels.api as sm

census_log_1 = sm.Logit.from_formula(f, census_train).fit()

Я получаю ошибку:

ValueError: operands could not be broadcast together with shapes (19187,2) (19187,) 

Даже если подготовить данные сpatsy с помощью

import patsy
f = 'over50k ~ ' + ' + '.join(list(census.columns)[:-1])
y, X = patsy.dmatrices(f, census_train, return_type='dataframe')

пытаясь

census_log_1 = sm.Logit(y, X).fit()

приводит к той же ошибке. Единственный способ избежать ошибок - использоватьGLM

census_log_1 = sm.GLM(y, X, family=sm.families.Binomial()).fit()

но это производитРезультаты которые полностью отличаются от тех, которые были созданы (как я думал, было) эквивалентным R API:

                                                   coef    std err          t      P>|t|      [95.0% Conf. Int.]
----------------------------------------------------------------------------------------------------------------
Intercept                                       10.6766      5.985      1.784      0.074        -1.055    22.408
age                                             -0.0255      0.002    -11.916      0.000        -0.030    -0.021
workclass[T. Federal-gov]                       -0.9775      4.498     -0.217      0.828        -9.794     7.839
workclass[T. Local-gov]                         -0.2395      4.498     -0.053      0.958        -9.055     8.576
workclass[T. Never-worked]                       8.8346    114.394      0.077      0.938      -215.374   233.043
workclass[T. Private]                           -0.4732      4.497     -0.105      0.916        -9.288     8.341
workclass[T. Self-emp-inc]                      -0.6296      4.498     -0.140      0.889        -9.446     8.187
workclass[T. Self-emp-not-inc]                  -0.0576      4.498     -0.013      0.990        -8.873     8.758
workclass[T. State-gov]                         -0.2733      4.498     -0.061      0.952        -9.090     8.544
workclass[T. Without-pay]                       10.0745     85.048      0.118      0.906      -156.616   176.765
...

Почему логистическая регрессия в Python дает ошибки и результаты, отличные от результатов, полученных R? Разве эти API на самом деле не эквивалентны (я заставлял их работать раньше для получения идентичных результатов)? Требуется ли дополнительная обработка наборов данных, чтобы их можно было использовать в statsmodels?

Ответы на вопрос(1)

Ваш ответ на вопрос