Problema: ROTACION DE CARGO

Mediate el siguiente problema se busca comprender y prever los factores que influyen en la rotación de empleados entre distintos cargos. La empresa ha recopilado datos históricos sobre el empleo de sus trabajadores, incluyendo variables como la antigüedad en el cargo actual, el nivel de satisfacción laboral, el salario actual, edad y otros factores relevantes. La gerencia planea desarrollar un modelo de regresión logística que permita estimar la probabilidad de que un empleado cambie de cargo en el próximo período y determinar cuales factores indicen en mayor proporción a estos cambios.

Para lograr identificar todo esto el markdown estará dividido en los siguientes pasos

  1. EDA basico sobre todo el data set para poder tener criterio tecnico
  2. Selección de variables
  3. Analisis Univariado
  4. Analisis Bivariado
  5. Estimacion del modelo
  6. Evaluacion del modelo
  7. Predicciones
  8. Conclusiones
rotacion <- rotacion %>% clean_names()

0. EDA basico sobre todo el data set para poder tener criterio tecnico

En esta parte se busca entender el dataframe para tener el criterio tecnico de decision de tal forma que se puedan realizar las hipotesis con contexto

st_options(bootstrap.css = FALSE)

dfSummary(rotacion,
          varnumbers = TRUE,
          valid.col = TRUE,
          na.col = TRUE,
          graph.col = TRUE) %>%
  print(method = "render",
        table.classes = "table table-striped table-hover")

Data Frame Summary

rotacion

Dimensions: 1470 x 24
Duplicates: 0
No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing
1 rotacion [character]
1. No
2. Si
1233(83.9%)
237(16.1%)
1470 (100.0%) 0 (0.0%)
2 edad [numeric]
Mean (sd) : 36.9 (9.1)
min ≤ med ≤ max:
18 ≤ 36 ≤ 60
IQR (CV) : 13 (0.2)
43 distinct values 1470 (100.0%) 0 (0.0%)
3 viaje_de_negocios [character]
1. Frecuentemente
2. No_Viaja
3. Raramente
277(18.8%)
150(10.2%)
1043(71.0%)
1470 (100.0%) 0 (0.0%)
4 departamento [character]
1. IyD
2. RH
3. Ventas
961(65.4%)
63(4.3%)
446(30.3%)
1470 (100.0%) 0 (0.0%)
5 distancia_casa [numeric]
Mean (sd) : 9.2 (8.1)
min ≤ med ≤ max:
1 ≤ 7 ≤ 29
IQR (CV) : 12 (0.9)
29 distinct values 1470 (100.0%) 0 (0.0%)
6 educacion [numeric]
Mean (sd) : 2.9 (1)
min ≤ med ≤ max:
1 ≤ 3 ≤ 5
IQR (CV) : 2 (0.4)
1:170(11.6%)
2:282(19.2%)
3:572(38.9%)
4:398(27.1%)
5:48(3.3%)
1470 (100.0%) 0 (0.0%)
7 campo_educacion [character]
1. Ciencias
2. Humanidades
3. Mercadeo
4. Otra
5. Salud
6. Tecnicos
606(41.2%)
27(1.8%)
159(10.8%)
82(5.6%)
464(31.6%)
132(9.0%)
1470 (100.0%) 0 (0.0%)
8 satisfaccion_ambiental [numeric]
Mean (sd) : 2.7 (1.1)
min ≤ med ≤ max:
1 ≤ 3 ≤ 4
IQR (CV) : 2 (0.4)
1:284(19.3%)
2:287(19.5%)
3:453(30.8%)
4:446(30.3%)
1470 (100.0%) 0 (0.0%)
9 genero [character]
1. F
2. M
588(40.0%)
882(60.0%)
1470 (100.0%) 0 (0.0%)
10 cargo [character]
1. Director_Investigación
2. Director_Manofactura
3. Ejecutivo_Ventas
4. Gerente
5. Investigador_Cientifico
6. Recursos_Humanos
7. Representante_Salud
8. Representante_Ventas
9. Tecnico_Laboratorio
80(5.4%)
145(9.9%)
326(22.2%)
102(6.9%)
292(19.9%)
52(3.5%)
131(8.9%)
83(5.6%)
259(17.6%)
1470 (100.0%) 0 (0.0%)
11 satisfacion_laboral [numeric]
Mean (sd) : 2.7 (1.1)
min ≤ med ≤ max:
1 ≤ 3 ≤ 4
IQR (CV) : 2 (0.4)
1:289(19.7%)
2:280(19.0%)
3:442(30.1%)
4:459(31.2%)
1470 (100.0%) 0 (0.0%)
12 estado_civil [character]
1. Casado
2. Divorciado
3. Soltero
673(45.8%)
327(22.2%)
470(32.0%)
1470 (100.0%) 0 (0.0%)
13 ingreso_mensual [numeric]
Mean (sd) : 6502.9 (4708)
min ≤ med ≤ max:
1009 ≤ 4919 ≤ 19999
IQR (CV) : 5468 (0.7)
1349 distinct values 1470 (100.0%) 0 (0.0%)
14 trabajos_anteriores [numeric]
Mean (sd) : 2.7 (2.5)
min ≤ med ≤ max:
0 ≤ 2 ≤ 9
IQR (CV) : 3 (0.9)
0:197(13.4%)
1:521(35.4%)
2:146(9.9%)
3:159(10.8%)
4:139(9.5%)
5:63(4.3%)
6:70(4.8%)
7:74(5.0%)
8:49(3.3%)
9:52(3.5%)
1470 (100.0%) 0 (0.0%)
15 horas_extra [character]
1. No
2. Si
1054(71.7%)
416(28.3%)
1470 (100.0%) 0 (0.0%)
16 porcentaje_aumento_salarial [numeric]
Mean (sd) : 15.2 (3.7)
min ≤ med ≤ max:
11 ≤ 14 ≤ 25
IQR (CV) : 6 (0.2)
15 distinct values 1470 (100.0%) 0 (0.0%)
17 rendimiento_laboral [numeric]
Min : 3
Mean : 3.2
Max : 4
3:1244(84.6%)
4:226(15.4%)
1470 (100.0%) 0 (0.0%)
18 anos_experiencia [numeric]
Mean (sd) : 11.3 (7.8)
min ≤ med ≤ max:
0 ≤ 10 ≤ 40
IQR (CV) : 9 (0.7)
40 distinct values 1470 (100.0%) 0 (0.0%)
19 capacitaciones [numeric]
Mean (sd) : 2.8 (1.3)
min ≤ med ≤ max:
0 ≤ 3 ≤ 6
IQR (CV) : 1 (0.5)
0:54(3.7%)
1:71(4.8%)
2:547(37.2%)
3:491(33.4%)
4:123(8.4%)
5:119(8.1%)
6:65(4.4%)
1470 (100.0%) 0 (0.0%)
20 equilibrio_trabajo_vida [numeric]
Mean (sd) : 2.8 (0.7)
min ≤ med ≤ max:
1 ≤ 3 ≤ 4
IQR (CV) : 1 (0.3)
1:80(5.4%)
2:344(23.4%)
3:893(60.7%)
4:153(10.4%)
1470 (100.0%) 0 (0.0%)
21 antiguedad [numeric]
Mean (sd) : 7 (6.1)
min ≤ med ≤ max:
0 ≤ 5 ≤ 40
IQR (CV) : 6 (0.9)
37 distinct values 1470 (100.0%) 0 (0.0%)
22 antiguedad_cargo [numeric]
Mean (sd) : 4.2 (3.6)
min ≤ med ≤ max:
0 ≤ 3 ≤ 18
IQR (CV) : 5 (0.9)
19 distinct values 1470 (100.0%) 0 (0.0%)
23 anos_ultima_promocion [numeric]
Mean (sd) : 2.2 (3.2)
min ≤ med ≤ max:
0 ≤ 1 ≤ 15
IQR (CV) : 3 (1.5)
16 distinct values 1470 (100.0%) 0 (0.0%)
24 anos_acargo_con_mismo_jefe [numeric]
Mean (sd) : 4.1 (3.6)
min ≤ med ≤ max:
0 ≤ 3 ≤ 17
IQR (CV) : 5 (0.9)
18 distinct values 1470 (100.0%) 0 (0.0%)

Generated by summarytools 1.1.5 (R version 4.5.1)
2026-03-25

Con la exploracion inicial nos podemos dar cuenta que el df debe ser transformado en lectura y en forma de representacion numerica, por lo tanto se ha creado la siguiente tabla con la variable su transformación y tipo.

diccionario_vars <- tribble(
  ~Variable, ~Transformacion, ~Tipo,
  "rotacion", "Boolean", "Categórica nominal",
  "edad", "Entero", "Cuantitativa",
  "viaje_de_negocios", "Dummy (entero)", "Categórica nominal",
  "departamento", "Dummy (entero)", "Categórica nominal",
  "distancia_casa", "Numérico", "Cuantitativa",
  "educacion", "Numérico ordinal", "Categórica ordinal",
  "campo_educacion", "Dummy (entero)", "Categórica nominal",
  "satisfaccion_ambiental", "Numérico ordinal", "Categórica ordinal",
  "genero", "Dummy", "Categórica nominal",
  "cargo", "One-hot encoding", "Categórica nominal",
  "satisfaccion_laboral", "Numérico ordinal", "Categórica ordinal",
  "estado_civil", "Dummy (entero)", "Categórica nominal",
  "ingreso_mensual", "Numérico", "Cuantitativa",
  "trabajos_anteriores", "Numérico", "Cuantitativa",
  "horas_extra", "Boolean", "Categórica nominal",
  "porcentaje_aumento_salarial", "Numérico; convertir a %", "Cuantitativa",
  "rendimiento_laboral", "Numérico ordinal", "Categórica ordinal",
  "anos_experiencia", "Numérico", "Cuantitativa",
  "capacitaciones", "Numérico", "Cuantitativa",
  "equilibrio_trabajo_vida", "Numérico ordinal", "Categórica ordinal",
  "antiguedad", "Numérico", "Cuantitativa",
  "antiguedad_cargo", "Numérico", "Cuantitativa",
  "anos_ultima_promocion", "Numérico", "Cuantitativa",
  "anos_acargo_con_mismo_jefe", "Numérico", "Cuantitativa"
)

datatable(
  diccionario_vars,
  rownames = FALSE,
  filter = "top",
  extensions = c("FixedHeader"),
  options = list(
    pageLength = 24,
    paging = FALSE,
    searching = TRUE,
    ordering = TRUE,
    info = FALSE,
    scrollX = TRUE,
    scrollY = "500px",
    fixedHeader = FALSE,
    dom = "ft"
  ),
  caption = "Tabla 1: Diccionario de variables y transformación propuesta"
)%>%
  formatStyle(
    "Tipo",
    target = "row",
    fontWeight = "bold"
  )

Como parte final del filtrado queremos conocer si la satisfacción laboral, y años a cargo con el mismo jefe estan relacionados con la rotación que se pueden ver en la siguiente tabla, esta es una forma de exploración que se realiza para definir las variables que se usaran en el modelo.

df_filtrado <- rotacion %>%
  filter(satisfacion_laboral < 3,
         anos_acargo_con_mismo_jefe > 2,
         rotacion=="Si")

datatable(df_filtrado,
          options = list(
    pageLength = 24,
    paging = FALSE,
    searching = TRUE,
    ordering = TRUE,
    info = FALSE,
    scrollX = TRUE,
    scrollY = "500px",
    fixedHeader = FALSE,
    dom = "ft"
  ),
          filter = "top",
          rownames = FALSE,
          caption = "Tabla 2: Filtrado inicial data"
  )

1. Selección de variables

Seleccionaremos 3 variables cuantitativas para el estudio.

  1. Distancia a la casa : se espera que la distancia entre la vivienda y el lugar de trabajo este positivamente relacionada con la rotacion, debido al desgaste asociado al tiempo de desplazamiento diario. Es decir, a mayor distancia, mayor probabilidad de rotacion.

  2. Años de experiencia : se espera que los años de experiencia estén negativamente relacionados con la rotación, ya que los empleados con mayor trayectoria tienden a tener mayor estabilidad laboral. Es decir, a mayor experiencia, menor probabilidad de rotación.

  3. Años a cargo con mismo jefe : se espera que el tiempo bajo el mismo jefe influya en la rotación, de modo que periodos cortos puedan asociarse con mayor probabilidad de rotación, mientras que una mayor permanencia podría indicar estabilidad laboral

Seleccionaremos 3 variables cualitativas para el estudio.

  1. Departamento : se espera que el departamento esté asociado con la rotación, dado que las condiciones laborales, cargas de trabajo y niveles de presión pueden variar entre áreas

  2. Satisfaccion laboral : se espera que niveles bajos de satisfacción laboral estén asociados con una mayor probabilidad de rotación.

  3. Horas Extra : se espera que la realización frecuente de horas extra esté positivamente relacionada con la rotación, debido al desgaste físico y emocional que estas generan.

2. Analisis Univariado

Variable de DISTANCIA

Realizamos los siguientes graficos resumen en donde usamos el raincloudgraph para poder resumir rapidamente las variables cuantitativas

datos_long <- rotacion %>%
  select(distancia_casa, anos_experiencia, anos_acargo_con_mismo_jefe) %>%
  pivot_longer(
    cols = everything(),
    names_to = "variable",
    values_to = "valor"
  ) %>%
  mutate(
    variable = case_when(
      variable == "distancia_casa" ~ "Distancia a la casa",
      variable == "anos_experiencia" ~ "Anos de experiencia",
      variable == "anos_acargo_con_mismo_jefe" ~ "Anos con el mismo jefe"
    )
  )

ggplot(datos_long, aes(y = valor)) +
  geom_violin(aes(x = 0), fill = "lightblue", alpha = 0.5, width = 0.8) +
  geom_boxplot(aes(x = 0.08), width = 0.08, fill = "white", outlier.shape = NA) +
  geom_jitter(aes(x = 0.18), width = 0.03, alpha = 0.30, size = 1, color = "darkblue") +
  scale_x_continuous(breaks = NULL) +
  facet_wrap(~ variable, scales = "free_y", nrow = 1) +
  labs(
    title = "Raincloud de variables cuantitativas",
    x = "",
    y = "Valor"
  ) +
  theme_minimal()
Gráfico 1: Raincloud variables cuantitativas

Gráfico 1: Raincloud variables cuantitativas

En el grafico 1 se observa como las 3 variables presentan distribucion asimentrica con atipicos, especialmente en la distancia a la casa y años de experiencia. La concentracion esta en varoles bajos en la variable años con el mismo jefe lo cual sugiere baja permanencia con un mismo jefe que se verificara mas adelante

ggbetweenstats(
  data = rotacion,
  x = rotacion,
  y = distancia_casa,
  type = "nonparametric",
  pairwise.comparisons = FALSE,
  centrality.plotting = TRUE,
  bf.message = FALSE,
  messages = FALSE,
  point.args = list(
    position = position_jitter(width = 0.15),
    alpha = 0.25,
    size = 1.2
  ),
  violin.args = list(alpha = 0.4),
  boxplot.args = list(width = 0.15, alpha = 0.6),
  title = "Distancia a la casa segun rotacion",
  xlab = "Rotacion",
  ylab = "Valor"
)
Gráfico 2: Distancia a la casa segun rotacion

Gráfico 2: Distancia a la casa segun rotacion

En el grafico 2 podemos ver como hay mas rotacion con las personas que viven mas lejos de entrada la mediana es mayor y hay algunos puntos atipicos

ggbetweenstats(
  data = rotacion,
  x = rotacion,
  y = anos_experiencia,
  type = "nonparametric",
  pairwise.comparisons = FALSE,
  centrality.plotting = TRUE,
  bf.message = FALSE,
  messages = FALSE,
  point.args = list(
    position = position_jitter(width = 0.15),
    alpha = 0.25,
    size = 1.2
  ),
  violin.args = list(alpha = 0.4),
  boxplot.args = list(width = 0.15, alpha = 0.6),
  title = "Anos de experiencia segun rotacion",
  xlab = "Rotacion",
  ylab = "Valor"
)
Gráfico 3: Anos de experiencia segun rotacion

Gráfico 3: Anos de experiencia segun rotacion

Los años de experiencia en general nos idican como a mayor cantidad de años hay menor rotacion, teniendo una relacion negativa entre años y rotacion

ggbetweenstats(
  data = rotacion,
  x = rotacion,
  y = anos_acargo_con_mismo_jefe,
  type = "nonparametric",
  pairwise.comparisons = FALSE,
  centrality.plotting = TRUE,
  bf.message = FALSE,
  messages = FALSE,
  point.args = list(
    position = position_jitter(width = 0.15),
    alpha = 0.25,
    size = 1.2
  ),
  violin.args = list(alpha = 0.4),
  boxplot.args = list(width = 0.15, alpha = 0.6),
  title = "Anos con el mismo jefe segun rotacion",
  xlab = "Rotacion",
  ylab = "Valor"
)
Gráfico 4: Anos con el mismo jefe segun rotacion

Gráfico 4: Anos con el mismo jefe segun rotacion

Se puede ver que los años con el mismo jefe son muy importantes puesto que hay concentracion en valores bajos lo que quiere decir que los empleados no permanece mucho con un mismo jefe.

La variable distancia a la casas tiene alta asimetria y outliers por lo que puede afectar los supuestos del modelo logistico y sus estimadores, de tal forma que hay que considerar realizar una transofrmacion logaritmica para reducir la asimetria, bajar la influencia de outliers y asi mejorar la realacion lineal existente

El resumen de los datos descriptivos de la variable estan en la Tabla 3

# Función para contar atípicos con regla IQR
contar_atipicos <- function(x) {
  x <- x[!is.na(x)]
  Q1 <- quantile(x, 0.25)
  Q3 <- quantile(x, 0.75)
  IQR_val <- IQR(x)
  
  limite_inf <- Q1 - 1.5 * IQR_val
  limite_sup <- Q3 + 1.5 * IQR_val
  
  sum(x < limite_inf | x > limite_sup)
}

tabla_desc <- data.frame(
  Variable = c("distancia_casa", "años experiencia", "años mismo jefe"),
  N = c(
    sum(!is.na(rotacion$distancia_casa)),
    sum(!is.na(rotacion$anos_experiencia)),
    sum(!is.na(rotacion$anos_acargo_con_mismo_jefe))
  ),
  Media = c(
    mean(rotacion$distancia_casa, na.rm = TRUE),
    mean(rotacion$anos_experiencia, na.rm = TRUE),
    mean(rotacion$anos_acargo_con_mismo_jefe, na.rm = TRUE)
  ),
  Mediana = c(
    median(rotacion$distancia_casa, na.rm = TRUE),
    median(rotacion$anos_experiencia, na.rm = TRUE),
    median(rotacion$anos_acargo_con_mismo_jefe, na.rm = TRUE)
  ),
  Desv_Est = c(
    sd(rotacion$distancia_casa, na.rm = TRUE),
    sd(rotacion$anos_experiencia, na.rm = TRUE),
    sd(rotacion$anos_acargo_con_mismo_jefe, na.rm = TRUE)
  ),
  Min = c(
    min(rotacion$distancia_casa, na.rm = TRUE),
    min(rotacion$anos_experiencia, na.rm = TRUE),
    min(rotacion$anos_acargo_con_mismo_jefe, na.rm = TRUE)
  ),
  Max = c(
    max(rotacion$distancia_casa, na.rm = TRUE),
    max(rotacion$anos_experiencia, na.rm = TRUE),
    max(rotacion$anos_acargo_con_mismo_jefe, na.rm = TRUE)
  ),
  Skewness = c(
    skewness(rotacion$distancia_casa, na.rm = TRUE),
    skewness(rotacion$anos_experiencia, na.rm = TRUE),
    skewness(rotacion$anos_acargo_con_mismo_jefe, na.rm = TRUE)
  ),
  Curtosis = c(
    kurtosis(rotacion$distancia_casa, na.rm = TRUE),
    kurtosis(rotacion$anos_experiencia, na.rm = TRUE),
    kurtosis(rotacion$anos_acargo_con_mismo_jefe, na.rm = TRUE)
  ),
  Atipicos = c(
    contar_atipicos(rotacion$distancia_casa),
    contar_atipicos(rotacion$anos_experiencia),
    contar_atipicos(rotacion$anos_acargo_con_mismo_jefe)
  )
)

tabla_desc[, -1] <- round(tabla_desc[, -1], 2)

kable(
  tabla_desc,
  caption = "Tabla 3. Estadísticos descriptivos de las variables cuantitativas seleccionadas",
  align = "lccccccccc"
) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),
    full_width = FALSE,
    position = "center"
  )
Tabla 3. Estadísticos descriptivos de las variables cuantitativas seleccionadas
Variable N Media Mediana Desv_Est Min Max Skewness Curtosis Atipicos
distancia_casa 1470 9.19 7 8.11 1 29 0.96 2.77 0
años experiencia 1470 11.28 10 7.78 0 40 1.12 3.91 63
años mismo jefe 1470 4.12 3 3.57 0 17 0.83 3.17 14

En las Tablas 4, 5 y 6 se presentan las distribuciones de frecuencia y proporción de las variables categóricas seleccionadas. Estas permiten identificar la concentración de observaciones en cada categoría y posibles desequilibrios en la muestra. Estos datos pueden ser verificados en el EDA inicial, aun asi se decide incluirlo para continuar con el hilo del analisis planteado.

tabla_departamento <- rotacion %>%
  count(departamento) %>%
  mutate(Proporcion = n / sum(n)) %>%
  rename(Categoria = departamento, Frecuencia = n)

kable(tabla_departamento,
      caption = "Tabla 4. Distribucion de la variable Departamento",
      align = "lcc") %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),
    full_width = FALSE,
    position = "center"
  )
Tabla 4. Distribucion de la variable Departamento
Categoria Frecuencia Proporcion
IyD 961 0.6537415
RH 63 0.0428571
Ventas 446 0.3034014
tabla_satisfaccion <- rotacion %>%
  count(satisfacion_laboral) %>%
  mutate(Proporcion = n / sum(n)) %>%
  rename(Categoria = satisfacion_laboral, Frecuencia = n)

kable(tabla_satisfaccion,
      caption = "Tabla 5. Distribucion de la variable Satisfaccion Laboral",
      align = "lcc") %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),
    full_width = FALSE,
    position = "center"
  )
Tabla 5. Distribucion de la variable Satisfaccion Laboral
Categoria Frecuencia Proporcion
1 289 0.1965986
2 280 0.1904762
3 442 0.3006803
4 459 0.3122449
tabla_horas <- rotacion %>%
  count(horas_extra) %>%
  mutate(Proporcion = n / sum(n)) %>%
  rename(Categoria = horas_extra, Frecuencia = n)

kable(tabla_horas,
      caption = "Tabla 6. Distribucion de la variable Horas Extra",
      align = "lcc") %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"),
    full_width = FALSE,
    position = "center"
  )
Tabla 6. Distribucion de la variable Horas Extra
Categoria Frecuencia Proporcion
No 1054 0.7170068
Si 416 0.2829932
par(mfrow = c(1, 4))

barplot(table(rotacion$satisfacion_laboral),
        main = "Satisfacción laboral",
        xlab = "Categorías",
        ylab = "Frecuencia",
        col = "lightblue")

barplot(table(rotacion$departamento),
        main = "Departamento",
        xlab = "Categorías",
        ylab = "Frecuencia",
        col = "lightgreen",
        las = 2)

barplot(table(rotacion$horas_extra),
        main = "Horas extra",
        xlab = "Categorías",
        ylab = "Frecuencia",
        col = "lightpink")

barplot(table(rotacion$rotacion),
        main = "rotacion",
        xlab = "categorias",
        ylab = "Frecuencia",
        col = "lightyellow")

3. Analisis Bivariado

A continuacion

rotacion$rotacion <- ifelse(rotacion$rotacion == "Si", 1, 0)
analisis1 <- glm(factor(rotacion) ~ distancia_casa, data = rotacion, family = binomial)
summary(analisis1)
## 
## Call:
## glm(formula = factor(rotacion) ~ distancia_casa, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                 Estimate Std. Error z value             Pr(>|z|)    
## (Intercept)    -1.890051   0.111382 -16.969 < 0.0000000000000002 ***
## distancia_casa  0.024710   0.008312   2.973              0.00295 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1290.0  on 1468  degrees of freedom
## AIC: 1294
## 
## Number of Fisher Scoring iterations: 4
analisis2 <- glm(factor(rotacion) ~ anos_experiencia, data = rotacion, family = binomial)
summary(analisis2)
## 
## Call:
## glm(formula = factor(rotacion) ~ anos_experiencia, family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                  Estimate Std. Error z value         Pr(>|z|)    
## (Intercept)      -0.88306    0.12744  -6.929 0.00000000000423 ***
## anos_experiencia -0.07773    0.01217  -6.387 0.00000000016900 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1248.1  on 1468  degrees of freedom
## AIC: 1252.1
## 
## Number of Fisher Scoring iterations: 5
analisis3 <- glm(factor(rotacion) ~ anos_acargo_con_mismo_jefe, data = rotacion, family = binomial)
summary(analisis3)
## 
## Call:
## glm(formula = factor(rotacion) ~ anos_acargo_con_mismo_jefe, 
##     family = binomial, data = rotacion)
## 
## Coefficients:
##                            Estimate Std. Error z value             Pr(>|z|)    
## (Intercept)                -1.14677    0.10244 -11.195 < 0.0000000000000002 ***
## anos_acargo_con_mismo_jefe -0.14138    0.02407  -5.874        0.00000000426 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1258.7  on 1468  degrees of freedom
## AIC: 1262.7
## 
## Number of Fisher Scoring iterations: 5
analisis4 <- glm(factor(rotacion) ~ factor(satisfacion_laboral), data = rotacion, family = binomial)
summary(analisis4)
## 
## Call:
## glm(formula = factor(rotacion) ~ factor(satisfacion_laboral), 
##     family = binomial, data = rotacion)
## 
## Coefficients:
##                              Estimate Std. Error z value             Pr(>|z|)
## (Intercept)                   -1.2175     0.1401  -8.689 < 0.0000000000000002
## factor(satisfacion_laboral)2  -0.4092     0.2137  -1.915               0.0555
## factor(satisfacion_laboral)3  -0.4028     0.1899  -2.122               0.0339
## factor(satisfacion_laboral)4  -0.8401     0.2033  -4.132            0.0000359
##                                 
## (Intercept)                  ***
## factor(satisfacion_laboral)2 .  
## factor(satisfacion_laboral)3 *  
## factor(satisfacion_laboral)4 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1281.2  on 1466  degrees of freedom
## AIC: 1289.2
## 
## Number of Fisher Scoring iterations: 4
analisis5 <- glm(factor(rotacion) ~ factor(departamento), data = rotacion, family = binomial)
summary(analisis5)
## 
## Call:
## glm(formula = factor(rotacion) ~ factor(departamento), family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                            Estimate Std. Error z value             Pr(>|z|)    
## (Intercept)                -1.82866    0.09342 -19.576 < 0.0000000000000002 ***
## factor(departamento)RH      0.38175    0.33417   1.142              0.25330    
## factor(departamento)Ventas  0.48116    0.14974   3.213              0.00131 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1288.1  on 1467  degrees of freedom
## AIC: 1294.1
## 
## Number of Fisher Scoring iterations: 4
analisis6 <- glm(factor(rotacion) ~ factor(horas_extra), data = rotacion, family = binomial)
summary(analisis6)
## 
## Call:
## glm(formula = factor(rotacion) ~ factor(horas_extra), family = binomial, 
##     data = rotacion)
## 
## Coefficients:
##                       Estimate Std. Error z value            Pr(>|z|)    
## (Intercept)            -2.1496     0.1007 -21.338 <0.0000000000000002 ***
## factor(horas_extra)Si   1.3274     0.1466   9.056 <0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1217.2  on 1468  degrees of freedom
## AIC: 1221.2
## 
## Number of Fisher Scoring iterations: 4

4. Estimacion del modelo

5. Evaluacion del modelo

6. Predicciones

7. Conclusiones