2013-12-01 2 views
1

В разделе 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 его У эльфа уже есть лучший раскол и связанная с ним модульность. зачем звонить modularity на wtc? modularity(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  
+0

Они не должны отличаться, они не отличаются для меня. Сделайте свой пример воспроизводимым, включив случайное семя (Walktrap - это рандомизированный алгоритм), а также информацию о версии и платформе. –

+0

@GaborCsardi спасибо за проверку этого, поэтому они не должны отличаться, если это так, то я вижу, что модульность (wtc2) 'такая же, как' max (wtc2 $ modularity) '? Если это так, то мой вопрос будет дан, но разница между результатами явно смутила меня. Тем не менее, хотя я думаю, что в результате получается что-то смешное. – user1320502

ответ

3

modularity(graph, split) не поддерживает края весов в вашей версии igraph, отсюда разница. В принципе, предполагается, что в этом случае все ребра имеют вес 1.

+0

отлично, я получу обновление, спасибо за разъяснение! – user1320502