Eigenvector centralities don’t have an absolute scale. Values are only meaningful relative to each other, e.g. vertex A may have a centrality twice as large as vertex B in the same graph. scale=TRUE
is just a convenience normalization, but makes no difference in the interpretation of the value.
In fact, this parameter will go away in future versions of igraph, and the current scale=TRUE
will be the default behaviour.
In your code, you manually normalize results from SNA in the same way as igraph’s scale=TRUE
does.
Again, scaling with a constant factor does not matter. We can say that two packages produce the same result if the output from one is a constant multiple of the output from the other.
This should answer your question, “Which setting should be used for the most accurate and comparable results across different network analysis packages?”
As for “centralization”, personally I am not a fan of this graph measure. It seems to me that it is defined in a rather ad-hoc way, without a principled justification.
It is defined in terms of differences between centrality values. This presumes that there is some fixed, absolute scale for the centrality scores we are using. There is no natural scale for eigenvector centrality. If we are to define centralization consistently, we must choose some scale first, i.e. we must normalize the scores. The results will be quite different depending on which norm we choose (e.g. Euclidean norm vs maximum norm), even if the centralization is then normalized again using its theoretical maximum value.
Now if “centralization” were defined in terms of ratios, instead of in terms of differences, then this problem wouldn’t occur. This shows how arbitrary the choice of differences is …
What does igraph compute? When using scale=TRUE
, it normalizes eigenvector centrality scores using the maximum norm. When using scale=FALSE
, igraph does not guarantee any kind of normalization. While you may notice that usually it produces results normalized using the Euclidean norm, this is merely an artefact of the eigenvector computation method. It is not guaranteed, and it is not always the case.
Since centralization assumes the use of some scale (some normalization), passing scale=FALSE
to centr_eigen()
in igraph is invalid. I opened an issue for dealing with this, but note that there are already plans for removing this parameter from igraph (the result will always be normalized using the maximum norm). Thanks for bringing up this topic so we became aware of this issue.
If you want to use the Euclidean norm when computing eigenvector centralization, you will need to normalize the centralities manually and then compute centralization using centralize()
.
What does sna compute? I looked at the SNA documentation. It seems to me that with rescale=TRUE
, it uses the 1-norm. There is no statement about what it uses with rescale=FALSE
, which is the default. Since the chosen normalization affects the results from centralization computation, not stating this is a problem. Presumable it’s the Euclidean norm, but is this guaranteed, or merely a side-effect of how the eigenvector happened to be computed?
I would recommend that you contact the sna folks about this issue, and point them to this thread. Their input will be valuable for improving igraph as well.
Summary:
- Eigenvector centrality has no natural scale. Any sort of interpretation that relies on such a scale is problematic.
- Centralization assumes the existence of such a scale. If you want to use centralization, you need to choose a scale, i.e. a normalization method yourself. Be aware that different methods can yield very different results, even if centralization itself is normalized using its theoretical maximum.
- Please only use
igraph::centr_eigen()
withscale=TRUE
. This will be the only available behaviour in the future. It uses the maximum norm to normalize eigenvector centrality scores. If you need anything different from this, you must perform normalization on your own.