Para realizar el modelo se seleccionaron las variables de Edad, Ingreso Mensual, Satisfacción Ambiental, Antigüedad, Trabajos Anteriores y Distancia Casa.
De todas las variables la única que no tiene significancia en el modelo es la Antigüedad.
library(broom)
library(kableExtra)
library(dplyr)
# Ajustar el modelo
mod <- glm(y ~ Edad + Ingreso_Mensual + Satisfaccion_Ambiental + Antiguedad + Trabajos_Anteriores + Distancia_Casa,
data = Datos_Rotacion, family = "binomial")
# Convertir el resumen del modelo en un data frame y agregar significancia
tabla_resumen <- tidy(mod) %>%
mutate(
Significancia = case_when(
p.value < 0.001 ~ "***",
p.value < 0.01 ~ "**",
p.value < 0.05 ~ "*",
p.value < 0.1 ~ ".",
TRUE ~ ""
)
) %>%
select(term, estimate, std.error, statistic, p.value, Significancia)
# Crear la tabla bonita
tabla_resumen %>%
kable("html", caption = "Resumen del Modelo de Regresión Logística", align = c("l", "c", "c", "c", "c", "c")) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
font_size = 14) %>%
column_spec(1, bold = TRUE) %>%
row_spec(0, bold = TRUE, color = "white", background = "#4C4C4C")
term | estimate | std.error | statistic | p.value | Significancia |
---|---|---|---|---|---|
(Intercept) | 0.5925525 | 0.3673734 | 1.612943 | 0.1067568 | |
Edad | -0.0407232 | 0.0101999 | -3.992520 | 0.0000654 | *** |
Ingreso_Mensual | -0.0000847 | 0.0000261 | -3.242998 | 0.0011828 | ** |
Satisfaccion_Ambiental | -0.2700983 | 0.0665664 | -4.057580 | 0.0000496 | *** |
Antiguedad | -0.0295629 | 0.0188669 | -1.566923 | 0.1171326 | |
Trabajos_Anteriores | 0.1074378 | 0.0303974 | 3.534436 | 0.0004086 | *** |
Distancia_Casa | 0.0274222 | 0.0086959 | 3.153458 | 0.0016135 | ** |
Evaluar la probabilidad de que rote una persona con las siguientes características
Edad = 45
Ingreso Mensual = 3500
Satisfacción Ambiental = 3
Antigüedad = 9
Trabajos Anteriores = 3
Distancia Casa = 12
predict(mod,list(Edad=45,Ingreso_Mensual=3500,Satisfaccion_Ambiental=3,Antiguedad=9,Trabajos_Anteriores=3,Distancia_Casa=12),type = "response")
## 1
## 0.1233105
Una persona con estas caracteristicas tiene una probabilidad del 12,33% de rotar.
Con el modelo se calculan las probabilidades de todos los individuos de rotar y se utiliza un hyperparametro de 0,2. De esta manera se construye la matriz de confusión, que ayuda a identificar los Verdaderos Positivos (VP), Verdaderos Negativos (VN), Falsos Negativos (FN) y Falsos Positivos (FP)
library(kableExtra)
# Calcular las probabilidades y predicciones
probas <- mod$fitted.values
predi <- probas > 0.2
real <- Datos_Rotacion$Rotacion
# Crear el data frame con los valores reales y predichos
resultado <- data.frame(real, predi)
# Crear la tabla de confusión
tabla_confusion <- table(resultado)
# Convertir la tabla de confusión en un data frame
df_confusion <- as.data.frame.matrix(tabla_confusion)
# Crear la tabla bonita manteniendo los nombres originales
df_confusion %>%
kable("html", caption = "Matriz de Confusión", align = "c") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
font_size = 14) %>%
column_spec(1, bold = TRUE) %>%
column_spec(2, bold = TRUE) %>%
row_spec(0, bold = TRUE, color = "white", background = "#4C4C4C")
FALSE | TRUE | |
---|---|---|
No | 926 | 307 |
Si | 100 | 137 |
VP = 137
VN = 926
Total = 1063
## [1] 0.7231293
El modelo clasifica bien el 72,31% de los registros
## [1] 0.2761905
El modelo se equivoca clasificando en el 27,69% de los registros
VP =137
Total Positivos = 237
## [1] 0.5780591
El modelo clasifica bien el 57,8% de los positivos