estoy tratando de ejecutar la regresión logit para el alemán de datos de crédito (www4.stat.ncsu.edu/~boos/var.select/german.credit.html). Para probar el código, he usado sólo variables numéricas y trató de regresión con el resultado utilizando el siguiente código.

import pandas as pd
import statsmodels.api as sm
import pylab as pl
import numpy as np

df = pd.read_csv("germandata.txt",delimiter=' ')
df.columns = ["chk_acc","duration","history","purpose","amount","savings_acc","employ_since","install_rate","pers_status","debtors","residence_since","property","age","other_plans","housing","existing_credit","job","no_people_liab","telephone","foreign_worker","admit"]

#pls note that I am only retaining numeric variables
cols_to_keep = ['admit','duration', 'amount', 'install_rate','residence_since','age','existing_credit','no_people_liab']

# rank of cols_to_keep is 8
print np.linalg.matrix_rank(df[cols_to_keep].values)
data = df[cols_to_keep]

data['intercept'] = 1.0

train_cols = data.columns[1:]

#to check the rank of train_cols, which in this case is 8
print np.linalg.matrix_rank(data[train_cols].values)

#fit logit model
logit = sm.Logit(data['admit'], data[train_cols])
result = logit.fit()

Todos los 8.0 columnas parecen independientes, cuando reviso los datos. A pesar de esto, me estoy poniendo Singular de la Matriz de Error. Puede usted por favor ayuda?

Gracias

OriginalEl autor user3122731 | 2013-12-20

1 Comentario

  1. 9

    La endog y variable debe ser cero, uno. En este conjunto de datos tiene valores de 1 y 2. Si restamos uno, a continuación, genera los resultados.

    >>> logit = sm.Logit(data['admit'] - 1, data[train_cols])
    >>> result = logit.fit()
    >>> print result.summary()
    Logit Regression Results                           
    ==============================================================================
    Dep. Variable:                  admit   No. Observations:                  999
    Model:                          Logit   Df Residuals:                      991
    Method:                           MLE   Df Model:                            7
    Date:                Fri, 19 Sep 2014   Pseudo R-squ.:                 0.05146
    Time:                        10:06:06   Log-Likelihood:                -579.09
    converged:                       True   LL-Null:                       -610.51
    LLR p-value:                 4.103e-11
    ===================================================================================
    coef    std err          z      P>|z|      [95.0% Conf. Int.]
    -----------------------------------------------------------------------------------
    duration            0.0261      0.008      3.392      0.001         0.011     0.041
    amount           7.062e-05    3.4e-05      2.075      0.038      3.92e-06     0.000
    install_rate        0.2039      0.073      2.812      0.005         0.062     0.346
    residence_since     0.0411      0.067      0.614      0.539        -0.090     0.172
    age                -0.0213      0.007     -2.997      0.003        -0.035    -0.007
    existing_credit    -0.1560      0.130     -1.196      0.232        -0.412     0.100
    no_people_liab      0.1264      0.201      0.628      0.530        -0.268     0.521
    intercept          -1.5746      0.430     -3.661      0.000        -2.418    -0.732
    ===================================================================================

    Sin embargo, en otros casos es posible que el estado de Hesse no es positiva definida cuando evaluamos lejos de la óptima, por ejemplo en bad valores de partida. El cambio a un optimizador que no uso el de Hesse a menudo sucede en esos casos. Por ejemplo, scipy ‘bfgs’ es un buen optimizador que funciona en muchos casos

    result = logit.fit(method='bfgs')
    Esto ha sido corregido para dar un buen mensaje de error. github.com/statsmodels/statsmodels/pull/1978

    OriginalEl autor Josef

Dejar respuesta

Please enter your comment!
Please enter your name here