---
title: "例題5.5"
author: "agribio"
date: '2022-07-02'
output: 
  html_document:
    toc: TRUE
    toc_float: TRUE
---

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

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

## 図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であろうと判断できます。  
```{r}
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=2`と`size=5`です。`nei=1`と`p=0.1`は、1個となりの頂点とリンクした格子を、確率0.1 でランダムに置き換えるという意味です。このような条件下で生成した結果を`sw`という名前で格納し、`sw`の中身を`plot`関数を用いて描画しています。描画時に`vertex.size=15`として頂点サイズを`15`に指定しています。また、図のレイアウトをサークルにすべく、`layout=layout_in_circle`としています。  
```{r}
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`にします。  
```{r}
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`を入力として利用しています。  

#### 次数中心
```{r}
er.deg <- degree(er)
er.deg
plot(er, vertex.size = er.deg)
plot(er, vertex.size = er.deg * 2)
```

#### 近接中心
```{r}
er.cls <- closeness(er)
er.cls
er.cls * 1000
plot(er, vertex.size = er.cls * 1000)
```

#### 媒介中心
```{r}
er.btw <- betweenness(er)
er.btw
plot(er, vertex.size = er.btw)
```

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

#### 次数中心
```{r}
sw.deg <- degree(sw)
sw.deg
which.max(sw.deg)
plot(sw, vertex.size = sw.deg * 3)
```

#### 近接中心
```{r}
sw.cls <- closeness(sw)
sw.cls
which.max(sw.cls)
plot(sw, vertex.size = sw.cls * 800)
```

#### 媒介中心
```{r}
sw.btw <- betweenness(sw)
sw.btw
which.max(sw.btw)
plot(sw, vertex.size = sw.btw)
```

### (c) スケールフリーネットワーク
Barabasi-Albert scale-freeモデルに従うネットワーク生成結果オブジェクト`sf`を入力として利用しています。  
#### 次数中心
```{r}
sf.deg <- degree(sf)
sf.deg
which.max(sf.deg)
plot(sf, vertex.size = sf.deg)
```

#### 近接中心
```{r}
sf.cls <- closeness(sf)
sf.cls
which.max(sf.cls)
plot(sf, vertex.size = sf.cls * 600)
```

#### 媒介中心
```{r}
sf.btw <- betweenness(sf)
sf.btw
which.max(sf.btw)
plot(sf, vertex.size = sf.btw / 4)
```

