【发布时间】:2015-01-09 11:51:23
【问题描述】:
我正在尝试在社交网络分析中实现群体中心度度量的计算。
埃弗雷特、M. G. 和 S. P. Boratti。 “群体的中心性和 上课。”数学社会学杂志 23,没有。 3(一月 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
更新:::
我现在通过反复试验设法编写以下函数来获取 non-group-part 一组顶点中的所有最短路径,这些顶点通过该组中的另一个特定组设置...
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 个 vetices; 118在组和7382不组,这是一个非常耗时的功能。在 7382 个非组顶点之间创建所有最短路径的列表并不是那么耗时,但是找出 31.000.000+ 个最短路径中的哪一个通过组的函数部分非常慢
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 脚本?
【问题讨论】:
-
您好,感谢您的回答。但是组介数是介数函数的一个组成部分吗?我只能确定两种可能的顶点介数和边介数。