我想逐步比较两个分区网络指标 - 模块性和传导性。模块化是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
有人可以告诉我我的代码中的错误在哪里吗?