如何在R中生成多个节点与边数相同的随机图并开展分析
R实现固定节点边数随机图的批量生成与指标计算方案
1. 依赖包准备
使用igraph包实现核心功能,先完成安装和加载:
install.packages("igraph") library(igraph)
2. 批量生成随机图
直接调用igraph内置的sample_gnm()函数即可生成固定节点数、边数的随机图,结合replicate()可批量生成,所有结果会存储为列表格式的统一对象:
# 自定义参数,可根据你的需求修改 node_num <- 30 # 固定节点数 edge_num <- 60 # 固定边数 gen_times <- 1000 # 生成次数 # 批量生成,返回所有随机图组成的列表对象 random_graph_list <- replicate( n = gen_times, expr = sample_gnm(n = node_num, m = edge_num, directed = FALSE), simplify = FALSE )
说明:如需生成有向图,仅需将
directed参数改为TRUE即可;random_graph_list就是整合了所有生成图的统一对象,取单个图可通过random_graph_list[[序号]]实现。
3. 批量计算网络指标
遍历生成的图列表,即可批量计算所需的网络指标,结果整理为数据框方便后续统计分析:
# 计算所有随机图的核心指标 random_metrics <- do.call(rbind, lapply(random_graph_list, function(g) { data.frame( average_degree = mean(degree(g)), average_path_length = mean_distance(g), diameter = diameter(g), # 可在此处补充其他需要的指标,例如聚类系数transitivity(g)、度 assortativity_degree(g)等 stringsAsFactors = FALSE ) }))
你可以直接基于random_metrics分析各指标的分布特征,例如计算均值、分位数、绘制分布直方图等。
4. 与实证网络对比
假设你的实证网络已经存储为igraph对象empirical_graph,先计算它的对应指标,再和随机图的指标分布做对比即可:
# 计算实证网络的核心指标 empirical_metrics <- data.frame( average_degree = mean(degree(empirical_graph)), average_path_length = mean_distance(empirical_graph), diameter = diameter(empirical_graph) ) # 示例:计算实证网络的平均路径长度在随机分布中的分位数,判断是否显著异于随机 ecdf(random_metrics$average_path_length)(empirical_metrics$average_path_length)
内容的提问来源于stack exchange,提问作者jsilverman
相关产品推荐
相关产品推荐

