【问题标题】:How to find measures after community detection in igraph (R)?如何在 igraph (R) 中发现社区检测后的度量?
【发布时间】:2014-08-22 04:40:37
【问题描述】:

我正在使用图表中的社区检测。我已经通过在 igraph 中实现的不同社区检测算法并绘制社区结构。现在,在获得不同算法的社区对象后,我想根据密度、切割率、覆盖率等不同指标来比较算法。 (我知道模块化已经实现)。我可以获得一个子图,然后计算集群内的密度,但是要找到集群间的密度,我不知道如何进行。这是我用来查找集群内密度的代码:

karate <- graph.famous("Zachary")
wckarate <- walktrap.community(karate) #any algorithm
subg1<-induced.subgraph(karate, which(membership(wckarate)==1)) #membership id differs for each cluster
intradensity1 <- ecount(subg1)/ecount(karate) #for each cluster

同样,我可以对每个集群进行处理并添加所有密度或取所有密度的平均值。我的问题是,如果社区的数量非常多,那么如何进行?

如果我想提取不同社区之间的边数,有没有很好的方法来提取边数?

如果这个问题已经被问到,请原谅我。我是 igraph 和 R 的新手。

【问题讨论】:

  • 欢迎来到 SO 并感谢您在问题中包含一个可重现的示例。
  • @MrFlick 感谢您的回复和祝福。尽管我花了一些时间来理解该功能,但它确实对我帮助很大。

标签: r igraph


【解决方案1】:

好吧,我们可以调整您的代码以遍历不同的子组

karate <- graph.famous("Zachary")
wckarate <- walktrap.community(karate) #any algorithm
sapply(unique(membership(wckarate)), function(g) {
    subg1<-induced.subgraph(karate, which(membership(wckarate)==g)) #membership id differs for each cluster
    ecount(subg1)/ecount(karate)
})

只要在社区之间获得优势,您就可以做到

#get all combinations of communities
cs <- data.frame(combn(unique(membership(wckarate)),2))
cx <- sapply(cs, function(x) {
    es<-E(karate)[V(karate)[membership(wckarate)==x[1]] %--% 
              V(karate)[membership(wckarate)==x[2]]]    
    length(es)
})
cbind(t(cs),cx)

您还可以绘制社区以确保看起来合理

plot.communities(wckarate, karate)

【讨论】:

  • 我试图修改函数来计算簇内边缘而不是查找子图,但它不起作用,请您帮忙:'cx
猜你喜欢
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
相关资源
最近更新 更多