El clustering es uno de los métodos de minería de datos más importantes para descubrir el conocimiento en conjuntos de datos multivariados. El objetivo es identificar grupos (es decir, grupos) de objetos similares dentro de un conjunto de datos de interés.

El análisis de clústeres es un poderoso conjunto de herramientas en el banco de trabajo de ciencias de la información. Se utiliza para encontrar grupos de observaciones (clusters) que comparten características similares. Estas similitudes pueden informar todo tipo de decisiones empresariales; por ejemplo, en el marketing, se utiliza para identificar los distintos grupos de clientes para los que se puede adaptar la publicidad. En esta seccion nos enfocaremos en dos métodos de agrupación comúnmente usados - agrupación jerárquica y agrupación por k-medias.

Las técnicas de clasificación automática están destinadas a producir agrupamientos de filas o de columnas de una tabla.

0.1 Jerarquico

El algoritmo no produce una partición en q clases de un conjunto de n objetos sino que produce una jerarquía de particiones, se presentan bajo la forma de árboles llamados también dendrogramas y contienen n-1 particiones. El interés de estos árboles es que ellos pueden dar una idea del número de clases existentes efectivamente en la población.

El principio del algoritmo consiste en crear, en cada etapa, una partición obtenida mediante agregación dos a dos de los elementos más próximos. Se tomará como elemento tanto los individuos u objetos a clasificar como los agrupamientos de individuos generados por el algoritmo. Hay diferentes maneras de considerar la nueva pareja de elementos agregados, dando un número importante de variantes de esta técnica. Dentro de las medidas de agregación de individuos se encuentran:

  • Complete or Maximum: Se calcula la distancia entre todos los posibles pares formados por una observación del cluster A y una del cluster B. La mayor de todas ellas se selecciona como la distancia entre los dos clusters. Se trata de la medida más conservadora (maximal intercluster dissimilarity).

  • Single or Minimum: Se calcula la distancia entre todos los posibles pares formados por una observación del cluster A y una del cluster B. La menor de todas ellas se selecciona como la distancia entre los dos clusters. Se trata de la medida menos conservadora (minimal intercluster dissimilarity).

  • Average: Se calcula la distancia entre todos los posibles pares formados por una observación del cluster A y una del cluster B. El valor promedio de todas ellas se selecciona como la distancia entre los dos clusters (mean intercluster dissimilarity).

  • Centroid: Se calcula el centroide de cada uno de los clusters y se selecciona la distancia entre ellos como la distancia entre los dos clusters.

  • Ward: Hacer variar lo menos posible la inercia intra-clases en cada etapa de agregación es buscar el mínimo de pérdida de inercia inter-clases resultante de la agregación de dos elementos. Así en cada etapa la inercia intra-clases aumenta en la cantidad Δ (y la inercia inter-clases disminuye en esta misma cantidad).

0.1.1 Ejemplo

# Se calculan las distancias
matriz_distancias <- dist(x = datos[, c("x", "y")], method = "euclidean")
set.seed(567)
hc_euclidea_completo <- hclust(d = matriz_distancias, method = "complete")
hc_euclidea_single   <- hclust(d = matriz_distancias, method = "single")
hc_euclidea_average  <- hclust(d = matriz_distancias, method = "average")
hc_euclidea_ward  <- hclust(d = matriz_distancias, method = "ward.D")
par(mfrow = c(4,1))
plot(x = hc_euclidea_completo, cex = 0.6, xlab = "", ylab = "", sub = "",
     main = "Distancia euclídea, Linkage complete")
plot(x = hc_euclidea_single, cex = 0.6, xlab = "", ylab = "", sub = "",
     main = "Distancia euclídea, Linkage single")
plot(x = hc_euclidea_average, cex = 0.6, xlab = "", ylab = "", sub = "",
     main = "Distancia euclídea, Linkage average")
plot(x = hc_euclidea_ward, cex = 0.6, xlab = "", ylab = "", sub = "",
     main = "Distancia euclídea, Linkage Ward")

table(cutree(hc_euclidea_single, k = 4),cutree(hc_euclidea_ward, k = 4))
##    
##      1  2  3  4
##   1 30  0  0  0
##   2  0 31  0 21
##   3  0  0 17  0
##   4  0  1  0  0
library(corrplot)
## corrplot 0.84 loaded
m<-table(datos[, "grupo"],cutree(hc_euclidea_ward, k = 4))

# corrplot(m,is.corr = FALSE,col=col)
col<- colorRampPalette(c("red", "white", "blue"))(4)

corrplot(m, method="number", is.corr = FALSE,col=col)

0.1.2 Ventajas y desventajas

  • La principal ventaja del método jerarquico es que insinua el número de cluster
  • Una vez que un elemento se agrega a un grupo, no puede pertenecer a otro, a esto se le conoce como anidamiento, el principal problema es que puede que dicha asignación no sea ideal.

0.2 K-Means

https://educlust.dbvis.de/#

El método K-means clustering (MacQueen, 1967) agrupa las observaciones en K clusters, donde el número K lo determina el analista antes de ejecutar del algoritmo. K-means clustering encuentra los K mejores clusters, entendiendo como mejor cluster aquel cuya varianza interna (intra-cluster variation) sea lo más pequeña posible. Se trata por lo tanto de un problema de optimización, en el que se reparten las observaciones en K clusters de forma que la suma de las varianzas internas de todos ellos sea lo menor posible. Para poder solucionar este problema es necesario definir un modo de cuantificar la varianza interna.

  • Toda observación pertenece al menos a uno de los K clusters.

  • Los clusters no solapan, ninguna observación pertenece a más de un cluster a la vez.

En otras palabras, es una partición de los datos.

0.2.0.1 Ejemplo

set.seed(101)
km_clusters <- kmeans(x = datos[, c("x", "y")], centers = 4, nstart = 50)
km_clusters
## K-means clustering with 4 clusters of sizes 17, 21, 30, 32
## 
## Cluster means:
##            x          y
## 1 -0.6148368  4.8861032
## 2 -3.1068542  1.1213302
## 3  1.7226318 -0.2584919
## 4 -5.5818142  3.3684991
## 
## Clustering vector:
##   [1] 3 4 4 1 2 2 1 4 3 4 3 2 2 4 2 2 3 4 4 3 3 4 2 4 2 2 3 3 4 2 2 1 4 2 4
##  [36] 4 2 3 3 4 3 3 4 4 2 4 2 4 1 3 2 3 3 1 4 4 3 3 4 3 2 3 4 1 3 1 4 1 1 3
##  [71] 3 1 4 3 4 1 1 3 3 2 3 1 1 4 4 3 4 4 2 3 4 3 1 1 1 3 4 4 2 2
## 
## Within cluster sum of squares by cluster:
## [1] 21.04952 30.82790 54.48008 71.98228
##  (between_SS / total_SS =  87.6 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"    
## [5] "tot.withinss" "betweenss"    "size"         "iter"        
## [9] "ifault"

El objeto devuelto por la función kmeans() contiene entre otros datos: la media de cada una de las variables para cada cluster (centers), un vector indicando a que cluster se ha asignado cada observación (cluster), la suma de cuadrados interna de cada cluster (withinss) y la suma total de cuadrados internos de todos los clusters (tot.withinss). Al imprimir el resultado también se muestra y el ratio de la suma de cuadrados entre-clusters y la suma de cuadrados totales.

En la siguiente gráfica se representa el número de cluster al que se ha asignado cada observación y se muestra con un código de color el grupo real al que pertenece.

datos <- datos %>% mutate(cluster = km_clusters$cluster)
datos <- datos %>% mutate(cluster = as.factor(cluster),
                          grupo   = as.factor(grupo))

ggplot(data = datos, aes(x = x, y = y, color = grupo)) +
  geom_text(aes(label = cluster), size = 5) +
  theme_bw() +
  theme(legend.position = "none")

El gráfico muestra que solo dos observaciones se han agrupado incorrectamente. Este tipo de visualización es muy útil, no obstante, solo es posible cuando se trabaja con dos dimensiones y se conocen los verdaderos grupos a los que pertenecen las observaciones. Si los datos contienen más de dos variables (dimensiones), una posible solución es un PCA para reducir la dimensionalidad y graficar las des primeras componentes principales.

Una forma de estimar el número \(K\) óptimo de clusters cuando no se dispone de información adicional en la que basarse, es aplicar el algoritmo de K-means para un rango de valores de K e identificar aquel valor a partir del cual la reducción en la suma total de varianza intra-cluster deja de ser sustancial. A esta estrategia se la conoce como método del codo o elbow method.

library(factoextra)

fviz_nbclust(x = datos[,c("x","y")], FUNcluster = kmeans, method = "wss", k.max = 15, 
             diss = get_dist(datos, method = "euclidean"), nstart = 50)
## Warning in stats::dist(x, method = method, ...): NAs introduced by coercion

0.2.1 Ventajas y desventajas

El K-means destaca por la sencillez y velocidad de su algoritmo por lo cual es uno de los métodos de clustering más utilizados, sin embargo, presenta una serie de limitaciones que se deben tener en cuenta.

  1. Requiere que se indique previamente el número de clusters a crear. Esto puede ser complicado si no se dispone de información adicional sobre los datos con los que se trabaja. Se han desarrollado varias estrategias para ayudar a identificar potenciales valores óptimos de K (número de clusters), aunque todas ellas son orientativas.

  2. Las agrupaciones resultantes pueden variar dependiendo de la asignación aleatoria inicial de los centroides. Para minimizar este problema se recomienda repetir el proceso de clustering entre 25-50 veces y seleccionar como resultado definitivo el que tenga menor suma total de varianza interna. Aun así, solo se puede garantizar la reproducibilidad de los resultados si se emplean semillas.

Presenta problemas de robustez frente a outliers. La única solución es excluirlos o recurrir a otros métodos de clustering más robustos como K-medoids (PAM).

0.3 HCPC (Hierarchical Clustering on Principal Components)

El enfoque HCPC (Hierarchical Clustering on Principal Components) nos permite combinar los tres métodos estándar utilizados en los análisis de datos multivariados: 1. Principales métodos componentes (PCA, CA, MCA, FAMD, MFA), 2. Agrupación jerárquica y 3. Agrupación de particiones, en particular el método k-means. Describiremos POR QUÉ y CÓMO combinar los componentes principales y los métodos de agrupamiento. Finalmente, demostramos cómo calcular y visualizar el HCPC.

0.3.1 ¿Por qué HCPC?

La combinación de métodos de componentes principales y métodos de agrupamiento es útil en al menos tres situaciones.

0.3.1.1 Caso 1: Variables continuas

En el caso de que se disponga de un conjunto de datos multidimensional que contenga múltiples variables continuas, el análisis de componentes principales (PCA) puede utilizarse para reducir la dimensión de los datos a unas pocas variables continuas que contengan la información más importante de los datos. A continuación, se puede realizar un análisis de conglomerados en los resultados de PCA. El paso de PCA puede ser considerado como un paso de eliminación de ruido que puede conducir a una mayor estabilidad. agrupamiento. Esto puede ser muy útil si tiene un gran conjunto de datos con múltiples variables, como en los datos de expresión génica.

0.3.1.2 Caso 2: Agrupación de datos categóricos

Para realizar el análisis de clustering en datos categóricos, el análisis de correspondencia (CA, para analizar la tabla de contingencia) y el análisis de correspondencia múltiple (MCA, para analizar variables categóricas multidimensionales) puede utilizarse para transformar variables categóricas en un conjunto de pocas variables continuas (los componentes principales). El grupo se puede aplicar entonces a los resultados de la (M)CA. En este caso, el método (M)CA puede considerarse como una etapa de pretratamiento que permite para computar la agrupación en datos categóricos.

0.3.1.3 Caso 3: Agrupamiento de datos mixtos

Cuando se dispone de datos mixtos de variables continuas y categóricas, se puede realizar en primer lugar MFA (análisis factorial múltiple). A continuación, puede aplicar el análisis de conglomerados en los resultados del MFA.

0.3.2 Algoritmo del método HCPC

El algoritmo del método HCPC, tal y como se implementa en el paquete FactoMineR, puede se resumirán como sigue:

  1. Calcular los métodos de los componentes principales: PCA, CA o MCA en función de las tipos de variables en el conjunto de datos y la estructura del conjunto de datos. En este paso, se puede seleccionar el número de dimensiones a retener en la salida especificando el argumento ncp. El valor por defecto es 5.
  2. Calculo del clustering jerárquico: La agrupación jerárquica se realiza utilizando el criterio de Ward en los componentes principales seleccionados. El criterio de barrio se utiliza en la agrupación jerárquica porque se basa en la desviación multidimensional como análisis de componentes principales.
  3. Seleccione el número de clusters en función del árbol jerárquico: Se realiza una partición inicial cortando el árbol jerárquico.
  4. Realizar K-means clustering para mejorar la partición inicial obtenida del clustering jerárquico. La solución de partición final, obtenida tras la consolidación con k-means, puede ser (ligeramente) diferente de la obtenida con el método jerárquico agrupamiento.

0.3.3 Ejemplo

#library(FactoMineR)
# Compute PCA with ncp = 3
res.pca <- PCA(USArrests, ncp = 3, graph = FALSE)
# Compute hierarchical clustering on principal components
res.hcpc <- HCPC(res.pca, graph = FALSE)



fviz_dend(res.hcpc, 
          cex = 0.7,                     # Label size
          palette = "jco",               # Color palette see ?ggpubr::ggpar
          rect = TRUE, rect_fill = TRUE, # Add rectangle around groups
          rect_border = "jco",           # Rectangle color
          labels_track_height = 0.8      # Augment the room for labels
          )

fviz_cluster(res.hcpc,
             repel = TRUE,            # Avoid label overlapping
             show.clust.cent = TRUE, # Show cluster centers
             palette = "jco",         # Color palette see ?ggpubr::ggpar
             ggtheme = theme_minimal(),
             main = "Factor map"
             )

0.3.4 Ejercicio

desempeno<-read.table("Desempeno municipal.csv",header=T,sep=",")
row.names(desempeno)<-desempeno$Codigo

desempeno$desempeno_cuartil<-cut(desempeno$Desempeno.Municipal,breaks = quantile(desempeno$Desempeno.Municipal, prob=c(0,0.25,0.5,0.75,1)),labels = paste("Cuartil", 1:4),include.lowest = TRUE)

desempeno$desempeno_decil<-cut(desempeno$Desempeno.Municipal,breaks = quantile(desempeno$Desempeno.Municipal, prob=seq(0,1,0.1)),labels = paste("Cuartil", 1:10),include.lowest = TRUE)


desempeno$Ingresos.tributarios.y.no.tributarios.per.cápita_cuartil<-cut(desempeno$Ingresos.tributarios.y.no.tributarios.per.cápita,breaks = quantile(desempeno$Ingresos.tributarios.y.no.tributarios.per.cápita, prob=c(0,0.25,0.5,0.75,1)),labels = paste("Cuartil", 1:4),include.lowest = TRUE)

# mm<-table(desempeno$Categoria.de.ruralidad,desempeno$Ingresos.tributarios.y.no.tributarios.per.cápita_cuartil)
mm<-table(desempeno$Departamento,desempeno$desempeno_decil)


library(RColorBrewer)

mosaicplot((mm),las=2, col=brewer.pal(10,"Paired"), main="")

# mosaicplot(~ Sex + Age + Survived, data = seis_ops, color = TRUE)
library(FactoClass)
## Loading required package: ade4
## 
## Attaching package: 'ade4'
## The following object is masked from 'package:FactoMineR':
## 
##     reconst
## Loading required package: ggrepel
## Loading required package: xtable
## Loading required package: scatterplot3d
mm<- as.table(mm)

res.ca <- CA(mm, graph = FALSE)

eig.val <- get_eigenvalue(res.ca)

res.hcpc <- HCPC(res.ca, graph = FALSE)


mm1<-as.data.frame.matrix(mm)
res.HCPC.FC<-FactoClass(mm1, dudi.coa,nf = 2,k.clust = 3,scanFC = FALSE)
## The number of retained axes for factorial analysis is  2 
## 
## The number of axes for clustering is  9
## Look the histogram of 25 indexes 
## Partition in  3  clusters
plotFactoClass(res.HCPC.FC)

0.4 Valores test

Un valor test es un índice de ordenamiento obtenido mediante la metodología de una prueba de hipótesis Los valores test permite buscar las variables y categorías que más caracterizan a un grupo de \(n_k\) individuos como subconjunto de los \(n\) individuos. Para un grupo de \(n_k\) individuos, el valor test se obtiene suponiendo que los \(n_k\) individuos se extraen, aleatoriamente y sin reemplazamiento, del conjunto de los \(n\) individuos de la tabla de datos.

0.4.1 Variable continua

En el caso de una variable continua se trata de la comparación de la media del grupo con la media global. Entonces la hipótesis nula es: \(H_0 : \mu_k = \mu\) y la hipótesis alterna: \(H1 : \mu_k \ne \mu\).

Para contrastar esta hipótesis se utiliza la estadística de prueba: \[\displaystyle T_k = \frac{\bar X_k - \mu (X)}{\sigma_k(X)}\] con
\[\displaystyle \sigma ^2_k(X) =\frac{n-n_k}{n-1} \frac{\sigma^2(X)}{n_k}\] es el factor de corrección por tamaño de población finita. Los \(n\) valores de la variable X juegan el papel de la población, entonces los valores de µ(X) y (X) son conocidos, ya que se calculan con los n datos. Bajo H0 la distribución de Tk es normal estándar y el valor test se interpreta como un cuantil de esta distribución. El valor test corresponde a una estimación de la estadística y es:

\[\displaystyle t_k = \frac{\bar x_k - \mu (x)}{\sigma_k(x)}\] con
\[\displaystyle \sigma^2_k(x) =\frac{n-n_k}{n-1} \frac{\sigma^2(x)}{n_k}\]

Valores test más grandes, en valor absoluto, indican mayor diferencia entre las medias del grupo correspondiente a la categoría y la de todos los individuos.

La función \(cluster.carac\{FactoClass\}\) ordena las categorías según el valor test y solo presenta a las que en valor absoluto son mayores que 2.

0.4.2 Variable Categórica

Para ordenar automáticamente las categorías más características en los perfiles de la variable categórica que se está describiendo se recurre, de nuevo, a calcular los valores test siguiendo la metodología de una hipótesis.

En la urna hay \(n\) “bolas”con \(n_j\) que tienen la característica \(j\), de la urna se extrae una muestra sin reemplazamiento de tamaño \(n_k\), se define la variable aleatoria

N =“número de bolas con la característica j al extraer \(n_k\) bolas”.

Esta variable aleatoria tiene distribución hipergeométrica de parámetros \(n\), \(n_j\), \(n_k\). Para el resultado de la “estimación” \(n_{kj}\) se calcula \(P(N \ge n_{kj})\), si \(\frac{n_{kj}}{ nk} \ge \frac {nj}{n}\) y el valor test es el cuantil de la normal estándar que deja a la derecha un área igual a la mitad de esta probabilidad. Si la desigualdad es en el otro sentido el valor test es el cuantil de la normal estándar que deja a la izquierda una área igual a la mitad de la probabilidad \(P(N \le n_{kj})\) calculada con la distribución hipergeométrica. La función \(cluster.carac{FactoClass}\) hace este trabajo presentando, para cada una de las categorías de la variable que se está caracterizando, las categorías de las demás variables que la caracterizan, ordenadas por los valores test. La función presenta solamente las categorías que tienen valores test superiores, en valor absoluto, al umbral v.lim = 2.

0.5 Ejercicio

# load("E:/2019 (1)/Sabana/Estadistica aplicada Salud Publica/00. Datos/Datos 2015/avpp13.Rdata")
# load("D:\\DriveW7\\2019\\Sabana\\Estadistica aplicada Salud Publica\\00. Datos\\Datos 2015\\avpp13.Rdata")

desempeno<-read.table("D:\\DriveW7\\2019\\Sabana\\Estadistica aplicada Salud Publica\\00. Datos\\Datos 2015\\Desempeno municipal.csv",header=T,sep=",")

desempeno<-read.table("Desempeno municipal.csv",header=T,sep=",")
row.names(desempeno)<-desempeno$Codigo

desempeno$desempeno_cuartil<-cut(desempeno$Desempeno.Municipal,breaks = quantile(desempeno$Desempeno.Municipal, prob=c(0,0.25,0.5,0.75,1)),labels = paste("Cuartil", 1:4),include.lowest = TRUE)

desempeno$Ingresos.tributarios.y.no.tributarios.per.cápita_cuartil<-cut(desempeno$Ingresos.tributarios.y.no.tributarios.per.cápita,breaks = quantile(desempeno$Ingresos.tributarios.y.no.tributarios.per.cápita, prob=c(0,0.25,0.5,0.75,1)),labels = paste("Cuartil", 1:4),include.lowest = TRUE)

# table(desempeno$Ingresos.tributarios.y.no.tributarios.per.cápita_cuartil)

# dput(names(desempeno.act))
desempeno.act<-desempeno[,7:20]
desempeno.act[is.na(desempeno.act)]<-0

names(desempeno.act)<-c("Cobertura.media.neta", "SABER.11.Matematicas", "SABER.11.Lenguaje", "Cobertura.Transición", 
"Cobertura.salud", "Vacunación.Pentavalente", "Mortalidad.Infantil", "Cobertura.eléctrica.rural", 
".Cobertura.internet", "Cobertura.Acueducto", "Cobertura.Alcantarillado", "Hurtos.x.10000.hab", 
"Homicidios.x.10000.hab", "Violencia.Intrafamiliar.x.10000.hab")

res.pca <- PCA(desempeno.act, graph = FALSE)

res.hcpc <- HCPC(res.pca, graph = FALSE)
fviz_dend(res.hcpc, 
          cex = 0.7,                     # Label size
          palette = "jco",               # Color palette see ?ggpubr::ggpar
          rect = TRUE, rect_fill = TRUE, # Add rectangle around groups
          rect_border = "jco",           # Rectangle color
          labels_track_height = 0.8      # Augment the room for labels
          )

fviz_cluster(res.hcpc,
             #repel = TRUE,            # Avoid label overlapping
             show.clust.cent = TRUE, # Show cluster centers
             palette = "jco",         # Color palette see ?ggpubr::ggpar
             ggtheme = theme_minimal(),
             main = "Factor map"
             )

res.hcpc$desc.var
## 
## Link between the cluster variable and the quantitative variables
## ================================================================
##                                           Eta2       P-value
## SABER.11.Lenguaje                   0.46695708 9.827377e-151
## .Cobertura.internet                 0.44582415 1.830342e-141
## SABER.11.Matematicas                0.44473292 5.389610e-141
## Hurtos.x.10000.hab                  0.43834187 2.885062e-138
## Mortalidad.Infantil                 0.33705271  9.816846e-99
## Cobertura.media.neta                0.28722013  1.872959e-81
## Cobertura.Alcantarillado            0.28342640  3.452880e-80
## Violencia.Intrafamiliar.x.10000.hab 0.21398722  3.898119e-58
## Cobertura.eléctrica.rural           0.17872471  1.133255e-47
## Cobertura.Acueducto                 0.16699633  2.723673e-44
## Cobertura.Transición                0.11520026  6.575008e-30
## Homicidios.x.10000.hab              0.09398934  2.925409e-24
## Cobertura.salud                     0.09016721  2.950601e-23
## Vacunación.Pentavalente             0.02711506  2.790950e-07
## 
## Description of each cluster by quantitative variables
## =====================================================
## $`1`
##                                         v.test Mean in category
## Mortalidad.Infantil                  18.461487      25.13385321
## Homicidios.x.10000.hab                8.217995       3.52718654
## Cobertura.salud                      -4.586405       0.76917431
## Vacunación.Pentavalente              -5.435073       0.88767584
## Cobertura.Transición                 -6.331095       0.47067278
## .Cobertura.internet                  -9.441974       0.01504587
## Hurtos.x.10000.hab                   -9.575212       7.14657492
## Violencia.Intrafamiliar.x.10000.hab -10.950259       5.29935780
## Cobertura.eléctrica.rural           -13.969829       0.76461774
## Cobertura.media.neta                -16.838219       0.27614679
## SABER.11.Lenguaje                   -21.746453      47.40666667
## SABER.11.Matematicas                -21.797570      42.98498471
##                                     Overall mean sd in category
## Mortalidad.Infantil                  18.89043597     8.71818349
## Homicidios.x.10000.hab                2.39587648     3.92792193
## Cobertura.salud                       0.80475023     0.18233683
## Vacunación.Pentavalente               0.93536785     0.15357746
## Cobertura.Transición                  0.52035422     0.16936156
## .Cobertura.internet                   0.03869846     0.01848401
## Hurtos.x.10000.hab                   15.35451408     8.07154695
## Violencia.Intrafamiliar.x.10000.hab  10.45455041     5.30192105
## Cobertura.eléctrica.rural             0.88748411     0.27311392
## Cobertura.media.neta                  0.40210718     0.12408867
## SABER.11.Lenguaje                    50.70627611     2.56517841
## SABER.11.Matematicas                 47.59271571     3.43771552
##                                      Overall sd       p.value
## Mortalidad.Infantil                  7.29046804  4.215710e-76
## Homicidios.x.10000.hab               2.96766924  2.069329e-16
## Cobertura.salud                      0.16721813  4.509424e-06
## Vacunación.Pentavalente              0.18916465  5.477415e-08
## Cobertura.Transición                 0.16916679  2.434281e-10
## .Cobertura.internet                  0.05400271  3.658209e-21
## Hurtos.x.10000.hab                  18.47929850  1.016488e-21
## Violencia.Intrafamiliar.x.10000.hab 10.14892960  6.625783e-28
## Cobertura.eléctrica.rural            0.18960145  2.381970e-44
## Cobertura.media.neta                 0.16126406  1.280331e-63
## SABER.11.Lenguaje                    3.27094957 7.463191e-105
## SABER.11.Matematicas                 4.55699729 2.446645e-105
## 
## $`2`
##                               v.test Mean in category Overall mean
## SABER.11.Matematicas       11.361679      49.14954710  47.59271571
## Cobertura.eléctrica.rural  10.015400       0.94458333   0.88748411
## SABER.11.Lenguaje           9.332289      51.62414855  50.70627611
## Cobertura.media.neta        6.656313       0.43438406   0.40210718
## Vacunación.Pentavalente     3.948348       0.95782609   0.93536785
## Cobertura.Transición       -2.933034       0.50543478   0.52035422
## Cobertura.salud            -3.715399       0.78606884   0.80475023
## Mortalidad.Infantil        -7.883108      17.16231884  18.89043597
## Hurtos.x.10000.hab         -8.746429      10.49451087  15.35451408
## .Cobertura.internet        -9.038432       0.02402174   0.03869846
## Homicidios.x.10000.hab     -9.897397       1.51268116   2.39587648
## Cobertura.Acueducto       -10.456322       0.48164855   0.57255223
## Cobertura.Alcantarillado  -13.195084       0.27615942   0.38619437
##                           sd in category  Overall sd      p.value
## SABER.11.Matematicas          3.33320780  4.55699729 6.488540e-30
## Cobertura.eléctrica.rural     0.09033858  0.18960145 1.304337e-23
## SABER.11.Lenguaje             2.23051588  3.27094957 1.036085e-20
## Cobertura.media.neta          0.13800592  0.16126406 2.807826e-11
## Vacunación.Pentavalente       0.22519231  0.18916465 7.869234e-05
## Cobertura.Transición          0.15775196  0.16916679 3.356668e-03
## Cobertura.salud               0.15793602  0.16721813 2.028834e-04
## Mortalidad.Infantil           4.24326880  7.29046804 3.193370e-15
## Hurtos.x.10000.hab            8.66169368 18.47929850 2.202104e-18
## .Cobertura.internet           0.01992512  0.05400271 1.589352e-19
## Homicidios.x.10000.hab        1.92381708  2.96766924 4.272524e-23
## Cobertura.Acueducto           0.26800998  0.28912271 1.370740e-25
## Cobertura.Alcantarillado      0.18652358  0.27733085 9.365014e-40
## 
## $`3`
##                                         v.test Mean in category
## .Cobertura.internet                  22.016780        0.1100315
## Hurtos.x.10000.hab                   21.804629       39.5289189
## Cobertura.Alcantarillado             16.783512        0.6654505
## Violencia.Intrafamiliar.x.10000.hab  13.733504       18.8168018
## SABER.11.Lenguaje                    13.136522       53.2842342
## Cobertura.Acueducto                  12.717552        0.7931532
## Cobertura.media.neta                 10.881470        0.5073874
## Cobertura.Transición                 10.865404        0.6306306
## SABER.11.Matematicas                 10.665730       50.5087387
## Cobertura.salud                       9.853409        0.9036036
## Cobertura.eléctrica.rural             3.428687        0.9264865
## Homicidios.x.10000.hab                2.974839        2.9255405
## Mortalidad.Infantil                 -11.201337       13.9909910
##                                     Overall mean sd in category
## .Cobertura.internet                   0.03869846     0.08077599
## Hurtos.x.10000.hab                   15.35451408    25.85922631
## Cobertura.Alcantarillado              0.38619437     0.22052052
## Violencia.Intrafamiliar.x.10000.hab  10.45455041    14.03577697
## SABER.11.Lenguaje                    50.70627611     2.49420971
## Cobertura.Acueducto                   0.57255223     0.19444994
## Cobertura.media.neta                  0.40210718     0.14796647
## Cobertura.Transición                  0.52035422     0.14645529
## SABER.11.Matematicas                 47.59271571     3.48619597
## Cobertura.salud                       0.80475023     0.12319905
## Cobertura.eléctrica.rural             0.88748411     0.12751010
## Homicidios.x.10000.hab                2.39587648     2.76485740
## Mortalidad.Infantil                  18.89043597     4.24581563
##                                      Overall sd       p.value
## .Cobertura.internet                  0.05400271 1.989027e-107
## Hurtos.x.10000.hab                  18.47929850 2.096994e-105
## Cobertura.Alcantarillado             0.27733085  3.222040e-63
## Violencia.Intrafamiliar.x.10000.hab 10.14892960  6.396327e-43
## SABER.11.Lenguaje                    3.27094957  2.033607e-39
## Cobertura.Acueducto                  0.28912271  4.724305e-37
## Cobertura.media.neta                 0.16126406  1.412664e-27
## Cobertura.Transición                 0.16916679  1.684756e-27
## SABER.11.Matematicas                 4.55699729  1.472388e-26
## Cobertura.salud                      0.16721813  6.625741e-23
## Cobertura.eléctrica.rural            0.18960145  6.065084e-04
## Homicidios.x.10000.hab               2.96766924  2.931428e-03
## Mortalidad.Infantil                  7.29046804  4.016255e-29

0.5.1 Ejercicio

load("D:\\DriveW7\\2019\\Sabana\\Estadistica aplicada Salud Publica\\00. Datos\\Datos 2015\\avpp13.Rdata")
# names(defun_avpp13)
# table(defun_avpp13$ops_un_digito)
# table(defun_avpp13$ops_desc_tres_digitos)

defun_avpp_neoplasia<-defun_avpp13[defun_avpp13$ops_un_digito==1,]
library(tidyverse)

# defun_avpp13$ops_tres_digitos<-as.numeric(defun_avpp13$ops_desc_tres_digitos)

seis_ops<-defun_avpp13 %>% 
 #filter(ops_un_digito==2)%>%
 group_by(Departamento,ops_desc_un_digito)%>%
 group_by(Departamento,ops_desc_un_digito)%>%
 summarise(
 #n=n()
 mean_avpp=mean(avpp,na.rm=TRUE)
 #,sd_avpp=sd(avpp,na.rm=TRUE)
 #,total_avpp=sum(avpp,na.rm=TRUE)
 )

# keep<-c(cod_mpio,ops_desc_tres_digitos,mean_avpp)
# library(tidyr)
# neoplasia_reshape<-neoplasia %>% 
# #select(c(cod_mpio,ops_desc_tres_digitos,mean_avpp)) %>% 
# spread(neoplasia, key = ops_desc_tres_digitos, value = mean_avpp)

# neoplasia_rs<-reshape(data.frame(neoplasia), idvar = "cod_mpio", timevar = "ops_desc_tres_digitos", direction = "wide")
seis_ops_rs<-reshape(data.frame(seis_ops), idvar = "Departamento", timevar = "ops_desc_un_digito", direction = "wide")

mm<-as.matrix(seis_ops_rs[,-1])
row.names(mm)<-seis_ops_rs$Departamento

res.pca <- PCA(mm, graph = FALSE)

res.hcpc <- HCPC(res.pca, graph = FALSE)
fviz_dend(res.hcpc, 
          cex = 0.7,                     # Label size
          palette = "jco",               # Color palette see ?ggpubr::ggpar
          rect = TRUE, rect_fill = TRUE, # Add rectangle around groups
          rect_border = "jco",           # Rectangle color
          labels_track_height = 0.8      # Augment the room for labels
          )

fviz_cluster(res.hcpc,
             repel = TRUE,            # Avoid label overlapping
             show.clust.cent = TRUE, # Show cluster centers
             palette = "jco",         # Color palette see ?ggpubr::ggpar
             ggtheme = theme_minimal(),
             main = "Factor map"
             )

plot(res.hcpc, choice = "3D.map")

res.hcpc$desc.var$quanti
## $`1`
##                                                                    v.test
## mean_avpp.CIERTAS.AFECCIONES.ORIGINADA.EN.EL.PERIODO..PERINATAL -2.066388
## mean_avpp.NEOPLASIAS.(TUMORES)                                  -2.970720
## mean_avpp.TODAS.LAS.DEMAS.CAUSAS                                -3.278741
## mean_avpp.CAUSAS.EXTERNAS                                       -3.586287
## mean_avpp.ENFERMEDADES.DEL.SISTEMA.CIRCULATORIO                 -4.048518
##                                                                 Mean in category
## mean_avpp.CIERTAS.AFECCIONES.ORIGINADA.EN.EL.PERIODO..PERINATAL        72.151420
## mean_avpp.NEOPLASIAS.(TUMORES)                                          6.314902
## mean_avpp.TODAS.LAS.DEMAS.CAUSAS                                        3.955264
## mean_avpp.CAUSAS.EXTERNAS                                              33.205781
## mean_avpp.ENFERMEDADES.DEL.SISTEMA.CIRCULATORIO                        -2.424778
##                                                                 Overall mean
## mean_avpp.CIERTAS.AFECCIONES.ORIGINADA.EN.EL.PERIODO..PERINATAL   72.9595060
## mean_avpp.NEOPLASIAS.(TUMORES)                                     7.7521238
## mean_avpp.TODAS.LAS.DEMAS.CAUSAS                                   7.7761962
## mean_avpp.CAUSAS.EXTERNAS                                         34.5887655
## mean_avpp.ENFERMEDADES.DEL.SISTEMA.CIRCULATORIO                   -0.9752322
##                                                                 sd in category
## mean_avpp.CIERTAS.AFECCIONES.ORIGINADA.EN.EL.PERIODO..PERINATAL       1.883842
## mean_avpp.NEOPLASIAS.(TUMORES)                                        1.550551
## mean_avpp.TODAS.LAS.DEMAS.CAUSAS                                      2.142034
## mean_avpp.CAUSAS.EXTERNAS                                             1.796868
## mean_avpp.ENFERMEDADES.DEL.SISTEMA.CIRCULATORIO                       1.322307
##                                                                 Overall sd
## mean_avpp.CIERTAS.AFECCIONES.ORIGINADA.EN.EL.PERIODO..PERINATAL   2.141935
## mean_avpp.NEOPLASIAS.(TUMORES)                                    2.649859
## mean_avpp.TODAS.LAS.DEMAS.CAUSAS                                  6.382971
## mean_avpp.CAUSAS.EXTERNAS                                         2.112190
## mean_avpp.ENFERMEDADES.DEL.SISTEMA.CIRCULATORIO                   1.961086
##                                                                      p.value
## mean_avpp.CIERTAS.AFECCIONES.ORIGINADA.EN.EL.PERIODO..PERINATAL 3.879187e-02
## mean_avpp.NEOPLASIAS.(TUMORES)                                  2.971026e-03
## mean_avpp.TODAS.LAS.DEMAS.CAUSAS                                1.042712e-03
## mean_avpp.CAUSAS.EXTERNAS                                       3.354198e-04
## mean_avpp.ENFERMEDADES.DEL.SISTEMA.CIRCULATORIO                 5.154299e-05
## 
## $`2`
##                                        v.test Mean in category
## mean_avpp.TODAS.LAS.DEMAS.CAUSAS     4.568997         24.00142
## mean_avpp.ENFERMEDADES.TRANSMISIBLES 4.226715         36.52195
##                                      Overall mean sd in category
## mean_avpp.TODAS.LAS.DEMAS.CAUSAS         7.776196       2.198589
## mean_avpp.ENFERMEDADES.TRANSMISIBLES    17.408985       1.772334
##                                      Overall sd      p.value
## mean_avpp.TODAS.LAS.DEMAS.CAUSAS       6.382971 4.900639e-06
## mean_avpp.ENFERMEDADES.TRANSMISIBLES   8.127896 2.371277e-05
## 
## $`3`
##                                                                   v.test
## mean_avpp.NEOPLASIAS.(TUMORES)                                  3.576651
## mean_avpp.CAUSAS.EXTERNAS                                       3.371786
## mean_avpp.ENFERMEDADES.DEL.SISTEMA.CIRCULATORIO                 3.321677
## mean_avpp.CIERTAS.AFECCIONES.ORIGINADA.EN.EL.PERIODO..PERINATAL 3.137544
##                                                                 Mean in category
## mean_avpp.NEOPLASIAS.(TUMORES)                                        10.0433091
## mean_avpp.CAUSAS.EXTERNAS                                             36.3104510
## mean_avpp.ENFERMEDADES.DEL.SISTEMA.CIRCULATORIO                        0.5995298
## mean_avpp.CIERTAS.AFECCIONES.ORIGINADA.EN.EL.PERIODO..PERINATAL       74.5841453
##                                                                 Overall mean
## mean_avpp.NEOPLASIAS.(TUMORES)                                     7.7521238
## mean_avpp.CAUSAS.EXTERNAS                                         34.5887655
## mean_avpp.ENFERMEDADES.DEL.SISTEMA.CIRCULATORIO                   -0.9752322
## mean_avpp.CIERTAS.AFECCIONES.ORIGINADA.EN.EL.PERIODO..PERINATAL   72.9595060
##                                                                 sd in category
## mean_avpp.NEOPLASIAS.(TUMORES)                                       1.6205403
## mean_avpp.CAUSAS.EXTERNAS                                            0.9043135
## mean_avpp.ENFERMEDADES.DEL.SISTEMA.CIRCULATORIO                      1.0991879
## mean_avpp.CIERTAS.AFECCIONES.ORIGINADA.EN.EL.PERIODO..PERINATAL      1.1564639
##                                                                 Overall sd
## mean_avpp.NEOPLASIAS.(TUMORES)                                    2.649859
## mean_avpp.CAUSAS.EXTERNAS                                         2.112190
## mean_avpp.ENFERMEDADES.DEL.SISTEMA.CIRCULATORIO                   1.961086
## mean_avpp.CIERTAS.AFECCIONES.ORIGINADA.EN.EL.PERIODO..PERINATAL   2.141935
##                                                                      p.value
## mean_avpp.NEOPLASIAS.(TUMORES)                                  0.0003480238
## mean_avpp.CAUSAS.EXTERNAS                                       0.0007468241
## mean_avpp.ENFERMEDADES.DEL.SISTEMA.CIRCULATORIO                 0.0008947818
## mean_avpp.CIERTAS.AFECCIONES.ORIGINADA.EN.EL.PERIODO..PERINATAL 0.0017036969

0.5.2 Limitaciones del clustering

Es una herramienta muy útil para encontrar grupos en los datos, sobre todo a medida que el volumen de los mismos aumenta. Sin embargo, es importante recordar algunas de sus limitaciones o problemas.

  1. Pequeñas decisiones pueden tener grandes consecuencias: A la hora de utilizar los métodos de clustering se tienen que tomar decisiones que influyen en gran medida en los resultados obtenidos. No existe una única respuesta correcta, por lo que en la práctica se prueban diferentes opciones.
  • Escalado y centrado de las variables
  • Qué medida de distancia/similitud emplear
  • Número de clusters
  • Tipo de linkage empleado en hierarchical clustering

  • Validez de los clusters obtenidos: Puesto que no se conocen los verdaderos cluster siquiera si en realidad exista, no es fácil comprobar la validez de los resultados (como es el caso de clasificación) .

  • Falta de robustez: Los métodos de K-means-clustering e hierarchical clustering asignan obligatoriamente cada observación a un grupo. Si existe en la muestra algún atípico, que en realidad no pertenezca a ningún grupo, el algoritmo lo asignará a uno de ellos. Algunas alternativas son k-medoids y DBSCAN.

  • Anidamiento: La naturaleza del algoritmo de cluster jerarquico acarrea a que, un error en el agrupamiento en los pasos iniciales, no se pueda corregir en pasos posteriores.

0.6 Bibilografía

  • Introduction to Statistical Learning, Gareth James, Daniela Witten, Trevor Hastie and Robert Tibshirani
  • Practical Guide to Cluster Analysis in R, Alboukadel kassambara