FORM
rh_nueva <- read.csv("/Users/oscarcamilo/Documents/Tec MTY/ANALÍTICA PARA NEGOCIOS/RETO/ENCUESTAS/EncuestasForm_BaseLimpia.csv")
Librerías
library(dplyr)
str(rh_nueva)
## 'data.frame': 106 obs. of 22 variables:
## $ Puesto : chr "Administrativo" "Costurera" "Ayudante general" "Ayudante general" ...
## $ puesto_otro : chr "" "" "" "" ...
## $ Antiguedad : int 9 36 4 2 1 36 36 36 36 1 ...
## $ Motivación : chr "Por el salario" "Otro" "Ubicación de la empresa" "Ubicación de la empresa" ...
## $ Salario : int 5 4 2 5 3 4 2 5 4 5 ...
## $ Prestaciones : int 4 4 1 4 1 5 3 4 1 4 ...
## $ Jornada_Laboral : int 5 5 1 5 5 5 4 5 4 5 ...
## $ Herramientas : int 5 4 1 5 5 5 4 5 1 5 ...
## $ Temperatura : int 2 3 3 4 4 2 2 4 5 1 ...
## $ Estrés : int 5 2 1 5 3 4 5 4 4 5 ...
## $ Transporte : int 4 2 4 5 1 5 1 5 5 2 ...
## $ Instalaciones : int 5 4 4 5 5 4 4 5 5 5 ...
## $ Rotación : int 4 5 1 4 3 5 3 5 5 5 ...
## $ Conflicto.Acoso : chr "No" "No" "Si" "No" ...
## $ Satisfacción.en.el.trabajo: chr "cotización ante imss, fecha de pago, comer a las 3pm" "Ninguno" "mucho trabajo, estrés" "Todo bien " ...
## $ Emoción : chr "agusto, feliz" "Bien" "cómoda, no satisfecha" "Tranquila y contenta " ...
## $ Edad : chr "30" "54" "21" "20" ...
## $ Genero : chr "Femenino" "Femenino" "Femenino" "Femenino" ...
## $ Estado.Civil : chr "Unión libre" "Casado" "Soltero" "Casado" ...
## $ Municipio : chr "Apodaca" "Apodaca" "Apodaca" "Apodaca" ...
## $ Escolaridad : chr "Licenciatura" "Primaria" "Preparatoria" "Preparatoria" ...
## $ Dependientes : int 0 0 0 0 0 2 1 0 0 2 ...
summary(rh_nueva$Antiguedad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 1.00 9.00 14.08 34.50 36.00
summary(rh_nueva$Edad)
## Length Class Mode
## 106 character character
sd(rh_nueva$Antiguedad)
## [1] 14.47145
sd(rh_nueva$Edad)
## Warning in var(if (is.vector(x) || is.factor(x)) x else as.double(x), na.rm =
## na.rm): NAs introduced by coercion
## [1] NA
tabla <- table(rh_nueva$Salario2)
tabla
## < table of extent 0 >
tabla <- table(rh_nueva$Prestaciones)
tabla
##
## 1 2 3 4 5
## 21 19 10 22 34
tabla <- table(rh_nueva$Jornada_Laboral)
tabla
##
## 1 2 3 4 5
## 8 6 10 19 63
tabla <- table(rh_nueva$Herramientas)
tabla
##
## 1 2 3 4 5
## 20 2 9 15 60
tabla <- table(rh_nueva$Temperatura)
tabla
##
## 1 2 3 4 5
## 35 7 12 14 38
tabla <- table(rh_nueva$Estrés)
tabla
##
## 1 2 3 4 5
## 13 9 20 21 43
tabla <- table(rh_nueva$Traslado)
tabla
## < table of extent 0 >
tabla <- table(rh_nueva$Instalaciones)
tabla
##
## 1 2 3 4 5
## 8 5 4 18 71
tabla <- table(rh_nueva$Rotación)
tabla
##
## 1 2 3 4 5
## 9 5 15 21 56
tabla <- table(rh_nueva$Puesto_integrado)
tabla
## < table of extent 0 >
tabla <- table(rh_nueva$Motivación)
tabla
##
## Ambiente de trabajo Otro Por el salario
## 13 21 19
## Prestaciones Razones personales Ubicación de la empresa
## 2 19 32
tabla <- table(rh_nueva$Conflicto.Acoso)
tabla
##
## No Prefiero no decirlo Si
## 89 1 16
tabla <- table(rh_nueva$Tipo.Emocion)
tabla
## < table of extent 0 >
tabla <- table(rh_nueva$Genero)
tabla
##
## Femenino Masculino
## 69 37
tabla <- table(rh_nueva$Estado.Civil)
tabla
##
## Casado Divorciado Soltero Unión libre
## 38 1 47 20
tabla <- table(rh_nueva$Municipio)
tabla
##
## Apodaca Guadalupe Juárez Monterrey Otro Pesquería
## 77 4 12 3 6 4
tabla <- table(rh_nueva$Escolaridad)
tabla
##
## Licenciatura Otro Preparatoria Primaria Secundaria
## 24 3 27 9 43
tabla <- table(rh_nueva$Dependientes)
tabla
##
## 0 1 2 3
## 44 24 23 15
https://docs.google.com/document/d/1-Fj0Q3tBpGO04sFWvSiWWZiC1K-jQf4UwsDXWE_y3OE/edit
encuesta <- read.csv("/Users/oscarcamilo/Documents/Tec MTY/ANALÍTICA PARA NEGOCIOS/RETO/ENCUESTAS/EncuestasForm_BaseLimpia.csv")
str(encuesta)
## 'data.frame': 106 obs. of 22 variables:
## $ Puesto : chr "Administrativo" "Costurera" "Ayudante general" "Ayudante general" ...
## $ puesto_otro : chr "" "" "" "" ...
## $ Antiguedad : int 9 36 4 2 1 36 36 36 36 1 ...
## $ Motivación : chr "Por el salario" "Otro" "Ubicación de la empresa" "Ubicación de la empresa" ...
## $ Salario : int 5 4 2 5 3 4 2 5 4 5 ...
## $ Prestaciones : int 4 4 1 4 1 5 3 4 1 4 ...
## $ Jornada_Laboral : int 5 5 1 5 5 5 4 5 4 5 ...
## $ Herramientas : int 5 4 1 5 5 5 4 5 1 5 ...
## $ Temperatura : int 2 3 3 4 4 2 2 4 5 1 ...
## $ Estrés : int 5 2 1 5 3 4 5 4 4 5 ...
## $ Transporte : int 4 2 4 5 1 5 1 5 5 2 ...
## $ Instalaciones : int 5 4 4 5 5 4 4 5 5 5 ...
## $ Rotación : int 4 5 1 4 3 5 3 5 5 5 ...
## $ Conflicto.Acoso : chr "No" "No" "Si" "No" ...
## $ Satisfacción.en.el.trabajo: chr "cotización ante imss, fecha de pago, comer a las 3pm" "Ninguno" "mucho trabajo, estrés" "Todo bien " ...
## $ Emoción : chr "agusto, feliz" "Bien" "cómoda, no satisfecha" "Tranquila y contenta " ...
## $ Edad : chr "30" "54" "21" "20" ...
## $ Genero : chr "Femenino" "Femenino" "Femenino" "Femenino" ...
## $ Estado.Civil : chr "Unión libre" "Casado" "Soltero" "Casado" ...
## $ Municipio : chr "Apodaca" "Apodaca" "Apodaca" "Apodaca" ...
## $ Escolaridad : chr "Licenciatura" "Primaria" "Preparatoria" "Preparatoria" ...
## $ Dependientes : int 0 0 0 0 0 2 1 0 0 2 ...
encuesta$Puesto <- as.factor(encuesta$Puesto)
encuesta$Edad <- as.integer(encuesta$Edad)
## Warning: NAs introduced by coercion
encuesta$Genero <- as.factor(encuesta$Genero)
encuesta$Estado.Civil <- as.factor(encuesta$Estado.Civil)
encuesta$Municipio <- as.factor(encuesta$Municipio)
encuesta$Escolaridad <- as.factor(encuesta$Escolaridad)
str(encuesta)
## 'data.frame': 106 obs. of 22 variables:
## $ Puesto : Factor w/ 8 levels "Administrativo",..: 1 3 2 2 2 2 2 1 3 2 ...
## $ puesto_otro : chr "" "" "" "" ...
## $ Antiguedad : int 9 36 4 2 1 36 36 36 36 1 ...
## $ Motivación : chr "Por el salario" "Otro" "Ubicación de la empresa" "Ubicación de la empresa" ...
## $ Salario : int 5 4 2 5 3 4 2 5 4 5 ...
## $ Prestaciones : int 4 4 1 4 1 5 3 4 1 4 ...
## $ Jornada_Laboral : int 5 5 1 5 5 5 4 5 4 5 ...
## $ Herramientas : int 5 4 1 5 5 5 4 5 1 5 ...
## $ Temperatura : int 2 3 3 4 4 2 2 4 5 1 ...
## $ Estrés : int 5 2 1 5 3 4 5 4 4 5 ...
## $ Transporte : int 4 2 4 5 1 5 1 5 5 2 ...
## $ Instalaciones : int 5 4 4 5 5 4 4 5 5 5 ...
## $ Rotación : int 4 5 1 4 3 5 3 5 5 5 ...
## $ Conflicto.Acoso : chr "No" "No" "Si" "No" ...
## $ Satisfacción.en.el.trabajo: chr "cotización ante imss, fecha de pago, comer a las 3pm" "Ninguno" "mucho trabajo, estrés" "Todo bien " ...
## $ Emoción : chr "agusto, feliz" "Bien" "cómoda, no satisfecha" "Tranquila y contenta " ...
## $ Edad : int 30 54 21 20 43 61 55 29 56 36 ...
## $ Genero : Factor w/ 2 levels "Femenino","Masculino": 1 1 1 1 1 1 1 2 1 1 ...
## $ Estado.Civil : Factor w/ 4 levels "Casado","Divorciado",..: 4 1 3 1 3 4 1 3 3 4 ...
## $ Municipio : Factor w/ 6 levels "Apodaca","Guadalupe",..: 1 1 1 1 3 1 1 1 1 1 ...
## $ Escolaridad : Factor w/ 5 levels "Licenciatura",..: 1 4 3 3 5 5 5 1 5 5 ...
## $ Dependientes : int 0 0 0 0 0 2 1 0 0 2 ...
regresion_insatisfaccion <- lm(Rotación ~ Puesto + Antiguedad + Salario + Prestaciones + Jornada_Laboral + Herramientas + Temperatura + Estrés + Transporte + Instalaciones + Rotación + Conflicto.Acoso + Edad + Genero + Estado.Civil + Municipio + Escolaridad + Dependientes, data = encuesta)
## Warning in model.matrix.default(mt, mf, contrasts): the response appeared on
## the right-hand side and was dropped
## Warning in model.matrix.default(mt, mf, contrasts): problem with term 11 in
## model.matrix: no columns are assigned
summary(regresion_insatisfaccion)
##
## Call:
## lm(formula = Rotación ~ Puesto + Antiguedad + Salario + Prestaciones +
## Jornada_Laboral + Herramientas + Temperatura + Estrés +
## Transporte + Instalaciones + Rotación + Conflicto.Acoso +
## Edad + Genero + Estado.Civil + Municipio + Escolaridad +
## Dependientes, data = encuesta)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.29012 -0.64373 0.04135 0.49448 2.01758
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.804844 0.815519 2.213 0.0301 *
## PuestoAyudante general -0.519078 0.526814 -0.985 0.3278
## PuestoCosturera 0.269387 0.679540 0.396 0.6930
## PuestoLimpieza -0.320732 0.980206 -0.327 0.7445
## PuestoMantenimiento 0.495872 1.260599 0.393 0.6952
## PuestoOtro -0.479538 0.483901 -0.991 0.3251
## PuestoSoldador 0.928738 1.064599 0.872 0.3859
## PuestoSupervisor -0.104395 0.671675 -0.155 0.8769
## Antiguedad 0.006569 0.009954 0.660 0.5115
## Salario 0.123600 0.106579 1.160 0.2501
## Prestaciones 0.217988 0.092744 2.350 0.0215 *
## Jornada_Laboral 0.030917 0.108364 0.285 0.7762
## Herramientas 0.149761 0.095729 1.564 0.1222
## Temperatura -0.150837 0.064509 -2.338 0.0222 *
## Estrés 0.064348 0.089079 0.722 0.4724
## Transporte 0.088840 0.088902 0.999 0.3210
## Instalaciones 0.014727 0.114430 0.129 0.8980
## Conflicto.AcosoPrefiero no decirlo -0.180756 1.117257 -0.162 0.8719
## Conflicto.AcosoSi -0.376954 0.350675 -1.075 0.2860
## Edad 0.016367 0.013373 1.224 0.2250
## GeneroMasculino -0.221957 0.268375 -0.827 0.4110
## Estado.CivilDivorciado -0.451114 1.292909 -0.349 0.7282
## Estado.CivilSoltero 0.039064 0.326676 0.120 0.9052
## Estado.CivilUnión libre -0.502234 0.372325 -1.349 0.1817
## MunicipioGuadalupe 0.123431 0.606001 0.204 0.8392
## MunicipioJuárez -0.591573 0.406681 -1.455 0.1502
## MunicipioMonterrey 0.521235 0.784442 0.664 0.5085
## MunicipioOtro 0.335439 0.583078 0.575 0.5669
## MunicipioPesquería -0.676459 0.594653 -1.138 0.2591
## EscolaridadOtro 0.575140 0.848774 0.678 0.5002
## EscolaridadPreparatoria -0.346103 0.463915 -0.746 0.4581
## EscolaridadPrimaria 0.040090 0.615192 0.065 0.9482
## EscolaridadSecundaria 0.392371 0.488042 0.804 0.4241
## Dependientes -0.023152 0.129122 -0.179 0.8582
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9994 on 71 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.5851, Adjusted R-squared: 0.3923
## F-statistic: 3.034 on 33 and 71 DF, p-value: 4.598e-05
Observaciones:
Se hizo la regresión lineal utilizando como variable dependiente la variable de Rotación que explica si los empleados consideraban probable el seguir trabajando en FORM
Tenemos una R^2 de .39 y se utilizaron como variables independientes las demás variables que no eran preguntas abiertas en la encuesta
df<- read.csv("/Users/oscarcamilo/Documents/Tec MTY/ANALÍTICA PARA NEGOCIOS/RETO/ENCUESTAS/EncuestasForm_BaseLimpia.csv")
df <- select(df, Estrés, Rotación)
df <- na.omit(df)
grupos <- 4
segmentos <- kmeans(df,grupos)
asignación <- cbind(df,cluster=segmentos$cluster)
library (ggplot2)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_cluster(segmentos,data=df,palette=c("red","blue","darkgreen","yellow"),
ellipse.type="euclid",
star.plot= T,
repel=T,
ggtheme=theme())
#6.Optimizar cantidad de grupos
library (cluster)
library (data.table)
##
## Attaching package: 'data.table'
## The following objects are masked from 'package:dplyr':
##
## between, first, last
set.seed (123)
optimización <- clusGap(df,FUN=kmeans, nstart=1, K.max=10)
plot(optimización, xlab="Número de clusters k")
library(readr)
library("dplyr")
library(cluster)
rm(list = ls())
getwd()
## [1] "/Users/oscarcamilo/Documents/Tec MTY/ANALÍTICA PARA NEGOCIOS/RETO/ENCUESTAS"
# 1. Cargar el conjunto de datos
datos <- read.csv("/Users/oscarcamilo/Documents/Tec MTY/ANALÍTICA PARA NEGOCIOS/RETO/ENCUESTAS/EncuestasForm_BaseLimpia.csv")
datos_numericos <- datos[sapply(datos, is.numeric)]
# View(datos_numericos)
datos_escalados <- scale(datos_numericos)
# View(datos_escalados)
media <- apply(datos_escalados, 2, mean)
# View(media)
set.seed(123) # Para reproducibilidad
k <- 3 # Cambia este valor por el número de clusters que deseas
indices_centroides_iniciales <- sample(1:nrow(datos_escalados), k)
centroides_iniciales <- datos_escalados[indices_centroides_iniciales, ]
# Ejecutar k-means con los centroides iniciales
resultado_kmeans <- kmeans(datos_escalados, centers = centroides_iniciales)
print(resultado_kmeans)
## K-means clustering with 3 clusters of sizes 65, 16, 25
##
## Cluster means:
## Antiguedad Salario Prestaciones Jornada_Laboral Herramientas Temperatura
## 1 0.04581365 0.3626082 0.4480907 0.4960589 0.4534784 0.08958709
## 2 -0.25138960 -1.2012483 -0.9008792 -0.1771124 -1.4441653 0.14653768
## 3 0.04177386 -0.1739824 -0.5884731 -1.1764012 -0.2547780 -0.32671056
## Estrés Transporte Instalaciones Rotación Dependientes
## 1 0.1524490 0.3710519 0.3370262 0.36734886 0.006750785
## 2 -0.9779247 -0.2133885 -1.1244849 -1.39741185 0.207570080
## 3 0.2295043 -0.8281663 -0.1565978 -0.06076345 -0.150396891
##
## Clustering vector:
## [1] 1 1 2 1 3 1 3 1 3 1 3 1 1 1 1 1 1 1 2 2 1 3 3 3 1 3 1 3 1 1 1 2 2 1 1 3 2
## [38] 2 2 1 1 1 3 1 1 1 2 1 2 1 3 1 1 1 1 2 1 1 1 1 1 3 1 1 3 3 3 1 3 2 1 1 1 3
## [75] 2 2 2 3 2 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 3 3 3 3 1 1 1 1 3 1 1 1
##
## Within cluster sum of squares by cluster:
## [1] 432.3773 186.5323 250.2797
## (between_SS / total_SS = 24.7 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
set.seed(123) # Para reproducibilidad
wcss <- vector() # Inicializar vector para almacenar los valores de WCSS
max_k <- 10 # Puedes cambiar esto para probar con más clústeres si lo deseas
for (k in 1:max_k) {
kmeans_model <- kmeans(datos_escalados, centers = k, nstart = 25)
wcss[k] <- kmeans_model$tot.withinss
}
par(mar = c(4, 4, 1, 1)) # Los números representan los márgenes inferior, izquierdo, superior y derecho respectivamente.
plot(1:max_k, wcss, type = "b", xlab = "Numero de Clusters", ylab = "WCSS", main = "Metodo del Codo", pch = 19, frame = FALSE)
# Establecer una semilla para la reproducibilidad
set.seed(178)
kmeans_result <- kmeans(datos_escalados, centers = 4)
kmeans_result$centers
## Antiguedad Salario Prestaciones Jornada_Laboral Herramientas Temperatura
## 1 -0.1185418 -0.1440439 -0.3823495 0.1268462 -0.7164270 -0.09444148
## 2 -0.6944592 0.4815947 0.3192635 0.4023294 0.5718499 -0.17543788
## 3 1.3192318 0.2800853 0.6557833 0.2367746 0.6129511 0.46106872
## 4 -0.0896727 -1.2168413 -1.0350742 -1.3635885 -1.0612389 -0.10347417
## Estrés Transporte Instalaciones Rotación Dependientes
## 1 -0.915317228 0.4444735 -0.1565978 -0.1545633 0.03200666
## 2 0.596434303 -0.1252232 0.4587532 0.1709303 -0.14759068
## 3 -0.009000169 0.3251635 0.3249584 0.6218913 0.22657045
## 4 -0.009000169 -0.7795586 -1.2097463 -0.9848660 -0.02676782
datos1 <- datos
datos1$Cluster <- kmeans_result$cluster
contingency <- table(datos1$Cluster, datos$Genero)
# Convertir la tabla de contingencia a porcentajes
contingency <- prop.table(contingency, margin = 1) * 100
# Mostrar la tabla de contingencia
print(contingency)
##
## Femenino Masculino
## 1 64.00000 36.00000
## 2 71.79487 28.20513
## 3 62.50000 37.50000
## 4 55.55556 44.44444
contingency <- table(datos1$Cluster, datos$Escolaridad)
# Convertir la tabla de contingencia a porcentajes
contingency <- prop.table(contingency, margin = 1) * 100
# Mostrar la tabla de contingencia
print(contingency)
##
## Licenciatura Otro Preparatoria Primaria Secundaria
## 1 28.000000 4.000000 20.000000 4.000000 44.000000
## 2 23.076923 0.000000 25.641026 7.692308 43.589744
## 3 25.000000 8.333333 16.666667 12.500000 37.500000
## 4 11.111111 0.000000 44.444444 11.111111 33.333333
contingency <- table(datos1$Cluster, datos$Municipio)
# Convertir la tabla de contingencia a porcentajes
contingency <- prop.table(contingency, margin = 1) * 100
# Mostrar la tabla de contingencia
print(contingency)
##
## Apodaca Guadalupe Juárez Monterrey Otro Pesquería
## 1 92.000000 4.000000 4.000000 0.000000 0.000000 0.000000
## 2 69.230769 2.564103 17.948718 2.564103 2.564103 5.128205
## 3 62.500000 8.333333 4.166667 8.333333 12.500000 4.166667
## 4 66.666667 0.000000 16.666667 0.000000 11.111111 5.555556
contingency <- table(datos1$Cluster, datos$Estado.Civil)
# Convertir la tabla de contingencia a porcentajes
contingency <- prop.table(contingency, margin = 1) * 100
# Mostrar la tabla de contingencia
print(contingency)
##
## Casado Divorciado Soltero Unión libre
## 1 28.000000 0.000000 56.000000 16.000000
## 2 23.076923 2.564103 48.717949 25.641026
## 3 45.833333 0.000000 33.333333 20.833333
## 4 61.111111 0.000000 33.333333 5.555556
contingency <- table(datos1$Cluster, datos$Puesto)
# Convertir la tabla de contingencia a porcentajes
contingency <- prop.table(contingency, margin = 1) * 100
# Mostrar la tabla de contingencia
print(contingency)
##
## Administrativo Ayudante general Costurera Limpieza Mantenimiento Otro
## 1 24.000000 28.000000 12.000000 0.000000 0.000000 28.000000
## 2 12.820513 71.794872 0.000000 0.000000 0.000000 15.384615
## 3 16.666667 12.500000 12.500000 4.166667 0.000000 33.333333
## 4 11.111111 44.444444 5.555556 5.555556 5.555556 22.222222
##
## Soldador Supervisor
## 1 4.000000 4.000000
## 2 0.000000 0.000000
## 3 0.000000 20.833333
## 4 5.555556 0.000000
library(dplyr)
library(readr)
library(readr)
library(rpart)
library(rpart.plot)
bd <- read_csv("/Users/oscarcamilo/Documents/Tec MTY/ANALÍTICA PARA NEGOCIOS/RETO/ENCUESTAS/EncuestasForm_BaseLimpia.csv")
## Rows: 106 Columns: 22
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (11): Puesto, puesto_otro, Motivación, Conflicto/Acoso, Satisfacción en ...
## dbl (11): Antiguedad, Salario, Prestaciones, Jornada_Laboral, Herramientas, ...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# View(bd)
summary(bd)
## Puesto puesto_otro Antiguedad Motivación
## Length:106 Length:106 Min. : 1.00 Length:106
## Class :character Class :character 1st Qu.: 1.00 Class :character
## Mode :character Mode :character Median : 9.00 Mode :character
## Mean :14.08
## 3rd Qu.:34.50
## Max. :36.00
## Salario Prestaciones Jornada_Laboral Herramientas
## Min. :1.000 Min. :1.000 Min. :1.00 Min. :1.000
## 1st Qu.:3.000 1st Qu.:2.000 1st Qu.:4.00 1st Qu.:3.000
## Median :4.000 Median :4.000 Median :5.00 Median :5.000
## Mean :3.792 Mean :3.274 Mean :4.16 Mean :3.877
## 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.00 3rd Qu.:5.000
## Max. :5.000 Max. :5.000 Max. :5.00 Max. :5.000
## Temperatura Estrés Transporte Instalaciones
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:1.000 1st Qu.:3.000 1st Qu.:4.000 1st Qu.:4.000
## Median :3.000 Median :4.000 Median :5.000 Median :5.000
## Mean :3.123 Mean :3.679 Mean :4.009 Mean :4.311
## 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000 3rd Qu.:5.000
## Max. :5.000 Max. :5.000 Max. :5.000 Max. :5.000
## Rotación Conflicto/Acoso Satisfacción en el trabajo
## Min. :1.000 Length:106 Length:106
## 1st Qu.:3.000 Class :character Class :character
## Median :5.000 Mode :character Mode :character
## Mean :4.038
## 3rd Qu.:5.000
## Max. :5.000
## Emoción Edad Genero Estado Civil
## Length:106 Length:106 Length:106 Length:106
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## Municipio Escolaridad Dependientes
## Length:106 Length:106 Min. :0.000
## Class :character Class :character 1st Qu.:0.000
## Mode :character Mode :character Median :1.000
## Mean :1.085
## 3rd Qu.:2.000
## Max. :3.000
# Extraer las variables de interés
db <- bd[,c("Genero", "Estado Civil", "Edad", "Rotación", "Estrés", "Motivación", "Salario", "Prestaciones", "Puesto", "Temperatura", "Instalaciones")]
# ¿Cuántos NA tengo por variable?
sapply(db, function(x) sum(is.na(x)))
## Genero Estado Civil Edad Rotación Estrés
## 0 0 0 0 0
## Motivación Salario Prestaciones Puesto Temperatura
## 0 0 0 0 0
## Instalaciones
## 0
# Eliminar NA
db <- na.omit(db)
# Reducir db
#db2 <- db %>% sample_frac(0.2)
# Convertir las variables categóricas en factores
db$Genero <- as.factor(db$Genero)
db$`Estado Civil` <- as.factor(db$`Estado Civil`)
db$Motivación <- as.factor(db$Motivación)
db$Puesto <- as.factor(db$Puesto)
str(db)
## tibble [106 × 11] (S3: tbl_df/tbl/data.frame)
## $ Genero : Factor w/ 2 levels "Femenino","Masculino": 1 1 1 1 1 1 1 2 1 1 ...
## $ Estado Civil : Factor w/ 4 levels "Casado","Divorciado",..: 4 1 3 1 3 4 1 3 3 4 ...
## $ Edad : chr [1:106] "30" "54" "21" "20" ...
## $ Rotación : num [1:106] 4 5 1 4 3 5 3 5 5 5 ...
## $ Estrés : num [1:106] 5 2 1 5 3 4 5 4 4 5 ...
## $ Motivación : Factor w/ 6 levels "Ambiente de trabajo",..: 3 2 6 6 6 5 6 5 3 3 ...
## $ Salario : num [1:106] 5 4 2 5 3 4 2 5 4 5 ...
## $ Prestaciones : num [1:106] 4 4 1 4 1 5 3 4 1 4 ...
## $ Puesto : Factor w/ 8 levels "Administrativo",..: 1 3 2 2 2 2 2 1 3 2 ...
## $ Temperatura : num [1:106] 2 3 3 4 4 2 2 4 5 1 ...
## $ Instalaciones: num [1:106] 5 4 4 5 5 4 4 5 5 5 ...
arbol <- rpart(formula = Rotación ~ ., data=db)
arbol
## n= 106
##
## node), split, n, deviance, yval
## * denotes terminal node
##
## 1) root 106 171.849100 4.037736
## 2) Edad=18,20,21,22,24,26,27,28,35,38,40,43,55 45 89.911110 3.155556
## 4) Temperatura>=1.5 31 64.838710 2.806452
## 8) Motivación=Ambiente de trabajo,Otro,Ubicación de la empresa 21 32.666670 2.333333
## 16) Edad=21,22,26,38,43 9 4.000000 1.333333 *
## 17) Edad=20,24,27,28,35,40,55 12 12.916670 3.083333 *
## 9) Motivación=Por el salario,Razones personales 10 17.600000 3.800000 *
## 5) Temperatura< 1.5 14 12.928570 3.928571 *
## 3) Edad=23,25,29,30,30 años,31,33,34,36,37,39,41,42,44,45,46,47,48,49,50,51,53,54,56,58,61,68 61 21.081970 4.688525
## 6) Edad=25,30,37,41,46,53 17 10.470590 4.176471 *
## 7) Edad=23,29,30 años,31,33,34,36,39,42,44,45,47,48,49,50,51,54,56,58,61,68 44 4.431818 4.886364 *
rpart.plot(arbol)
arbol <- rpart(formula = Rotación ~ ., data=db)
arbol
## n= 106
##
## node), split, n, deviance, yval
## * denotes terminal node
##
## 1) root 106 171.849100 4.037736
## 2) Edad=18,20,21,22,24,26,27,28,35,38,40,43,55 45 89.911110 3.155556
## 4) Temperatura>=1.5 31 64.838710 2.806452
## 8) Motivación=Ambiente de trabajo,Otro,Ubicación de la empresa 21 32.666670 2.333333
## 16) Edad=21,22,26,38,43 9 4.000000 1.333333 *
## 17) Edad=20,24,27,28,35,40,55 12 12.916670 3.083333 *
## 9) Motivación=Por el salario,Razones personales 10 17.600000 3.800000 *
## 5) Temperatura< 1.5 14 12.928570 3.928571 *
## 3) Edad=23,25,29,30,30 años,31,33,34,36,37,39,41,42,44,45,46,47,48,49,50,51,53,54,56,58,61,68 61 21.081970 4.688525
## 6) Edad=25,30,37,41,46,53 17 10.470590 4.176471 *
## 7) Edad=23,29,30 años,31,33,34,36,39,42,44,45,47,48,49,50,51,54,56,58,61,68 44 4.431818 4.886364 *
rpart.plot(
arbol,
fallen.leaves = TRUE,
type = 2,
extra = 100,
under = TRUE
)