跳到内容

此函数尝试通过自旋玻璃模型和模拟退火在图中查找社区。

用法

cluster_spinglass(
  graph,
  weights = NULL,
  vertex = NULL,
  spins = 25,
  parupdate = FALSE,
  start.temp = 1,
  stop.temp = 0.01,
  cool.fact = 0.99,
  update.rule = c("config", "random", "simple"),
  gamma = 1,
  implementation = c("orig", "neg"),
  gamma.minus = 1
)

参数

graph

输入图。在有向图中,边的方向将被忽略。

weights

边的权重。它必须是一个正数值向量、NULLNA。如果它是 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)。

作者

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
#>