2016-12-10 6 views
0

グラフ内の各頂点のクラスタリングを計算しようとしています。クラスタリングは頂点レベルで実際に形成される可能性のある隣接間リンクの割合として定義されています頂点iには4つの近傍があり、近傍には6つの可能なリンクが存在する)。頂点レベルのクラスタリングを計算するための適切なアプローチ

私はちょうどネットワークについてより正式なことを学び始めていますが、これはネットワークの「緊密さ」のかなり一般的な操作/尺度であるようです。

しかし、私はigraphでこれを計算するための缶詰め関数を見つけることができませんでした。 clusterscluster.distributionの両方の機能は、私が「コンポーネント」と呼ぶものを扱っているように見えます。そして、私が言うことができるのは、それぞれcomponentscomponent.distributionの単純なエイリアスです。例えば

は、g = make_graph("Bull")のために、頂点によってクラスタリングは次のとおりです。

v | c 
------- 
1 | 1 
2 | 1/3 
3 | 1/3 
4 | 0 [by convention] 
5 | 0 [by convention] 

私は、次の

library(igraph) 
g = make_graph("Bull") 
sapply(adjacent_vertices(g, seq_len(vcount(g))), 
     function(x) { 
     neigh = as.vector(x) 
     if (length(neigh) <= 1L) return(0) 
     sum(g[neigh, neigh])/ 
      (length(neigh)^2 - length(neigh))}) 
# [1] 1.0000000 0.3333333 0.3333333 0.0000000 0.0000000 

でこれを得ることができる。しかし、これは冗長、おそらく非効率です。

igraphでもっと標準的な方法がありますか?

答えて

1

clustering coefficientがこれをキャプチャします。 igraphでは、コールはtransitivityです。 type引数には"local"を使用してください。また、分離株について0またはNAを指定することもできます。

library(igraph) 
g = make_graph("Bull") 
transitivity(g, type="local") 
# [1] 1.0000000 0.3333333 0.3333333  NaN  NaN 
transitivity(g, type="local", isolates = "zero") 
# [1] 1.0000000 0.3333333 0.3333333 0.0000000 0.0000000 
関連する問題