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

しかし、ガボールによるこのリンクで、私はこのコードを取得します:

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

これは私と同じことをしているようです.andは、接続エッジを削除してから各コンポーネントのノードのIDを取得することにより、モジュールを個別のコンポーネントに分割することだdelete.edgesと思います.clusters

いくつか質問がありますが:

  1. @Gabor Csardil のコードで、呼び出しが私の例のようにmodularity使用clusters(G)$membershipされないのはなぜですか? ebc違いはなんですか?(実際のモジュール性を過大評価すると思っていたでしょうか?)community.to.membership

  2. modsコードは、私が理解できないこのエラーを返します。これが、調査して何が起こっているのかをもっと見ることができない理由のg2一部clです。

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.6.xでは1で始まるので、delete.edges()行の1を引く必要はありません。

于 2013-01-15T14:52:45.177 に答える