[GRASS-user] v.net.centrality closeness

I’m using v.net.centrality to do some calculations, and I had a question about how closeness centrality is calculated by the module:

Is the value for closeness centrality actually “farness” (the sum of the distance from a site in a network to all other sites in the network)?

v.net.centrality is returning large values for closeness in a data set rather than a decimal between 0 and 1. I tried to look through the C code for the module, but I wasn’t able to make sense of it.

Thanks in advance.

Will

On 10/09/14 16:31, Will Fields wrote:

I'm using v.net.centrality to do some calculations, and I had a question
about how closeness centrality is calculated by the module:
Is the value for closeness centrality actually "farness" (the sum of the
distance from a site in a network to all other sites in the network)?
v.net.centrality is returning large values for closeness in a data
set rather than a decimal between 0 and 1. I tried to look through the
C code for the module, but I wasn't able to make sense of it.

I think you are right. In its current form, it seems to be more of a measure of "farness".

By inverting the "closeness" variable with a simple

1 / closeness

I get a result that seems more adequate.

But I also don't really understand the calculations in the code. Notably, if farness of a node is (according to the Wikipedia article referenced in the man page) "the sum of its distances to all other nodes", shouldn't it be the sum of the distances of the node to all other nodes, i.e. you should be able to calculate farness using v.net.allpair and then summing the distances by from_node ?

When I use v.net.centrality on a network combining streets_wake and schools_wake from the NC dataset and I calculate the "closeness" (aka farness), I get this for the nodes with the highest values:

  cat | dist
-----+--------------
   39 | 39769.319852
  128 | 39316.769189
  159 | 38730.565742
   38 | 34311.673453
   59 | 33649.126805
  112 | 33406.022609
  131 | 33080.405319
  140 | 33062.412818
   33 | 32580.971836
  135 | 32183.519299
   77 | 32059.527469
  158 | 32039.010031
  129 | 31501.214954
  103 | 31327.647516
   42 | 31283.00064

But when I calculate all distances with v.net.allpairs and the sum the distances by from_cat, I get

  from_cat | dist
----------+-------------
        39 | 6254233.946
       128 | 6175455.627
       159 | 6080808.494
       140 | 5498739.16
        33 | 5403162.189
        38 | 5336049.601
       158 | 5322613.245
       112 | 5241168.562
       131 | 5211368.296
        59 | 5201325.561
       103 | 5182372.74
       156 | 5171904.939
       157 | 5116144.746
       143 | 5065893.211
        77 | 5047493.908

i.e. both the values _and_ the order of nodes are different.

Maybe you should file two bugs against v.net.centrality:

1) make closeness the real closeness, i.e. the inverse of farness

2) improve the documentation of the module by explaining the exact calculations of each variable, instead of just referencing a Wikipedia article

Moritz

On Thu, Sep 11, 2014 at 3:44 PM, Moritz Lennert
<mlennert@club.worldonline.be> wrote:

On 10/09/14 16:31, Will Fields wrote:

I'm using v.net.centrality to do some calculations, and I had a question
about how closeness centrality is calculated by the module:
Is the value for closeness centrality actually "farness" (the sum of the
distance from a site in a network to all other sites in the network)?
v.net.centrality is returning large values for closeness in a data
set rather than a decimal between 0 and 1. I tried to look through the
C code for the module, but I wasn't able to make sense of it.

I think you are right. In its current form, it seems to be more of a measure
of "farness".

By inverting the "closeness" variable with a simple

1 / closeness

I get a result that seems more adequate.

But I also don't really understand the calculations in the code. Notably, if
farness of a node is (according to the Wikipedia article referenced in the
man page) "the sum of its distances to all other nodes", shouldn't it be the
sum of the distances of the node to all other nodes, i.e. you should be able
to calculate farness using v.net.allpair and then summing the distances by
from_node ?

When I use v.net.centrality on a network combining streets_wake and
schools_wake from the NC dataset and I calculate the "closeness" (aka
farness), I get this for the nodes with the highest values:

cat | dist
-----+--------------
  39 | 39769.319852
128 | 39316.769189
159 | 38730.565742
  38 | 34311.673453
  59 | 33649.126805
112 | 33406.022609
131 | 33080.405319
140 | 33062.412818
  33 | 32580.971836
135 | 32183.519299
  77 | 32059.527469
158 | 32039.010031
129 | 31501.214954
103 | 31327.647516
  42 | 31283.00064

But when I calculate all distances with v.net.allpairs and the sum the
distances by from_cat, I get

from_cat | dist
----------+-------------
       39 | 6254233.946
      128 | 6175455.627
      159 | 6080808.494
      140 | 5498739.16
       33 | 5403162.189
       38 | 5336049.601
      158 | 5322613.245
      112 | 5241168.562
      131 | 5211368.296
       59 | 5201325.561
      103 | 5182372.74
      156 | 5171904.939
      157 | 5116144.746
      143 | 5065893.211
       77 | 5047493.908

i.e. both the values _and_ the order of nodes are different.

According to the code, closeness is the average distance to all other
nodes reachable from the current node, i.e. something like average
farness.

Markus M

Maybe you should file two bugs against v.net.centrality:

1) make closeness the real closeness, i.e. the inverse of farness

2) improve the documentation of the module by explaining the exact
calculations of each variable, instead of just referencing a Wikipedia
article

Moritz

_______________________________________________
grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user