在R中进行网络模块化计算

7
网络模块性的方程式可以在其维基百科页面(以及权威书籍)上找到。我想看到它在一些代码中运行。使用R(The R Foundation for Statistical Computing)与igraph一起使用modularity library,可以实现这一点。
我想看到下面的示例(或类似示例)在代码中用于计算模块性。该库提供了一个示例,但并不是我想要的。
让我们有一组顶点V = {1, 2, 3, 4, 5}和边E = {(1,5), (2,3), (2,4), (2,5) (3,5)},形成一个无向图。
将这些顶点分为两个社区:c1 = {2,3}和c2 = {1,4,5}。需要计算这两个社区的模块性。
1个回答

9
library(igraph)
g <- graph(c(1,5,2,3,2,4,2,5,3,5))
membership <- c(1,2,2,1,1)
modularity(g, membership)

这里有一些解释:

  1. 创建图表时我使用的向量是图的边缘列表。(在igraph 0.6之前的版本中,我们需要从数字中减去1,因为igraph当时使用基于零的顶点索引,但现在不再需要)。

  2. 成员向量membership的第i个元素给出了顶点i所属社区的索引。


谢谢Tamás。你是怎么想到membership <- c(1,2,2,1,1)的?我可能没有正确理解,但对于第一个边(1,5),你说它属于社区1,但顶点1和5属于社区2? - ale
是的,我混淆了;在我的向量中,顶点1、4和5属于社区1,而顶点2和3属于社区2。 - Tamás
注意,会员向量必须从零开始计数(根据文档要求)。 - Pomber
@Pomber:实际上,这并不重要,因为模块化公式只关心两个顶点是否属于同一个社区,所以将成员向量移位任意常数是安全的。然而,igraph函数始终返回基于零的成员向量是正确的。 - Tamás
也许较新的iGraph库已经改变了一些东西,但是上述图形“g”在被实例化时会产生错误。与上面的评论相反,根据文档(http://igraph.org/r/doc/modularity.html),成员向量现在必须从1开始。 - Megatron
是的,自igraph 0.6版本起,igraph的R接口从基于0的索引更改为基于1的索引,以与R的其余部分更加一致。我会更新这篇文章。 - Tamás

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接