ネットワーク分析 - ベイジアン・ネットワーク
ベイジアンネットワークとは
事象間の連関を確率的な仮定として、有向グラフを用いて表す方法。
ネットワーク構造は、DAGでなければならないという制約がある。(原因と結果が循環的な構造になってしまうのを避けるため)
ベイジアン・ネットワークをデータ分析に応用すると、変数間の連関を有効グラフで表す事が出来る。
ベイジアン・ネットワークにおける有向辺の有無を決める基準には、確率的な「独立」が用いられる。
このとき、
なので、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)
この状態では、まだネットワークは、エッジを持たない空グラフ。
事前分布と事後分布の計算
事前分布と事後分布を計算する。この時、明らかに影響がない変数間のエッジを除外するためのリストを作っておく。
- 例 : 年齢は他の変数から影響を受ける可能性はないので、他のノードから年齢のノードにはエッジを張らないなど
# 事前分布の計算 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)
図に出力されている、-342.7576は、以下のネットワークスコアの対数で、ベイジアン・ネットワークがデータと合致する程度を表している