Contenido de este artículo
- 0
- 0
- 0
- 0
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)
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/
¿Te hemos ayudado?
Ayudanos ahora tú, dejanos un comentario de agradecimiento, nos ayuda a motivarnos y si te es viable puedes hacer una donación:La ayuda no cuesta nada
Por otro lado te rogamos que compartas nuestro sitio con tus amigos, compañeros de clase y colegas, la educación de calidad y gratuita debe ser difundida, recuerdalo: