网络随机化
在上一个练习中,您也许注意到 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(___ < ___)