ネットワークのモジュラー中心性を調べてみた。の続き
こんばんは。今回は「ネットワークのモジュラー中心性を調べてみた。」の続きになります。今回は、Latexの使い方に慣れきたので数式を文章に加えてみました。
重み付けのモジュラー指標 $${\alpha_{w}(v_{i})}$$
論文で紹介されている4つ目の指標$${\alpha_{w}(v_{i})}$$になります。名前は、Weighted Modular Measureを直訳したものです。
$$
\alpha_{w}(v_{i}) = (1-\mu_{Ck})\beta_{L} (v^k_{i})+ \mu_{Ck}\beta_{G}(v^q_{i}) 式(1)
$$
なお、$${k}$$はコミュニティ、$${q}$$はコンポーネントを示す添字になります。
$$
where k=\in\{1,2,…,m\}, q=\in\{1,2,…,p\}
$$
$${\mu_Ck}$$は、k番目のコミュニティのコミュニテイ間を結ぶエッジ数の割合になります。
$$
\mu_{Ck}= \frac{\sum_{v_{i} \in\ C_k} k^{inter}(v_{i})}{\sum_{V_{i} \in\ C_k}k (v_{i})} 式(2)
$$
$${\beta_{L} (v^k_{i})}$$と$${\beta_{G}(v^q_{i})}$$は、それぞれノード$${ v_{i}}$$のローカル及びグローバルな中心性指標を示しています。詳しくは前々回のページを見てください。
式(2)の分母$${\sum_{V_{i} \in\ C_k}k (v_{i})}$$はあるコミュニティ$${k}$$に所属するノードの次数の合計になっています。今回、各ノードはコミュニティ内のエッジとコミュニテイ間のエッジのどちらか、またはその両方を持つことになります。*
従って、数直線上で考えた場合、$${\alpha_{w}(v_{i})}$$は、$${\beta_{L} (v^k_{i})}$$と$${\beta_{G}(v^q_{i})}$$を$${(1-\mu_{Ck})}$$:$${\mu_{Ck}}$$で内分する点とも言えるのではないでしょうか。
さて、$${\alpha_{w}(v_{i})}$$の定義を述べましたので、今度は定義に従いRでコードを作成しました。
# Number of inter community = (total degree)- (local degree)
V(g)$total_degree <-degree(g)
V(g)$inter_community_degree <- V(g)$total_degree -V(g)$local_degree
# create an empty vector to store the mu?k
mu_k_vector <-numeric(max(V(g)$community))
mu_k_vector
for (i in 1:max(V(g)$community)){
total_degree_sum<-sum(V(g)$total_degree[V(g)$community==i]) # devide by 2 is needed?
inter_community_degree_sum<-sum(V(g)$inter_community_degree[V(g)$community==i])
#Total_degree_unique=(total_degree_sum -inter_community_degree_sum)/2+inter_community_degree_sum
mu_k_vector[i] <- inter_community_degree_sum/total_degree_sum
}
# the fraction of inter community links of the community Ck
V(g)$mu_k<-numeric(vcount(g))
for (i in 1:max(V(g)$community)){
V(g)$mu_k[V(g)$community==i] <-mu_k_vector[i]
}
# Weighted Modular measure alpha W
V(g)$alpha_betweenness <- (1-V(g)$mu_k) * V(g)$local_betweenness_centrality + V(g)$mu_k*V(g)$global_betweenness_centrality
これで、媒介中心性に基づくローカル及びグローバルな中心性指標を合わせた指標ができたわけです。元の論文では、この指標に基づき数値の高いノードを起点に感染症が広がった場合のシミュレーションをしています。
SEIRモデルでシミュレーションしたい
igraphには、sir()というS IRモデルを用いた感染症拡散をシミュレーションする関数があります。果たしてこの関数はネットワーク構造を考慮している関数になっているのか、今の時点では確認していません。つまり、エッジで繋がったノード間でしか感染の伝播が成立しないかどうかという点を確認出来ていません。
今回、トイモデルを用いて作成したSIRモデルの結果を下のようにプロットしてみました。複数のシミュレーション結果が見えることから、stochasticなモデルであることは分かりました。
なお、SEIRモデルに対応する関数はigraphパッケージには含まれていなさそうでした。自分もSEIRモデルに拡張したいけど、能力的に今時点ではキツいのでまた折りを見てやります。
sm <- sir(g, beta=5, gamma=1, no.sim = 10)
plot(sm)
以上でモジュラー構造を考慮した中心性の指標の説明は終わりです。感染症の拡散という観点から見ると、ネットワーク構造を用いると独立ではない接触を考慮できるという点でより現実を反映したシミュレーションができるのかなと思います。自分は知らないだけで、厚生労働省の新型コロナウイルス感染症対策アドバイザリーボードでは、ネットワーク構造を加味したシミュレーションをしたデータを用いて議論しているのかもしれないですね。