Introducción
El análisis de clusters procura formar grupos en los que se clasifican los individuos de una base de datos de manera que los individuos dentro de cada grupos sean lo más similares entre ellos y los grupos sean lo más diferentes entre uno y otro.
La primera cuestión, en el análisis de clústers es establecer en base a qué variables construir los conglomerados. Dicho aspecto no es nada trivial y depende más del conocimiento y experiencia del analista.
El proceso de construcción de clusters normalmente se realiza en dos fase: primero se construye la matriz de proximidades (distancias similaridades) y despues se aglomeran/agrupan los individuos.
\[ \text{Matriz de datos --> Matriz de proximidades --> Clusters} \]
Aunque la agrupación se realiza en base a la proximidad, no siempre es la distancia euclídea la que deb ser usada.
Técnicas jerárquicas de aglomeración
Actúan de forma secuencial.
Fases del proceso de aglomeración
1. identificación de los elementos más próximos
A partir de la matriz de distancias \(\mathbf{D}_{n\times n}= (d_{ij})\), que prácticamente representa el conglomerado inicial de \(n\) elementos, se unen los dos indivíduos, \(u\space v\), más proximos según la matriz, eso es: \[ d_{uv}=min(d_{ij}\in \mathbf D) \]
Ahora tendremos 2 conglomerados: uno con \(2\) elementos y otro con \(n-2\) elementos.
2. Cálculo de una nueva matriz
Se calcula una nueva matriz \(\Delta =(\delta_{ij})\) cuyos elementos son \(\delta_{ij}=(\delta_{ij})\), según la distancia considerada.
3. Un nuevo conglomerado
Se forma uno nuevo, unidendo los dos más próximos según la matriz \(\mathbf \Delta\), tal que \[ \delta_{sw}=min(\delta_{ij} \in \mathbf\Delta) \]
Y a continuación, se repiten la segunda y tercera fase.
Ejemplo
| 1 | 2 | 3 | 4 | 5 | 6 | |
|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 4.5 | 4 | 8 | 9 |
| 2 | 1 | 0 | 2 | 5 | 5 | 6 |
| 3 | 4.5 | 2 | 0 | 4 | 10 | 5 |
| 4 | 5 | 5 | 4 | 0 | 3.5 | 3 |
| 5 | 8 | 5 | 10 | 3.5 | 0 | 6 |
| 6 | 9 | 6 | 5 | 3 | 6 | 0 |
El primer paso es encontrar los primeros dos elementos que tengan la menor distancia entre si. Estos son \(\textbf1\) y \(\textbf2\), con distancia \(1\) que formaran el primer cluster, \(\delta_{12}\).
Sucesivamente, serán:
\[ \begin{align} & \delta_{(12)3}=d_{min}=2\\ & \delta_{(123)4}=d_{min}=4\\ & \delta_{(123)(46)}=d_{min}=3\\ & \delta_{(123)(46)5}=d_{min}=3.5 \end{align} \]
Distancias y similaridades entre individuos
Dada una matriz \[ Individuos \begin{pmatrix} & Variables\\ x_{11} & x_{12} &... & x_{1p}\\ ... & ... &... & ...\\ x_{u1} & x_{u2} &... & x_{up}\\ x_{w1} & x_{w2} &... & x_{wp}\\ ... & ... &... & ...\\ x_{n1} & x_{n2} &... & x_{np} \end{pmatrix} \]
La matriz de distancias entre individuos será una matriz \(n\times n\) de la forma:
\[ \begin{pmatrix} 0 & & & \\ d(2,1) & 0 & & \\ d(3,1) & d(3,2) & 0 & \\ ... & ... &... & 0 \\ d(n,1) & d(n,2) & d(n,3) & ...& 0 \\ \end{pmatrix} \]
\(d_{i,j}\) Es pues la distancia entre el individuo \(i\) y el \(j\). Lo que no tiene que ser una distancia en el sentido matemático del término. Basta con que sea tal que: \[ d(i,i)=0\;\;d(i,j)\geq0\;\;d(i,j)=d(j,i)\;,\;\forall \;i,j \]
En algún caso se requiere la desigualdad triangular \[ d(i,j)\leq d(i,k)+d(k,j)\;,\;\forall\;i,j,k \]
o en incluso la desigualdad ultramétrica
\[ d(i,j)\leq \max(d(i,k),d(k,j)) \;,\;\forall\;i,j,k \]
Cálculo de la matriz de distancias
El cálculo de la matriz de distancias depende del tipo de datos que tengamos.
Datos cuantitativos en escala aproximadamente lineal
Si todos los datos de la matriz son de este tipo se puede utilizar la distancia euclidea, definida por
\[ d_{uw}=\sqrt{\sum_{i=1}^p{(x_{ui}-x_{wi})^2 } } \]
La distancia Euclídea es la más usada, aunque también se puede utilizar la distancia de Manhattan
\[ d_{uw}=\sqrt{\sum_{i=1}^p{|x_{ui}-x_{wi}| } } \]
Ejemplo 1
Tenemos 6 indivíduos con altura y pesos diferentes:
\[ \textbf{D}_1= \begin{pmatrix} 1 & 1.72 & 75.00 \\ 2 & 1.75 & 80.00 \\ 3 & 1.60 & 65.00 \\ 4 & 1.80 & 79.00 \\ 5 & 1.65 & 71.00 \\ 6 & 1.90 & 92.00 \\ \end{pmatrix} \]
La matriz de de distancias sería
\[ \mathbf D= \begin{pmatrix} 0 & & & \\ d(2,1) & 0 & & \\ d(3,1) & d(3,2) & 0 & \\ d(4,1) & d(4,2) & d(4,3) & 0 & \\ d(5,1) & d(5,2) & d(5,3) & d(5,4) & 0 \\ d(6,1) & d(6,2) & d(6,3) & d(6,4) & d(6,5) & 0 \\ \end{pmatrix} \]
Lo que, en distancia euclídea daría la matriz
\[ d(1,2)= \sqrt{(1.72-1.75)^2+(75-80)^2}=\sqrt{0.0009+25}=5.000090, \text{etc.}\\ \mathbf D= \begin{pmatrix} 1 & 0.000000 \\ 2 & 5.000090 & 0.000000 \\ 3 & 10.000720 & 15.000750 & 0.000000 \\ 4 & 4.000800 & 1.001249 & 14.001428 & 0.000000 \\ 5 & 4.000612 & 9.000556 & 6.000208 & 8.001406 & 0.000000 \\ 6 & 17.000953 & 12.000937 & 27.001667 & 13.000385 & 21.001488 & 0.000000 \\ \end{pmatrix} \]
Y, análogamente, en distancia Manhattan:
\[ \mathbf D= \begin{pmatrix} 1 & 0.00 \\ 2 & 5.03 & 0.00 \\ 3 & 10.12 & 15.15 & 0.00 \\ 4 & 4.08 & 1.05 & 14.20 & 0.00 \\ 5 & 4.07 & 9.10 & 6.05 & 8.15 & 0.00 \\ 6 & 17.18 & 12.15 & 27.30 & 13.10 & 21.25 & 0.00 \\ \end{pmatrix} \]
Estandadización previa de los datos
Como puede ser fácilmente observado, en este cálculo que acabamos de ver, la diferenecia de escala juega un peso fundamental, ya que la variable \(Estatura\) juega un rol mucho mayor que \(Peso\). Si el cálculo de la estatura se hubiese hecho en \(cm\) en lugar que \(m\), el resultado hubiera sido el contrario.
Para obviar tales problemáticas, es decir los efectos indeseados de las escalas en la medición de las variables, hay que estandardizar/tipificar los datos previamente al cálculo de distancias
Estandardización con la Desviación Absoluta Media (Average Absolute Deviation ) \(\text{AAD}\)
Ver también en.wikipedia.org. Conocida también como desviación media de la media. Importante no confundir conceptos: la \(\text {AAD}\) a veces se encuentra como \(text{MAD}\) (ver abajo) incluso en documentación de R. Fijarse bien cuando se ejecuta alguna función si se trata de mediana o de media.
\[ AAD=\frac{1}{n} \sum_{i=1}^n|x_{ij}-\overline x_i| \]
Por lo tanto, cada dato dato \(x_{ij}\) de la matriz se tipificará así:
\[ x_{ij}=\frac{|x_{ij}-\overline x|}{AAD} \]
Estandardización con la Desviación Absoluta Mediana (Median Absolute Deviation ) \(\text{MAD}\)
Ver también en.wikipedia.org. Conocida también como desviación mediana de la mediana.
\[ MAD=mediana(|x_{ij}-M|)_{j=1}^n \]
Por basarse en la mediana, en lugar que en el promedio, es un valor más robusto, menos influenciado por los valores atípicos.
A partir de aquí, ya se pueden calcular las distancias y generar la matriz de distancias.
Ejemplo 1 (continuación con R)
Cálculo de \(\text{AAD}\)
# Se aplica una iteración por columnas
# AAD: Método 1
# AAD = 1/n * SUM|(x- mx)| / n -------Desviación absoluta media (Average Absolute Deviation)
AAD <- sapply(1:ncol(m), function(x) {
sum(abs(m[,x] - mean(m[,x])))
}) / nrow(m)
AAD## [1] 0.080000 6.666667
Cálculo de \(\text{MAD}\)
# Se aplica una iteración por columnas
MAD <- sapply(1:ncol(m), function(x) {
median(abs(m[,x] - median(m[,x])))
})
MAD## [1] 0.075 4.500
Se puede observar como, en el casos de los pesos, los valores de la desviación son diferentes según el método utilizado.
Matriz de datos tipificados
Utilizando la desviación absoluta media (AAD)
# Matriz de datos tipificada
TDM_AAD <- sapply(1:2, function(x) {
abs(m[,x] - mean(m[,x]))/AAD[x]
})
TDM_AAD## [,1] [,2]
## [1,] 0.2083333 0.30
## [2,] 0.1666667 0.45
## [3,] 1.7083333 1.80
## [4,] 0.7916667 0.30
## [5,] 1.0833333 0.90
## [6,] 2.0416667 2.25
Utilizando la desviación absoluta mediana (MAD)
## [,1] [,2]
## [1,] 0.2222222 0.4444444
## [2,] 0.1777778 0.6666667
## [3,] 1.8222222 2.6666667
## [4,] 0.8444444 0.4444444
## [5,] 1.1555556 1.3333333
## [6,] 2.1777778 3.3333333
Cálculo de la matriz de distancias
Utilizando la desviación absoluta media (AAD) i la función \(\texttt{dist()}\) de R
## 1 2 3 4 5 6
## 1 0.0000000
## 2 0.1556795 0.0000000
## 3 2.1213203 2.0492038 0.0000000
## 4 0.5833333 0.6427480 1.7579186 0.0000000
## 5 1.0609548 1.0211649 1.0957304 0.6671353 0.0000000
## 6 2.6764923 2.5991585 0.5600099 2.3162470 1.6555672 0.0000000
Utilizando la desviación absoluta mediana (MAD) i la función \(\texttt{dist()}\) de R
## 1 2 3 4 5 6
## 1 0.0000000
## 2 0.2266231 0.0000000
## 3 2.7382972 2.5892465 0.0000000
## 4 0.6222222 0.7027284 2.4278223 0.0000000
## 5 1.2888889 1.1834246 1.4907120 0.9417609 0.0000000
## 6 3.4885350 3.3333333 0.7555556 3.1817380 2.2460940 0.0000000
Se pueden pues visualizar las diferencias que nos podemos encontrar utilizando un método u otro. Lo que queda evidente es la enorme diferencia con el método sin estandardizar. Cosa que tendremos que tener presente siempre que trabajemos con unidades de medición diferentes.
Datos cuantitativos que sean rangos de observaciones
Se incluyen en este apartado las observaciones de una variable ordenadas de menor a mayor (1, para el valor más pequeño, 2 para el siguiente \(n\) para el más grande). También se incluyen las observaciones que no vengan referidas a una escala fixa de medida, como por ejemplo las que usan la escala Likkert: unos valores ordenados (de 1 a 10, de 1 a 5, etc.), para medir coincidencia de opiniones, estados de ánimo, etc.
Tipificación en una escala de valores de 0 a 1
Esto se realiza con la típica fórmula \[ x'=\frac{x-min}{max-min} \]
que en el caso de una típica escala Likert \(1-5\), sería
\[ x'=\frac{x-1}{5-1}\;\text{Por ejemplo: para 3 sería: } x'=\frac{3-1}{5-1}=\frac{2}{4}=0.5 \]
Por lo que, una matriz de valores en dicha escala: \[\begin{pmatrix} 2 & 5 \\ 5 & 4 \\ 3 & 1 \\ 1 & 3 \\ 4 & 2 \\ \end{pmatrix}\]Se tipificaría con este resultado:
\[\begin{pmatrix} 0.25 & 1.00 \\ 1.00 & 0.75 \\ 0.50 & 0.00 \\ 0.00 & 0.50 \\ 0.75 & 0.25 \\ \end{pmatrix}\]Las distancias se calculan de la misma manera que con los datos en escala lineal que hemos visto antes.
Datos cuantitativos en escala no lineal
Por ejemplo los datos de población de bacterias, que crecen de manera exponencial. Hay que tratarlos con una función que les ponga en la esscala lineal. En el ejemplo anterior, habría que aplicarles la escala logarítmica.
Datos cualitativos
Este tipo de datos se refiere a variables cualitativas, como sexo, idioma, estado civil, etc., que toman valores \(x_{ij}\) que en realidad son clases/modalidades que toman dichas variables/carácteres. Como distancia entre el indivíduo \(u=(x_{u1},x_{u2},...,x_{un})\) y el indivíduo \(w= (x_{w1},x_{w2},...,x_{wn})\) suele tomarse el \(\text{SMC-Simple Matching Distance}\), Distancia de Emparejamiento Simple, que deriva de \(\text{SMC Simple Matching Cofficient}\) Coeficiante de Emparejamiento Simple
\[ \text{SMD}= 1-\text{SMC} \]
En el específico, para una matriz de datos de \(p\) variables categóricas, el \(\text{SMD}\) será
\[ \text{SMD o }d_{uw}=\frac{\text{variables "no matching"}}{p} \]
Si nuestra matriz de datos es de \(p=3\) variables y de la forma
\[\begin{pmatrix} ... & ... & ... \\ M & Castaño & Sí \\ ... & ... & ... \\ M & Azul & No \\ ... & ... & ... \\ \end{pmatrix}\]la distancia entre indivduos \(\text{SMD o }d_{uw}\) será
\[ \text{SMD o }d_{uw}=\frac{\text{variables "no matching"}}{p}=\frac{1}{3} \]
Ya que los dos individuos toman modalidad diferente sólo en una variable.
Si todas las variables de tipo cualitativo son son binarias simétricas (dos posibles valores con la misma importancia). Por ejemplo
\[\begin{matrix} & \begin{matrix} \phantom{i} x\phantom{ii} & y\phantom{ii} & z\phantom{ii} & h\phantom{ii} & g\phantom{ii} \end{matrix} \\ \begin{matrix} 1\\ u\\ 3\\ w\\ 5\\ \end{matrix} & \begin{pmatrix} ... & ... & ... & ... & ... \\ \phantom{ee}1 & \phantom{ee}0 & \phantom{ee}1 & \phantom{ee}1 & \phantom{ee}0 \\ ... & ... & ... & ... & ... \\ \phantom{ee}1 & \phantom{ee}1 & \phantom{ee}1 & \phantom{ee}0 & \phantom{ee}0 \\ ... & ... & ... & ... & ... \\ \end{pmatrix} \\ \end{matrix}\]Los valores de los dos individus \(u\) y \(w\) pueden ponerse en una tabla de doble entrada
\[ \begin{array} {c|cc} u/w & 1 & 0 \\ \hline 1 & a & b \\ 0 & c & d \end{array} \]
\[ \begin{array} {l} a=\text{Contar 11} \\ b=\text{Contar 01} \\ c=\text{Contar 10} \\ d=\text{Contar 00} \\ \end{array} \]
Para variables categóricas simétricas
Con lo cual, la ecuación de la distancia vendría a ser:
\[ \text{SMD o }d_{uw}=\frac{\text{variables "no matching"}}{p}=\frac{b+c}{a+b+c+d} \]
Volviendo a la matriz de datos de arriba, los valores de la ecuación en la tabla de doble entrada serían:
\[ \begin{array} {c|cc} u/w & 1 & 0 \\ \hline 1 & 2 & 1 \\ 0 & 1 & 1 \end{array} \]
Y la distancia o \(\text{SMD}\) sería
\[ \text{SMD o }d_{uw}=\frac{\text{variables "no matching"}}{p}=\frac{b+c}{a+b+c+d}=\frac{2}{5} \]
Para variables categóricas asimétricas
Cuando la variables son asimétricas (en casos que una de las dos opciones sea más significativa…), se utiliza la distancia denominada Coeficiente de Jaccard, apartando los \(d\), es decir \((0,0)\), del cálculo:
\[ \text{SMD o }d_{uw}=\frac{b+c}{a+b+c}=\frac{2}{4} \]
Datos en que aparecen variables de vario tipo (Distancia de Gower)
Fórmula general: \[ d_{wu}=\frac{\sum_{1=1}^pI_{uw}^id_{uw}^i}{\sum_{uw}^pI_{uw}^i} \]
\(I_{uw}^i\): Es un coeficiente de ponderación que normalmente se pone \(I_{uw}^i=1\), excepto cuando \(p_i\) es categórica asimétrica. Que, como hemos visto arriba, cuando \(d=(0,0)\), no se suma la al numerador, y a \(p\) tampoco. Entonces se pone \(I_{uw}^{asimétrica} =0\). Entonces:
- Si no hay variables asimétricas o éstas no son iguales a \(0\),
\[ d_{wu}=\frac{\sum_{1=1}^p d_{uw}^i}{p} \]
- Si hay variables asimétricas iguales a \(0\),
\[ d_{wu}=\frac{\sum_{1=1}^p d_{uw}^i}{p-var^{asim=0}} \]
Si \(i\) es una variable dicotómica|asimétrica, \[ d_{ij}^i=0\; si\; x_{ui}=x_{wi}=0;\; else=1 \]
Si \(i\) es una variable categórica, \[ d_{ij}^i=0\; si\; x_{ui}=x_{wi};\; else=1 \]
Si \(i\) es una variable numérica aproximadamente lineal, \[ d_{ij}^i=\frac{|x_{ui}-x_{wi}|}{\max_ux_{ui}-\min_ux_{ui}} \]
Si \(i\) es una variable numérica no lineal o los datos son en rango, se ejecuta en dos: el primero para tipificar, el segundo para calcular realmente las distancias
\[ \begin{array} {c|c} \text{Paso 1} & \text{Paso 2}\\ \hline x_{ij}^i=\frac{x_{ij}-\min{i}}{\max_i - \min_i} & d_{ij}^i=\frac{|x_{ui}-x_{wi}|}{\max_ux_{ui}-\min_ux_{ui}} \end{array} \]
Ejemplo 2
Tenemos una matriz de valores de 4 variables de valores, respectivamente, numericos, categóricos (colores 1=“verde”, 5=“rojo”, 2=“azul”), categóricos asimétricos
\[\begin{matrix} & \begin{matrix} \phantom{i} Numerico & Categórico & Asimétrico \end{matrix} \\ \begin{matrix} 1\\ 2\\ 3\\ \end{matrix} & \begin{pmatrix} \phantom{eeeeeee}1 & \phantom{eeeeeeeee}1 & \phantom{eeeeeeeee}0 \\ \phantom{eeeeeee}2 & \phantom{eeeeeeeee}5 & \phantom{eeeeeeeee}0 \\ \phantom{eeeeeee}3 & \phantom{eeeeeeeee}2 & \phantom{eeeeeeeee}1 \\ \end{pmatrix} \\ \end{matrix}\]Columna 1 (numérica)
\[ d_{ij}^i=\frac{|x_{ui}-x_{wi}|}{\max_ux_{ui}-\min_ux_{ui}} \]
\[\begin{matrix} & \begin{matrix} \phantom{i} 1\phantom{ii} & 2\phantom{ii} & 3\phantom{ii} \end{matrix} \\ \begin{matrix} 1\\ 2\\ 3\\ \end{matrix} & \begin{pmatrix} 0.0 & 0.5 & 1.0 \\ 0.5 & 0.0 & 0.5 \\ 1.0 & 0.5 & 0.0 \\ \end{pmatrix} \\ \end{matrix}\]Columna 2 (categórica)
\[ d_{ij}^i=0\; si\; x_{ui}=x_{wi};\; else=1 \]
\[ \begin{matrix} & \begin{matrix} 1 & 2 & 3 \end{matrix} \\ \begin{matrix} 1\\ 2\\ 3\\ \end{matrix} & \begin{pmatrix} 0 & & \\ 1 & 0 & \\ 1 & 1 & 0 \\ \end{pmatrix} \\ \end{matrix} \]
Columna 3 (asimétrica)
\[ d_{ij}^i=0\; si\; x_{ui}=x_{wi}=0;\; else=1 \]
\[ \begin{matrix} & \begin{matrix} 1 & 2 & 3 \end{matrix} \\ \begin{matrix} 1\\ 2\\ 3\\ \end{matrix} & \begin{pmatrix} 0 & & \\ 0 & 0 & \\ 1 & 1 & 0 \\ \end{pmatrix} \\ \end{matrix} \]
Cálculo de la distancia
Considerando \(I_{uw}î\) siempre igual a 1, sin practicar ponderación aplicaremos
\[ d_{wu}=\frac{\sum_{1=1}^p d_{uw}^i}{p} \]
sobre las \(p=3\) variables y \(n\) observaciones
\[ \begin{equation} \begin{split} & d_{1,2}=\frac{0.5+1+0}{2}=\frac{1.5}{2}=0.75\; \text{Fijarse en el denominador: es } p-1\text{ porque la variable asimétrica=0}\\ & d_{1,3}=\frac{1+1+1}{3}=\frac{3}{3}=1\\ & d_{2,3}=\frac{0.5+1+1}{3}=\frac{2.5}{3}=0.8333\\ \end{split} \end{equation} \]
Cálculo con R, utilizando la función \(\texttt{daisy()}\) de la librería \(\texttt{cluster}\)
m <- as.data.frame(matrix(c(
1,2,3,
1,5,2,
0,0,1),
ncol = 3))
m$V2 <- as.factor(m$V2) # Importante, si no, daisy() no interpeta correctamente.
m$V1 <- as.numeric(m$V1)
cluster::daisy(m,
metric = "gower",
stand = TRUE,
type = list(#numeric = "V1",
#factor = "V2",
asymm= "V3")
)## Dissimilarities :
## 1 2
## 2 0.7500000
## 3 1.0000000 0.8333333
##
## Metric : mixed ; Types = I, N, A
## Number of objects : 3
Para calcular las distancias en varibles de diferente tipo utilizando
esta función, es importante fijarse en los prametros
metric = "gower", y type, donde hay que poner
una lista que describe cada variable. En realidad, mejor determinar
previamente las variables categórica, ya que, si no, la función las
intepreta por defecto como si fueran numéricas (y no sé por qué).
Importante type = symm.
Cabe destacar que la función también aplica la distancia de Jaccart si se especifica que la variable asimétrica.
Tipos de clusters
Agrupamiento simple (Simple linkage)
En estadística, el agrupamiento simple es uno de los diversos métodos de agrupación jerárquica. Se basa en la agrupación de conglomerados de abajo a arriba (agrupación aglomerativa), combinando en cada paso dos conglomerados que contengan el par de elementos más cercano que aún no pertenezcan al mismo conglomerado.
Este método tiende a producir clusters largos y delgados en los que los elementos cercanos del mismo cúmulo se encuentran a distancias cortas, pero los elementos en extremos opuestos de un cluster pueden estar mucho más alejados entre sí que dos elementos de otros clusters (efecto chaining). Para algunas clases de datos, esto puede dificultar la definición de clases que permitan subdividir los datos de forma útil. Sin embargo, es popular en astronomía para analizar cúmulos de galaxias, que a menudo pueden incluir largas cadenas de materia; en esta aplicación, también se conoce como el algoritmo de amigos de amigos.
Ejemplo 3
Este ejemplo práctico se basa en una matriz de distancia genética JC69 calculada a partir del alineamiento de la secuencia de ARN ribosómico 5S de cinco bacterias.
Tenemos pues 5 elementos (\(a,b,c,d,e\)) i la matriz de distancias \(D_1\):
\[\begin{matrix} & \begin{matrix} \phantom{i} a\phantom{i} & b\phantom{i} & c\phantom{i} & d\phantom{i} & e\phantom{i} \end{matrix} \\ \begin{matrix} a\\ b\\ c\\ d\\ e\\ \end{matrix} & \begin{pmatrix} \phantom{e}0 & 17 & 21 & 31 & 23 \\ 17 & \phantom{e}0 & 30 & 34 & 21 \\ 21 & 30 & \phantom{e}0 & 28 & 39 \\ 31 & 34 & 28 & \phantom{e}0 & 43 \\ 23 & 21 & 39 & 43 & \phantom{e}0 \\ \end{pmatrix} \\ \end{matrix}\]Primer clustering
En este ejemplo \(D_1(a,b)=17\) es el valor más bajo de la matriz, así que agrupamos \(a,b\)
Primera actualización de la matriz
A continuación, actualizamos la matriz de proximidad inicial \(D_1\) en una nueva matriz de proximidad \(D_2\) (ver más abajo), cuyo tamaño pues se reduce en una fila y una columna debido a la agrupación de \(a\) con \(b\). Los valores en negrita en \(D_2\) corresponden a las nuevas distancias, calculadas manteniendo la distancia mínima entre cada elemento del primer grupo \((a,b)\) y cada uno de los elementos restantes:
\[ \begin{matrix} D_2 ((a,b),c) & =& min(D_1 (a,c),D_1 (b,c)) & =&min(21,30)&=& \Large21 \\ D_2 ((a,b),d)&=&min(D_1 (a,d),D_1 (b,d))&=&min(31,34)&=&31 \\ D_2 ((a,b),e)&=&min(D_1 (a,e),D_1 (b,e))&=&min(23,21)&=& \Large21 \\ \end{matrix} \]
El resto de elementos en \(D_2\) no quedean afectados, ya que corresponden a distancias no invloucradas en el primer cluster.
Segundo clustering
Reiteramos les tres operaciones anteriores a partir de la nueva matriz \(D_2\):
\[ D_2= \begin{pmatrix} & (a,b) & c & d & e\\ (a,b) & 0 & \bf \large21 & \bf 31& \bf \large21\\ c& \bf \large21& 0& 28& 39\\ d& \bf 31& 28& 0& 43\\ e& \bf \large21& 39& 43& 0\\ \end{pmatrix} \]
Aquí, \(D_2 ((a,b),c)=21\) y \(D_2 ((a,b),e)=21\) son los valores más bajos de \(D_2\), así que unimos el cluster \((a,b)\) con el elemento \(c\) y con el elemento \(e\).
Segunda actualización de la matriz
Luego procedemos a actualizar la matriz \(D_2\) en una nueva matriz de distancia \(D_3\) (ver a continuación), reducida en tamaño en dos filas y dos columnas debido a la agrupación de \((a,b)\) con \(c\) y con \(e\):
\[ D_3 (((a,b),c,e),d)=min(D_2 ((a,b),d),D_2 (c,d),D_2 (e,d))=min(31,28,43)=28 \]
Clustering final
La matriz final \(D_3\) será:
\[ D_3= \begin{pmatrix} & ((a,b),c,e)& d\\ ((a,b),c,e)& 0&\bf 28\\ d&\bf 28& 0 \end{pmatrix} \]
Juntamos pues los clusters \(((a,b),c,e)\) y \(d\).
Dendrogramas
Dendrograma de agrupamiento simple (Simple linkage)
Notar que la altura de la branca que marca el dendrograma corresponde a las distancias entre los clusters.
Dendrograma de agrupamiento simple (Single linkage) con \(\texttt{ggdendro}\) y \(\texttt{ggplot}\)
library(ggdendro)
library(ggplot2)
ggdendrogram(hcl1) +
labs(title = "Dendrograma clustering ejemplo 3",
subtitle = "Agrupamiento simple")+
ylab("Height") +
theme(plot.title = element_text(hjust = 0, size = 18),
plot.subtitle = element_text(hjust = 0, size = 15),
axis.text.x = element_text(size = 15, face = 'bold'))Agrupamiento completo (Complete linkage)
Es conocido como agrupamiento del vecino más lejano.
En cada paso, se combinan los dos clústers separados por la distancia más corta. La definición de “distancia más corta” es lo que diferencia los distintos métodos de agrupamiento aglomerativo. En el agrupamiento por ligamiento completo, el enlace entre dos clústeres contiene todos los pares de elementos, y la distancia entre clústeres es igual a la distancia entre los dos elementos (uno en cada clúster) más alejados entre sí. El enlace más corto que permanece en cualquier paso provoca la fusión de los dos clústeres cuyos elementos están involucrados.
Matemáticamente, la función de ligamiento completo —la distancia \(D(X,Y)\) entre los clústeres \(X\) e \(Y\) — se describe mediante la siguiente expresión: \[ D(X,Y)=máx_{x∈X,y∈Y} d(x,y) \]
Ejemplo 4
en.wikipedia.org: Complete-linkage clustering
Este ejemplo se basa en la misma matriz de distancia del ejemplo 3.
Tenemos pues 5 elementos (\(a,b,c,d,e\)) i la matriz de distancias \(D_1\):
\[\begin{matrix} & \begin{matrix} \phantom{i} a\phantom{i} & b\phantom{i} & c\phantom{i} & d\phantom{i} & e\phantom{i} \end{matrix} \\ \begin{matrix} a\\ b\\ c\\ d\\ e\\ \end{matrix} & \begin{pmatrix} \phantom{e}0 & 17 & 21 & 31 & 23 \\ 17 & \phantom{e}0 & 30 & 34 & 21 \\ 21 & 30 & \phantom{e}0 & 28 & 39 \\ 31 & 34 & 28 & \phantom{e}0 & 43 \\ 23 & 21 & 39 & 43 & \phantom{e}0 \\ \end{pmatrix} \\ \end{matrix}\]Primer clustering
En este ejemplo \(D_1(a,b)=17\) es el valor más bajo de la matriz, así que agrupamos \(a,b\)
Primera actualización de la matriz
A continuación, actualizamos la matriz de proximidad inicial \(D_1\) en una nueva matriz de proximidad \(D_2\) (ver más abajo), cuyo tamaño pues se reduce en una fila y una columna debido a la agrupación de \(a\) con \(b\). Los valores en negrita en \(D_2\) corresponden a las nuevas distancias, calculadas manteniendo la distancia máxima entre cada elemento del primer grupo \((a,b)\) y cada uno de los elementos restantes:
\[ \begin{matrix} D_2 ((a,b),c) & =& max(D_1 (a,c),D_1 (b,c)) & =&max(21,30)&=&30 \\ D_2 ((a,b),d)&=&max(D_1 (a,d),D_1 (b,d))&=&max(31,34)&=&34 \\ D_2 ((a,b),e)&=&max(D_1 (a,e),D_1 (b,e))&=&max(23,21)&=& \Large 23 \\ \end{matrix} \]
El resto de elementos en \(D_2\) no quedean afectados, ya que corresponden a distancias no involucradas en el primer cluster.
Segundo clustering
Reiteramos les tres operaciones anteriores a partir de la nueva matriz \(D_2\):
\[ D_2= \begin{pmatrix} & (a,b) & c & d & e\\ (a,b) & 0 & \bf 30 & \bf 34& \bf \Large23\\ c& \bf 30& 0& 28& 39\\ d& \bf 34& 28& 0& 43\\ e& \bf \Large23& 39& 43& 0\\ \end{pmatrix} \]
Aquí, \(D_2((a,b),e)=23\) es el valor más bajo de \(D_2\), así que unimos el cluster \((a,b)\) con el elemento \(\bf e\).
Segunda actualización de la matriz
Procedemos a actualizar la matriz \(D_2\) en una nueva matriz de distancia \(D_3\) (ver a continuación), reducida en tamaño en una fila y una columna debido a la agrupación de \((a,b)\) con \(e\):
\[ \begin{matrix} D_3 (((a,b),e),c) & =& max(D_2 ((a,b),c), D_2 (e,c)) & =&max(30,39)&=&39 \\ D_3 (((a,b),e),d)&=&max(D_2 ((a,b),d), D_2 (e,d))&=&max(34,43)&=&43 \\ \end{matrix} \]
Tercer clustering
Reiteramos les operaciones anteriores a partir de la nueva matriz \(D_3\):
\[ D_3= \begin{pmatrix} & ((a,b),e) & c & d\\ ((a,b),e) & 0 & \bf 39 & \bf 43 \\ c& \bf 39& 0& \Large28\\ d& \bf 43& \Large28& 0\\ \end{pmatrix} \]
Aquí, \(D_3 (c,d)=28\) es el valor más pequeño de \(D_3\) , así que unimos los elementos \(c\) y \(d\).
Tercera actualización de la matriz
Procedemos a actualizar la matriz \(D_3\) en una nueva matriz de distancia \(D_4\) (ver a continuación):
\[D_4 ((c,d),((a,b),e))=max(D_3 (c,((a,b),e)),D_3 (d,((a,b),e)))=max(39,43)=43\]
Clustering final
La matriz final \(D_3\) será:
\[ D_3= \begin{pmatrix} & ((a,b),e)& (c,d)\\ ((a,b),e)& 0&\bf 43\\ (c,d) &\bf 43& 0 \end{pmatrix} \]
Así que, unimos los grupos \(((a,b),e)\) y \((c,d)\).
Dendrogramas
Dendrograma de agrupamiento completo (Complete linkage)
Notar que la altura de la branca que marca el dendrograma corresponde a las distancias entre los clusters.
Dendrograma de agrupamiento simple (Single linkage) con \(\texttt{ggdendro}\) y \(\texttt{ggplot}\)
library(ggdendro)
library(ggplot2)
ggdendrogram(hcl2) +
labs(title = "Dendrograma clustering ejemplo 4",
subtitle = "Agrupamiento completo")+
ylab("Height") +
theme(plot.title = element_text(hjust = 0, size = 18),
plot.subtitle = element_text(hjust = 0, size = 15),
axis.text.x = element_text(size = 15, face = 'bold'))Observación
Podemos pues observar que, aunque con estos datos sencillos, El Complete Clustering es capaz de crear un segundo conglomerado fuera del principal, como en este caso.
Agrupamiento promedio (Group Average Clustering o UPGMA)
El algoritmo UPGMA construye un (dendrograma) que refleja la estructura presente en una matriz de similitud por pares (o una matriz de disimilitud). En cada paso, los dos clústeres más cercanos se combinan en un clúster de nivel superior. La distancia entre dos clústeres cualesquiera A y B, cada uno con un tamaño (es decir, cardinalidad) |A| y |B|, se considera el promedio de todas las distancias \(d(x,y)\) entre pares de objetos \(x\) en \(A\) e y en \(B\), esto es, la distancia media entre elementos del mismo cluster:
\[ \frac{1}{|A|⋅|B|} ∑_{x∈A} ∑_{_y∈B}d(x,y) \]
Ejemplo 5
Este ejemplo se basa en la misma matriz de distancia de los dos ejemplos anteriores.
Tenemos pues 5 elementos (\(a,b,c,d,e\)) i la matriz de distancias \(D_1\):
\[\begin{matrix} & \begin{matrix} \phantom{i} a\phantom{i} & b\phantom{i} & c\phantom{i} & d\phantom{i} & e\phantom{i} \end{matrix} \\ \begin{matrix} a\\ b\\ c\\ d\\ e\\ \end{matrix} & \begin{pmatrix} \phantom{e}0 & 17 & 21 & 31 & 23 \\ 17 & \phantom{e}0 & 30 & 34 & 21 \\ 21 & 30 & \phantom{e}0 & 28 & 39 \\ 31 & 34 & 28 & \phantom{e}0 & 43 \\ 23 & 21 & 39 & 43 & \phantom{e}0 \\ \end{pmatrix} \\ \end{matrix}\]Primer clustering
En este ejemplo \(D_1(a,b)=17\) es el valor más bajo de la matriz, así que agrupamos \(a,b\)
Primera actualización de la matriz
A continuación, actualizamos la matriz de proximidad inicial \(D_1\) en una nueva matriz de proximidad \(D_2\) (ver más abajo), cuyo tamaño pues se reduce en una fila y una columna debido a la agrupación de \(a\) con \(b\). Los valores en negrita en \(D_2\) corresponden a las nuevas distancias, calculadas manteniendo la distancia media entre cada elemento del primer grupo \((a,b)\) y cada uno de los elementos restantes:
\[ \begin{matrix} D_2 ((a,b),c) & = & (D_1 (a,c)\times 1+D_1 (b,c)\times 1)/(1+1) & = &(21+30)/2&=& 25.5 \\ D_2 ((a,b),d)&=& (D_1 (a,d)+D_1 (b,d))/2 &=& (31+34)/2&=&32.5 \\ D_2 ((a,b),e)&=& (D_1 (a,e)+D_1 (b,e))/2&=& (23+21)/2 &=& \Large22 \\ \end{matrix} \]
El resto de elementos en \(D_2\) no quedean afectados, ya que corresponden a distancias no involucradas en el primer cluster.
Segundo clustering
Reiteramos les tres operaciones anteriores a partir de la nueva matriz \(D_2\):
\[ D_2= \begin{pmatrix} & (a,b) & c & d & e\\ (a,b) & 0 & \bf 25.5 & \bf 32.5& \bf \Large{22} \\ c& \bf 25.5& 0& 28& 39\\ d& \bf 32.5& 28& 0& 43\\ e& \bf \Large22& 39& 43& 0\\ \end{pmatrix} \]
Aquí, \(D_2((a,b),e)=22\) es el valor más bajo de \(D_2\), así que unimos el cluster \((a,b)\) con el elemento \(\bf e\).
Segunda actualización de la matriz
Luego, actualizamos \(D_2\) en una nueva matriz de distancias \(D_3\) (ver más abajo), cuyo tamaño se ha reducido en una fila y una columna debido a la agrupación de \((a,b)\) con \(e\). Los valores en negrita en \(D_3\) corresponden a las nuevas distancias, calculadas mediante promedio proporcional, según la metodología que ya hemos visto:
\[ \begin{matrix} D_3 (((a,b),e),c) &=& (D_2 ((a,b),c)×2+D_2 (e,c)×1)/(2+1) &=& (25.5×2+39×1)/3 &=& 30 \\ \end{matrix} \]
Gracias a este promedio proporcional, el cálculo de esta nueva distancia tiene en cuenta el mayor tamaño del grupo \((a,b)\) (dos elementos) con respecto a \(e\) (un elemento). Y de forma similar:
\[ \begin{matrix} & D_3 (((a,b),e),d) &=& (D_2 ((a,b),d)×2+D_2 (e,d)×1)/(2+1) &=& (32.5×2+43×1)/3 &=& 36 \end{matrix} \]
Por lo tanto, el promedio proporcional otorga el mismo peso a las distancias iniciales de la matriz \(D_1\). Por esta razón, se dice que el método no está ponderado: no con respecto al procedimiento matemático, sino con respecto a las distancias iniciales.
Tercer paso
Tercer clustering
Reiteramos nuevamente los tres pasos anteriores, a partir de la matriz de distancias actualizada D3.
\[ D_3= \begin{pmatrix} & ((a,b),e) & c & d & \\ ((a,b),e) & 0 & \bf 30 & \bf 36 \\ c& \bf 30& 0& \Large 28&\\ d& \bf 36& \Large28 & 0&\\ \end{pmatrix} \]
Aquí vemos que \(D_3=28\) es el valor más pequeño. Así que unimos \(c\) y \(d\).
Tercera actualización de la natriz
Hay una única entrada para actualizar, teniendo en cuenta que los dos elementos \(c\) y \(d\) tienen cada uno una contribución de \(1\) en el cálculo del promedio:
\[ D_4 ((c,d),((a,b),e))=(D_3 (c,((a,b),e))×1+D_3 (d,((a,b),e))×1)/(1+1)=(30×1+36×1)/2=33 \]
Clustering final
La matriz final \(D_4\) será
\[ D_4= \begin{pmatrix} & ((a,b),e) & (c,d) \\ ((a,b),e) & 0 & \bf 33 & \\ (c,d) & \bf 33 & 0\\ \end{pmatrix} \]
Dendrogramas
Dendrograma de agrupamiento promedio (Average linkage o UPGMA)
Notar que la altura de la branca que marca el dendrograma corresponde a las distancias entre los clusters.
Dendrograma de agrupamiento simple (Single linkage) con \(\texttt{ggdendro}\) y \(\texttt{ggplot}\)
library(ggdendro)
library(ggplot2)
ggdendrogram(hcl3) +
labs(title = "Dendrograma clustering ejemplo 5",
subtitle = "Agrupamiento promedio")+
ylab("Height") +
theme(plot.title = element_text(hjust = 0, size = 18),
plot.subtitle = element_text(hjust = 0, size = 15),
axis.text.x = element_text(size = 15, face = 'bold'))Observación
Podemos pues observar que también el Average Clustering es capaz de crear un segundo conglomerado fuera del principal, como en el Complete Clusteing.
Agrupamiento centroide (Centroid Linkagage o UPGMC)
Los tres métodos anteriores utilizan únicamente la matriz de distancias, sin requerir observación de los indivíduos. Un método que sí requiere la observación de los indivíduos ee el Agrupamiento Centroide (Centroid Linkage), mediante el cual los clusters, una vez formados, se representan por los valores medios de la \(p\) variables observadas en los individuos que los componen:
Después que se agrupan dos clusters \(A\) y \(B\), el centroide del nuevo \(AB\) es la media ponderada
\[ {\overline{\bf y}}_{AB}= \frac{n_A\overline{\bf y}_A + n_B\overline{\bf y}_B}{n_A+n_B} \]
Ejemplo 6
Adaptamos aquí el ejemplo que se encuentra en EAAR, Cap. 51 sobre estatura en cm y sueldos en Pts de 5 individuos.
\[\begin{matrix} & \begin{matrix} \phantom{i} X_1\phantom{i} & X_2\phantom{i} \end{matrix} \\ \begin{matrix} 1\\ 2\\ 3\\ 4\\ 5\\ \end{matrix} & \begin{pmatrix} 180 & 175 \\ 170 & 180 \\ 175 & 165 \\ 189 & 100 \\ 185 & 110 \\ \end{pmatrix} \\ \end{matrix}\]Estos dato se pueden representar como puntos en un gráfico de dispersión:
library(latex2exp)
df %>%
ggplot(aes(x=X_1,y=X_2)) +
geom_point() +
ylab(TeX("$X_2$")) +
xlab(TeX("$X_1$")) +
ggrepel::geom_text_repel(aes(label = rownames(df))) +
theme_classic()+
ggtitle("Representación de los datos")La matriz de distancias \(D_1\) sería pues la siguiente:
## 1 2 3 4
## 2 11.18034
## 3 11.18034 15.81139
## 4 75.53807 82.22530 66.49060
## 5 65.19202 71.58911 55.90170 10.77033
Primer clustering
En este ejemplo \(D_1(4,5)=10.77033\) es el valor más bajo de la matriz, así que agrupamos los individuos \(\bf4\) y \(\bf 5\), formando el clustr \((\textbf{4,5})\)
Calcular el vector de medias del primer cluster
\[(\frac{189+185}{2},\frac{100+110}{2})=(187,105)\]
Primera actualización de la matriz de datos
\[\begin{matrix} & \begin{matrix} \phantom{i} X_1\phantom{i} & X_2\phantom{i} \end{matrix} \\ \begin{matrix} 1\\ 2\\ 3\\ (45)\\ \end{matrix} & \begin{pmatrix} 180 & 175 \\ 170 & 180 \\ 175 & 165 \\ 187 & 105 \\ \end{pmatrix} \\ \end{matrix}\]Primera actualización de la matriz de distancias \(D_2\)
## 1 2 3
## 2 11.18034
## 3 11.18034 15.81139
## (45) 70.34913 76.90254 61.18823
En este recálculo de distancias encontramos que los individuos \(\textbf{1, 2}\) y \(\bf3\) forman un cluster \((\textbf{1,2,3})\), cuyo vector de medias será:
\[ (\frac{180+170+175}{3},\frac{175+180+165}{3})=(175,173.33) \]
Segunda actualización de la matriz de datos
\[\begin{matrix} & \begin{matrix} \phantom{i} X_1\phantom{iiii} & X_2\phantom{iiii} \end{matrix} \\ \begin{matrix} (123)\\ (45)\\ \end{matrix} & \begin{pmatrix} 175.00 & 173.33 \\ 187.00 & 105.00 \\ \end{pmatrix} \\ \end{matrix}\]## (123)
## (45) 69.37896
Interesante notar que si se utiliza la función \(\texttt{hclust()}\), ésta para calcular las
alturas (height) utiliza las distancias euclídeas al
cuadrado. Además, el método del centroide no garantiza la monotonía.
Esto significa que la altura (distancia) a la que se fusionan dos grupos
puede ser menor que la altura a la que se formaron los grupos
individuales, lo que resulta en “inversiones” en el dendrograma.
Para que coincida con la salida de \(\texttt{hclust(..., method = "centroid")}\), debe calcular su matriz de distancia elevando al cuadrado las distancias euclidianas:
Cálculo sin elevar las distancias al cuadrado
## [1] 10.77033 11.18034 10.70078 62.55554
Cálculo elevando las distancias al cuadrado
## [1] 10.77033 11.18034 12.50000 69.37899
## [,1] [,2]
## [1,] -4 -5
## [2,] -1 -2
## [3,] -3 2
## [4,] 1 3
Interesante es la utilización del valor \(\texttt{merge}\) de dicha función para investgar la formación del clusters.
Se ve que primero se forma un primer clusters \((\textbf{4,5})\), después \((\textbf{1,3}), \bf3\). Finalmentente, se unen los que se han formado.
Hierarchical clustering con R
Ejemplo 7: composición de la leche de diferentes especies de mamíferos
Dataframe \(\texttt{all.mammals.milk}\) de la librería \(\texttt{cluster.datasets}\).
Sobre contenido % de agua, proteinas, grasa, lactosa y cenizas en la leche de mamíferos:
#install.packages("cluster.datasets")
library(cluster.datasets)
data("all.mammals.milk.1956")
milk <- all.mammals.milk.1956
head(milk)## name water protein fat lactose ash
## 1 Horse 90.1 2.6 1.0 6.9 0.35
## 2 Orangutan 88.5 1.4 3.5 6.0 0.24
## 3 Monkey 88.4 2.2 2.7 6.4 0.18
## 4 Donkey 90.3 1.7 1.4 6.2 0.40
## 5 Hippo 90.4 0.6 4.5 4.4 0.10
## 6 Camel 87.7 3.5 3.4 4.8 0.71
Si convertimos la columnas de species en
rownames, una vez el dataframe se convierte en matriz puede
mantener las etiquetas de las especies.
# Calculamos la distancias con dist() excluyendo
row.names(milk) <- milk[,1]
milk <- milk[,2:5]
milk <- as.matrix(milk)
millk.n <- scale(milk)
d.milk <- dist(milk, method = "euclidean")Dendrogama de agrupamiento simple (hclust)
Dendrogama de agrupamiento simple (dendextend)
La librería dendextend permite construir el dendrograma
creado con hclus() separando los clusters de manera igual,
pero con con un efecto visual mejor.
library(dendextend)
dend.milk <- as.dendrogram(m.hcl.single)
dend.milk %>%
set("labels_col", value = c("green", "blue","red","brown"), k=4) %>%
set("branches_k_color", value = c("red", "blue","red","brown"), k = 4) %>%
set("branches_lwd", value = 2) %>%
plot(ylab = "Distancias (Height)")
dend.milk %>%
rect.dendrogram(k=4, border = 8, lty = 5, lwd = 2)
titulo = "Dendrograma clustering all.mammals.milk"
subtitulo = "Agrupamiento simple (Simple linkage)"
mtext(side=3, line=3, adj=-0.1, cex=1.3, titulo)
mtext(side=3, line=2, adj=-0.08, cex=1, subtitulo)Dendrogama de agrupamiento completo (hclust)
Dendrogama de agrupamiento completo (dendextend)
library(dendextend)
dend.milk.complete <- as.dendrogram(m.hcl.complete)
dend.milk.complete %>%
set("labels_col", value = c("green", "blue","red","brown","violet"), k=5) %>%
set("branches_k_color", value = c("green", "blue","red","brown","violet"), k = 5) %>%
set("branches_lwd", value = 2) %>%
plot(ylab = "Distancias (Height)")
dend.milk.complete %>%
rect.dendrogram(k=5, border = 8, lty = 5, lwd = 2)
titulo = "Dendrograma clustering all.mammals.milk"
subtitulo = "Agrupamiento completo (Complete linkage)"
mtext(side=3, line=3, adj=-0.1, cex=1.3, titulo)
mtext(side=3, line=2, adj=-0.08, cex=1, subtitulo)Dendrogama de agrupamiento promendio (hclust)
Dendrogama de agrupamiento promedio (dendextend)
library(dendextend)
dend.milk.average <- as.dendrogram(m.hcl.average)
dend.milk.average %>%
set("labels_col", value = c("green", "blue","red","brown"), k=4) %>%
set("branches_k_color", value = c("green", "blue","red","brown"), k = 4) %>%
set("branches_lwd", value = 2) %>%
plot(ylab = "Distancias (Height)")
dend.milk.average %>%
rect.dendrogram(k=4, border = 8, lty = 5, lwd = 2)
titulo = "Dendrograma clustering all.mammals.milk"
subtitulo = "Agrupamiento promedio (Average linkage)"
mtext(side=3, line=3, adj=-0.1, cex=1.3, titulo)
mtext(side=3, line=2, adj=-0.08, cex=1, subtitulo)Técnicas inferenciales de formación de conglomerados
Las técnicas inferenciales en formación de conglomerados se corresponden con las varias técnicas de conglomeración, aportándoles justificación desde la perspectiva inferencial.
El criterio de Approximate Weight of Evidence (AWE) es una medida utilizada principalmente en el modelado de mezclas y clustering para seleccionar el número de componentes (clusters) óptimo, \(K\), actuando como una aproximación bayesiana al factor de Bayes. A diferencia de otros criterios como \(BIC\) o AIC, el \(AWE\) fue diseñado específicamente para favorecer estructuras de clusters más “clasificables” o separadas, imponiendo una penalización más fuerte por complejidad para evitar la sobreestimación del número de componentes.
En cualquier caso, no hay liberías fiables que trabajen directamente con este algoritmo. Así que utilizaremos \(BIC\), tal y como se procesa en \(\tt mclust\).
Siendo el cociente de verosimilitudes:
\[ B_k=\frac{f_k(x_1,...,x_n)}{f_1(x_1,...,x_n)} \]
donde \(f_k\) es el modelo cuando los datos proceden de \(k\) clusters, y \(f_1\) suponiendo que los datos provienen de un único cnglomerado.
\(BIC\) (Bayesian Information Criterion)
\(BIC\) (Bayesian Information Criterion) se define como
\[ \text{BIC}=2\log (B_k) - k\log (n) \]
o, equivalentemente (en lenguaje \(\tt mclust\)): \[ \text{BIC}=2·\text{Log-lik}-p·\log n \]
donde:
\(LogLik\) es el log del cociente de verosimilitud que se obtiene de \(\tt mclust\).
\(p\) es el número de parámetros en el modelo.
\(n\) es el número de observaciones.
library(mclust)
data(faithful)
mod <- Mclust(faithful)
# Extraer componentes
loglik <- mod$loglik
n <- mod$n
p <- mod$df # Degrees of freedom (number of parameters)
# Calcular BIC
bic <- 2 * loglik - p * log(n)
bic## [1] -2314.316
## [1] -2314.316
Como se quería demostrar.
Cómo Funciona el Modelo
Selección de Modelos: Se calculan los valores BIC para varios modelos candidatos
Criterio de Elección: Se prefiere el modelo con el menor valor de \(BIC\).
Equilibrio: El BIC busca un equilibrio entre la calidad del ajuste y la parsimonia (sencillez). Un modelo con demasiados parámetros (complejo) podría tener un mejor ajuste (mayor \(\hat {L}\)), pero tendrá un término de penalización \(k\ln (n)\) muy alto, resultando en un BIC elevado.
Uso con muestras grandes: El BIC es más severo que el AIC (Criterio de Información de Akaike) al penalizar modelos complejos, especialmente cuando el tamaño de la muestra (\(n\)) es grande.
Ejemplo 7
% De voto republicano en varias elecciones de EEUU, contenidos en la libería \(\tt cluster\): seleccionaremos las elecciones de 1960, 1964, 1968, 1972, 1976.
## X1960 X1964 X1968 X1972 X1976
## Alabama 41.75 69.5 14.0 72.4 43.48
## Alaska 50.94 34.1 45.3 58.1 62.91
## Arizona 55.52 50.4 54.8 64.7 58.62
## Arkansas 43.06 43.9 30.8 68.9 34.97
## California 50.10 40.9 47.8 55.0 50.89
## Colorado 54.63 38.7 50.5 62.6 55.89
Modelo
## ----------------------------------------------------
## Gaussian finite mixture model fitted by EM algorithm
## ----------------------------------------------------
##
## Mclust VVE (ellipsoidal, equal orientation) model with 2 components:
##
## log-likelihood n df BIC ICL
## -734.7031 50 31 -1590.679 -1594.198
##
## Clustering table:
## 1 2
## 17 33
##
## Mixing probabilities:
## 1 2
## 0.3228084 0.6771916
##
## Means:
## [,1] [,2]
## X1960 47.06244 51.31849
## X1964 47.85403 37.93360
## X1968 36.39408 47.81170
## X1972 68.20686 60.08381
## X1976 46.72029 51.71609
##
## Variances:
## [,,1]
## X1960 X1964 X1968 X1972 X1976
## X1960 89.45829 -107.79741 84.98862 -22.80387 16.12625
## X1964 -107.79741 214.47710 -127.90031 64.76912 -27.68256
## X1968 84.98862 -127.90031 116.08296 -30.98921 31.07491
## X1972 -22.80387 64.76912 -30.98921 30.32447 -18.43031
## X1976 16.12625 -27.68256 31.07491 -18.43031 41.63526
## [,,2]
## X1960 X1964 X1968 X1972 X1976
## X1960 24.14953 28.35230 28.33126 16.85002 17.30302
## X1964 28.35230 49.63329 39.53118 21.88003 26.02568
## X1968 28.33126 39.53118 41.52527 21.24681 25.59121
## X1972 16.85002 21.88003 21.24681 29.62491 19.89413
## X1976 17.30302 26.02568 25.59121 19.89413 26.73512
El resumen parece por lo tanto sugerir un modelo formado por \(k=2\) clusters: uno de 17 unidades y un segundo de 33 (ver \(\texttt {Clustering table}\)).
El grafico \(\tt plot\) que realiza \(\tt Mclust\) es una serie de paired, si las dimensiones implicadas son más de dos y no se realiza ninguna selección. En este caso serían 5. Sin embargo, la función \(\tt plot\) dispone del parámetro \(\tt dimens\) para ello.
Alternativamente, la librería \(\tt factoextra\) dispone de una función para representar los clusters que genera \(\tt Mclust\). En este caso, la diferencia es que los ejes son dos Componente Principales. No existe por lo tanto el problema de seleccionar las dimensiones.
#install.packages("factoextra")
library(factoextra)
fviz_mclust(modvr, what = "classification", geom= "point")
A. García Perez, Estadística Aplicada Avanzada con R, Madrid, 2022↩︎