ネットワークのランダム化
前の演習で、Forrest Gump ネットワークの平均経路長がランダムネットワークの平均経路長よりも小さいことに気づいたかもしれません。コードを何度か実行すると、Forrest Gump ネットワークのほうがほぼ常にランダムネットワークより低いことがわかります。これは、ランダムネットワークと同じ頂点数とほぼ同じグラフ密度であるにもかかわらず、Forrest Gump ネットワークのほうがより高い相互接続性を持っていることを示唆します。コードを何度も実行する代わりに、元の Forrest Gump グラフの頂点数と密度に基づいて 1000 個のランダムグラフを作成することで、より形式的に検証できます。次に、ランダムグラフの平均経路長が元の Forrest Gump ネットワークより小さくなる回数を確認します。これはランダム化検定と呼ばれます。
グラフ g と、前の演習で計算したその平均経路長 g.apl は、ワークスペースに用意されています。
この演習はコースの一部です
Rで学ぶネットワーク分析
演習の手順
- リストオブジェクト
glを作成するコードと for ループを実行して、元のグラフgに基づくランダムグラフを 1000 個生成します。 lapply()を使って 1000 個のランダムグラフの平均経路長を計算します。unlist()を使うコードを実行して、これら 1000 個の値からベクトルgl.aplsを作成します。- ベクトル
gl.aplsに対してhist()を使い、1000 個のランダムグラフの平均経路長のヒストグラムを描きます。abline()を用いて赤の破線の垂直線を追加し、x 切片は元のグラフの平均経路長g.aplの値にします。 - ランダムグラフの平均経路長
gl.aplsの値が、元のグラフg.aplの値より小さくなる割合を計算します。これは、元のグラフの密度と頂点数を前提に、観測された平均経路長が偶然に得られる確率に相当します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
library(igraph)
# Generate 1000 random graphs
gl <- vector('list', 1000)
for(i in 1:1000){
gl[[i]] <- erdos.renyi.game(n = gorder(g), p.or.m = gd, type = "gnp")
}
# Calculate average path length of 1000 random graphs
gl.apls <- unlist(lapply(gl, ___, directed = FALSE))
# Plot the distribution of average path lengths
___(gl.apls, xlim = range(c(1.5, 6)))
abline(v = ___, col = "red", lty = 3, lwd = 2)
# Calculate the proportion of graphs with an average path length lower than our observed
mean(___ < ___)