NetLogo / NW-Extension

This is the NetLogo Network Extension. For general information about NetLogo, see:
http://ccl.northwestern.edu/netlogo/
Other
62 stars 25 forks source link

is eigenvector centrality defined intra-component? #190

Open IgnacioOQ opened 5 years ago

IgnacioOQ commented 5 years ago

I'm doing some exploration and found that if you have three nodes (a) (b)---(c), where (a) is isolated and the other two are connected by an undirected link, then when applying nw:eigenvector-centrality all turtles/nodes receive a value of 1. The manual (http://ccl.northwestern.edu/netlogo/5.0/docs/nw.html#eigenvector-centrality) states that this should report "false" since the network is not connected. My suspicion is that the implementation is measuring the eigenvector of each turtle relative to its component. Am I right? Many thanks!

qiemem commented 5 years ago

Your suspicion is correct. However, this was a changed with NetLogo 6 (iirc); I believe you are looking at old documentation there. The current documentation is here: https://ccl.northwestern.edu/netlogo/6.0/docs/nw.html#nw:eigenvector-centrality

The current documentation, however, only states that our implementation should agree with Gephi's, but does not explicitly state that it is normalized relative to each component. It probably should.

IgnacioOQ commented 5 years ago

Many thanks! Just to follow up, the normalization secures that "the highest eigenvector centrality a node can have is 1", but the example before also shows that it is not normalizing so that for each component the eigenvector adds up to 1 [i.e. In (b)---(c) both have a value of 1 rather than 1/2] Is this what you meant by "normalized relative to each component"?

qiemem commented 5 years ago

Ah, good call. That is ambiguous. For each component, the centralities are normalized so that the largest centrality will be 1; i.e. all centralities are divided by the maximum centrality on their component.

IgnacioOQ commented 5 years ago

Thanks again! What about defining a function(v) that uses nw:weak-component-clusters, applies nw:eigenvector-centrality to each of the elements in the list, adds the values up to get the new normalizing parameter k, and divides the given v by k? Or digging into the source code, normalize by suck a k rather than the maximum centrality on their component. In any case, problem solved. Thanks for the quick response!