【问题标题】:the correct use and interpretation of `modularity()``modularity()`的正确使用和解释
【发布时间】:2016-05-18 09:02:15
【问题描述】:

igraph ?modularity 部分中,示例代码为

g <- graph.full(5) %du% graph.full(5) %du% graph.full(5)
g <- add.edges(g, c(1,6, 1,11, 6, 11))
wtc <- walktrap.community(g)
modularity(wtc)
#[1] 0.5757575
modularity(g, membership(wtc))
#[1] 0.5757576

wtc 的输出显示:

wtc
#Graph community structure calculated with the walktrap algorithm
#Number of communities (best split): 3 
#Modularity (best split): 0.5757575 
#Membership vector:
# [1] 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2

我对不同的部分感到困惑:

modularity(wtc)
# and
modularity(g, membership(wtc))

wtc 本身已经具有最佳拆分及其相关的模块化。为什么要在wtc 上打电话给modularitymodularity(g, membership(wtc)) 我看到的是找到特定预选拆分的模块化,这对我来说更有意义(在这种情况下是最佳拆分)。

您希望这些结果在什么情况下会有所不同,以及为什么例如

g2 <- structure(list(from = structure(c(2L, 3L, 4L, 1L, 3L, 4L, 1L, 
  2L, 4L, 1L, 2L, 3L), .Label = c("A", "B", "C", "D"), class = "factor"), 
      to = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 
      4L, 4L), .Label = c("A", "B", "C", "D"), class = "factor"), 
      weight = c(2L, 0L, 0L, 2L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L
      )), .Names = c("from", "to", "weight"), row.names = c(2L, 
  3L, 4L, 5L, 7L, 8L, 9L, 10L, 12L, 13L, 14L, 15L), class = "data.frame")

g2 <- graph.data.frame(g2, vertices = unique(g2[1]))

set.seed(444)
wtc2 <- walktrap.community(g2)
modularity(wtc2)
# [1] 0.4444444
wtc2
# Graph community structure calculated with the walktrap algorithm
# Number of communities (best split): 2 
# Modularity (best split): 0.4444444 
# Membership vector:
# B C D A 
# 2 1 1 2 
modularity(g2, membership(wtc2))
# [1] -0.1666667

sessionInfo()
# R version 3.0.2 (2013-09-25)
# Platform: x86_64-apple-darwin10.8.0 (64-bit)
# 
# locale:
# [1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
# 
# attached base packages:
# [1] stats     graphics  grDevices utils     datasets  methods   base     
# 
# other attached packages:
# [1] Matrix_1.0-14   lattice_0.20-23 igraph_0.6.6    reshape2_1.2.2  ggplot2_0.9.3.1
# 
# loaded via a namespace (and not attached):
#  [1] colorspace_1.2-4   dichromat_2.0-0    digest_0.6.3       grid_3.0.2         gtable_0.1.2       labeling_0.2      
#  [7] MASS_7.3-29        munsell_0.4.2      plyr_1.8           proto_0.3-10       RColorBrewer_1.0-5 scales_0.2.3      
# [13] stringr_0.6.2      tools_3.0.2       

【问题讨论】:

  • 它们不应该有区别,它们对我来说没有区别。请通过包含随机种子(Walktrap 是一种随机算法)以及版本和平台信息来使您的示例可重现。
  • @GaborCsardi 嘿,感谢您检查这一点,所以它们不应该有所不同,如果是这样的话,那么我看到 modularity(wtc2)max(wtc2$modularity) 相同?如果是这样,那么我的问题得到了回答,但结果之间的差异显然让我感到困惑。尽管如此,我猜我得到的结果中有一些有趣的事情发生。
  • 注意 igraph 1.2.5 这些方法因图形 g2 &lt;- make_graph(c(1,2,2,3,3,1), directed = FALSE) 而不同

标签: r igraph modularity


【解决方案1】:

modularity(graph, split) 在您的 igraph 版本中不支持边权重,因此存在差异。在这种情况下,基本上所有边都假定权重为 1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-27
    • 2017-03-10
    • 2015-08-28
    • 2015-09-18
    • 2013-11-08
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多