R,igraph walktrap.community在完全连接图的情况下拆分所有节点

时间:2015-02-27 21:51:04

标签: r igraph

使用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)

Grouped network

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)

Split network

从概念上讲,我不确定缺乏自我联系会导致每个节点被分裂 - 也许可能的社区都被束缚并因此分裂?但在这方面,所有自我联系的情况似乎都是等同的。

谢谢!

http://www-rp.lip6.fr/~latapy/Publis/communities.pdf

1 个答案:

答案 0 :(得分:0)

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