igraph - How to calculate closeness method in iGraph to disconnected graphs

1.9k views Asked by At

I use igraph in R for calculate graph measure, my graph make in a PIN that not Connected Graph and is Disconnected Graph. closeness method for connected graph is good and right calculate, and for Disconnected graph in not Good!

library(igraph)
# Create of Graph Matrix for Test Closeness Centrality
g <- read.table(text="A B 
  1 2
  2 4
  3 4
  3 5", header=TRUE)
gadj <- get.adjacency(graph.edgelist(as.matrix(g), directed=FALSE))
igObject <- graph.adjacency(gadj) # convert adjacency matrix to igraph object
gCloseness <- closeness(igObject,weights = NULL) # Assign Closeness to Variable for print

output :

[1] 0.1000000 0.1428571 0.1428571 0.1666667 0.1000000

my Disconnected Graph:

library(igraph)
# Create of Graph Matrix for Test Closeness Centrality
g <- read.table(text="A B 
1 2
3 4
3 5", header=TRUE)
gadj <- get.adjacency(graph.edgelist(as.matrix(g), directed=FALSE))
igObject <- graph.adjacency(gadj) # convert adjacency matrix to igraph object
gCloseness <- closeness(igObject,weights = NULL) # Assign Closeness to Variable for print

output :

[1] 0.06250000 0.06250000 0.08333333 0.07692308 0.07692308

This output is Right ? and if right How to Calculate ?

1

There are 1 answers

2
Tamás On BEST ANSWER

Please read the documentation of the closeness function; it clearly states how igraph treats disconnected graphs:

If there is no (directed) path between vertex v and i then the total number of vertices is used in the formula instead of the path length.

The calculation then seems to be correct for me, although I would say that closeness centrality itself is not well-defined for disconnected graphs, and what igraph is using here is more of a hack (although a pretty standard hack) than a rigorous treatment of the problem. I would refrain from using closeness centrality on disconnected graphs.