ネットワーク分析 - ベイジアン・ネットワーク 

ベイジアンネットワークとは

事象間の連関を確率的な仮定として、有向グラフを用いて表す方法。
ネットワーク構造は、DAGでなければならないという制約がある。(原因と結果が循環的な構造になってしまうのを避けるため)

ベイジアン・ネットワークをデータ分析に応用すると、変数間の連関を有効グラフで表す事が出来る。
ベイジアン・ネットワークにおける有向辺の有無を決める基準には、確率的な「独立」が用いられる。

http://gyazo.com/903b07ae58f7d588d6e8ea711ba970cb.png

このとき、

http://gyazo.com/d65a45f8d19a928689078fe9b0e91b91.png

なので、Aの確率はBの影響を受けない。
このように2つの変数が独立、もしくはそれにちかければ、それらの間に連関は無いと考え、それらの変数を表すノード間にエッジは張られない事になる。

ベイジアン・ネットワークの例

データは、ネットワーク分析 (Rで学ぶデータサイエンス 8)に出てくる「ハイテク企業の管理職21人の社会ネットワーク」。

  • ハイテク企業の管理職データ
Age Tenure Dpt. Level advice friend re
33 9.333 D4 L3 13 8 0
42 19.583 D4 L2 18 10 3
40 12.750 D2 L3 5 5 0
33 7.500 D4 L3 8 5 0
32 3.333 D2 L3 5 6 0
59 28.000 D1 L3 10 2 0
55 30.000 D0 L1 13 3 4
34 11.333 D1 L3 10 5 0
62 5.417 D2 L3 4 6 0
37 9.250 D3 L3 9 1 0
46 27.000 D3 L3 11 6 0
34 8.917 D1 L3 7 8 0
48 0.250 D2 L3 4 1 0
43 10.417 D2 L2 10 5 7
40 8.417 D2 L3 4 4 0
27 4.667 D4 L3 8 4 0
30 12.417 D1 L3 9 6 0
33 9.083 D3 L2 15 4 2
32 4.833 D2 L3 4 5 0
38 11.667 D2 L3 8 3 0
36 12.500 D1 L2 15 5 4
インストールと読み込み
install.packages("deal")
library(deal)
データの読み込みとネットワークの初期化

データを読み込んで、networkオブジェクトを生成する

ht <- read.table("high_tech.dat", header=T)
ht.nw <- network(ht)

plot(ht.nw)

http://gyazo.com/6aa914b40a0d06ddb96a114d54757bba.png

この状態では、まだネットワークは、エッジを持たない空グラフ。

事前分布と事後分布の計算

事前分布と事後分布を計算する。この時、明らかに影響がない変数間のエッジを除外するためのリストを作っておく。
- 例 : 年齢は他の変数から影響を受ける可能性はないので、他のノードから年齢のノードにはエッジを張らないなど

# 事前分布の計算
ht.prior <- jointprior(ht.nw)

# 除外リスト
mybanlist <- matrix(c(
                      2,1,
                      3,1,
                      4,1,
                      5,1,
                      6,1,
                      7,1,
                      3,2,
                      4,2,
                      5,2,
                      6,2,
                      7,2,
                      3,4,
                      4,3),
                    ncol = 2, byrow = TRUE)
banlist(ht.nw) <- mybanlist

# 事後分布の計算
ht.nw <- learn(ht.nw, ht, ht.prior)$nw

# ネットワークスコアが最適になるネットワークを探索
ht.search <- autosearch(ht.nw, ht, ht.prior, trace = TRUE)

結果

> ht.search <- autosearch(ht.nw, ht, ht.prior, trace = TRUE)
[Autosearch (1) -352.149 [Age][Tenure][Dpt.][Level][advice][friend][report|Level]
(2) -349.392 [Age][Tenure][Dpt.][Level][advice|Level][friend][report|Level]
(3) -347.2447 [Age][Tenure][Dpt.][Level][advice|Dpt.:Level][friend][report|Level]
(4) -345.6413 [Age][Tenure|Age][Dpt.][Level][advice|Dpt.:Level][friend][report|Level]
(5) -344.7486 [Age][Tenure|Age][Dpt.][Level][advice|Dpt.:Level:report][friend][report|Level]
(6) -344.2724 [Age][Tenure|Age][Dpt.][Level][advice|Dpt.:Level:friend:report][friend][report|Level]
(7) -343.9905 [Age][Tenure|Age][Dpt.][Level][advice|Tenure:Dpt.:Level:friend:report][friend][report|Level]
(8) -343.9629 [Age][Tenure|Age][Dpt.][Level][advice|Tenure:Dpt.:Level:friend:report][friend|Dpt.][report|Level]
(9) -343.1464 [Age][Tenure|Age][Dpt.][Level][advice|Tenure:Dpt.:Level:friend:report][friend|Tenure:Dpt.][report|Level]
(10) -342.7576 [Age][Tenure|Age][Dpt.][Level][advice|Tenure:Dpt.:Level:report][friend|Tenure:Dpt.:advice][report|Level]
Total 1.875 add 1.127 rem 0.263 turn 0.082 sort 0.047 choose 0.036 rest 0.32 ]

描画

plot(ht.nw)

http://gyazo.com/7dbafef909f355f74e1b3246e05a401f.png

図に出力されている、-342.7576は、以下のネットワークスコアの対数で、ベイジアン・ネットワークがデータと合致する程度を表している

http://gyazo.com/0692e3e4aa50a4a72dd39f7eabd8f20d.png

解釈
  • 勤務年数と部署は友人ネットワークとアドバイスのネットワークに置ける中心性にそれぞれ影響を与える
  • 階級はアドバイスネットワークに置ける中心性に対して直接の影響を与えるほか、報告ネットワークに置ける中背陰性を介した間接の影響も与える
  • アドバイスネットワークに置ける中心性は友人ネットワークにおける中心性に影響を与えている
    • 友人として指名されやすい人は仕事上のアドバイスを求められやすいのではなく、アドバイスを求められる人は友人としても指名されやすい