在二分图中检测r中的双生物

时间:2015-06-24 10:44:41

标签: r igraph bipartite sna clique-problem

我正在尝试在R中重新创建Biclique Communities方法(Lehmann, Schwartz, & Hansen, 2008),该方法依赖于Ka,b biclique的定义。下面的例子显示了两个相邻的K2,2 bicliques - 第一个集团是{A,B,1,2},第二个集团是{B,C,2,3}。我希望能够使用R识别这些派系,以便我可以将其应用于更广泛的数据集。

Adjacent K2,2 Bicliques

到目前为止,我已将我的尝试纳入R中,我遇到了以下两个问题:

  1. 如果我使用标准的walktrap.community,它会识别社区,但不允许集合{B,2}属于两个集团
  2. 如果我使用更新的clique.community功能,这似乎无法识别派系或我无法正确理解(或两者兼有)
  3. 示例代码:

    library(igraph)
    
    clique.community <- function(graph, k) {
      clq <- cliques(graph, min=k, max=k)
      edges <- c()
      for (i in seq_along(clq)) {
        for (j in seq_along(clq)) {
          if ( length(unique(c(clq[[i]], clq[[j]]))) == k+1 ) {
            edges <- c(edges, c(i,j))
          }
        }
      }
      clq.graph <- simplify(graph(edges))
      V(clq.graph)$name <- seq_len(vcount(clq.graph))
      comps <- decompose.graph(clq.graph)
    
      lapply(comps, function(x) {
        unique(unlist(clq[ V(x)$name ]))
      })
    }
    
    users <- c('A', 'A', 'B', 'B', 'B', 'C', 'C')
    resources <- c(1, 2, 1, 2, 3, 2, 3)
    cluster <- data.frame(users, resources)
    matrix <- as.data.frame.matrix(table(cluster))
    
    igraph <- graph.incidence(matrix)
    
    clique.community(igraph, 2)
    walktrap.community(igraph)
    

2 个答案:

答案 0 :(得分:1)

请注意,由于comb <- combn(vMode1, k)变得非常大,即使对于小(密集)图形和k,l值,上述解决方案也会变得非常低效。

https://github.com/YupingLu/biclique开发的“biclique”包中可以找到更有效的解决方案。

答案 1 :(得分:0)

我设法在Sisob workbench

中找到了这个脚本
clubs