「社会科学のためのデータ分析入門(下)」(今井耕介 著)を読んで、ネットワーク分析における中心性について学習しています。
以下、学習メモです。誤り等がありましたらご指摘いただけますと幸いです。
中心性を表す尺度について
ネットワークにおける中心性(ネットワークの中で、各ノードと他のノードとのつながりや、グラフの中心に位置していることの程度を数量化できる様々な尺度)を表す尺度として、次数・近接性・媒介性などがある。
-
次数
ノードがグラフ内の他のノードとどの程度よくつながっているかを表すいちばん大雑把な尺度。次数はあるノードから伸びたエッジの数を単純に数えたものに過ぎないので、すぐ隣よりも離れたグラフの構造は考慮しない。- Rの関数:degree()
-
近接性
離心性の逆数。なお、離心性とはあるノードがグラフ内の他の各ノードからどの程度離れているかを表す尺度。- Rの関数:closeness()
-
媒介性
あるノードが他のノード間の接続に関わっているときに中心的であると考える尺度。
(あるノードのペア間のコミュニケーションが最短の経路で行われると仮定すると、最短経路の途中にあるノードはネットワーク内で特別な影響力を持っているかもしれないと考えられる。)- Rの関数:betweenness()
-
他に、中心性については以下のHPが参考になりそうです。
Rとigraphで表現してみる。
これまでの架空のプロジェクトを例に、中心性を表す指標について確認してみます。
まずは読み込みから。
# project.csvの読み込み
project <- read.csv("project.csv", row.names = "PROJECT")
# matrix()で行列に変換
project <- as.matrix(project)
# resultというオブジェクトを作成。元のprojectに対する転置行列をt()で作成し、%*% 演算子で元の行列に転置行列を掛けた内容を格納。
result <- project%*%t(project)
# igraphを読み込み
library("igraph")
# グラフオブジェクトを作成
result<-graph_from_adjacency_matrix(result, mode = "undirected",weighted=TRUE,diag = FALSE)
plot(result,edge.width = abs(E(result)$weight)*2)
次数について
まずは次数について調べてみます。
degree(result)
a b c d e f
5 4 4 5 2 4
このとおり、aとdが他のノードといちばん多くつながっていることがわかります。
近接性について
次に近接性について調べます。
closeness(result)
a b c d e f
0.1250000 0.1250000 0.1250000 0.1666667 0.1250000 0.1666667
先ほどの次数とは異なり、近接性としてはdとfが高いことがわかります。
なお、別の方法として離心性を尺度に表現することもできます。
この方法では、あるノードから別のノードへのエッジの平均数を計算し、この数が少ないほどあるノードから他のノードへの距離が小さいと表現することができます。
具体的には、離心性をグラフ内の他のノード数で割ることで求めます。
この例では合計6のノードがあるので、離心性を5で割ります。
1/(closeness(result)*5)
a b c d e f
1.6 1.6 1.6 1.2 1.6 1.2
結果、dとfは最小(つまり、dとfは他のノードへの距離が小さい)であることがわかります。
さらに、近接性を図で表現してみます。
近接性の値は比較的小さいので、グラフ上のノードを拡大するため200倍にしてみます。
plot(result,edge.width = abs(E(result)$weight)*2,vertex.size=closeness(result)*200,main="closeness")
媒介性について
最後に媒介性について調べます。
betweenness(result)
a b c d e f
0.5000000 0.0000000 0.0000000 2.8333333 0.3333333 1.6666667
このとおり、媒介性はdが最も高く、次いでf,aと続くことがわかります。
同じく媒介性も図で表現してみます。
また、同じくグラフ上のノードを拡大するため30倍にしてみます。
plot(result,edge.width = abs(E(result)$weight)*2,vertex.size=betweenness(result)*30,main="betweenness")