[R][ネットワーク分析] ネットワーク構造の諸指標

ネットワーク分析 (Rで学ぶデータサイエンス 8)の第3章の内容

密度(density)

グラフにおいて張ることの出来る全てのエッジの数に対する、実際のエッジの数の比率

http://gyazo.com/8b2e5f7b7ee4dad42822c55be85c7efe.png

  • データの入力
library(igraph)

A <- matrix(c(
  0,1,1,1,1,
  1,0,0,1,1,
  1,0,0,0,0,
  1,1,0,0,0,
  1,1,0,0,0),nrow=5)
B <- matrix(c(
  0,1,1,1,1,
  0,0,0,1,1,
  0,0,0,0,0,
  0,0,0,0,0,
  0,0,0,0,0),nrow=5,byrow=T)

g1 <- graph.adjacency(A, mode = "undirected")
g2 <- graph.adjacency(B)
  • Aのプロット
plot(g1)

http://gyazo.com/3ee593723e5ecad34c2617cef9f70f56.png

  • Bのプロット
plot(g2)

http://gyazo.com/fcfea1a7e4828655910428faa2d010b2.png

  • 密度の計算
> graph.density(g1)
[1] 0.6
> graph.density(g2)
[1] 0.3

推移性(transitivity)

ネットワークにおいて、ノードiとノードjの間、及びノードjとノードkの間に関係が合って、ノードiとノードkの間も関係がある場合、関係が推移的(transitive)であるという
例えば、「自分の友達の友達が、自分の友達でもある」というように、関係が三角形を作っている場合がこれにあたる
推移性(transitivity)とは、推移的な関係が成り立っている程度を比率で表したもの

  • データの入力
A <- matrix(c(
  0,1,1,1,1,1,0,0,
  1,0,1,0,0,0,1,0,
  1,1,0,0,0,0,0,0,
  1,0,0,0,1,0,0,1,
  1,0,0,1,0,1,0,0,
  1,0,0,0,1,0,0,0,
  0,1,0,0,0,0,0,0,
  0,0,0,1,0,0,0,0),nrow=8)
g <- graph.adjacency(A, mode="undirected")
  • Aのプロット
plot(g)

http://gyazo.com/2accde824412e79b53943fe2589f83b1.png

  • 推移性の計算
> transitivity(g)
[1] 0.4285714

相互性(reciprocity)

有向グラフ全体において、「両想い」がどらくらいの割合を占めているか

  • データの入力
A <- matrix(c(
  0,1,0,0,1,
  1,0,1,0,0,
  0,1,0,1,0,
  1,0,1,0,0,
  0,0,0,1,0),nrow=5,byrow=T)
g <- graph.adjacency(A)
  • Aのプロット
plot(g)

http://gyazo.com/777502a6afa04013eb8e613a96ace7f4.png

  • 相互性の計算
> reciprocity(g)
[1] 0.5

分析例

データは、第8章のハイテク企業の管理職21人の友人ネットワーク

データの入力
> (friend <- read.csv("friend.csv",header=F))
   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21
1   0  1  0  1  0  0  0  1  0   0   0   1   0   0   0   1   0   0   0   0   0
2   1  0  0  0  0  0  0  0  0   0   0   0   0   0   0   0   0   1   0   0   1
3   0  0  0  0  0  0  0  0  0   0   0   0   0   1   0   0   0   0   1   0   0
4   1  1  0  0  0  0  0  1  0   0   0   1   0   0   0   1   1   0   0   0   0
5   0  1  0  0  0  0  0  0  1   0   1   0   0   1   0   0   1   0   1   0   1
6   0  1  0  0  0  0  1  0  1   0   0   1   0   0   0   0   1   0   0   0   1
7   0  0  0  0  0  0  0  0  0   0   0   0   0   0   0   0   0   0   0   0   0
8   0  0  0  1  0  0  0  0  0   0   0   0   0   0   0   0   0   0   0   0   0
9   0  0  0  0  0  0  0  0  0   0   0   0   0   0   0   0   0   0   0   0   0
10  0  0  1  0  1  0  0  1  1   0   0   1   0   0   0   1   0   0   0   1   0
11  1  1  1  1  1  0  0  1  1   0   0   1   1   0   1   0   1   1   1   0   0
12  1  0  0  1  0  0  0  0  0   0   0   0   0   0   0   0   1   0   0   0   1
13  0  0  0  0  1  0  0  0  0   0   1   0   0   0   0   0   0   0   0   0   0
14  0  0  0  0  0  0  1  0  0   0   0   0   0   0   1   0   0   0   0   0   0
15  1  0  1  0  1  1  0  0  1   0   1   0   0   1   0   0   0   0   1   0   0
16  1  1  0  0  0  0  0  0  0   0   0   0   0   0   0   0   0   0   0   0   0
17  1  1  1  1  1  1  1  1  1   1   1   1   0   1   1   1   0   0   1   1   1
18  0  1  0  0  0  0  0  0  0   0   0   0   0   0   0   0   0   0   0   0   0
19  1  1  1  0  1  0  0  0  0   0   1   1   0   1   1   0   0   0   0   1   0
20  0  0  0  0  0  0  0  0  0   0   1   0   0   0   0   0   0   1   0   0   0
21  0  1  0  0  0  0  0  0  0   0   0   1   0   0   0   0   1   1   0   0   0
> g <- graph.adjacency(friend)
プロット
plot(g,edge.arrow.size=.1)

http://gyazo.com/e99e4a105c9a6daa4a7a0624cdf8e796.png

密度
> graph.density(g)
[1] 0.2428571
推移性
> transitivity(g)
[1] 0.4714946
  • 「自分の友達の友達が、自分の友達(片想い含む)」という関係が半分くらい
相互性
> reciprocity(g)
[1] 0.2911392
  • 互いに友達と思っている関係は、3割程度しかないという悲しい現実