如何计算R中分区网络的电导率

时间:2016-03-31 01:48:04

标签: r igraph modularity

我想逐步比较两个分区网络指标 - 模块性和传导性。模块化是igraph的内置函数,但igraph不包括电导函数。示例代码如下所示。

Conductance(Yang和Leskovec,2012):f(S)= c /(2m + c)测量指向聚类外部的总边缘体积的比例,S是节点的集合,m S中的边数,m = | {(u,v)∈E:u∈S,v∈S} |;和c,数量 S边界上的边,c = | {(u,v)∈E:u∈S,v不是∈S} |。

Modularity(Yang和Leskovec,2012):f(S)=(m - E(m)/ 4是m,S与E(m)中节点之间的边数之差,具有相同度序列的随机图中此类边缘的预期数量。

较高的f(S)分数意味着一组节点更接近于社区的连接模式。

与M. Newman提出的模块性相比,社区检测结果有一个公认的标准,Yang and Leskovec (2012)发现,Conductance可以在识别地面真实社区方面提供最佳表现。

library(igraph) 
g <- make_graph( ~ A-B-C-D-A, E-A:B:C:D,
                      F-G-H-I-F, J-F:G:H:I,
                      K-L-M-N-K, O-K:L:M:N,
                      P-Q-R-S-P, T-P:Q:R:S,
                      B-F, E-J, C-I, L-T, O-T, M-S,
                      C-P, C-L, I-L, I-P)
gnc <- walktrap.community(g)
m <- vector()
con <- vector()
for (s in 0: nrow(gnc$merges)) {

memb <- cutat(gnc, steps=s)
m <- c(m, modularity (g, memb, weights=NULL))

g2<-make_clusters(g, memb)

  intra<-0
  extra<-0 
    for(i in 1:length(E(g))) 
        {
         ifelse(crossing(g2, g)[i]==FALSE, intra<-intra+1, extra<-extra+1)
    }
con <-c(con, extra/(2*intra+extra)) 

 } 
windows()
par(mfrow=c(1:2))
plot(0:(length(m)-1), m, col="blue",xlab="Steps",ylab="Modularity")
plot(0:(length(con)-1), con, col="blue",xlab="Steps",ylab="Conductance")

我的代码没有语法错误。但我关心结果,我认为我有一个逻辑错误。模块化曲线在步长范围内具有最大值0.4583(在没有。= 18的步骤中),但是电导曲线在右边界上具有极值0(在没有。= 20的步骤中)。 所有合并/拆分步骤的电导率都在下降。

> max(m)
[1] 0.4583333 # index =18
> max(con)
[1] 0 # index = 20

有人可以告诉我我的代码中的错误在哪里吗?

enter image description here

0 个答案:

没有答案