2010-05-25 20 views
9

¿Cómo puedo ejecutar una agrupación jerárquica en una matriz de correlación en scipy/numpy? Tengo una matriz de 100 filas por 9 columnas, y me gustaría agrupar jerárquicamente por correlaciones de cada entrada en las 9 condiciones. Me gustaría utilizar la correlación 1-pearson como las distancias para la agrupación. Asumiendo que tengo un numpy array "X" que contiene la matriz de 100 x 9, ¿cómo puedo hacer esto?agrupación jerárquica en correlaciones en Python scipy/numpy?

He intentado utilizar hcluster, en base a este ejemplo: Sin embargo

Y=pdist(X, 'seuclidean') 
Z=linkage(Y, 'single') 
dendrogram(Z, color_threshold=0) 

, pdist no es lo que quiero ya que es la distancia euclídea. ¿Algunas ideas?

gracias.

Respuesta

6

Sólo cambia la métrica de correlation de manera que la primera línea se convierte en:

Y=pdist(X, 'correlation') 

Sin embargo, creo que el código se puede simplificar a poco:

Z=linkage(X, 'single', 'correlation') 
dendrogram(Z, color_threshold=0) 

debido a la vinculación se hará cargo de el pdist para ti.

+1

¿La "correlación" aquí significa Pearson o Spearman? Además, ¿no debería ser 1 - pearson para ser una medida de distancia válida que pueda usarse para pdist? ¿Pdist hace eso automáticamente? Gracias. – user248237dfsf

+2

Parece que es 1 - Pearson para mí. Puede verlo usted mismo en site-packages/scipy/spatial/distance.py –

+2

. Es bastante raro que la "correlación" mencionada solo signifique la correlación de Spearman. Por lo general, si es Spearman, la gente lo dirá, de lo contrario asume Pearson. – dwf

Cuestiones relacionadas