如何计算R中的群体中介中心性

时间:2014-12-15 14:44:39

标签: r igraph

我试图在社交网络分析中实施群体中心度量的计算。

   Everett,M。G.和S. P. Borgatti。 “群体和群体的中心地位”   课程。“数学社会学期刊23,没有。 3月(1月   1999):181-201。 DOI:10.1080 / 0022250X.1999.9990219

我设法计算了群体亲密度的中心地位,但我仍然存在群体中介中心性问题。

有一个igraph对象 net 和一个组, g ,在此,我需要计算两件事 1)连接不在组(g)内的每个顶点但通过组中至少一个顶点的最短路径的数量 2)不在组内的所有顶点之间的最短路径总数。

任何人都可以帮助我完成更多代码。

我在以下链接中找到了一些内容,但只有一条声明说它应该是可能的:https://lists.nongnu.org/archive/html/igraph-help/2008-03/msg00043.html

UPDATE :::

我现在通过试验和错误设法编写以下函数来获取通过另一个特定组的一组顶点的 -group-部分内的所有最短路径在那集......

get.shortest.paths.throug.group<-function(graph, grp) {
num <- 1:vcount(graph)
y <- cbind(num, V(graph)$name)

no.group <- as.numeric(y[(y[,2] %in% grp)==FALSE, 1])
group <- as.numeric(y[(y[,2] %in% grp)==TRUE, 1])
group.chr <- as.character(y[(y[,2] %in% grp)==TRUE, 1])   
count <- vector(mode="numeric", length(group))    

paths <- lapply(1:(length(no.group)-1), function(i) {
get.all.shortest.paths(
  graph, 
  from = no.group[i],
  to = no.group[(i+1):length(no.group)]
)$res
})

list <- unsplit(paths, rep.int(seq_along(paths), sapply(paths, length)))

for (j in 1:length(group)) {
count[j] <-  sum(grepl(group.chr[j], list)*1)
}

gbc <- (2*sum(count)/length(list))/((vcount(graph)-length(group))*(vcount(graph)-length(group)-1))

return(gbc)
}

但是......因为我的网络包含7500个版本;该组中的118和非组中的7382,这是一个非常耗时的功能。创建7382个非组顶点之间的所有shortest.paths的列表并不耗费时间,但是函数中发现31.000.000+ shortest.paths通过该组传递的部分非常慢

for (j in 1:length(group)) { count[j] <- sum(grepl(group.chr[j], list)*1) }

这可以通过更有效的方式完成吗?

有人写了一个java代码http://sourceforge.net/p/jung/patches/12/进行计算(显然是以更快的方式)。但我没有使用java的经验。是否可以将jung-patch调整为R脚本?

1 个答案:

答案 0 :(得分:0)

Puzis等人在这里给出了一种快速可扩展算法的非语言特定半模:http://journals.aps.org/pre/abstract/10.1103/PhysRevE.76.056709

这里有一个Python实现: http://ftp.aip.org/epaps/phys_rev_e/E-PLEEE8-76-064711/

我的R还不足以直接实现它,所以不幸的是我没有得到最终答案,但作为一个新用户,我也不能将其留在评论中。祝好运!如果您确实设法在R中实现它。