Differences in centrality between igraph and tnet

I am trying to get central measures for a directed, balanced network. I used the igraph and tnet in R However, I found some differences in the results obtained using these two packages, and I got a little confused because of these differences. See below.

 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 

Does anyone know what is going on?

+6
source share
1 answer

After posting this question, I came across a blog post for this blog article. Here is the answer of Tore:

Thanks for using tnet! igraph is capable of handling weights; however, the distance function in igraph expects weights that represent "costs" instead of "strength." In other words, the weight of the tie is considered the amount of energy needed to cross the tie. See Shortest Paths in Weighted Networks .

Thus, if you run the following code provided by Tore (which takes the inverse of the weights before passing them to igraph ), you get equivalent proximity estimates for tnet and 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 
+12
source

Source: https://habr.com/ru/post/959351/


All Articles