我正在使用图形中的社区检测。我经历了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的新手。

最佳答案

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

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)

关于r - 在igraph(R)中进行社区检测后,如何找到对策?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24513339/

10-12 19:16