新手igraph用户在这里。我正在尝试计算街道网络中每个分段(边缘)的中介值。理想情况下,我希望限制计算,以便只考虑小于X米的路径。 igraph::edge.betweenness.estimate
函数有一个cutoff
参数,它限制了步骤(转),但我想知道是否可以使用相反,公制距离。
到目前为止,我能找到的最接近的问题是http://lists.nongnu.org/archive/html/igraph-help/2012-11/msg00083.html在igraph帮助上,这表明它可能是不可能的。
我一直在使用我的网络,作为一个简单的图形,但具有街道段长度的属性 - LnkLength
。通过阅读其他StackOverflow帖子,可以使用带有igraph的空间网络(借助空间包)。如果LnkLength可以用作网络的权重,这会解决我的问题吗?
如果有人有任何想法,我会非常感激听到他们。
data <- data.frame(
Node1 = as.factor(c(AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ)),
Node2 = as.factor(c(BA, BB, BC, AA, AB, AC, BA, BB, BC, AA)),
LnkLength =as.numeric(c(23.05, 42.81, 77.08, 39.63, 147.87, 56.46, 13.43, 25.53, 197.19, 34.9)))
data.graph <- graph.data.frame(data, directed=FALSE, vertices=NULL)
# attempt to limit the betweeness estimates on 800m
btw.trunc <- edge.betweenness.estimate(d.graph, e=E(d.graph), directed = FALSE, cutoff=20, weights = NULL)
答案 0 :(得分:0)
我假设您正在计算测地点中间性得分(例如,最短路径使用给定边缘的次数的计数),而不是说当前流量中间性(将图像视为网络电子电阻器)。 我认为一个解决方案是首先使用距离&#39;用于获得所有成对距离的矩阵 e.g。
distMat=distances(g,weights=g$LnkLength)
现在假设你有一个截止dCut,你可以然后稀疏矩阵
distMat[which(distMat>dCut)]=0
distMat=as(distMat,'sparseMatrix')
这将允许您选择要考虑的点对......
fromInds=row(distMat)[which(!distMat==0)]
toInds=col(distMat)[which(!distMat==0)]
假设没有单向街道且LnkLength不是定向属性,那么您只需要考虑矩阵的上三角或下三角部分。由于&#39; toInds&#39;数组将自动按升序排列,你可以通过分别只使用fromInds和toInds的前半部分来实现这个目的
fromInds=fromInds[c(1:(length(fromInds)/2)]
toInds=toInds[c(1:length(toInds)/2)]
如果您的图表是定向的(例如,LnkLength在两个方向上都不相同或者只有一条街道),那么您只需保留fromInds和toInds。 您现在可以通过循环索引列表并计算shortest_path并使用返回的路径增加相应边的中介分数来迭代地开始分配中介分数
E(g)$betweenness=0
for(iPair in c(1:length(fromInds)){
vpath=as.numeric(
shortest_paths(g,weights=g$LnkLength,output="vpath")$vpath[[1]])
#need to convert the list of path vertices into a list of edge indices
pathlist=c(1:(2*length(vpath)-1))
pathlist[c(1:length(vpath)-1))*2]=vpath[c(2:length(vpath)))]
pathlist[c(1:length(vpath)-1))*2-1]=vpath[c(1:(length(vpath)-1))]
eList=get.edge.ids(g,pathlist)
#increment betweenness scores of edges in eList
E(g)$betweenness[eList]=E(g)$betweenness+1
}
您的图表现在应该具有属性&#39;介于&#39;使用在距离小于&#39; dCut&#39;
的距离的路径子集上计算的测地线间度度量来分配到其边缘如果您的图表非常大,那么将上面的内容移植到Rcpp可能是值得的,因为否则可能需要相当长的时间。但这是一整套新的蠕虫...