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