Está en la página 1de 5

4/1/22 20:03 Ejemplo de Regresión Logística (modelo logit) con R

Ejemplo de Regresión Logística (modelo


logit) con R
Emilio López Cano
3 de marzo de 2017 (actualizado 2018-12-21)

Alcance
Este documento muestra un ejemplo práctico de regresión logística con R. No se dan detalles teóricos del
modelo. Se agradecen sugerencias, erratas y comentarios a emilio.lcano (at) uclm.es.

Lo prometido es deuda: gracias a mis compañeros de la UCLM Víctor Casero y Sergio Pozuelo, y al lector
Francisco que advirtieron errata en la fórmula para calcular probabilidades y me enviaron un mensaje.

Datos
El conjunto de datos a utilizar proviene de la plataforma de concursos de análisis de datos kaggle
(https://www.kaggle.com/). Se trata de la base de datos Human Resources Analytics
(https://www.kaggle.com/ludobenistant/hr-analytics) del usuario Ludovic Benistant
(https://www.kaggle.com/ludobenistant). Para este ejemplo ilustrativo se han seleccionado aleatoriamente 100
registros después de limpiar y tratar la base de datos. Cada registro se corresponde con un empleado para las
siguientes variables (los nombres son bastante autoexplicativos):

## 'data.frame': 100 obs. of 10 variables:

## $ nivel_satisfaccion : num 0.22 0.89 0.63 0.8 0.42 0.77 0.51 0.15 0.98 0.19 ...

## $ ultima_evaluacion : num 0.98 0.65 0.76 0.96 0.48 0.82 0.5 0.75 0.99 1 ...

## $ numero_proyectos : int 4 5 4 3 2 4 5 3 3 4 ...

## $ promedio_horas_mensuales: int 185 195 245 161 155 217 176 259 235 192 ...

## $ antiguedad : int 3 6 3 3 3 5 5 8 3 4 ...

## $ accidente : Factor w/ 2 levels "No","Sí": 1 1 1 1 1 1 1 2 1 1 ...

## $ abandona : Factor w/ 2 levels "No","Sí": 1 2 1 1 2 2 1 1 1 2 ...

## $ promocionado : Factor w/ 2 levels "No","Sí": 1 1 1 1 1 1 1 1 1 1 ...

## $ departamento : Factor w/ 5 levels "IT","other","sales",..: 4 4 2 5 2 2 4 2 3 2


...

## $ salario : Factor w/ 3 levels "high","low","medium": 2 2 2 2 3 3 3 1 2 2


...

Modelo
El modelo logit es un modelo de regresión típico, Y = f (X + ε) , en el que la variable respuesta (variable
aleatoria Y ) es dicotómica o binaria (toma dos valores: 0 y 1), habitualmente sobre si el individuo tiene una
característica (1) o no (0), y las variables predictivas (vector aleatorio X ) son continuas. El modelo logit es un
caso particular de los llamados modelos lineales generalizados (GLMs, Generalized Linear Model). Para los
detalles del modelo véase Faraway (2016)

https://rpubs.com/emilopezcano/logit 1/5
4/1/22 20:03 Ejemplo de Regresión Logística (modelo logit) con R

Ejemplo
En este conjunto de datos tenemos tres variables sobre las que podemos estimar un modelo logit: accidente ,
abandona y promocionado . Un estudio de interés puede ser intentar explicar/predecir si un empleado abandonará
o no la empresa en función de las puntuaciones en las variables nivel_satisfaccion y ultima_evaluacion .
Para facilitar la explicación vamos a seleccionar solo las variables del modelo:

datos.modelo <- subset(datos, select = c(abandona, nivel_satisfaccion, ultima_evaluacion))

head(datos.modelo)

## abandona nivel_satisfaccion ultima_evaluacion

## 1 No 0.22 0.98

## 2 Sí 0.89 0.65

## 3 No 0.63 0.76

## 4 No 0.80 0.96

## 5 Sí 0.42 0.48

## 6 Sí 0.77 0.82

Nótese que si la variable dicotómica no fuera de tipo factor, tendríamos que convertirla, por ejemplo:

datos.modelo$abandona <- factor(datos.modelo$abandona)

Además, debemos asegurarnos de que la variable respuesta factor solo toma dos valores1. Descriptivamente,
podemos hacer un resumen de cada categoría:

table(datos.modelo$abandona)

##

## No Sí

## 72 28

summary(datos.modelo$nivel_satisfaccion)

## Min. 1st Qu. Median Mean 3rd Qu. Max.

## 0.0900 0.3800 0.5700 0.5543 0.7725 0.9900

summary(datos.modelo$ultima_evaluacion)

## Min. 1st Qu. Median Mean 3rd Qu. Max.

## 0.3800 0.5700 0.7000 0.7105 0.8550 1.0000

O gráficamente:

library(ggplot2)

ggplot(datos.modelo, aes(x = nivel_satisfaccion, y = ultima_evaluacion, color = abandona)) + geo


m_point()

https://rpubs.com/emilopezcano/logit 2/5
4/1/22 20:03 Ejemplo de Regresión Logística (modelo logit) con R

En R, los GLMs se ajustan con la función glm . La principal diferencia con la función lm para ajustar modelos
lineales es que le tenemos que proporcionar la familia de la distribución. En nuestro caso, como es una variable
dicotómica, la familia es la binomial:

modelo.logit <- glm(abandona ~ ultima_evaluacion + nivel_satisfaccion,

data = datos.modelo, family = "binomial")

summary(modelo.logit)

https://rpubs.com/emilopezcano/logit 3/5
4/1/22 20:03 Ejemplo de Regresión Logística (modelo logit) con R

##

## Call:

## glm(formula = abandona ~ ultima_evaluacion + nivel_satisfaccion,

## family = "binomial", data = datos.modelo)

##

## Deviance Residuals:

## Min 1Q Median 3Q Max

## -1.1732 -0.8015 -0.6574 1.1561 1.9557

##

## Coefficients:

## Estimate Std. Error z value Pr(>|z|)

## (Intercept) -0.0291 1.0456 -0.028 0.9778

## ultima_evaluacion 0.3097 1.2863 0.241 0.8097

## nivel_satisfaccion -2.1626 0.9167 -2.359 0.0183 *

## ---

## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

##

## (Dispersion parameter for binomial family taken to be 1)

##

## Null deviance: 118.59 on 99 degrees of freedom

## Residual deviance: 112.64 on 97 degrees of freedom

## AIC: 118.64

##

## Number of Fisher Scoring iterations: 4

La interpretación de los p-valores es similar a la del modelo lineal. Podemos ver que la variable
ultima_evaluacion no es significativa en el modelo (p-valor mucho mayor de 0.05), mientras que la variable
nivel_satisfaccion es moderadamente significativa (p-valor entre 0.01 y 0.05)2.

En cuanto a los coeficientes, la interpretación cambia. El modelo GLM no ajusta la variable respuesta sino una
función de enlace. En el caso del modelo logit esta función es:

p
η = log( ),
1 − p

p
siendo p la probabilidad de que el individuo tome el valor “1” en la variable dicotómica. Al cociente se le
1−p

conoce como odds ratio. Por tanto, los coeficientes del modelo logit se interpretan como el logaritmo del odds
ratio. Si nos fijamos en el coeficiente de la variable nivel_satisfaccion (-2.163), nos está indicando que el
logaritmo del odds ratio de abandonar la empresa disminuye 2.163 unidades por cada unidad que aumenta la
puntuación en el nivel de satisfacción.

Una forma de faciliar la interpretación de los coeficientes es exponenciando:

exp(coefficients(modelo.logit))

## (Intercept) ultima_evaluacion nivel_satisfaccion

## 0.9713175 1.3630515 0.1150215

Que se corresponde con este modelo:

β β x1 β x2
odds = e 0
⋅ e 1
⋅ e 2

https://rpubs.com/emilopezcano/logit 4/5
4/1/22 20:03 Ejemplo de Regresión Logística (modelo logit) con R

Lo que nos viene a decir que aumentar en la última evaluación un punto aumenta un 36%3 las posibilidades de
abandonar la empresa, mientras que aumentar un punto en el nivel de satisfacción las reduce casi un 90%4.

Por último, una interpretación probabilística sería estimar la probabilidad p de que un individuo abandone la
empresa:
η
e
p =
η
1 + e

Así, podemos predecir la función η para un individuo que tenga, por ejemplo, una evaluación de 0.75 y un nivel de
satisfacción de 0.6:

log.odds <- predict(modelo.logit, data.frame(nivel_satisfaccion = 0.6,

ultima_evaluacion = 0.75))

log.odds

## 1

## -1.094389

La probabilidad de abandonar la empresa sería:

exp(log.odds)/(1+exp(log.odds))

## 1

## 0.2507927

Enlaces
Algunos ejemplos más:

http://stats.idre.ucla.edu/r/dae/logit-regression/ (http://stats.idre.ucla.edu/r/dae/logit-regression/)
https://datascienceplus.com/perform-logistic-regression-in-r/ (https://datascienceplus.com/perform-logistic-
regression-in-r/)

Referencias
Faraway, Julian J. 2016. Extending the Linear Model with R. CRC Press.

1. No hace falta que sean 0 y 1, R tomará como 0 el primer nivel del factor, y 1 el segundo nivel del factor↩

2. para no hacer más largo este ejemplo no reduciremos el modelo, pero habría que quitar las variables no
significativas antes de seguir↩

3. Recordemos que no es significativo, pero se comenta a efectos ilustrativos.↩

4. En cada modelo hay que interpretar según la escala de las variables, en este caso parecen porcentajes por
lo que habría interpretar en términos de puntos porcentuales, por ejemplo.↩

https://rpubs.com/emilopezcano/logit 5/5

También podría gustarte