使用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)
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)
从概念上讲,我不确定缺乏自我联系会导致每个节点被分裂 - 也许可能的社区都被束缚并因此分裂?但在这方面,所有自我联系的情况似乎都是等同的。
谢谢!
答案 0 :(得分:0)
如果您仔细阅读了本文,您会注意到Walktrap根据随机游走转换矩阵构建节点距离度量。然而,这个转移矩阵需要是遍历的,因此它的基础邻接矩阵需要连接且非二分。通过向节点添加自循环来实现非二分性。因此,您需要为图中的每个节点添加自循环。也许将来在igraph包中包含这种修正是一个好主意,但据我所知,他们正在使用Latapy和Pons的C实现,对于这个,图需要有自循环。希望这能回答你的问题!