DatosRotacion <- read_excel("Datos_Rotación.xlsx")
names(DatosRotacion)
## [1] "Rotación" "Edad"
## [3] "Viaje de Negocios" "Departamento"
## [5] "Distancia_Casa" "Educación"
## [7] "Campo_Educación" "Satisfacción_Ambiental"
## [9] "Genero" "Cargo"
## [11] "Satisfación_Laboral" "Estado_Civil"
## [13] "Ingreso_Mensual" "Trabajos_Anteriores"
## [15] "Horas_Extra" "Porcentaje_aumento_salarial"
## [17] "Rendimiento_Laboral" "Años_Experiencia"
## [19] "Capacitaciones" "Equilibrio_Trabajo_Vida"
## [21] "Antigüedad" "Antigüedad_Cargo"
## [23] "Años_ultima_promoción" "Años_acargo_con_mismo_jefe"
head(DatosRotacion)
## # A tibble: 6 × 24
## Rotación Edad Viaje de…¹ Depar…² Dista…³ Educa…⁴ Campo…⁵ Satis…⁶ Genero Cargo
## <chr> <dbl> <chr> <chr> <dbl> <dbl> <chr> <dbl> <chr> <chr>
## 1 Si 41 Raramente Ventas 1 2 Cienci… 2 F Ejec…
## 2 No 49 Frecuente… IyD 8 1 Cienci… 3 M Inve…
## 3 Si 37 Raramente IyD 2 2 Otra 4 M Tecn…
## 4 No 33 Frecuente… IyD 3 4 Cienci… 4 F Inve…
## 5 No 27 Raramente IyD 2 1 Salud 1 M Tecn…
## 6 No 32 Frecuente… IyD 2 2 Cienci… 4 M Tecn…
## # … with 14 more variables: Satisfación_Laboral <dbl>, Estado_Civil <chr>,
## # Ingreso_Mensual <dbl>, Trabajos_Anteriores <dbl>, Horas_Extra <chr>,
## # Porcentaje_aumento_salarial <dbl>, Rendimiento_Laboral <dbl>,
## # Años_Experiencia <dbl>, Capacitaciones <dbl>,
## # Equilibrio_Trabajo_Vida <dbl>, Antigüedad <dbl>, Antigüedad_Cargo <dbl>,
## # Años_ultima_promoción <dbl>, Años_acargo_con_mismo_jefe <dbl>, and
## # abbreviated variable names ¹`Viaje de Negocios`, ²Departamento, …
## # ℹ Use `colnames()` to see all variable names
str(DatosRotacion)
## tibble [1,470 × 24] (S3: tbl_df/tbl/data.frame)
## $ Rotación : chr [1:1470] "Si" "No" "Si" "No" ...
## $ Edad : num [1:1470] 41 49 37 33 27 32 59 30 38 36 ...
## $ Viaje de Negocios : chr [1:1470] "Raramente" "Frecuentemente" "Raramente" "Frecuentemente" ...
## $ Departamento : chr [1:1470] "Ventas" "IyD" "IyD" "IyD" ...
## $ Distancia_Casa : num [1:1470] 1 8 2 3 2 2 3 24 23 27 ...
## $ Educación : num [1:1470] 2 1 2 4 1 2 3 1 3 3 ...
## $ Campo_Educación : chr [1:1470] "Ciencias" "Ciencias" "Otra" "Ciencias" ...
## $ Satisfacción_Ambiental : num [1:1470] 2 3 4 4 1 4 3 4 4 3 ...
## $ Genero : chr [1:1470] "F" "M" "M" "F" ...
## $ Cargo : chr [1:1470] "Ejecutivo_Ventas" "Investigador_Cientifico" "Tecnico_Laboratorio" "Investigador_Cientifico" ...
## $ Satisfación_Laboral : num [1:1470] 4 2 3 3 2 4 1 3 3 3 ...
## $ Estado_Civil : chr [1:1470] "Soltero" "Casado" "Soltero" "Casado" ...
## $ Ingreso_Mensual : num [1:1470] 5993 5130 2090 2909 3468 ...
## $ Trabajos_Anteriores : num [1:1470] 8 1 6 1 9 0 4 1 0 6 ...
## $ Horas_Extra : chr [1:1470] "Si" "No" "Si" "Si" ...
## $ Porcentaje_aumento_salarial: num [1:1470] 11 23 15 11 12 13 20 22 21 13 ...
## $ Rendimiento_Laboral : num [1:1470] 3 4 3 3 3 3 4 4 4 3 ...
## $ Años_Experiencia : num [1:1470] 8 10 7 8 6 8 12 1 10 17 ...
## $ Capacitaciones : num [1:1470] 0 3 3 3 3 2 3 2 2 3 ...
## $ Equilibrio_Trabajo_Vida : num [1:1470] 1 3 3 3 3 2 2 3 3 2 ...
## $ Antigüedad : num [1:1470] 6 10 0 8 2 7 1 1 9 7 ...
## $ Antigüedad_Cargo : num [1:1470] 4 7 0 7 2 7 0 0 7 7 ...
## $ Años_ultima_promoción : num [1:1470] 0 1 0 3 2 3 0 0 1 7 ...
## $ Años_acargo_con_mismo_jefe : num [1:1470] 5 7 0 0 2 6 0 0 8 7 ...
dim(DatosRotacion)
## [1] 1470 24
library(tidyverse)
var_numericas=DatosRotacion %>% select_if(is.numeric)
dim(var_numericas)
## [1] 1470 16
var_numericas = cbind(var_numericas,Rotación=DatosRotacion$Rotación)
head(var_numericas)
## Edad Distancia_Casa Educación Satisfacción_Ambiental Satisfación_Laboral
## 1 41 1 2 2 4
## 2 49 8 1 3 2
## 3 37 2 2 4 3
## 4 33 3 4 4 3
## 5 27 2 1 1 2
## 6 32 2 2 4 4
## Ingreso_Mensual Trabajos_Anteriores Porcentaje_aumento_salarial
## 1 5993 8 11
## 2 5130 1 23
## 3 2090 6 15
## 4 2909 1 11
## 5 3468 9 12
## 6 3068 0 13
## Rendimiento_Laboral Años_Experiencia Capacitaciones Equilibrio_Trabajo_Vida
## 1 3 8 0 1
## 2 4 10 3 3
## 3 3 7 3 3
## 4 3 8 3 3
## 5 3 6 3 3
## 6 3 8 2 2
## Antigüedad Antigüedad_Cargo Años_ultima_promoción Años_acargo_con_mismo_jefe
## 1 6 4 0 5
## 2 10 7 1 7
## 3 0 0 0 0
## 4 8 7 3 0
## 5 2 2 2 2
## 6 7 7 3 6
## Rotación
## 1 Si
## 2 No
## 3 Si
## 4 No
## 5 No
## 6 No
library(AppliedPredictiveModeling)
featurePlot(x = var_numericas[1:4],
y = as.factor(var_numericas$Rotación),
plot = "pairs",
## Add a key at the top3
auto.key = list(columns = 2))
featurePlot(x = var_numericas[5:8],
y = as.factor(var_numericas$Rotación),
plot = "pairs",
## Add a key at the top3
auto.key = list(columns = 2))
featurePlot(x = var_numericas[9:12],
y = as.factor(var_numericas$Rotación),
plot = "pairs",
## Add a key at the top3
auto.key = list(columns = 2))
featurePlot(x = var_numericas[13:16],
y = as.factor(var_numericas$Rotación),
plot = "pairs",
## Add a key at the top3
auto.key = list(columns = 2))
featurePlot(x = var_numericas[1:4],
y = as.factor(var_numericas$Rotación),
plot = "ellipse",
## Add a key at the top3
auto.key = list(columns = 2))
#### Overlayed Density Plots
transparentTheme(trans = .9)
featurePlot(x = var_numericas[1:4],
y = as.factor(var_numericas$Rotación),
plot = "density",
## Pass in options to xyplot() to
## make it prettier
scales = list(x = list(relation="free"),
y = list(relation="free")),
adjust = 1.5,
pch = "|",
layout = c(2, 1),
auto.key = list(columns = 2))
#### Box Plots
featurePlot(x = var_numericas[, 1:4],
y = as.factor(var_numericas$Rotación),
plot = "box",
## Pass in options to bwplot()
scales = list(y = list(relation="free"),
x = list(rot = 90)),
layout = c(2,1),
auto.key = list(columns = 2))
#### Scatter Plots
theme1 <- trellis.par.get()
theme1$plot.symbol$col = rgb(.2, .2, .2, .4)
theme1$plot.symbol$pch = 16
theme1$plot.line$col = rgb(1, 0, 0, .7)
theme1$plot.line$lwd <- 2
trellis.par.set(theme1)
featurePlot(x = var_numericas[,1:4],
y = as.factor(var_numericas$Rotación),
plot = "scatter",
layout = c(2, 1))
## NULL
library(earth)
head(model.matrix(Rotación ~ ., data = DatosRotacion))
## (Intercept) Edad `Viaje de Negocios`No_Viaja `Viaje de Negocios`Raramente
## 1 1 41 0 1
## 2 1 49 0 0
## 3 1 37 0 1
## 4 1 33 0 0
## 5 1 27 0 1
## 6 1 32 0 0
## DepartamentoRH DepartamentoVentas Distancia_Casa Educación
## 1 0 1 1 2
## 2 0 0 8 1
## 3 0 0 2 2
## 4 0 0 3 4
## 5 0 0 2 1
## 6 0 0 2 2
## Campo_EducaciónHumanidades Campo_EducaciónMercadeo Campo_EducaciónOtra
## 1 0 0 0
## 2 0 0 0
## 3 0 0 1
## 4 0 0 0
## 5 0 0 0
## 6 0 0 0
## Campo_EducaciónSalud Campo_EducaciónTecnicos Satisfacción_Ambiental GeneroM
## 1 0 0 2 0
## 2 0 0 3 1
## 3 0 0 4 1
## 4 0 0 4 0
## 5 1 0 1 1
## 6 0 0 4 1
## CargoDirector_Manofactura CargoEjecutivo_Ventas CargoGerente
## 1 0 1 0
## 2 0 0 0
## 3 0 0 0
## 4 0 0 0
## 5 0 0 0
## 6 0 0 0
## CargoInvestigador_Cientifico CargoRecursos_Humanos CargoRepresentante_Salud
## 1 0 0 0
## 2 1 0 0
## 3 0 0 0
## 4 1 0 0
## 5 0 0 0
## 6 0 0 0
## CargoRepresentante_Ventas CargoTecnico_Laboratorio Satisfación_Laboral
## 1 0 0 4
## 2 0 0 2
## 3 0 1 3
## 4 0 0 3
## 5 0 1 2
## 6 0 1 4
## Estado_CivilDivorciado Estado_CivilSoltero Ingreso_Mensual
## 1 0 1 5993
## 2 0 0 5130
## 3 0 1 2090
## 4 0 0 2909
## 5 0 0 3468
## 6 0 1 3068
## Trabajos_Anteriores Horas_ExtraSi Porcentaje_aumento_salarial
## 1 8 1 11
## 2 1 0 23
## 3 6 1 15
## 4 1 1 11
## 5 9 0 12
## 6 0 0 13
## Rendimiento_Laboral Años_Experiencia Capacitaciones Equilibrio_Trabajo_Vida
## 1 3 8 0 1
## 2 4 10 3 3
## 3 3 7 3 3
## 4 3 8 3 3
## 5 3 6 3 3
## 6 3 8 2 2
## Antigüedad Antigüedad_Cargo Años_ultima_promoción Años_acargo_con_mismo_jefe
## 1 6 4 0 5
## 2 10 7 1 7
## 3 0 0 0 0
## 4 8 7 3 0
## 5 2 2 2 2
## 6 7 7 3 6
Se oberva un desvalanceo den la variable dependiente rotacion
data.frame(table(DatosRotacion$`Viaje de Negocios`))
## Var1 Freq
## 1 Frecuentemente 277
## 2 No_Viaja 150
## 3 Raramente 1043
nzv =nearZeroVar(DatosRotacion$Edad, saveMetrics= TRUE)
nzv[nzv$nzv,][1:16,]
## freqRatio percentUnique zeroVar nzv
## NA NA NA NA NA
## NA.1 NA NA NA NA
## NA.2 NA NA NA NA
## NA.3 NA NA NA NA
## NA.4 NA NA NA NA
## NA.5 NA NA NA NA
## NA.6 NA NA NA NA
## NA.7 NA NA NA NA
## NA.8 NA NA NA NA
## NA.9 NA NA NA NA
## NA.10 NA NA NA NA
## NA.11 NA NA NA NA
## NA.12 NA NA NA NA
## NA.13 NA NA NA NA
## NA.14 NA NA NA NA
## NA.15 NA NA NA NA
NO lo entendi
Se calcula los valores para entrenamiento y testeo no estoy seguro que sea asi
inTrain = sample(seq(along = var_numericas2$Rotación), length(var_numericas2$Rotación)/2)
training = var_numericas2[inTrain,]
test = var_numericas2[-inTrain,]
trainMDRR = var_numericas2$Rotación[inTrain]
testMDRR = var_numericas2$Rotación[-inTrain]
preProcValues =preProcess(training, method = c("center", "scale"))
trainTransformed = predict(preProcValues, training)
testTransformed = predict(preProcValues, test)
var_numericas2$Rotación = as.factor(var_numericas2$Rotación)
trainIndex <- createDataPartition(var_numericas2$Rotación, p = .8,
list = FALSE,
times = 1)
head(trainIndex)
## Resample1
## [1,] 1
## [2,] 2
## [3,] 4
## [4,] 5
## [5,] 6
## [6,] 7
rotacionTrain =var_numericas2[ trainIndex,]
rotacionTest = var_numericas2[-trainIndex,]
head(rotacionTrain)
## Edad Distancia_Casa Educación Satisfacción_Ambiental Satisfación_Laboral
## 1 41 1 2 2 4
## 2 49 8 1 3 2
## 4 33 3 4 4 3
## 5 27 2 1 1 2
## 6 32 2 2 4 4
## 7 59 3 3 3 1
## Ingreso_Mensual Trabajos_Anteriores Porcentaje_aumento_salarial
## 1 5993 8 11
## 2 5130 1 23
## 4 2909 1 11
## 5 3468 9 12
## 6 3068 0 13
## 7 2670 4 20
## Capacitaciones Equilibrio_Trabajo_Vida Antigüedad_Cargo Años_ultima_promoción
## 1 0 1 4 0
## 2 3 3 7 1
## 4 3 3 7 3
## 5 3 3 2 2
## 6 2 2 7 3
## 7 3 2 0 0
## Años_acargo_con_mismo_jefe Rotación
## 1 5 Si
## 2 7 No
## 4 0 No
## 5 2 No
## 6 6 No
## 7 0 No
fitControl <- trainControl(## 10-fold CV
method = "repeatedcv",
number = 14,
## repeated ten times
repeats = 14)
rotacionTrain$Rotación = as.factor(rotacionTrain$Rotación)
glmFit1 =train(Rotación ~ ., data = rotacionTrain,
method = "glm",
trControl = fitControl,
family = "binomial")
glmFit1
## Generalized Linear Model
##
## 1177 samples
## 13 predictor
## 2 classes: 'No', 'Si'
##
## No pre-processing
## Resampling: Cross-Validated (14 fold, repeated 14 times)
## Summary of sample sizes: 1093, 1093, 1094, 1093, 1093, 1093, ...
## Resampling results:
##
## Accuracy Kappa
## 0.8392674 0.0732033
summary(glmFit1)
##
## Call:
## NULL
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.3342 -0.6301 -0.4467 -0.2385 3.0658
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.649e+00 7.582e-01 4.813 1.49e-06 ***
## Edad -4.287e-02 1.171e-02 -3.661 0.000252 ***
## Distancia_Casa 2.532e-02 9.974e-03 2.539 0.011115 *
## Educación -5.055e-02 8.507e-02 -0.594 0.552333
## Satisfacción_Ambiental -3.210e-01 7.738e-02 -4.148 3.35e-05 ***
## Satisfación_Laboral -2.842e-01 7.632e-02 -3.723 0.000197 ***
## Ingreso_Mensual -6.804e-05 2.841e-05 -2.395 0.016621 *
## Trabajos_Anteriores 7.251e-02 3.547e-02 2.044 0.040935 *
## Porcentaje_aumento_salarial -3.211e-02 2.384e-02 -1.347 0.178019
## Capacitaciones -1.401e-01 6.724e-02 -2.083 0.037250 *
## Equilibrio_Trabajo_Vida -2.930e-01 1.173e-01 -2.497 0.012510 *
## Antigüedad_Cargo -1.138e-01 4.026e-02 -2.825 0.004721 **
## Años_ultima_promoción 1.811e-01 3.833e-02 4.726 2.29e-06 ***
## Años_acargo_con_mismo_jefe -1.209e-01 3.957e-02 -3.057 0.002239 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1040.5 on 1176 degrees of freedom
## Residual deviance: 910.3 on 1163 degrees of freedom
## AIC: 938.3
##
## Number of Fisher Scoring iterations: 5