1

R で igraph を使用して一連の無向の小さなグラフを操作しています。グラフ レベルの次数の集中化に興味があり、igraph の centr_degree 関数を使用しています。

ただし、「スター」グラフ (1 つのノードが他のすべてのノードに接続され、他の接続がない) の場合でも、コードは 1 の集中度を返さないことに気付きました。これが計算されるはずの方法に何か欠けていますか?

フリーマン 1979: http://leonidzhukov.net/hse/2014/socialnetworks/papers/freeman79-centrality.pdf

4

2 に答える 2

1

私は同じ問題を扱ってきました。集権化を計算するコードに何か問題があると思いますが、RではなくCで書かれていると思います(R関数は「.Call」を使用します)ので、それを見ることができません。以下のコードはスター グラフを生成し、igraph の集中度 (1 ではない) を計算します。

> adj = rbind(c(0,1,0,0,0),c(1,0,0,0,0),c(1,0,0,0,0),c(1,0,0,0,0),c(1,0,0,0,0))
> h = graph.adjacency(adj,mode="undirected")
> plot(h) # check star graph
> centralization.degree(h)
$res
[1] 4 1 1 1 1

$centralization
[1] 0.6

$theoretical_max
[1] 20

> centralize(degree(h),normalize=FALSE)
[1] 12

実際の問題は、理論上の最大値の誤差が 1 つずれている可能性があると思います。手動で計算すると、centralize(normalize=FALSE) の使用と一致する 3 * 4 = 12 が得られますが、centralization.degree からの R 出力は 4 * 5 = 20 のようです。問題を解決するには、次のコードを使用して、自分で正規化します。

> newCentralization = function(h) centralize(degree(h),normalize=FALSE)/((vcount(h)-1)*(vcount(h)-2))
> newCentralization(h)
[1] 1

> sessionInfo()
R version 3.3.0 (2016-05-03)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_Australia.1252  LC_CTYPE=English_Australia.1252    LC_MONETARY=English_Australia.1252
[4] LC_NUMERIC=C                       LC_TIME=English_Australia.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] igraph_1.0.1

loaded via a namespace (and not attached):
[1] magrittr_1.5
于 2016-09-02T05:18:19.927 に答える