我有一个我在Igraph
使用加权边的无向网络。
对于特定图表out
,我可以使用函数Igraph
计算edge.betweenness.community
中的社区,并使用edge.betweenness
计算每个边的中间性。
我可以通过编写以下内容告诉igraph
包括每条边的权重:
largest <- which.max(sapply(modules, vcount))
out <- modules[largest][[1]]
bt <- edge.betweenness(out, weights = E(out)$value, directed = FALSE)
返回:
bt
[1] 20.0 11.0 27.0 11.0 8.0 12.0 8.0 8.5 7.5 6.0 3.0 3.0 7.0 8.5 7.5 4.0 11.0
权重是:
E(out)$value
[1] 0.2829 0.2880 0.2997 0.1842 0.2963 0.2714 0.2577 0.2850 0.2850 0.2577 0.2305 0.2305 0.2577 0.1488 0.1488 0.1215 0.2997
此情况下的权重具有限制0 - 1
,其中 1 =最高成本以遍历边缘, 0 =最低成本。但是,在任何中介性计算中,这些限制都不会传递给igraph
。
我的问题:igraph
如何根据规范化来评估所列权重的下限和上限?
是否会根据指定重量的最小值和最大值自动调整权重? (在这种情况下为min = 0.1215, max = 0.2997
)
我想要的是:如何让它考虑完整数据集(min=0 - max=1
)的真实限制?
其他信息:
如果我将权重E(out)$value
乘以某个常数并重新计算中间性,我得到一个类似的答案(我假设有一些浮动错误,它们实际上是相同的):
new_weights <- as.numeric(E(out)$value*2.5)
new_weights
[1] 0.70725 0.72000 0.74925 0.46050 0.74075 0.67850 0.64425 0.71250 0.71250 0.64425 0.57625 0.57625 0.64425 0.37200 0.37200 0.30375 0.74925
bt <- edge.betweenness(out, weights = new_weights, directed = FALSE)
,并提供:
bt
[1] 20 11 27 11 8 12 8 8 8 6 3 3 7 8 8 4 11
这意味着正在进行一些自动缩放:
考虑到这一点,如何手动将中介性计算扩展到我所需的0和1限制?
研究:
2016年6月2日编辑 -
我试图在igraph R Github页面上查看edge.betweenness的源代码https://github.com/igraph/rigraph/tree/dev/R
我能找到的最接近的功能是https://github.com/igraph/rigraph/blob/dev/R/community.R
cluster_edge_betweenness
此函数调用C函数C_R_igraph_community_edge_betweenness
。我在igraph C文档中找到的最接近的参考文献是igraph_community_edge_betweenness
https://github.com/igraph/igraph/blob/master/include/igraph_community.h
然而,这些链接都没有提及如何计算权重的限制。
原创研究:
我查看了关于中介算法的igraph
文档,并探讨了与规范化相关的其他问题,但没有发现任何特定于权重本身标准化的内容。
Modularity calculation for weighted graphs in igraph
Calculation of betweenness in iGraph
http://igraph.org/r/doc/betweenness.html
网络数据和可视化如下:
plot(out)
get.data.frame(out)
from to value sourceID targetID
1 74 80 0.2829 255609 262854
2 74 61 0.2880 255609 179585
3 80 1085 0.2997 262854 3055482
4 1045 1046 0.1842 2970629 2971615
5 1046 1085 0.2963 2971615 3055482
6 1046 1154 0.2714 2971615 3087803
7 1085 1154 0.2577 3055482 3087803
8 1085 1187 0.2850 3055482 3101131
9 1085 1209 0.2850 3055482 3110186
10 1154 1243 0.2577 3087803 3130848
11 1154 1187 0.2305 3087803 3101131
12 1154 1209 0.2305 3087803 3110186
13 1154 1244 0.2577 3087803 3131379
14 1243 1187 0.1488 3130848 3101131
15 1243 1209 0.1488 3130848 3110186
16 1243 1244 0.1215 3130848 3131379
17 1243 1281 0.2997 3130848 3255811
(在这种情况下,权重位于frame$value
列中,限制为0 - 1
,其中 1 =最高成本以遍历边缘, 0 =最低成本)