例題5.5

パッケージのインストール

igraphパッケージのインストールを行うところです。ソフトウェアのインストールと同じで、最初の1回のみでよいです。eval=FALSEは、Rチャンク内のコードを評価するかしないかというオプションで、FALSEを指定していることになります。つまりこの場合は、「install.packages関数を評価しない」と宣言していることと同義です。理由は、最初の1回のみ意識して実行するだけでよく、2回目以降は実行されたくないからです。

install.packages("igraph")

パッケージのロード

include=FALSEは、HTMLレポート生成時(Knitボタンを押してレンダリングする作業と同義)に、レポートに含めないという宣言に相当します。パッケージのロード時のメッセージがレポートに含まれていてもしょうがないし、ロードでミスっていたらそもそも以降のコードが実行されないだけなので、このチャンクがレポートに含まれている必要ないよね、という思想です。

図5.21で示したような3種類のネットワークの描画

(a) ランダムネットワーク(エルデシュ・レニイモデル)

Erdos-Renyiモデルに従うネットワークを生成するためのerdos.renyi.game関数を用いて、ノード数25 (n=25)、密度0.2 (p.or.m=0.2)のグラフを作成した結果をerという名前で格納し、erの中身をplot関数を用いて描画しています。ここでの密度というのは、任意の2つの頂点(vertices)間に辺(edge)を引く確率に相当します。計4種類のパラメータを変えたネットワーク図を描画しており、plot(er)がデフォルトです。vertex.sizeは頂点サイズに相当します。layoutは、ネットワークのレイアウトを指定するオプションであり、ここではlayout=layout_in_circleとしてサークルになるようにしています。得られた計4つのグラフを見比べることで、vertex.sizeのデフォルトはおそらく15であろうと判断できます。

er <- erdos.renyi.game(n=25, p.or.m=0.2)
plot(er)

plot(er, vertex.size=10)

plot(er, vertex.size=20)

plot(er, vertex.size=15, layout=layout_in_circle)

(b) スモールワールドネットワーク

Watts-Strogatz small-worldモデルに従うネットワークを生成するためのsample_smallworld関数を用いて、ノード数(頂点数)が5×5 = 25を表現しているのがdim=2size=5です。nei=1p=0.1は、1個となりの頂点とリンクした格子を、確率0.1 でランダムに置き換えるという意味です。このような条件下で生成した結果をswという名前で格納し、swの中身をplot関数を用いて描画しています。描画時にvertex.size=15として頂点サイズを15に指定しています。また、図のレイアウトをサークルにすべく、layout=layout_in_circleとしています。

sw <- sample_smallworld(dim=2, size=5, nei=1, p=0.1)
plot(sw, vertex.size=15, layout=layout_in_circle)

(c) スケールフリーネットワーク

Barabasi-Albert scale-freeネットワークを生成するためのsample_pa関数を用いて、頂点を追加するたび、既にある頂点の次数の2乗(power=2)に比例する割合で辺を3本(m=3)ずつ足していく頂点数25(n=25)のネットワークを描こうとしています。ちなみにdirected=Fは無向グラフにせよという指令です。有効グラフにしたい場合はdirected=Tにします。

sf <- sample_pa(n=25, power=2, m=3, directed=F)
plot(sf, vertex.size=15)

plot(sf, vertex.size=15, layout=layout_in_circle)

図5.24で示した3種類の中心性を調べる

(a) ランダムネットワーク

上記で作成したErdos-Renyiモデルに従うランダムネットワーク生成結果オブジェクトerを入力として利用しています。

次数中心

er.deg <- degree(er)
er.deg
##  [1]  5  3  2  8  2  6  4  7  2 10  3  5  6  4  4  9  4  4  7  7  5  3  3  7  2
plot(er, vertex.size = er.deg)

plot(er, vertex.size = er.deg * 2)

近接中心

er.cls <- closeness(er)
er.cls
##  [1] 0.02000000 0.01694915 0.01694915 0.02272727 0.01785714 0.02127660
##  [7] 0.02000000 0.02272727 0.01694915 0.02380952 0.01886792 0.02000000
## [13] 0.02127660 0.02083333 0.02040816 0.02500000 0.01960784 0.02040816
## [19] 0.02380952 0.02173913 0.01724138 0.01754386 0.01666667 0.02272727
## [25] 0.01666667
er.cls * 1000
##  [1] 20.00000 16.94915 16.94915 22.72727 17.85714 21.27660 20.00000 22.72727
##  [9] 16.94915 23.80952 18.86792 20.00000 21.27660 20.83333 20.40816 25.00000
## [17] 19.60784 20.40816 23.80952 21.73913 17.24138 17.54386 16.66667 22.72727
## [25] 16.66667
plot(er, vertex.size = er.cls * 1000)

媒介中心

er.btw <- betweenness(er)
er.btw
##  [1]  9.144048  3.219780  3.641667 30.959951  0.000000 21.113706 10.386447
##  [8] 31.347772  1.916667 45.630403  2.197558  5.191484 17.253571  4.305891
## [15]  2.340415 33.963248  7.978571  4.165415 32.140354 19.325000 10.242857
## [22]  2.225000  3.708333 29.101862  0.500000
plot(er, vertex.size = er.btw)

(b) スモールワールドネットワーク

Watts-Strogatz small-worldモデルに従うネットワーク生成結果オブジェクトswを入力として利用しています。

次数中心

sw.deg <- degree(sw)
sw.deg
##  [1] 3 3 3 4 4 4 5 3 3 5 6 5 4 4 4 4 3 4 6 4 4 4 3 4 4
which.max(sw.deg)
## [1] 11
plot(sw, vertex.size = sw.deg * 3)

近接中心

sw.cls <- closeness(sw)
sw.cls
##  [1] 0.01639344 0.01694915 0.01694915 0.01666667 0.01724138 0.01886792
##  [7] 0.01818182 0.01694915 0.01562500 0.01851852 0.02083333 0.01960784
## [13] 0.01694915 0.01851852 0.01851852 0.01818182 0.01562500 0.01724138
## [19] 0.02040816 0.01851852 0.01886792 0.01754386 0.01694915 0.01886792
## [25] 0.01724138
which.max(sw.cls)
## [1] 11
plot(sw, vertex.size = sw.cls * 800)

媒介中心

sw.btw <- betweenness(sw)
sw.btw
##  [1]  8.994444  8.703968 12.263889 11.125000 18.583333 17.335354 20.362771
##  [8]  9.040115  4.998485 20.983333 44.853391 24.437013 13.679509 19.598954
## [15] 10.915584 14.075433  4.024675 12.440079 41.109235 13.902814 13.421429
## [22] 12.914683  7.559524 22.410317 16.266667
which.max(sw.btw)
## [1] 11
plot(sw, vertex.size = sw.btw)

(c) スケールフリーネットワーク

Barabasi-Albert scale-freeモデルに従うネットワーク生成結果オブジェクトsfを入力として利用しています。
#### 次数中心

sf.deg <- degree(sf)
sf.deg
##  [1]  7 10 18 18 11  8  6  4  5  3  3  3  3  3  3  3  3  3  5  3  4  3  3  3  3
which.max(sf.deg)
## [1] 3
plot(sf, vertex.size = sf.deg)

近接中心

sf.cls <- closeness(sf)
sf.cls
##  [1] 0.02439024 0.02631579 0.03333333 0.03333333 0.02564103 0.02500000
##  [7] 0.02325581 0.02272727 0.02222222 0.02222222 0.02083333 0.02222222
## [13] 0.02222222 0.02222222 0.02127660 0.02222222 0.02222222 0.02000000
## [19] 0.02173913 0.02222222 0.02222222 0.02173913 0.02222222 0.02040816
## [25] 0.02040816
which.max(sf.cls)
## [1] 3
plot(sf, vertex.size = sf.cls * 600)

媒介中心

sf.btw <- betweenness(sf)
sf.btw
##  [1]  3.6349206 17.0838384 79.8485570 88.1779221 23.2318182 11.7786797
##  [7]  4.8825758  1.6345238  2.2000000  0.2539683  0.9539683  0.3000000
## [13]  0.0000000  0.0000000  0.0000000  0.2539683  0.2539683  0.2500000
## [19]  3.7619048  0.0000000  3.0158730  0.9873016  0.5909091  0.7651515
## [25]  1.1401515
which.max(sf.btw)
## [1] 4
plot(sf, vertex.size = sf.btw / 4)