2014-11-18 2 views
1

Я пытаюсь сгруппировать узлы (C1, C2, C3 ...) графа, используя hclust, а моя метрика подобия - количество связей между узлами.Как преобразовать следующую матрицу подобия в матрицу расстояний для выполнения hclust?

У меня есть данные, такие как

c = matrix(c(0,1,3,1,0,5,3,5,0), nrow=3, ncol=3) 

В основном это матрица сходства

C1 C2 C3 
C1 0 1 3 
C2 1 0 5 
C3 3 5 0 

Это неориентированный граф, где сходство между С1 и С3 3 ссылки. Мне нужно, чтобы преобразовать эти данные в подходящий dist.matrix как

C1 C2 
C2 1 
C3 1/3 1/5 

формата на основе моего подобия метрики (#links между двумя узлами). Как мне это сделать?

+1

'1/c' получает закрыть. (BTW его не очень хорошая практика для вызова других объектов 'c', поскольку это функция R) – user20650

+1

' as.dist (1/c) 'дает результат в вашем вопросе, но я бы рекомендовал« igraph »для кластеризации графиков (см. ответ). – jlhoward

ответ

3

Похоже, вы хотите использовать иерархическую кластеризацию, основанную на краевом отношении. Вы можете сделать это прямо в igraph.

library(igraph) 
c <- matrix(c(0,1,3,1,0,5,3,5,0), nc=3) 
g <- graph.adjacency(c,mode="undirected") 
bc <- edge.betweenness.community(g) 
par(mfrow=c(1,2)) 
plot(g) 
plot(as.dendrogram(bc)) 

c <- matrix(c(0,0,0,4,0, 
       0,0,0,1,0, 
       0,0,0,4,1, 
       4,1,4,0,3, 
       0,0,1,3,0),nc=5) 
g <- graph.adjacency(c,mode="undirected") 
bc <- edge.betweenness.community(g) 
plot(g) 
plot(as.dendrogram(bc)) 

+0

Но как добавить ярлыки для дендрограммы? как заменить числа на оси х на некоторые метки? V (g) $ name <- c ("a", "b", "c", "d", "e"), а затем? – rk567

+0

Ничего! понял. Я должен был включить эту строку перед bc <- edge.betweenness.community (g). – rk567

+1

Или установите 'colnames (c)' перед созданием графика. – jlhoward

Смежные вопросы