library(tidyverse)
library(cluster)
library(factoextra)
library(readr)
library(ggrepel)
serv_municipales <- read_csv("C:/Users/MINEDUCYT/Downloads/serv_municipales.RData")
# 1. Ajustando la ruta al archivo .RData
ruta <- "C:/Users/MINEDUCYT/Downloads/serv_municipales.RData"
# 2. Cargar el archivo
load(ruta)
# 3. Ver los objetos cargados
ls()
## [1] "ruta" "serv_municipales"
# 4. Identificando qué objeto(s) son data.frames
objs <- ls()
is_df <- sapply(objs, function(x) inherits(get(x), "data.frame"))
objs[is_df] # mostrará los nombres de los data.frames dentro del RData
## [1] "serv_municipales"
# 5. Suponiendo que el primer data.frame es el que quiero (ajustando si hay >1)
df_name <- objs[is_df][1]
df <- get(df_name)
# 6. Ver las primeras filas y nombres de columna
head(df)
## # A tibble: 6 × 8
## ID Municipio x1 x2 x3 x4 x5 x6
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 ATIQUIZAYA 79.4 80 87.5 67.5 67.5 47.5
## 2 2 EL CARMEN 75 78.1 71.9 68.8 68.8 37.5
## 3 3 ALEGRIA 71.9 78.9 89.5 82.5 82.5 50.9
## 4 4 SAN JULIAN 70.6 68.7 76.2 57.5 57.5 48.8
## 5 5 TEJUTLA 61.8 82.4 76.5 76.5 76.5 41.2
## 6 6 PASAQUINA 64.4 82.7 76.9 80.8 80.8 48.1
names(df)
## [1] "ID" "Municipio" "x1" "x2" "x3" "x4"
## [7] "x5" "x6"
# 7. Guardando como CSV
write.csv(df, "serv_municipales.csv", row.names = FALSE)
cat("CSV guardado como 'serv_municipales.csv'\n")
## CSV guardado como 'serv_municipales.csv'
df <- read.csv("serv_municipales.csv")
# Ver estructura
glimpse(df)
## Rows: 108
## Columns: 8
## $ ID <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 1…
## $ Municipio <chr> "ATIQUIZAYA", "EL CARMEN", "ALEGRIA", "SAN JULIAN", "TEJUTLA…
## $ x1 <dbl> 79.37500, 75.00000, 71.92982, 70.62500, 61.76471, 64.42308, …
## $ x2 <dbl> 80.00000, 78.12500, 78.94737, 68.75000, 82.35294, 82.69231, …
## $ x3 <dbl> 87.50000, 71.87500, 89.47368, 76.25000, 76.47059, 76.92308, …
## $ x4 <dbl> 67.50000, 68.75000, 82.45614, 57.50000, 76.47059, 80.76923, …
## $ x5 <dbl> 67.50000, 68.75000, 82.45614, 57.50000, 76.47059, 80.76923, …
## $ x6 <dbl> 47.50000, 37.50000, 50.87719, 48.75000, 41.17647, 48.07692, …
df <- serv_municipales
head(df)
## # A tibble: 6 × 8
## ID Municipio x1 x2 x3 x4 x5 x6
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 ATIQUIZAYA 79.4 80 87.5 67.5 67.5 47.5
## 2 2 EL CARMEN 75 78.1 71.9 68.8 68.8 37.5
## 3 3 ALEGRIA 71.9 78.9 89.5 82.5 82.5 50.9
## 4 4 SAN JULIAN 70.6 68.7 76.2 57.5 57.5 48.8
## 5 5 TEJUTLA 61.8 82.4 76.5 76.5 76.5 41.2
## 6 6 PASAQUINA 64.4 82.7 76.9 80.8 80.8 48.1
names(df)
## [1] "ID" "Municipio" "x1" "x2" "x3" "x4"
## [7] "x5" "x6"
X <- df %>% select(x1, x2, x3, x4, x5, x6)
X_scaled <- scale(X)
fviz_nbclust(X_scaled, kmeans, method = "wss") +
ggtitle("Método del Codo (Elbow)")
fviz_nbclust(X_scaled, kmeans, method = "silhouette") +
ggtitle("Método del Índice Silhouette")
set.seed(123)
k_opt <- 3
kmeans_model <- kmeans(X_scaled, centers = k_opt, nstart = 25)
df$cluster <- factor(kmeans_model$cluster)
pca <- prcomp(X_scaled)
pca_coords <- data.frame(
PC1 = pca$x[,1],
PC2 = pca$x[,2],
Municipio = df$Municipio,
cluster = df$cluster
)
ggplot(pca_coords, aes(PC1, PC2, color = cluster, label = Municipio)) +
geom_point(size = 3) +
geom_text_repel(size = 3) +
theme_minimal() +
ggtitle("Grupos de Municipios usando PCA (2D)") +
labs(color = "Cluster")
df %>%
group_by(cluster) %>%
summarise(across(x1:x6, mean))
## # A tibble: 3 × 7
## cluster x1 x2 x3 x4 x5 x6
## <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 42.4 60.8 57.7 46.9 46.9 25.9
## 2 2 56.9 77.5 71.6 66.7 66.7 40.5
## 3 3 23.4 45.8 40.9 23.3 23.3 16.6
Este grupo presenta valores relativamente altos en las variables x1, x2, x3 y x4, lo que indica que estos municipios cuentan con servicios municipales fuertes (por ejemplo: recolección de desechos, barrido, aseo, agua, electricidad, etc., según lo que represente cada variable).
Además, muestra un valor bajo en x5, lo cual sugiere pocas lámparas dañadas, es decir, mejor mantenimiento de iluminación pública.
También presenta un nivel adecuado de control o regulación del comercio informal (según lo que mida x6).
Conclusión: Municipios con buen nivel general de servicios, ordenados y con baja presencia de problemas visibles.
Los valores de este grupo son los más bajos en la mayoría de variables relacionadas con servicios municipales (x1–x4), indicando deficiencias importantes.
Sin embargo, presenta un valor alto en x5, lo cual señala muchas lámparas dañadas o deterioro significativo en el alumbrado público, reforzando la idea de infraestructura insuficiente.
Conclusión: Municipios con mal desempeño general, infraestructura descuidada y problemas visibles en iluminación pública.
Este grupo presenta valores moderados en casi todas las variables. No destacan por un alto desempeño, pero tampoco muestran las deficiencias severas del Cluster 2.
Sus niveles de servicios parecen variables: algunos indicadores se mantienen aceptables, mientras que otros son más bajos, mostrando desempeño desigual.
Conclusión: Municipios con servicios municipales mixtos, ni muy buenos ni muy malos, con espacio para mejorar.