r - 随机生成具有指定聚类系数的网络
问题描述
过去,我曾经用igraph
指定的重新布线概率生成小世界网络p
,这特别容易,因为它是函数中的一个参数sample_smallworld
。例如:
myNetwork <- sample_smallworld(dim = 1, size = 10, nei = 2, p = 0.25)
plot(myNetwork, layout = layout_in_circle)
我现在想生成具有指定聚类系数的小世界网络。我是新手igraph
,这似乎是一个功能,但经过一番搜索,我只找到了从预先存在的网络计算系数的方法,而不是一种将其用作生成网络的参数的方法本身。
生成具有指定聚类系数的网络的最佳方法是什么?
解决方案
如果您对一些条件没问题,那么可以使用sna::rguman()
. 条件是:(1)使用全局传递性(也许你可以使用它并修改);(2) 使用无向图;(3) 如果使用较小的传递性值,则使用大尺寸图,或者对小尺寸图使用较大的传递性值。另外,放弃sample_smallworld()
算法。如果没问题,这可能会让您到达您想去的地方:
library(sna)
library(igraph)
sample_cluster <- function(nv = 150, clustering_coef = 0.5, thres = 0.05) {
g <- sna::rguman(1, nv, mut = clustering_coef, asym = 0, null = 1 - clustering_coef) %>%
graph_from_adjacency_matrix(mode = "undirected")
while (!(transitivity(g) >= clustering_coef-thres & transitivity(g) <= clustering_coef+thres)) {
g <- sna::rguman(1, nv, mut = clustering_coef, asym = 0, null = 1 - clustering_coef) %>%
graph_from_adjacency_matrix(mode = "undirected")
}
return(g)
}
sample_cluster(15, clustering_coef = 0.2, thres = 0.001) %>% transitivity()
#> [1] 0.2
sample_cluster(200, clustering_coef = 0.01, thres = 0.001) %>% transitivity()
#> [1] 0.009009009
sample_cluster(200, clustering_coef = 0.2, thres = 0.001) %>% transitivity()
#> [1] 0.2007628
sample_cluster(20, clustering_coef = 0.7, thres = 0.001) %>% transitivity()
#> [1] 0.7007168
由reprex 包(v0.3.0)于 2020 年 3 月 31 日创建
不花哨,不复杂,但可能会成功!
推荐阅读
- sql - 如何在单个 SQL 查询中为每个字段选择第 k 条记录
- javascript - 尝试根据使用 Javascript 的 URL 中的内容重定向页面
- applescript - Applescript 以 Safari 私人模式打开 youtube
- typescript - ionic 4 - 背景地理位置问题
- r - 由于路径中的重音,在 R 中使用 readJPEG 打开 .jpg 时出错
- c++ - 从 QUdpSocket 发送的数据包在 Wireshark 中看不到
- c++ - Travis CI 从源日志限制错误安装提升
- php - 如何使用 WP REST API 随机排序帖子?
- sql - 从多个表格中选择特定单元格
- java - 如何使 GUI 上的多个按钮工作