# Cargar librerías necesarias
library(cluster)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(rio)
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.4.2
## Cargando paquete requerido: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
# Cargar la base de datos
data=import("dataOK_all.xlsx")
## New names:
## • `` -> `...1`
# Calcular la razón de votación de Keiko entre Castillo
data <- data %>%
mutate(razon_votacion = Keiko / Castillo)
# Verificar el cálculo
head(data$razon_votacion)
## [1] 0.4202271 0.6220444 0.6683045 0.1099285 0.6219261 0.6892180
# Seleccionar variables de interés
data_clean <- data %>%
filter(provincia != "Lima") %>% # Excluir la provincia de Lima
select(agua1_Red, razon_votacion, covidFallecidos) %>%
na.omit() # Eliminar filas con valores faltantes
# Normalizar las variables
data_scaled <- scale(data_clean)
# Calcular distancias euclidianas
dist_matrix <- dist(data_scaled)
# Clustering jerárquico aglomerativo
hclust_agg <- hclust(dist_matrix, method = "ward.D2")
# Dibujar el dendrograma
plot(hclust_agg, main = "Dendrograma - Jerárquico Aglomerativo", xlab = "", sub = "")

# Cortar el dendrograma para obtener k grupos (asumamos 4 grupos)
clusters_agg <- cutree(hclust_agg, k = 4)
# Añadir los grupos al dataset original
data_clean$cluster_agg <- clusters_agg
# Clustering jerárquico divisivo
diana_clust <- diana(data_scaled)
# Dibujar el dendrograma
plot(diana_clust, main = "Dendrograma - Jerárquico Divisivo", xlab = "", sub = "")


# Cortar el dendrograma para obtener k grupos
clusters_div <- cutree(as.hclust(diana_clust), k = 4)
# Añadir los grupos al dataset original
data_clean$cluster_div <- clusters_div
# Clustering k-means
set.seed(123) # Para reproducibilidad
kmeans_clust <- kmeans(data_scaled, centers = 4, nstart = 25)
# Añadir los grupos al dataset original
data_clean$cluster_kmeans <- kmeans_clust$cluster
# Índice de Silueta para cada técnica
sil_agg <- silhouette(clusters_agg, dist_matrix)
sil_div <- silhouette(clusters_div, dist_matrix)
sil_kmeans <- silhouette(kmeans_clust$cluster, dist_matrix)
# Visualización de índices de silueta
fviz_silhouette(sil_agg, main = "Silueta - Jerárquico Aglomerativo")
## cluster size ave.sil.width
## 1 1 151 0.63
## 2 2 36 0.46
## 3 3 8 0.53
## 4 4 1 0.00

fviz_silhouette(sil_div, main = "Silueta - Jerárquico Divisivo")
## cluster size ave.sil.width
## 1 1 153 0.62
## 2 2 35 0.50
## 3 3 7 0.61
## 4 4 1 0.00

fviz_silhouette(sil_kmeans, main = "Silueta - K-means")
## cluster size ave.sil.width
## 1 1 1 0.00
## 2 2 62 0.45
## 3 3 13 0.32
## 4 4 120 0.68
