igraph 和 tnet 中心性度量的差异

Posted

技术标签:

【中文标题】igraph 和 tnet 中心性度量的差异【英文标题】:Differences in centrality measures between igraph and tnet 【发布时间】:2013-12-04 23:12:48 【问题描述】:

我正在尝试获取有向加权网络的中心性度量。我一直在使用R 中的igraphtnet 包。但是,我发现使用这两个包获得的结果存在一些差异,我对这些差异的原因有些困惑。见下文。

require(igraph)
require(tnet)
set.seed(1234)

m <- expand.grid(from = 1:4, to = 1:4)
m <- m[m$from != m$to, ]
m$weight <- sample(1:7, 12, replace = T)
igraph_g <- graph.data.frame(m)
tnet_g <- as.tnet(m)

closeness(igraph_g, mode = "in")

         2          3          4          1 
0.05882353 0.12500000 0.07692308 0.09090909 

closeness(igraph_g, mode = "out")

         2          3          4          1 
0.12500000 0.06250000 0.06666667 0.10000000 

closeness(igraph_g, mode = "total")

         2          3          4          1 
0.12500000 0.14285714 0.07692308 0.16666667 


closeness_w(tnet_g, directed = T, alpha = 1)

     node closeness n.closeness
[1,]    1 0.2721088  0.09070295
[2,]    2 0.2448980  0.08163265
[3,]    3 0.4130809  0.13769363
[4,]    4 0.4081633  0.13605442

有人知道怎么回事吗?

【问题讨论】:

归一化,顶点的顺序也可能不同。如果您怀疑其中一个是错误的,我会画一个简单的例子并手动计算接近度。 @Gabor Csardi 感谢您的建议!我已经尝试在igraphcloseness 函数中使用标准化选项但没有成功,并且还已经注意到igraph closeness 函数的接近度分数的顺序有点奇怪。事实证明,不一致是由于igraphtnet 在计算接近度时处理权重的方式不同。有关详细信息,请参阅下面的答案。 【参考方案1】:

在发布此问题后,我偶然发现了由 tnet 包的维护者 Tore Opsahl 维护的 blog。我在博客的this 帖子上使用 cmets 向 Tore 提出了同样的问题。这是Tore的回应:

感谢您使用 tnet! igraph 能够处理重量;但是,igraph 中的距离函数需要代表“成本”而不是“强度”的权重。换句话说,平局的重量被认为是越过平局所需的能量。见Shortest Paths in Weighted Networks。

因此,如果您运行 Tore 提供的以下代码(在将权重传递给 igraph 之前取权重的倒数),您将获得 tnetigraph 的等效接近度分数。

> # Load packages
> library(tnet)
>   
> # Create random network (you could also use the rg_w-function)
> m <- expand.grid(from = 1:4, to = 1:4)
> m <- m[m$from != m$to, ]
> m$weight <- sample(1:7, 12, replace = T)
>   
> # Make tnet object and calculate closeness
> closeness_w(m)

     node closeness n.closeness
[1,]    1 0.2193116  0.07310387
[2,]    2 0.3809524  0.12698413
[3,]    3 0.2825746  0.09419152
[4,]    4 0.3339518  0.11131725

>   
> # igraph
> # Invert weights (transform into costs from strengths)
> # Multiply weights by mean (just scaling, not really)
> m$weight <- mean(m$weight)/m$weight
> # Transform into igraph object
> igraph_g <- graph.data.frame(m)
> # Compute closeness
> closeness(igraph_g, mode = "out")

        2         3         4         1 
0.3809524 0.2825746 0.3339518 0.2193116

【讨论】:

以上是关于igraph 和 tnet 中心性度量的差异的主要内容,如果未能解决你的问题,请参考以下文章

在 igraph 中创建新度量

R语言-统计学 描述性统计

基于社区发现算法和图分析Neo4j解读《权力的游戏》下篇

tf.keras中度量和损失MSE之间的差异[重复]

mdx查询以计算最近的四分之一日期的度量与今天的度量之间的差异

大数据学习笔记:距离度量和相似度度量