見出し画像

ネットワークのモジュラー中心性を調べてみた。の続き


こんばんは。今回は「ネットワークのモジュラー中心性を調べてみた。」の続きになります。今回は、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}$$に所属するノードの次数の合計になっています。今回、各ノードはコミュニティ内のエッジとコミュニテイ間のエッジのどちらか、またはその両方を持つことになります。*

*ここで疑問が生じたのは、式(2)の分母のうちコミュニティ内のエッジ数のカウントの扱いです。トイモデルGは無方向性グラフであることから、分母の次数の和ではコミュニティ内のエッジ数がダブルカウントされています。もし、分母の定義がコミュニティkに所属するノードのエッジ数だった場合、{(各ノードの次数の合計)-(コミュニテイ間のエッジの合計)}/2 + (コミュニテイ間のエッジの合計)になります。論文で定義される式の分母は、上記定義より(コミュニテイ間のエッジの合計)/2分大きくなります。そのため、式の分母の値が大きくなり、分子の効果が実際よりも薄まってしまうのではとコードを作成しながら思いました。しかし、式(2)から各ノードの次数の合計とあるので、論文の式に従うことにしました。

従って、数直線上で考えた場合、$${\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)
sir()を用いたシミュレーション結果(縦軸は感染者数)

以上でモジュラー構造を考慮した中心性の指標の説明は終わりです。感染症の拡散という観点から見ると、ネットワーク構造を用いると独立ではない接触を考慮できるという点でより現実を反映したシミュレーションができるのかなと思います。自分は知らないだけで、厚生労働省の新型コロナウイルス感染症対策アドバイザリーボードでは、ネットワーク構造を加味したシミュレーションをしたデータを用いて議論しているのかもしれないですね。

この記事が気に入ったらサポートをしてみませんか?