Measures of eigenvector-like centrality and centralisation

node_eigenvector(.data, normalized = TRUE, scale = FALSE)

node_power(.data, normalized = TRUE, scale = FALSE, exponent = 1)

node_alpha(.data, alpha = 0.85)

node_pagerank(.data)

network_eigenvector(.data, normalized = TRUE)

tie_eigenvector(.data, normalized = TRUE)

Arguments

.data

An object of a {manynet}-consistent class:

  • matrix (adjacency or incidence) from {base} R

  • edgelist, a data frame from {base} R or tibble from {tibble}

  • igraph, from the {igraph} package

  • network, from the {network} package

  • tbl_graph, from the {tidygraph} package

normalized

Logical scalar, whether the centrality scores are normalized. Different denominators are used depending on whether the object is one-mode or two-mode, the type of centrality, and other arguments.

scale

Logical scalar, whether to rescale the vector so the maximum score is 1.

exponent

Decay rate for the Bonacich power centrality score.

alpha

A constant that trades off the importance of external influence against the importance of connection. When \(\alpha = 0\), only the external influence matters. As \(\alpha\) gets larger, only the connectivity matters and we reduce to eigenvector centrality. By default \(\alpha = 0.85\).

Value

A numeric vector giving the eigenvector centrality measure of each node.

A numeric vector giving each node's power centrality measure.

Details

We use {igraph} routines behind the scenes here for consistency and because they are often faster. For example, igraph::eigencentrality() is approximately 25% faster than sna::evcent().

Functions

  • node_eigenvector(): Calculate the eigenvector centrality of nodes in a network

  • node_power(): Calculate the Bonacich, beta, or power centrality of nodes in a network

  • node_alpha(): Calculate the alpha or Katz centrality of nodes in a network

  • node_pagerank(): Calculate the pagerank centrality of nodes in a network

  • network_eigenvector(): Calculate the eigenvector centralization for a network

  • tie_eigenvector(): Calculate the eigenvector centrality of edges in a network

Eigenvector centrality

Eigenvector centrality operates as a measure of a node's influence in a network. The idea is that being connected to well-connected others results in a higher score. Each node's eigenvector centrality can be defined as: $$x_i = \frac{1}{\lambda} \sum_{j \in N} a_{i,j} x_j$$ where \(a_{i,j} = 1\) if \(i\) is linked to \(j\) and 0 otherwise, and \(\lambda\) is a constant representing the principal eigenvalue. Rather than performing this iteration, most routines solve the eigenvector equation \(Ax = \lambda x\).

Power centrality

Power or beta (or Bonacich) centrality

Alpha centrality

Alpha or Katz (or Katz-Bonacich) centrality operates better than eigenvector centrality for directed networks. Eigenvector centrality will return 0s for all nodes not in the main strongly-connected component. Each node's alpha centrality can be defined as: $$x_i = \frac{1}{\lambda} \sum_{j \in N} a_{i,j} x_j + e_i$$ where \(a_{i,j} = 1\) if \(i\) is linked to \(j\) and 0 otherwise, \(\lambda\) is a constant representing the principal eigenvalue, and \(e_i\) is some external influence used to ensure that even nodes beyond the main strongly connected component begin with some basic influence. Note that many equations replace \(\frac{1}{\lambda}\) with \(\alpha\), hence the name.

For example, if \(\alpha = 0.5\), then each direct connection (or alter) would be worth \((0.5)^1 = 0.5\), each secondary connection (or tertius) would be worth \((0.5)^2 = 0.25\), each tertiary connection would be worth \((0.5)^3 = 0.125\), and so on.

Rather than performing this iteration though, most routines solve the equation \(x = (I - \frac{1}{\lambda} A^T)^{-1} e\).

References

Bonacich, Phillip. 1991. “Simultaneous Group and Individual Centralities.” Social Networks 13(2):155–68. doi:10.1016/0378-8733(91)90018-O .

Bonacich, Phillip. 1987. “Power and Centrality: A Family of Measures.” The American Journal of Sociology, 92(5): 1170–82. doi:10.1086/228631 .

Katz, Leo 1953. "A new status index derived from sociometric analysis". Psychometrika. 18(1): 39–43.

Bonacich, P. and Lloyd, P. 2001. “Eigenvector-like measures of centrality for asymmetric relations” Social Networks. 23(3):191-201.

Brin, Sergey and Page, Larry. 1998. "The anatomy of a large-scale hypertextual web search engine". Proceedings of the 7th World-Wide Web Conference. Brisbane, Australia.

Examples

node_eigenvector(mpn_elite_mex)
#>   Trevino Madero Carranza Aguilar Obregon Calles `Aleman Gonzalez` `Portes Gil`
#> 1   0.081  0.109    0.166    0.17    0.13  0.138              0.14        0.208
#> # ... with 27 more values from this nodeset unprinted. Use `print(..., n = Inf)` to print all values.
node_eigenvector(ison_southern_women)
#>   EVELYN LAURA THERESA BRENDA CHARLOTTE FRANCES ELEANOR PEARL  RUTH VERNE  MYRA
#> 1  0.423 0.397   0.472  0.402     0.227   0.287   0.319 0.264 0.337 0.327 0.292
#> # ... with 7 more values from this nodeset unprinted. Use `print(..., n = Inf)` to print all values.
#>      E1    E2    E3    E4    E5    E6    E7    E8    E9   E10   E11   E12   E13
#> 1 0.215 0.228 0.356 0.261 0.431 0.447 0.522 0.639 0.505 0.323 0.159 0.361 0.251
#> # ... with 1 more values from this nodeset unprinted. Use `print(..., n = Inf)` to print all values.
node_power(ison_southern_women, exponent = 0.5)
#>   EVELYN LAURA THERESA BRENDA CHARLOTTE FRANCES ELEANOR PEARL  RUTH VERNE  MYRA
#> 1  -1.44 -1.38   -1.44  -1.38     -1.00   -1.38   -1.38 -1.52 -1.44 -1.44 -1.52
#> # ... with 7 more values from this nodeset unprinted. Use `print(..., n = Inf)` to print all values.
#>      E1    E2    E3    E4    E5    E6    E7    E8    E9   E10   E11   E12   E13
#> 1 -1.32 -1.32 -1.32 -1.32 -1.32 -1.62 -1.62 -1.62 -1.62 -1.32 -1.32 -1.32 -1.32
#> # ... with 1 more values from this nodeset unprinted. Use `print(..., n = Inf)` to print all values.
network_eigenvector(mpn_elite_mex)
#> [1] 0.63
network_eigenvector(ison_southern_women)
#> Mode 1 Mode 2 
#> 0.0849 0.2630 
tie_eigenvector(ison_adolescents)
#>   `Betty-Sue` `Sue-Alice` `Alice-Jane` `Sue-Dale` `Alice-Dale` `Jane-Dale`
#> 1       0.366       0.638        0.447      0.524        0.541       0.333
#> # ... with 4 more values from this nodeset unprinted. Use `print(..., n = Inf)` to print all values.