Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

linkage

Árbol aglomerativo de grupos jerárquicos

Descripción

Z = linkage(X) devuelve una matriz Z que representa un árbol que contiene grupos jerárquicos de las filas de la matriz de datos de entrada X.

ejemplo

Z = linkage(X,method) crea el árbol utilizando el method especificado, que describe cómo medir la distancia entre grupos. Para obtener más información, consulte Enlaces.

ejemplo

Z = linkage(X,method,metric) lleva a cabo el agrupamiento pasando metric a la función pdist, que calcula la distancia entre las filas de X.

ejemplo

Z = linkage(X,method,metric,'savememory',value) utiliza un algoritmo de ahorro de memoria cuando value está 'on' y utiliza el algoritmo estándar cuando value está 'off'.

ejemplo

Z = linkage(X,method,pdist_inputs) pasa pdist_inputs a la función pdist, que calcula la distancia entre las filas de X. El argumento pdist_inputs consta de la métrica 'seuclidean', 'minkowski' o 'mahalanobis' y una opción adicional de métrica de distancia.

Z = linkage(y) utiliza una representación de vector y de una matriz de distancia. y se calcula mediante pdist o es una matriz de diferenciación más general que se ajusta al formato de salida de pdist.

ejemplo

Z = linkage(y,method) crea el árbol utilizando el method especificado, que describe cómo medir la distancia entre grupos.

Ejemplos

contraer todo

Genere de forma aleatoria datos de muestra con 20.000 observaciones.

rng('default') % For reproducibility
X = rand(20000,3);

Cree un árbol de grupos jerárquicos con el método de enlace ward. En este caso, la opción 'SaveMemory' de la función clusterdata se establece en 'on' de forma predeterminada. En general, especifique el mejor valor para 'SaveMemory' en función de las dimensiones de X y de la memoria disponible.

Z = linkage(X,'ward');

Agrupe los datos en un máximo de cuatro grupos y represente el resultado.

c = cluster(Z,'Maxclust',4);
scatter3(X(:,1),X(:,2),X(:,3),10,c)

Figure contains an axes object. The axes object contains an object of type scatter.

cluster identifica cuatro grupos de los datos.

Encuentre un máximo de tres grupos en el conjunto de datos fisheriris y compare las asignaciones de grupos de las flores con su clasificación conocida.

Cargue los datos de muestra.

load fisheriris

Cree un árbol de grupos jerárquicos con el método 'average' y la métrica 'chebychev'.

Z = linkage(meas,'average','chebychev');

Encuentre un máximo de tres grupos en los datos.

T = cluster(Z,'maxclust',3);

Cree un dendrograma de Z. Para ver los tres grupos, utilice 'ColorThreshold' con un corte a medio camino entre el antepenúltimo y el penúltimo enlace.

cutoff = median([Z(end-2,3) Z(end-1,3)]);
dendrogram(Z,'ColorThreshold',cutoff)

Figure contains an axes object. The axes object contains 29 objects of type line.

Muestre las dos últimas filas de Z para ver cómo se combinan los tres grupos en uno. linkage combina el grupo 293 (azul) con el grupo 297 (rojo) para formar el grupo 298 con un enlace de 1.7583. linkage combina entonces el grupo 296 (verde) con el grupo 298.

lastTwo = Z(end-1:end,:)
lastTwo = 2×3

  293.0000  297.0000    1.7583
  296.0000  298.0000    3.4445

Compruebe cómo las asignaciones de los grupos corresponden a las tres especies. Por ejemplo, uno de los grupos contiene 50 flores de la segunda especie y 40 flores de la tercera especie.

crosstab(T,species)
ans = 3×3

     0     0    10
     0    50    40
    50     0     0

Cargue el conjunto de datos examgrades.

load examgrades

Cree un árbol jerárquico utilizando linkage. Utilice el método 'single' y la métrica de Minkowski con un exponente de 3.

Z = linkage(grades,'single',{'minkowski',3});

Observe el 25.º paso de agrupamiento.

Z(25,:)
ans = 1×3

   86.0000  137.0000    4.5307

linkage combina la 86.ª observación y el 137.º grupo para formar un grupo de índice 120+25=145, donde 120 es el número total de observaciones en grades y 25 es el número de fila en Z. La distancia más corta entre la 86.ª observación y cualquiera de los puntos del 137.º grupo es 4.5307.

Cree un árbol aglomerativo de grupos jerárquicos mediante una matriz de diferenciación.

Tome una matriz de diferenciación X y conviértala a una forma de vector que linkage acepte utilizando squareform.

X = [0 1 2 3; 1 0 4 5; 2 4 0 6; 3 5 6 0];
y = squareform(X);

Cree un árbol de grupos utilizando linkage con el método 'complete' para calcular la distancia entre grupos. Las primeras dos columnas de Z muestran cómo linkage combina los grupos. La tercera columna de Z proporciona la distancia entre grupos.

Z = linkage(y,'complete')
Z = 3×3

     1     2     1
     3     5     4
     4     6     6

Cree un dendrograma de Z. El eje x corresponde a los nodos hoja del árbol y el eje y corresponde a las distancias de enlace entre grupos.

dendrogram(Z)

Figure contains an axes object. The axes object contains 3 objects of type line.

Argumentos de entrada

contraer todo

Datos de entrada, especificados como matriz numérica con dos o más filas. Las filas representan observaciones y las columnas representan categorías o dimensiones.

Tipos de datos: single | double

Algoritmo para calcular la distancia entre grupos, especificado como uno de los valores de esta tabla.

MétodoDescripción
'average'

Distancia media no ponderada (UPGMA)

'centroid'

Distancia al centroide (UPGMC), adecuada únicamente para distancias euclidianas

'complete'

Distancia más larga

'median'

Centro ponderado de la distancia a masa (WPGMC), adecuado únicamente para distancias euclidianas

'single'

Distancia más corta

'ward'

Distancia interior al cuadrado (algoritmo de varianza mínima), adecuada únicamente para distancias euclidianas

'weighted'

Distancia media ponderada (WPGMA)

Para obtener más información sobre este método, consulte Enlaces.

Métrica de distancia, especificada como cualquier métrica aceptada por la función pdist. Estas métricas se describen en la siguiente tabla.

ValorDescripción
'euclidean'

Distancia euclidiana (valor predeterminado)

'squaredeuclidean'

Distancia euclidiana cuadrada. (Esta opción solo se ofrece para mejorar la eficiencia. No resuelve la desigualdad triangular).

'seuclidean'

Distancia euclidiana estandarizada. Cada diferencia de las coordenadas entre las observaciones se escala dividiendo por el elemento correspondiente de la desviación estándar, S = std(X,'omitnan'). Use DistParameter para especificar un valor distinto de S.

'fasteuclidean'Distancia euclidiana calculada utilizando un algoritmo alternativo que ahorra tiempo cuando el número de predictores es al menos 10. En algunos casos, este algoritmo más rápido puede reducir la precisión. Los algoritmos que empiezan con 'fast' no admiten datos dispersos. Para obtener más detalles, consulte Algoritmos.
'fastsquaredeuclidean'Distancia euclidiana cuadrada calculada utilizando un algoritmo alternativo que ahorra tiempo cuando el número de predictores es al menos 10. En algunos casos, este algoritmo más rápido puede reducir la precisión. Los algoritmos que empiezan con 'fast' no admiten datos dispersos. Para obtener más detalles, consulte Algoritmos.
'fastseuclidean'Distancia euclidiana estandarizada calculada utilizando un algoritmo alternativo que ahorra tiempo cuando el número de predictores es al menos 10. En algunos casos, este algoritmo más rápido puede reducir la precisión. Los algoritmos que empiezan con 'fast' no admiten datos dispersos. Para obtener más detalles, consulte Algoritmos.
'mahalanobis'

Distancia de Mahalanobis, calculada usando la covarianza de muestra de X, C = cov(X,'omitrows'). Use DistParameter para especificar un valor distinto de C, donde la matriz C es simétrica y definida positiva.

'cityblock'

Distancia Manhattan

'minkowski'

Distancia de Minkowski. El exponente predeterminado es 2. Use DistParameter para especificar un exponente diferente P, donde P es un valor de escalar positivo del exponente.

'chebychev'

Distancia de Chebyshov (diferencia de coordenada máxima)

'cosine'

Uno menos el coseno del ángulo incluido entre puntos (tratados como vectores)

'correlation'

Uno menos la correlación de la muestra entre los puntos (tratados como secuencias de valores)

'hamming'

Distancia de Hamming, que es el porcentaje de coordenadas que difieren

'jaccard'

Uno menos el coeficiente de Jaccard, que es el porcentaje de coordenadas, que no son cero, que difieren

'spearman'

Uno menos la correlación del coeficiente de Spearman entre observaciones (tratadas como secuencias de valores)

@distfun

Identificador de función de la distancia personalizada. Una función de distancia tiene esta forma:

function D2 = distfun(ZI,ZJ)
% calculation of distance
...
donde

  • ZI es un vector de 1 por n que contiene una sola observación.

  • ZJ es una matriz de m2 por n que contiene varias observaciones. distfun debe aceptar una matriz ZJ con un número arbitrario de observaciones.

  • D2 es un vector de distancias de m2 por 1, mientras que D2(k) corresponde a la distancia entre las observaciones ZI y ZJ(k,:).

Si sus datos no son dispersos, por lo general, podrá calcular las distancias más rápido usando una métrica de distancia integrada en lugar de un identificador de función.

Para obtener más información, consulte Métricas de distancia.

Utilice pdist_inputs en lugar de metric para especificar el argumento de entrada adicional DistParameter de pdist para 'seuclidean', 'minkowski' o 'mahalanobis'.

Tipos de datos: char | string | function_handle

Métrica de distancia y opción de métrica de distancia, especificadas como un arreglo de celdas del par separado por comas que consta de los dos argumentos de entrada Distance y DistParameter de la función pdist. Este argumento solo es válido para especificar 'seuclidean', 'minkowski' o 'mahalanobis'.

Ejemplo: {'minkowski',5}

Tipos de datos: cell

Indicador para la opción 'savememory', especificado como 'on' u 'off'. La configuración 'on' hace que linkage cree grupos sin calcular la matriz de distancia. La configuración 'on' solo está disponible cuando method es 'centroid', 'median' o 'ward', y metric es 'euclidean'.

Cuando value es 'on', el tiempo de ejecución de linkage es proporcional al número de dimensiones (número de columnas de X). Cuando value es 'off', el requisito de memoria de linkage es proporcional a N2, donde N es el número de observaciones. La mejor configuración (menos tiempo) para utilizar para value depende de las dimensiones, el número de observaciones y la memoria disponible en el problema. La configuración de value predeterminada es una aproximación de una configuración óptima.

El valor predeterminado es 'on' cuando X tiene 20 columnas o menos o cuando el ordenador no tiene suficiente memoria para almacenar la matriz de distancia. De lo contrario, el valor predeterminado es 'off'.

Ejemplo: 'savememory','on'

Distancias, especificadas como un vector numérico con el mismo formato que la salida de la función pdist:

  • Un vector fila de longitud m(m – 1)/2, correspondiente a pares de observaciones en una matriz con m filas

  • Distancias establecidas en el orden (2,1), (3,1), ..., (m,1), (3,2), ..., (m,2), ..., (m,m – 1))

y puede ser una matriz de diferenciación más general que se ajusta al formato de salida de pdist.

Tipos de datos: single | double

Argumentos de salida

contraer todo

Árbol aglomerativo de grupos jerárquicos, devuelto como matriz numérica. Z es una matriz de (m – 1) por 3, donde m es el número de observaciones en los datos originales. Las columnas 1 y 2 de Z contienen índices de grupo enlazados en pares para formar un árbol binario. Los nodos hoja están numerados de 1 a m. Los nodos hoja son grupos de elementos singulares a partir de los que se construyen todos los grupos superiores. A cada grupo que se acaba de formar, correspondiente a la fila Z(I,:), se le asigna el índice m + I. Las entradas Z(I,1) y Z(I,2) contienen los índices de los dos grupos de componentes que forman el grupo m + I. Los grupos superiores m – 1 corresponden a los nodos interiores del árbol de agrupamiento. Z(I,3) contiene la distancia de enlace entre los dos grupos fusionados en la fila Z(I,:).

Por ejemplo, considere crear un árbol con 30 nodos iniciales. Suponga que el grupo 5 y el grupo 7 se combinan en el paso 12 y que la distancia entre ellos en ese paso es de 1.5. Entonces Z(12,:) es [5 7 1.5]. El grupo que se acaba de formar tiene el índice 12 + 30 = 42. Si el grupo 42 aparece en una fila posterior, la función combina el grupo creado en el paso 12 para formar un grupo más grande.

Tipos de datos: single | double

Más acerca de

contraer todo

Enlaces

Un enlace es la distancia entre dos grupos.

La siguiente notación describe los enlaces utilizados por los distintos métodos:

  • El grupo r se forma a partir de los grupos p y q.

  • nr es el número de objetos en el grupo r.

  • xri es el i-ésimo objeto del grupo r.

  • El enlace único, también llamado vecino más cercano, utiliza la distancia más corta entre objetos en los dos grupos.

    d(r,s)=min(dist(xri,xsj)),i(i,...,nr),j(1,...,ns)

  • El enlace completo, también llamado vecino más alejado, utiliza la distancia más larga entre objetos en los dos grupos.

    d(r,s)=max(dist(xri,xsj)),i(1,...,nr),j(1,...,ns)

  • El enlace medio utiliza la distancia media entre todos los pares de objetos en dos grupos cualesquiera.

    d(r,s)=1nrnsi=1nrj=1nsdist(xri,xsj)

  • El enlace de centroides utiliza la distancia euclidiana entre los centroides de los dos grupos.

    d(r,s)=x¯rx¯s2,

    donde

    x¯r=1nri=1nrxri

  • El enlace de mediana utiliza la distancia euclidiana entre los centroides ponderados de los dos grupos.

    d(r,s)=x˜rx˜s2,

    donde x˜r y x˜s son centroides ponderados para los grupos r y s. Si el grupo r se ha creado combinando los grupos p y q, x˜r se define repetidamente como

    x˜r=12(x˜p+x˜q)

  • El enlace de Ward utiliza la suma incremental de cuadrados, es decir, el aumento en la suma total de los cuadrados dentro del grupo como resultado de unir dos grupos. La suma de cuadrados dentro del grupo se define como la suma de los cuadrados de las distancias entre todos los objetos del grupo y el centroide del grupo. La métrica de suma de cuadrados es equivalente a la siguiente métrica de distancia d(r,s), que es la fórmula que utiliza linkage.

    d(r,s)=2nrns(nr+ns)x¯rx¯s2,

    donde

    • 2 es la distancia euclidiana.

    • x¯r y x¯s son los centroides de los grupos r y s.

    • nr y ns son el número de elementos de los grupos r y s.

    En algunas referencias, el enlace de Ward no utiliza el factor de 2 multiplicando nrns. La función linkage utiliza este factor para que la distancia entre dos grupos de elementos singulares sea la misma que la distancia euclidiana.

  • El enlace medio ponderado utiliza una definición repetitiva para la distancia entre dos grupos. Si el grupo r se ha creado combinando los grupos p y q, la distancia entre r y otro grupo s se define como la media de la distancia entre p y s y la distancia entre q y s.

    d(r,s)=(d(p,s)+d(q,s))2

Sugerencias

  • El cálculo de linkage(y) puede ser lento cuando y es una representación de vector de la matriz de distancia. Para los métodos 'centroid', 'median' y 'ward', linkage comprueba si y es una distancia euclidiana. Evite esta larga comprobación pasando X en lugar de y.

  • Los métodos 'centroid' y 'median' pueden producir un árbol de grupos que no sea monótono. Este resultado se obtiene cuando la distancia desde la unión de dos grupos, r y s, a un tercer grupo es menor que la distancia entre r y s. En este caso, en un dendrograma diseñado con la orientación predeterminada, la ruta de una hoja al nodo raíz toma algunos pasos hacia abajo. Para evitar este resultado, utilice otro método. Esta figura muestra un árbol de grupos no monótono.

    Nonmonotonic cluster tree

    En este caso, el grupo 1 y el grupo 3 se unen formando un grupo nuevo y la distancia entre este grupo nuevo y el grupo 2 es menor que la distancia entre el grupo 1 y el grupo 3. El resultado es un árbol no monótono.

  • Puede proporcionar la salida Z a otras funciones incluyendo dendrogram para mostrar el árbol, cluster para asignar puntos a los grupos, inconsistent para calcular medidas inconsistentes y cophenet para calcular el coeficiente de correlación cofenética.

Historial de versiones

Introducido antes de R2006a