基于网络中边的介数识别社群结构。此方法也称为 Girvan-Newman 算法。
用法
cluster_edge_betweenness(
graph,
weights = NULL,
directed = TRUE,
edge.betweenness = TRUE,
merges = TRUE,
bridges = TRUE,
modularity = TRUE,
membership = TRUE
)
参数
- graph
要分析的图。
- weights
边的权重。必须是正数值向量、
NULL
或NA
。如果为NULL
且输入图具有 “weight” 边属性,则将使用该属性。如果为NULL
且不存在此类属性,则边将具有相等的权重。如果图具有 “weight” 边属性,但您不想将其用于社群检测,则将其设置为NA
。边权重用于计算加权边介数。这意味着边被解释为距离,而不是连接强度。- directed
逻辑常量,是否计算有向图的有向边介数。对于无向图,此参数将被忽略。
- edge.betweenness
逻辑常量,是否返回移除边时边的介数。
- merges
逻辑常量,是否返回表示网络分层社群结构的合并矩阵。即使社群结构算法本身是分裂的而不是凝聚的,此参数也称为
merges
:它从上到下构建树。矩阵中每个合并(即拆分)有一行,第一行是第一次合并(最后一次拆分)。社群由从 1 开始的整数标识。小于或等于 \(N\) 的社群 ID(\(N\) 是图中的顶点数)属于单例社群,即单个顶点。在第一次合并之前,我们有 \(N\) 个社群,编号从 1 到 \(N\)。第一次合并,即矩阵的第一行,创建社群 \(N+1\),第二次合并创建社群 \(N+2\),依此类推。- bridges
逻辑常量,是否返回实际分割图组件的边移除列表。
- modularity
逻辑常量,是否计算最大模块化得分,同时考虑基于边介数的所有可能的社群结构。
- membership
逻辑常量,是否计算与最高可能的模块化得分相对应的成员向量。
值
cluster_edge_betweenness()
返回一个 communities()
对象,详情请参阅 communities()
手册页。
详细信息
此方法背后的思想是,连接两个社群的边的介数通常很高,因为单独社群中顶点之间的许多最短路径都会经过它们。该算法依次移除具有最高介数的边,并在每次移除后重新计算介数值。这样,网络最终会分成两个组件,然后其中一个组件再次分裂,依此类推,直到所有边都被移除。生成的顶点的分层划分可以编码为树状图。
cluster_edge_betweenness()
返回通过算法运行收集的各种信息。具体来说,removed.edges
包含边 ID,其顺序与边的移除顺序相同;edge.betweenness
包含每个边在移除时的介数;bridges
包含导致分割的边的 ID。
参考文献
M Newman and M Girvan: Finding and evaluating community structure in networks, Physical Review E 69, 026113 (2004)
参见
edge_betweenness()
用于边介数的定义和计算,cluster_walktrap()
、cluster_fast_greedy()
、cluster_leading_eigen()
用于其他社群检测方法。
有关提取社群检测结果的信息,请参阅 communities()
。
社群检测 as_membership()
、cluster_fast_greedy()
、cluster_fluid_communities()
、cluster_infomap()
、cluster_label_prop()
、cluster_leading_eigen()
、cluster_leiden()
、cluster_louvain()
、cluster_optimal()
、cluster_spinglass()
、cluster_walktrap()
、compare()
、groups()
、make_clusters()
、membership()
、modularity.igraph()
、plot_dendrogram()
、split_join_distance()
、voronoi_cells()
作者
Gabor Csardi csardi.gabor@gmail.com
示例
g <- sample_pa(100, m = 2, directed = FALSE)
eb <- cluster_edge_betweenness(g)
g <- make_full_graph(10) %du% make_full_graph(10)
g <- add_edges(g, c(1, 11))
eb <- cluster_edge_betweenness(g)
eb
#> IGRAPH clustering edge betweenness, groups: 2, mod: 0.49
#> + groups:
#> $`1`
#> [1] 1 2 3 4 5 6 7 8 9 10
#>
#> $`2`
#> [1] 11 12 13 14 15 16 17 18 19 20
#>