[英]Differences in centrality measures between igraph and tnet
我正試圖獲得有針對性的加權網絡的中心度量。 我一直在使用R
的igraph
和tnet
包。 但是,我發現使用這兩個軟件包獲得的結果存在一些差異,我對這些差異的原因有點困惑。 見下文。
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
誰知道發生了什么事?
在發布這個問題之后,我偶然發現了一個由tnet
維護的博客 ,他是tnet
軟件包的tnet
。 我使用博客的這篇文章中的評論問了同樣的Tore問題。 以下是Tore的回復:
感謝您使用tnet!
igraph
能夠處理重量; 然而,igraph
的距離函數期望權重代表“成本”而不是“強度”。 換句話說,系帶重量被認為是穿過系帶所需的能量。 請參閱加權網絡中的最短路徑 。
因此,如果您運行Tore提供的以下代碼(在將權重傳遞給igraph
之前獲取權重的倒數),您將獲得tnet
和igraph
等效緊密度分數。
> # 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.