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.
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).
# 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)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.
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
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.
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.
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).
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.
La combinación de métodos de componentes principales y métodos de agrupamiento es útil en al menos tres situaciones.
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.
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.
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.
El algoritmo del método HCPC, tal y como se implementa en el paquete FactoMineR, puede se resumirán como sigue:
#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"
)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)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.
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.
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.
# 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
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
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.
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.