R、 igraph walktrap.community在完全连接的图中拆分所有节点

R、 igraph walktrap.community在完全连接的图中拆分所有节点,r,igraph,R,Igraph,使用walktrap.community方法在我的图中定义社区效果很好-在我测试的所有算法中,它的性能最好。需要注意的是,在没有自链接的完全连通图的情况下(每个节点都连接到其他节点,但不是自己),每个节点都被分配到自己的社区 我在网络分析方面没有经验,但这似乎是一个有趣的案例,它肯定不是期望的行为。如何在实际数据中避免这种拆分 library(igraph) match.mat = matrix(T, nrow=8, ncol=8) diag(match.mat)[1:8] = T topol

使用
walktrap.community
方法在我的图中定义社区效果很好-在我测试的所有算法中,它的性能最好。需要注意的是,在没有自链接的完全连通图的情况下(每个节点都连接到其他节点,但不是自己),每个节点都被分配到自己的社区

我在网络分析方面没有经验,但这似乎是一个有趣的案例,它肯定不是期望的行为。如何在实际数据中避免这种拆分

library(igraph)
match.mat = matrix(T, nrow=8, ncol=8)

diag(match.mat)[1:8] = T
topology = which(match.mat, arr.ind=T)
g = graph.data.frame(topology, directed=F)
cm = walktrap.community(g)
membership(cm)

# 2 3 4 5 6 7 8 1 
# 1 1 1 1 1 1 1 1 

plot(cm, g)

从概念上讲,我不确定缺乏自链接会如何导致每个节点被分割——可能所有可能的社区都被绑定,因此被分割?但在这方面,所有自我联系的情况似乎都是相同的

谢谢


如果您仔细阅读了本文,您会注意到Walktrap基于随机行走转移矩阵构建节点距离度量。然而,这个转移矩阵需要遍历,因此它的底层邻接矩阵需要是连通的和非二部的。非二部性是通过向节点添加自循环来实现的。因此,需要向图形中的每个节点添加自循环。也许将来在igraph包中包含此修正是个好主意,但据我所知,他们使用的是Latapy和Pons的C实现,对于这一个,图形需要有自循环。希望这能回答你的问题

diag(match.mat)[1:8] = F
topology = which(match.mat, arr.ind=T)
g = graph.data.frame(topology, directed=F)
cm = walktrap.community(g)
membership(cm)

#2 3 4 5 6 7 8 1 
#1 2 3 4 5 6 7 8 

plot(cm, g)