0

我想找到 1)网络的模块化并找到 2)每个社区中节点的身份。

我认为这是获得模块化的方法:

g <- graph.full(5) %du% graph.full(5) %du% graph.full(5)
g <- add.edges(g, c(1,6, 1,11, 6, 11))
ebc <- edge.betweenness.community(g)

sizes(ebc)
#Community sizes
#1 2 3 
#5 5 5 

modularity(g,membership(ebc))
#[1] 0.5757576

但是在Gabor 的这个链接上,我得到了这个代码:

memberships <- list()
G <- graph.full(5) %du% graph.full(5) %du% graph.full(5)
G <- add.edges(G, c(1,6, 1,11, 6, 11))

### edge.betweenness.community
ebc <- edge.betweenness.community(G)
mods <- sapply(0:ecount(G), function(i) {
  g2 <- delete.edges(G, ebc$removed.edges[seq(length=i)])
  cl <- clusters(g2)$membership
  modularity(G, cl)
})

g2 <- delete.edges(G, ebc$removed.edges[1:(which.max(mods)-1)])
memberships$`Edge betweenness` <- clusters(g2)$membership

这似乎和我做的事情一样,我认为delete.edgesandclusters是关于通过删除连接边然后获取每个组件中节点的 ID 将模块拆分为单独的组件。

虽然我有几个问题:

  1. 在@Gabor Csardil 的代码中,为什么modularity调用使用clusters(G)$membershipebc不像我在示例中那样使用?有什么不同?(我会认为这会高估实际的模块化?)似乎也有另一种使用community.to.membership

  2. 代码返回了这个我不明白的mods错误,这也是我无法探索g2cl看到更多正在发生的事情的部分原因:

delete.edges(G, ebc$removed.edges[seq(length = i)]) 中的错误:在 iterators.c:1809:无法创建迭代器,无效的边 id,无效的顶点 id

4

1 回答 1

3

一般的答案是 wiki 中的代码已过时。它适用于 igraph 版本 0.5.x,但不适用于 0.6.x。进一步来说:

  1. 在 igraph 0.5.x 版本中,没有直接的方法来获取成员向量,在 0.6.x 版本中你可以说membership(ebc).

  2. 在 0.5.x 版本中,顶点 id 以 0 开头,在 0.6.x 版本中,它们以 1 开头,因此您不必delete.edges()在行中减去 1。

于 2013-01-15T14:52:45.177 回答