Analítica de datos aplicada a estudios sobre desarrollo

Introducción a las técnicas multivariantes no supervisadas

Proceso de analítica

Wickham, H. y otros (2023)

MÉTODOS MULTIVARIANTES

Modelos de analítica

ANÁLISIS DE CONGLOMERADOS

Análisis clúster

Métodos para realizar la agrupación de individuos con base en la similaridad que tienen en un vector de variables \(\mathbf{x}'=(x_1, \ldots, x_p)\).

Qué es el análisis de clúster

Es una técnica para combinar observaciones en grupos o clúster de forma que:

  1. Cada grupo o clúster sea lo más homogéneo con respecto a las características de análisis. Es decir las observaciones dentro de cada grupo deben ser similares.

  2. Cada grupo debe diferenciarse de los otros grupos respecto a las características que se midieron.

Tipos de Análisis de clúster

  1. Jerárquicos: Consisten en agrupar los individuos o grupos más similares a partir de algún criterio de aglomeración.

  2. No jerárquicos: Consiste en dividir el conjunto de objetos o individuos en un número de grupos prefijado y aplicar un algoritmo para obtener las agrupaciones.

Métodos no jerárquicos

Algoritmo de las \(K\)-medias

Forgy (1965)

Algoritmo de las \(K\)-medias

Forgy (1965)

Algoritmo de las \(K\)-medias

Forgy (1965)

Algoritmo de las \(K\)-medias

Forgy (1965)

Algoritmo de las \(K\)-medias

Forgy (1965)

Algoritmo de las \(K\)-medias

Forgy (1965)

Algoritmo de las \(K\)-medias

Forgy (1965)

Algoritmo de las \(K\)-medias

Forgy (1965)

Algoritmo de las \(K\)-medias

Forgy (1965)

Comparación de algoritmos

Simulación

Ingrese a la siguiente página Naftali



  • Seleccione los centros aleatoriamente y use una distribución uniforme, normal y alguna otra. Haga \(k=3\) y realice la simulación del clúster.

  • Seleccione los centros manualmente y use una distribución uniforme, normal y alguna otra. Haga \(k=3\) y realice la simulación del clúster.

Algoritmos alternativos

Simulación DBSCAN

Ingrese a la siguiente página Naftali

  • Simule un proceso de DBSCAN

Métodos jerárquicos

Algoritmo para los métodos de aglomeración

  1. Comenzar con tantas clases como elementos o individuos se tenga. Las distancias entre clases son las distancias entre elementos originales.

  2. Seleccionar los dos elementos más próximos en la matriz de distancias y formar con ellos un grupo.

  3. Sustituir los dos elementos utilizados en (2) para definir el grupo en (2), por un nuevo elemento que la represente.

  4. Volver a (2) y repetir (2) y (3) hasta que tengamos todos los elementos queden agrupados en un solo grupo.

EJEMPLOS

Consumo de proteinas

Considere el conjunto de datos del taller sobre el consumo de proteínas en algunos países de Europa. Realice un análisis clúster a partir de:

  1. Un algoritmo de \(K\)-medias para agrupar a los países en 3 grupos.
  2. Un algoritmo de aglomeración jerárquica. Defina el número de grupos apropiado.

Paso 1: Importar el conjunto de datos

options(scipen = 999)
library(pacman)

p_load(tidyverse, janitor, haven,
       FactoMineR, factoextra, cluster)

url <- "https://github.com/jgbabativam/AnaDatos/raw/main/datos/PaisesProteinas.sav"

datos <- read_sav(url)

Paso 2: Preparar los datos

En el algoritmo de las \(K\)-medias es indispensable que las variables de análisis sea de tipo cuantitativo. Además, las variables son estandarizadas para evitar el efecto de la escala, de manera que:

\[z_{i} =\frac{x_i - \bar{x}_i}{s_i}, i=1,\ldots, p \]

datos <- datos |> 
         column_to_rownames(var = "Pais") |> 
         scale()

Algoritmo de \(K\)-medias

Paso 3: Aplicar el algoritmo

set.seed(26052013)

res <- kmeans(datos, centers = 3)

datos.clus <- data.frame(datos, cluster = res$cluster)

Paso 4: Visualización

fviz_cluster(res, data = datos,
             palette = c("#2E9FDF", "#00AFBB", "#E7B800"), 
             geom = "point",
             ellipse.type = "convex", 
             main = "Cluster de países",
             ggtheme = theme_bw()
             )

Paso 5: Validación

El gráfico de silueta es una herramienta útil para evaluar la calidad de las agrupaciones resultantes del algoritmo k-medias. Se debe revisar:

  1. Barra alta: Si un punto de datos tiene una barra alta en el gráfico de silueta, significa que está bien asignado al grupo y está lejos de los puntos de otros grupos, esto indica una buena calidad del agrupamiento.

  2. Valor medio de silueta: El valor medio de la silueta es la medida agregada de la calidad del método de clúster, en general se espera que esté en el rango de -1 a 1.

Paso 5: Validación

g1 <- silhouette(res$cluster, dist(datos))
fviz_silhouette(g1)
  cluster size ave.sil.width
1       1   15          0.38
2       2    4          0.21
3       3    6          0.31

Paso 6: Interpretación

datos.clus |> 
  group_by(cluster) |> 
  summarise(across(where(is.numeric), ~mean(., na.rm=T)))
# A tibble: 3 × 10
  cluster CarneRoja CarneBlanca Huevsos  Leche Pescado Cereales Féculas
    <int>     <dbl>       <dbl>   <dbl>  <dbl>   <dbl>    <dbl>   <dbl>
1       1     0.452       0.506   0.576  0.584   0.118   -0.610   0.353
2       2    -0.509      -1.11   -0.412 -0.832   0.982    0.130  -0.184
3       3    -0.790      -0.527  -1.17  -0.905  -0.950    1.44   -0.760
# ℹ 2 more variables: Frutossecos <dbl>, Frutosyvegetales <dbl>

Algoritmo de jerárquico de Ward

Paso 3: Aplicar PCA

res.pca <- PCA(datos, graph = F)
fviz_pca_var(res.pca,
             col.var="contrib",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel = TRUE)

Paso 3: Aplicar PCA

fviz_pca_ind(res.pca, col.ind = "cos2",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
             repel = TRUE)

Paso 4: Aplicar clúster jerárquico

Defina primero el número de clúster que se debería usar basado en el criterio de los índices de nivel o inercia iterclases.


res.clus <- HCPC(res.pca)


res.clus <- HCPC(res.pca, nb.clust = 5, graph = FALSE)

Paso 5: Visualización del dendrograma

fviz_dend(res.clus, 
          cex = 0.7,                     
          palette = "jco",               
          rect = TRUE, rect_fill = TRUE, 
          horiz = TRUE,
          rect_border = "jco",           
          labels_track_height = 0.8,
          main = "Cluster de paises"
          )

Paso 5: Visualización del plano de países

fviz_cluster(res.clus,
             repel = TRUE,
             show.clust.cent = TRUE, 
             palette = "jco",         
             ggtheme = theme_minimal(),
             main = "Clúster de países"
             )
# Puede usar el comando `res.clus$desc.var$quanti` para analizar la caracterización de cada clúster.

Ejemplo Electoral

Considere los datos artificiales Bogota.sav que simulan el resultado de la percepción de 350 encuestados. El ejercicio consiste en que a cada encuestado se le da una tarjeta con los nombres de los candidatos, posteriormente se leen algunas frases o se le mencionan algunas cualidades y deberá asociarlo con el candidato que considere que mejor la cumple.

Realice un análisis de correspondencias y posteriormente un análisis clúster para concluir sobre el perfil de los candidatos.

Paso 1: Importar el conjunto de datos

library(pacman)

p_load(tidyverse, janitor, haven, readxl,
       FactoMineR, factoextra, cluster)

url <- "https://github.com/jgbabativam/AnaDatos/raw/main/datos/caPolitico.sav"

datos <- read_sav(url)

Paso 2: Preparar los datos

datos <- datos |> 
         column_to_rownames(var = "atributo") 

Paso 3: Análisis de correspondencias

res.ac <- CA(t(datos), graph = F)

fviz_ca_biplot(res.ac, 
               col.row="blue", 
               col.col = "red",
               repel = TRUE) +
       theme_minimal()

Paso 4: Clasificación de candidatos

Defina primero el número de clúster que se debería usar basado en el criterio de los índices de nivel o inercia iterclases.


res.clus <- HCPC(res.ac)


res.clus <- HCPC(res.ac, nb.clust = 5, graph = FALSE)

Paso 5: Visualización del dendrograma

fviz_dend(res.clus, 
          cex = 0.7,  palette = "jco",               
          rect = TRUE, rect_fill = TRUE, horiz = TRUE,
          rect_border = "jco", labels_track_height = 0.8,
          main = "Cluster de candidatos"
          )
#Puede usar el comando `res.clus$desc.var` y `res.clus$desc.ind` para analizar la caracterización de cada clúster.

GRACIAS!

Referencias

  • Husson, F., Lê, S., & Pagès, J. (2017). Exploratory multivariate analysis by example using R. CRC press.

  • Hair, J. F., Black, W. C., Babin, B. J., Anderson, R. E., & Tatham, R. L. (2006). Multivariate data analysis 6th Edition. https://doi.org/10.1201/9780367409913

  • Aldás Manzano, J., & Uriel Jiménez, E. (2017). Análisis multivariante aplicado con R. Ediciones Paraninfo, SA.