我有两个不同时间表示的相同图表,g.t0
和g.t1
。 g.t1
与g.t0
的区别在于有一条额外的边但保持相同的顶点。
我想比较g.t0
和g.t1
中的社区,即测试顶点是否从t0移动到t1到另一个社区。我尝试了以下
library(igraph)
m <- matrix(c(0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0),nrow=4,ncol=4)
g.t0 <- graph.adjacency(m)
memb.t0 <- membership(edge.betweenness.community(g.t0))
V(g.t0)
# Vertex sequence:
# [1] 1 2 3 4
memb.t0
# [1] 1 2 2 3
g.t1 <- add.edges(g.t0,c(1,2))
memb.t1 <- membership(edge.betweenness.community(g.t1))
V(g.t1)
# Vertex sequence:
# [1] 1 2 3 4
memb.t1
# [1] 1 1 1 2
但当然问题在于社区的索引总是从1开始。然后在示例中,似乎所有顶点都移动到了不同的社区,但最直观的读数是实际上只有顶点1发生了变化社区,以2和3移动。
我如何处理将社区从t0更改为t1的顶点数量计算问题?
答案 0 :(得分:3)
实际上这不是一个简单的问题。通常,您需要使用匹配优化的一些规则或条件来匹配两个图中的社区。由于您可以拥有不同数量的社区,因此匹配不一定是双射的。
为这个问题提出了几种方法和数量,一堆是在igraph中实现的,请参阅 http://igraph.org/r/doc/compare.html
compare.communities(memb.t1, memb.t0, method="vi")
# [1] 0.4773856
compare.communities(memb.t1, memb.t0, method="nmi")
# [1] 0.7020169
compare.communities(memb.t1, memb.t0, method="rand")
# [1] 0.6666667
有关方法的详细信息,请参阅igraph手册中的参考资料。