# 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.