1
library(igraph)
g=graph.famous("Zachary")
c=edge.betweenness.community(g)
a=membership(c)
c$merges
b=community.to.membership(g,c$merges,steps=33)

[1] 1 1 2 1 3 3 3 1 4 5 3 1 1 1 4 4 3 1 4 1 4 1 4 4 2 2 4 2 2 4 4 2 4 4

[1] 9 4 0 0 0 0 5 0 3 2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 6 0 0 0 0 7 0 0 8

33のステップがあるので、bはmembership(c)と同じだと思います。しかし、なぜ b はメンバーシップ(c) と異なるのでしょうか?

4

1 に答える 1

2

以下でも機能しないため、これは igraph のバグのようです。

> library(igraph)
> g <- graph.full(3)
> c <- edge.betweenness.community(g)
> community.to.membership(g, c$merges, steps=1)$membership

これにより、 のメンバーシップ ベクトルが得られますが1 2 0、これは明らかに間違っています。正しい結果は1 0 0またはになり0 1 1ます。実際には、マージ行列から 1 を引くことでバグを修正できます。

> g <- graph.famous("zachary")
> c <- edge.betweenness.community(g)
> membership(c)
[1] 1 1 2 1 3 3 3 1 4 5 3 1 1 1 4 4 3 1 4 1 4 1 4 4 2 2 4 2 2 4 4 2 4 4
> community.to.membership(g, c$merges-1, steps=29)$membership
[1] 0 0 2 0 3 3 3 0 1 4 3 0 0 0 1 1 3 0 1 0 1 0 1 1 2 2 1 2 2 1 1 2 1 1

これら 2 つのメンバーシップ ベクトルは基本的に同じです (少し再インデックスされています)。グラフには 34 個の頂点があり、5 つのコミュニティがあるため、同じメンバーシップ ベクトルに到達するのに 29 ステップしか必要ないことに注意してください。したがって、34-5=29 回のマージを実行する必要があります。33 の手順を実行すると、1 つのコミュニティしか得られません。

これについては、igraph のバグ トラッカーにバグ レポートを提出します。

于 2012-12-29T09:56:49.870 に答える