始める無料で始める

ネットワークのランダム化

前の演習で、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(___ < ___)
コードを編集して実行