Объедините сообщество, найденное на этапе 1 алгоритма Лувена, и оцените получение выигрыша от модульности за счет дальнейшего объединения суперузлов. - PullRequest
0 голосов
/ 26 мая 2020

Я написал код ниже, для обнаружения модульности, я также запускаю этап 1 алгоритма Лувена, но у меня есть вопрос, как я могу объединить сообщество, найденное на этапе 1, в так называемые суперузлы и оценить получение прироста модульности за счет дальнейшего объединения суперузлов

library(igraph)
g <- graph.formula(A1:A2:A3:A4:A5--A1:A2:A3:A4,A5,A5-A6,
                   A6:A7:A8:A9:A10--A6:A7:A8:A9,A10,A10-A11,
                   A11:A12:A13:A14:A15--A11:A12:A13:A14,A15,A15-A16,
                   A16:A17:A18:A19:A20--A16:A17:A18:A19,A20,A20-A21,
                   A21:A22:A23:A24:A25--A21:A22:A23:A24,A25,A25-A26,
                   A26:A27:A28:A29:A30--A26:A27:A28:A29,A30,A30-A1)
par(mar=c(2,2,2,2)) ### set margins

plot(g, vertex.size=5,edge.color="gray80",vertex.label=NA,vertex.color="red")

#2) Compute the initial value of the modularity
V(g)$grp <- c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6)
#op <- par(mfrow=c(1,2))
par(mar=c(2,2,2,2)) ### set margins

plot(g,vertex.color=(V(g)$grp),
     vertex.size=7,vertex.label=NA)

modularity(g,V(g)$grp)


#3) Try to PARTIALLY run the stage 1 of the Louvain algorithm
cl <- cluster_louvain(g)
modularity(cl)
plot(cl, g,
     main="Louvain algorithm",vertex.size=8 )

1 Ответ

1 голос
/ 31 мая 2020

Думаю, что вам нужна функция contract. Самое простое решение c будет:

g2 = contract(g, cl$membership)
plot(g2, vertex.color=1:6)

Basic contracted graph

Однако, если вы хотите удалить ребра из новых вершин для самих себя, также запустите
g2 = simplify(g2).
Если вам нужны более красивые имена для узлов, попробуйте
V(g2)$name = 1:6

...