32 votos

Cómo calcular los errores estándar de los coeficientes de una regresión logística

Estoy utilizando scikit-learn de Python para entrenar y probar una regresión logística.

scikit-learn devuelve los coeficientes de regresión de las variables independientes, pero no proporciona los errores estándar de los coeficientes. Necesito estos errores estándar para calcular un estadístico de Wald para cada coeficiente y, a su vez, comparar estos coeficientes entre sí.

He encontrado una descripción de cómo calcular los errores estándar de los coeficientes de una regresión logística ( aquí ), pero es algo difícil de seguir.

Si por casualidad conoce una explicación sencilla y sucinta de cómo calcular estos errores estándar y/o puede proporcionármela, ¡se lo agradecería mucho! No me refiero a un código específico (aunque por favor, siéntase libre de publicar cualquier código que pueda ser útil), sino más bien una explicación algorítmica de los pasos a seguir.

40voto

György Andrasek Puntos 4332

Los errores estándar de los coeficientes del modelo son las raíces cuadradas de las entradas diagonales de la matriz de covarianza. Considere lo siguiente:

  • Matriz de diseño:

X = [1x1,1x1,p1x2,1x2,p1xn,1xn,p] donde xi,j es el valor del j ª predictor de la i Observaciones.

(NOTA: Esto supone un modelo con intercepción).

  • V = [ˆπ1(1ˆπ1)000ˆπ2(1ˆπ2)000ˆπn(1ˆπn)] donde ˆπi representa la probabilidad prevista de pertenencia a una clase para la observación i .

La matriz de covarianza puede escribirse como:

(XTVX)1

Esto se puede implementar con el siguiente código:

import numpy as np
from sklearn import linear_model

# Initiate logistic regression object
logit = linear_model.LogisticRegression()

# Fit model. Let X_train = matrix of predictors, y_train = matrix of variable.
# NOTE: Do not include a column for the intercept when fitting the model.
resLogit = logit.fit(X_train, y_train)

# Calculate matrix of predicted class probabilities.
# Check resLogit.classes_ to make sure that sklearn ordered your classes as expected
predProbs = resLogit.predict_proba(X_train)

# Design matrix -- add column of 1's at the beginning of your X_train matrix
X_design = np.hstack([np.ones((X_train.shape[0], 1)), X_train])

# Initiate matrix of 0's, fill diagonal with each predicted observation's variance
V = np.diagflat(np.product(predProbs, axis=1))

# Covariance matrix
# Note that the @-operater does matrix multiplication in Python 3.5+, so if you're running
# Python 3.5+, you can replace the covLogit-line below with the more readable:
# covLogit = np.linalg.inv(X_design.T @ V @ X_design)
covLogit = np.linalg.inv(np.dot(np.dot(X_design.T, V), X_design))
print("Covariance matrix: ", covLogit)

# Standard errors
print("Standard errors: ", np.sqrt(np.diag(covLogit)))

# Wald statistic (coefficient / s.e.) ^ 2
logitParams = np.insert(resLogit.coef_, 0, resLogit.intercept_)
print("Wald statistics: ", (logitParams / np.sqrt(np.diag(covLogit))) ** 2)

Dicho todo esto, statsmodels será probablemente un mejor paquete para utilizar si desea acceder a una gran cantidad de diagnósticos "out-the-box".

14voto

generic_user Puntos 2269

¿Ofrece su programa informático una matriz de covarianza (o de varianza-covarianza) de los parámetros? Si es así, los errores estándar son la raíz cuadrada de la diagonal de esa matriz. Es probable que desee consultar un libro de texto (o google para notas de clase de la universidad) para saber cómo obtener el Vβ para modelos lineales y lineales generalizados.

7voto

nkav Puntos 34

Si le interesa hacer inferencias, probablemente querrá echar un vistazo a modelos estadísticos . Los errores estándar y las pruebas estadísticas habituales están disponibles. He aquí una regresión logística ejemplo .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X