Cómo realizar una regresión logística en R (paso a paso)

La regresión logística es un método que podemos utilizar para ajustar un modelo de regresión cuando la variable de respuesta es binaria.

La regresión logística utiliza un método conocido como estimación de máxima verosimilitud para encontrar una ecuación de la siguiente forma:

log [p (X) / (1-p (X))] = β 0 + β 1 X 1 + β 2 X 2 +… + β p X p

dónde:

  • X j : La j- ésima variable predictora
  • β j : la estimación del coeficiente para la j- ésima variable predictora

La fórmula del lado derecho de la ecuación predice las probabilidades logarítmicas de la variable de respuesta tomando un valor de 1.

Por lo tanto, cuando ajustamos un modelo de regresión logística, podemos usar la siguiente ecuación para calcular la probabilidad de que una observación dada tome un valor de 1:

p (X) = e β 0 + β 1 X 1 + β 2 X 2 +… + β p X p / (1 + e β 0 + β 1 X 1 + β 2 X 2 +… + β p X p )

Luego usamos algún umbral de probabilidad para clasificar la observación como 1 o 0.

Por ejemplo, podríamos decir que las observaciones con una probabilidad mayor o igual a 0.5 se clasificarán como «1» y todas las demás observaciones se clasificarán como «0».

Este tutorial proporciona un ejemplo paso a paso de cómo realizar una regresión logística en R.

Paso 1: cargue los datos

Para este ejemplo, usaremos el conjunto de datos predeterminado del paquete ISLR. Podemos usar el siguiente código para cargar y ver un resumen del conjunto de datos:

#load dataset
datos <- ISLR :: Predeterminado

#ver resumen del resumen del conjunto de datos
 (datos)

 ingreso por defecto del saldo del estudiante     
 No: 9667 No: 7056 Mín. : 0,0 min. : 772  
 Sí: 333 Sí: 2944 1.er Qu .: 481.7 1.er Qu.:21340  
                       Mediana: 823,6 Mediana: 34553  
                       Media: 835,4 Media: 33517  
                       3.er Qu.:1166.3 3.er Qu.:43808  
                       Max. : 2654,3 Máx. : 73554  

#find total de observaciones en el conjunto de datos
nrow (datos)

[1] 10000

Este conjunto de datos contiene la siguiente información sobre 10,000 personas:

  • predeterminado: indica si un individuo incurrió en incumplimiento.
  • estudiante: indica si un individuo es un estudiante o no.
  • saldo: saldo promedio que lleva un individuo.
  • Ingresos: Ingresos del individuo.

Usaremos el estado del estudiante, el saldo bancario y los ingresos para construir un modelo de regresión logística que predice la probabilidad de que un individuo determinado no cumpla.

Paso 2: crear muestras de entrenamiento y prueba

A continuación, dividiremos el conjunto de datos en un conjunto de entrenamiento para entrenar el modelo y un conjunto de pruebas para probar el modelo.

#Haga que este ejemplo sea reproducible
 set.seed (1)

#Use el 70% del conjunto de datos como conjunto de entrenamiento y el 30% restante como conjunto de prueba
 muestra <- muestra (c ( VERDADERO , FALSO ), nrow (datos), reemplazar = VERDADERO , prob = c (0.7,0.3))
entrenar <- datos [muestra,]
prueba <- datos [! muestra,]  

Paso 3: Ajustar el modelo de regresión logística

A continuación, usaremos la función glm (modelo lineal general) y especificaremos family = ”binomial” para que R ajuste un modelo de regresión logística al conjunto de datos:

#fit modelo de 
modelo de regresión logística <- glm (predeterminado ~ estudiante + saldo + ingresos, familia = " binomial ", datos = tren)

#deshabilitar la notación científica para el resumen del modelo
opciones (scipen = 999)

#ver resumen del modelo
resumen (modelo)

Llamada:
glm (fórmula = predeterminado ~ estudiante + saldo + ingresos, familia = "binomio", 
    datos = tren)

Residuos de desviación: 
    Mín. 1T Mediana 3T Máx.  
-2,5586 -0,1353 -0,0519 -0,0177 3,7973  

Coeficientes:
                 Estimar Std. Error z valor Pr (> | z |)    
(Intercepción) -11.478101194 0.623409555 -18.412 <0.0000000000000002 ***
estudiante Sí -0.493292438 0.285735949 -1.726 0.0843.  
saldo 0,005988059 0,000293765 20,384 <0,0000000000000002 ***
ingresos 0,000007857 0,000009965 0,788 0,4304    
---
Signif. códigos: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0,1 pulg. 1

(El parámetro de dispersión para la familia binomial se toma como 1)

    Desviación nula: 2021.1 en 6963 grados de libertad
Desviación residual: 1065,4 en 6960 grados de libertad
AIC: 1073,4

Número de iteraciones de puntuación de Fisher: 8

Los coeficientes de la salida indican el cambio promedio en las probabilidades logarítmicas de incumplimiento. Por ejemplo, un aumento de una unidad en el saldo se asocia con un aumento promedio de 0.005988 en las probabilidades de incumplimiento del registro.

Los valores p en la salida también nos dan una idea de cuán efectiva es cada variable de predicción para predecir la probabilidad de incumplimiento:

  • Valor p del estado del estudiante: 0.0843
  • Valor p del saldo: <0,0000
  • Valor p de los ingresos: 0,4304

Podemos ver que el equilibrio y el estado de los estudiantes parecen ser predictores importantes, ya que tienen valores p bajos, mientras que los ingresos no son tan importantes.

Evaluación del ajuste del modelo:

En la regresión lineal típica , usamos R 2 como una forma de evaluar qué tan bien se ajusta un modelo a los datos. Este número varía de 0 a 1, y los valores más altos indican un mejor ajuste del modelo.

Sin embargo, no existe tal valor R 2 para la regresión logística. En su lugar, podemos calcular una métrica conocida como R 2 v de McFadden , que varía de 0 a poco menos de 1. Los valores cercanos a 0 indican que el modelo no tiene poder predictivo. En la práctica, valores superiores a 0,40 indican que un modelo se ajusta muy bien a los datos.

Podemos calcular R de McFadden 2 para nuestro modelo usando el PR2 función del paquete pscl:

pscl :: pR2 (modelo) [" McFadden "]

 McFadden 
0,4728807 

Un valor de 0,4728807 es bastante alto para el R 2 de McFadden , lo que indica que nuestro modelo se ajusta muy bien a los datos y tiene un alto poder predictivo.

Importancia variable:

También podemos calcular la importancia de cada variable predictora en el modelo usando la función varImp del paquete de intercalación:

caret :: varImp (modelo)

             General
estudiante Sí 1.726393
saldo 20.383812
ingresos 0,788449

Los valores más altos indican más importancia. Estos resultados coinciden muy bien con los valores p del modelo. El equilibrio es, con mucho, la variable predictora más importante, seguida del estado de los estudiantes y luego los ingresos.

Valores VIF:

También podemos calcular los valores de VIF de cada variable en el modelo para ver si la multicolinealidad es un problema:

#calcular los valores de VIF para cada variable de predicción en nuestro modelo
coche :: vif (modelo)

 balance de ingresos del estudiante 
2.754926 1.073785 2.694039

Como regla general, los valores de VIF por encima de 5 indican una multicolinealidad severa. Dado que ninguna de las variables predictoras en nuestros modelos tiene un VIF superior a 5, podemos asumir que la multicolinealidad no es un problema en nuestro modelo.

Paso 4: use el modelo para hacer predicciones

Una vez que hemos ajustado el modelo de regresión logística, podemos usarlo para hacer predicciones sobre si un individuo incurrirá en incumplimiento de pago o no en función de su estado de estudiante, saldo e ingresos:

#define dos individuos 
new <- data.frame (saldo = 1400, ingresos = 2000, estudiante = c (" Sí ", " No "))

#predict probabilidad de incumplimiento 
predecir (modelo, nuevo, tipo = " respuesta ")

         1 2 
0,02732106 0,04397747

La probabilidad de que una persona tenga un saldo de $ 1,400, un ingreso de $ 2,000 y un estado de estudiante de «Sí» tiene una probabilidad de incumplimiento de .0273 . Por el contrario, una persona con el mismo saldo e ingresos pero con un estado de estudiante de «No» tiene una probabilidad de incumplimiento de 0,0439 .

Podemos usar el siguiente código para calcular la probabilidad de incumplimiento para cada individuo en nuestro conjunto de datos de prueba:

# calcular la probabilidad de incumplimiento para cada individuo en el conjunto de datos de prueba 
predicho <- predecir (modelo, prueba, tipo = " respuesta ")

Paso 5: Diagnóstico del modelo

Por último, podemos analizar qué tan bien funciona nuestro modelo en el conjunto de datos de prueba.

De forma predeterminada, cualquier individuo en el conjunto de datos de prueba con una probabilidad de incumplimiento superior a 0,5 se predecirá como predeterminado. Sin embargo, podemos encontrar la probabilidad óptima de usar para maximizar la precisión de nuestro modelo usando la función optimalCutoff () del paquete InformationValue:

biblioteca (InformationValue)

#convertir los valores predeterminados de "Sí" y "No" a unos y ceros
 test $ default <- ifelse (test $ default == " Yes ", 1, 0)

#encuentre la probabilidad de corte óptima para usar para maximizar la precisión
 óptimo <- corte óptimo (prueba $ predeterminado, predicho) [1]
óptimo

[1] 0.5451712

Esto nos dice que el límite de probabilidad óptimo para usar es 0.5451712 . Por lo tanto, se pronosticará que cualquier individuo con una probabilidad de incumplimiento de 0.5451712 o mayor incurrirá en incumplimiento, mientras que se pronosticará que cualquier individuo con una probabilidad menor que este número no incurrirá en incumplimiento.

Usando este umbral, podemos crear una matriz de confusión que muestra nuestras predicciones en comparación con los valores predeterminados reales:

confusionMatrix (prueba $ predeterminado, predicho)

     0 1
0 2912 64
1 21 39

También podemos calcular la sensibilidad (también conocida como la «tasa de verdaderos positivos») y la especificidad (también conocida como la «tasa de verdaderos negativos») junto con el error total de clasificación errónea (que nos indica el porcentaje de clasificaciones incorrectas totales):

#calcular sensibilidad
sensibilidad (prueba $ predeterminado, predicho)

[1] 0.3786408

#calcular especificidad
 especificidad (prueba $ predeterminado, predicho)

[1] 0,9928401

#calcular la tasa total de errores de clasificación errónea
 misClassError (prueba $ predeterminado, predicho, umbral = óptimo)

[1] 0,027

La tasa total de errores de clasificación errónea es del 2,7% para este modelo. En general, cuanto más baja sea esta tasa, mejor será el modelo para predecir los resultados, por lo que este modelo en particular resulta ser muy bueno para predecir si un individuo incurrirá en incumplimiento o no.

Por último, podemos trazar la curva ROC (Receiver Operating Characteristic) que muestra el porcentaje de verdaderos positivos predichos por el modelo a medida que el límite de probabilidad de predicción se reduce de 1 a 0. Cuanto mayor sea el AUC (área bajo la curva), con mayor precisión nuestro modelo puede predecir resultados:

# trazar la curva ROC
 plotROC (prueba $ predeterminado, predicho)

Curva ROC en R

Podemos ver que el AUC es 0.9131 , que es bastante alto. Esto indica que nuestro modelo hace un buen trabajo al predecir si un individuo incumplirá o no.

El código R completo utilizado en este tutorial se puede encontrar aquí .

  • https://r-project.org
  • https://www.python.org/
  • https://www.stata.com/

Deja un comentario

En estadística, los investigadores suelen estar interesados ​​en comprender la relación entre una o más variables explicativas y una variable…
statologos comunidad-2

Compartimos información EXCLUSIVA y GRATUITA solo para suscriptores (cursos privados, programas, consejos y mucho más)

You have Successfully Subscribed!