開始使用免費開始

網路隨機化

在前一個練習中,你可能注意到《阿甘正傳》網路的平均路徑長度比隨機網路還要小。若你把程式碼多執行幾次,會發現《阿甘正傳》網路的平均路徑長度幾乎總是低於隨機網路。這表示《阿甘正傳》網路的互連程度更高,即使這些隨機網路具有相同的頂點數,且圖的密度也幾乎相同。與其一再重跑程式碼,你可以更正式地處理這件事:根據原始《阿甘正傳》圖的頂點數與密度,建立 1000 個隨機圖。接著,看看有多少次隨機圖的平均路徑長度小於原始《阿甘正傳》網路。這稱為隨機化檢定(randomization test)。

工作區中已提供圖形 g,以及你在前一題計算的其平均路徑長度 g.apl

本練習屬於課程

R 的 Network Analysis

檢視課程

練習說明

  • 透過執行建立清單物件 gl 與 for 迴圈的程式碼,產生以原始圖 g 為基礎的 1000 個隨機圖。
  • 使用 lapply() 計算這 1000 個隨機圖的平均路徑長度。執行使用 unlist() 的程式碼,建立包含這 1000 個數值的向量 gl.apls
  • 使用 hist() 套用在向量 gl.apls 上,繪製 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(___ < ___)
編輯並執行程式碼