# Instalar y cargar librerías necesarias
if (!require("readxl")) install.packages("readxl")
## Cargando paquete requerido: readxl
## Warning: package 'readxl' was built under R version 4.4.2
if (!require("cluster")) install.packages("cluster")
## Cargando paquete requerido: cluster
## Warning: package 'cluster' was built under R version 4.4.2
if (!require("dplyr")) install.packages("dplyr")
## Cargando paquete requerido: dplyr
## Warning: package 'dplyr' was built under R version 4.4.2
## 
## 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
if (!require("factoextra")) install.packages("factoextra")
## Cargando paquete requerido: factoextra
## Warning: package 'factoextra' was built under R version 4.4.2
## Cargando paquete requerido: ggplot2
## Warning: package 'ggplot2' was built under R version 4.4.2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(readxl)
library(cluster)
library(dplyr)
library(factoextra)

# Leer el archivo Excel
file_path <- "C:/Users/Leonardo/Downloads/dataOK_all.xlsx"
data <- read_excel(file_path)
## New names:
## • `` -> `...1`
# Filtrar datos excluyendo la provincia de Lima
data_filtered <- data %>% filter(provincia != "Lima")

# Calcular las métricas requeridas
data_filtered <- data_filtered %>%
  mutate(
    porcentaje_agua_red = (agua1_Red / agua10_Total) * 100,
    razon_keiko_castillo = Keiko / Castillo,
    tasa_fallecidos = (covidFallecidos / covidPositivos) * 1000
  )

# Seleccionar solo las columnas relevantes
data_metrics <- data_filtered %>%
  select(provincia, porcentaje_agua_red, razon_keiko_castillo, tasa_fallecidos)

# Normalizar las variables
data_normalized <- data_metrics %>%
  select(-provincia) %>%
  scale()

# Aplicar técnicas de agrupamiento
# 1. Jerárquico Aglomerativo
hclust_agg <- hclust(dist(data_normalized), method = "ward.D2")
clusters_agg <- cutree(hclust_agg, k = 4) # Suponiendo 4 clusters

# 2. Jerárquico Divisivo
diana_clustering <- diana(data_normalized)
clusters_div <- cutree(as.hclust(diana_clustering), k = 4)

# 3. Particional (K-means)
set.seed(123) # Para reproducibilidad
kmeans_clustering <- kmeans(data_normalized, centers = 4, nstart = 25)

# Evaluar cantidad de provincias mal clasificadas entre las técnicas
comparison <- table(
  Aglomerativo = clusters_agg,
  Divisivo = clusters_div
)

# Comparar resultados
cat("Comparación entre técnicas jerárquicas aglomerativa y divisiva:\n")
## Comparación entre técnicas jerárquicas aglomerativa y divisiva:
print(comparison)
##             Divisivo
## Aglomerativo   1   2   3   4
##            1 115   1   0   0
##            2  27   5   0   0
##            3  27   0  14   0
##            4   0   6   0   1
# Visualizar resultados de k-means
fviz_cluster(kmeans_clustering, data = data_normalized)

# Identificar cuál técnica es mejor
cat("\nClasificación usando técnicas de partición y jerárquicas completada.\n")
## 
## Clasificación usando técnicas de partición y jerárquicas completada.