此函数尝试通过自旋玻璃模型和模拟退火在图中查找社区。
参数
- graph
输入图。在有向图中,边的方向将被忽略。
- weights
边的权重。它必须是一个正数值向量、
NULL
或NA
。如果它是NULL
并且输入图具有“weight”边属性,则将使用该属性。如果为NULL
且不存在此类属性,则边将具有相等的权重。如果该图具有“weight”边属性,但您不想将其用于社区检测,请将其设置为NA
。较大的边权重意味着此函数的连接更强。- vertex
此参数可用于计算给定顶点的社区,而无需计算所有社区。请注意,如果存在此参数,则会忽略其他一些参数。
- spins
整数常量,要使用的自旋数。这是社区数量的上限。在此处提供一个(合理)的大数字没有问题,在这种情况下,某些自旋状态将不会被填充。
- parupdate
逻辑常量,是否并行(同步)更新顶点的自旋。如果使用该函数的第二种形式(即存在“
vertex
”参数),则忽略此参数。它在“neg”实现中也没有实现。- start.temp
实数常量,起始温度。如果使用该函数的第二种形式(即存在“
vertex
”参数),则忽略此参数。- stop.temp
实数常量,停止温度。如果温度降至此水平以下,则模拟终止。如果使用该函数的第二种形式(即存在“
vertex
”参数),则忽略此参数。- cool.fact
模拟退火的冷却因子。如果使用该函数的第二种形式(即存在“
vertex
”参数),则忽略此参数。- update.rule
字符常量,给出模拟的“空模型”。可能的值:“simple”和“config”。 “simple”使用具有与基线概率相同数量的边的随机图,“config”使用具有与输入图相同的顶点度的随机图。
- gamma
实数常量,算法的 gamma 参数。这指定了社区中现有边和非现有边重要性之间的平衡。粗略地说,社区是一组顶点,该组顶点内部有很多边,而社区外部的边很少。默认值 1.0 使现有链接和非现有链接同样重要。较小的值使现有链接更重要,较大的值使缺失链接更重要。
- implementation
字符标量。目前,igraph 包含自旋玻璃社区查找算法的两种实现。更快的原始实现是默认实现。另一个考虑负权重的实现可以通过在此处提供“neg”来选择。
- gamma.minus
实数常量,算法的 gamma.minus 参数。这指定了社区中现有和非现有负权重边重要性之间的平衡。gamma.minus 的较小值会导致具有较小负内部连通性的社区。如果此参数设置为零,则该算法将简化为图着色算法,使用自旋数作为颜色数。如果选择“orig”实现,则忽略此参数。
值
如果未给出 vertex
参数,即使用第一种形式,则 cluster_spinglass()
返回一个 communities()
对象。
如果存在 vertex
参数,即使用第二种形式,则返回一个命名列表,其中包含以下组件
- community
数值向量,给出与
vertex
位于同一社区中的顶点的 ID。- cohesion
结果的内聚得分,请参阅参考文献。
- adhesion
结果的粘附得分,请参阅参考文献。
- inner.links
vertex
社区内的边数。- outer.links
vertex
社区与图的其余部分之间的边数。
详细信息
此函数尝试在图中查找社区。社区是一组节点,该组节点内部有很多边,而在社区外部的边很少(即在社区本身和图的其余部分之间)。
对于具有负权重的边,这个想法是相反的,即社区内部的负边很少,而社区之间的负边很多。请注意,只有“neg”实现支持负边权重。
spinglass.cummunity
函数可以解决与社区检测相关的两个问题。如果未给出 vertex
参数(或为 NULL
),则(近似)解决常规社区检测问题,即通过优化能量函数将顶点划分为社区。
如果给出 vertex
参数且不为 NULL
,则它必须是顶点 ID,并且使用相同的能量函数来查找给定顶点的社区。另请参见下面的示例。
参考文献
J. Reichardt 和 S. Bornholdt:社区检测的统计力学,物理评论 E,74, 016110 (2006), https://arxiv.org/abs/cond-mat/0603718
M. E. J. Newman 和 M. Girvan:在网络中查找和评估社区结构,物理评论 E 69, 026113 (2004)
V.A. Traag 和 Jeroen Bruggeman:具有正负链接的网络中的社区检测,https://arxiv.org/abs/0811.2329 (2008)。
参见
社区检测 as_membership()
, cluster_edge_betweenness()
, cluster_fast_greedy()
, cluster_fluid_communities()
, cluster_infomap()
, cluster_label_prop()
, cluster_leading_eigen()
, cluster_leiden()
, cluster_louvain()
, cluster_optimal()
, cluster_walktrap()
, compare()
, groups()
, make_clusters()
, membership()
, modularity.igraph()
, plot_dendrogram()
, split_join_distance()
, voronoi_cells()
作者
Jorg Reichardt 提供原始代码,Gabor Csardi csardi.gabor@gmail.com 提供 igraph 胶合代码。
Vincent Traag (https://www.traag.net/) 实现了对原始函数的更改,以包括负联系的可能性。
示例
g <- sample_gnp(10, 5 / 10) %du% sample_gnp(9, 5 / 9)
g <- add_edges(g, c(1, 12))
g <- induced_subgraph(g, subcomponent(g, 1))
cluster_spinglass(g, spins = 2)
#> IGRAPH clustering spinglass, groups: 2, mod: 0.47
#> + groups:
#> $`1`
#> [1] 11 12 13 14 15 16 17 18 19
#>
#> $`2`
#> [1] 1 2 3 4 5 6 7 8 9 10
#>
cluster_spinglass(g, vertex = 1)
#> $community
#> [1] 1 2 4 10 8 5 9 3 6 7
#>
#> $cohesion
#> [1] 9.72561
#>
#> $adhesion
#> [1] -19.45122
#>
#> $inner.links
#> [1] 21
#>
#> $outer.links
#> [1] 1
#>