# descargamos las librearías que vamos a utilizar
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.0 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(cowplot)
##
## Attaching package: 'cowplot'
##
## The following object is masked from 'package:lubridate':
##
## stamp
library(ggpubr)
##
## Attaching package: 'ggpubr'
##
## The following object is masked from 'package:cowplot':
##
## get_legend
library(cluster)
library(purrr)
library(dplyr)
library(readxl)
# Cargamos la base de datos y le pusimois el nombre de Base1.
Base1 <- read.csv("/Users/jenaromtzg/Desktop/conjunto_de_datos_ilmm_2021_1t2.csv")
Diccionario de Datos
# Esta base es de indicadores laborales para los municipios de México
# Col 1 - ent - Entidad federativa - rango : [0-32]
# Col 2 - mun - Municipio - rango : [0-57]
# Col 3 - est - Estimador - rango : [1-5]
# Col 4 - pea - Población económicamente activa (Porcentaje respecto a la población de 15 años y más) - rango : [00.001-100.00]
# Col 5 - ocupados - Población ocupada (Porcentaje respecto a la población económicamente activa) - rango : [00.001-100.00]
# Col 6 - informales - Población ocupada informal (Porcentaje respecto a la población ocupada) - rango : [00.001-100.00]
# Ahora modificamos la base de datos con la funcion de scale para poder hacer un dendograma en donde visualicemos los datos de manera mas concisa
Basest <- scale(Base1, center = TRUE, scale = TRUE)
head(Base1)
## ent mun est pea ocupados informales empleo
## 1 0 0 1 57.133 95.645 55.066 1
## 2 0 0 2 0.199 0.104 0.343 1
## 3 0 0 3 56.806 95.474 54.502 1
## 4 0 0 4 57.459 95.817 55.630 0
## 5 0 0 5 0.347 0.109 0.622 1
## 6 1 0 1 57.822 96.378 38.690 0
# Creamos el dendograma con la funcion de dist utilizando la base de datos que creamos usando el scale
basestdist <- dist(Basest, method = "euclidian")
plot(hclust(basestdist, method = "complete"))

# Modificamos el dendograma con hclust para poder tener una visualización mas ordenada
plot(hclust(basestdist, method = "complete"),labels = Base1$mun,
xlab = "",
ylab = "",
cex =0.3,
main = "method complete"
)

## Despues de realizar los dendogramas podemos claramente ver que no es la manera optima para representar los datos. Esto es porque son más de 12,000 datos y es muy pesado poder etiquetar a todos. Lo que haremos ahora es crear otras gráficas utilizando konect plots para una mejor visualización más ordenada.
# Utiliazmos kmeans para poder encontrar el centro y dónde empieza
konect <- kmeans(x = Base1,centers = 4, nstart = 20)
library(FactoMineR)
konectplot = PCA(X = Base1, scale.unit = TRUE, ncp = 64, graph = FALSE)
# Aquí llevamos a cabo una grafica con ggplot para poder nosotros analizar y seleccionar cuanros clusters queremos visualizar.
library(ggplot2)
# Crear un vector para almacenar las sumas de cuadrados
wss <- vector("numeric", length = 10) # Suponiendo un máximo de 10 clusters
# Calcular la suma de cuadrados para diferentes números de clusters
for (i in 1:10) {
kmeans_model <- kmeans(Base1, centers = i, nstart = 10)
wss[i] <- kmeans_model$tot.withinss # Almacenar la suma de cuadrados
}
# Crear un gráfico de líneas para visualizar la suma de cuadrados en función del número de clusters
ggplot(data = NULL, aes(x = 1:10, y = wss)) +
geom_line(color = "blue") +
geom_point(color = "red") +
labs(x = "Número de Clusters", y = "Suma de Cuadrados Dentro de los Clusters (WSS)")

# Aquí utilizamos konectplot para poder hacer la gráfica con el plot adecuado para una mejor representación. Aqñi podemos ver el arranque de la gráfica con los datos de Base1.
library(factoextra)
fviz_pca_ind(konectplot, geom.ind = "point",
col.ind = as.factor(konect$cluster),
axes =c(1,2),
pointsize = 2
)

# Al observar el gráfico Konect, se evidencia una marcada división en los datos visualizados, con la identificación de las cuatro columnas en sus divisiones distintas en nuestra representación gráfica. Podemos ver cada columna _(cada variable) representada con una digura y color diferente y como cada una esta en un cuadrante diferente.
# Cluster 1 : Personas que son parte de la población económicamente activa sin empleo
# Cluster 2 : Personas que no parte de la población economicamente con empleo
# CLuster 3 : Personas que son son partes de la población economicamente activa con empleo
# Cluster 4 : Personas que no son parte de la poblacioón economicamente activa sin empleo