为什么igraph R中的cluster_infomap每次都会给不同的社区?

时间:2016-12-21 04:08:23

标签: r graph cluster-analysis igraph network-analysis

我使用来自R中igraph的cluster_infomap函数来检测具有~19,000个边缘的无向,未加权网络中的社区,但每次运行该函数时,我都会获得不同数量的社区。这是我正在使用的代码:

   clusters <- list()
   clusters[["im"]] <- cluster_infomap(graph)
   membership_local_method <- membership(clusters[["im"]])
   length(unique(membership_local_method))

在我执行的测试中,最后一行代码的结果范围为805-837。我尝试使用set.seed(),以防它是随机数生成的问题,但这并没有解决问题。

我的问题是(1)为什么我每次都会得到不同的社区,(2)有没有办法让它稳定下来?

谢谢!

1 个答案:

答案 0 :(得分:3)

cluster_infomap(请参阅?igraph::cluster_infomap寻求帮助)找到

  

社区结构,最小化预期的描述长度   一个随机的步行者轨迹

每当您处理随机数生成时,每次运行都会得到不同的结果。大多数情况下,您可以事先使用set.seed设置种子(请参阅?Random寻求帮助)来覆盖此内容:

identical(cluster_infomap(g), cluster_infomap(g))
# [1] FALSE
identical({set.seed(1);cluster_infomap(g)},{set.seed(1);cluster_infomap(g)})
# [1] TRUE

或图形化:

library(igraph)
set.seed(2)
g <- ba.game(150)
coords <- layout.auto(g)
par(mfrow=c(2,2))

# without seed: different results
for (x in 1:2) {
  plot(
    cluster_infomap(g), 
    as.undirected(g), 
    layout=coords, 
    vertex.label = NA, 
    vertex.size = 5
  )
}

# with seed: equal results
for (x in 1:2) {
  set.seed(1)
  plot(
    cluster_infomap(g), 
    as.undirected(g), 
    layout=coords, 
    vertex.label = NA, 
    vertex.size = 5
  )
}