1.Instalar Paquetes
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## [1] "C:/Users/luisa/Documents/POWER BI"
2.Cargar el conjunto de datos
# 1. Cargar el conjunto de datos
datos <- read.csv("C:\\Users\\luisa\\Documents\\R LUISA\\MODULO 5\\EncuestasForm_BaseLimpia.csv")
View(datos)
3.Seleccionar solo las variables numéricas
4.Escalar las variables numéricas
5.Calcular las medianas de las variables numéricas escaladas
6.clusters que deseas
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, ]
6.clusters que deseas
# 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"
7.Ajustar el modelo k-means para diferentes valores de k
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
}
8.Gráficar el método de codo
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)
9.Realizar K-means con 4 clusters
## 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
10.Añadir la columna de clusters al dataframe original
11.Tabla de contingencia
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
12.Tabla de contingencia
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
13.Tabla de contingencia
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
14.Tabla de contingencia
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
15.Tabla de contingencia
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