R/measure_centrality.R
eigenv_centrality.Rd
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)
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
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.
Logical scalar, whether to rescale the vector so the maximum score is 1.
Decay rate for the Bonacich power centrality score.
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\).
A numeric vector giving the eigenvector centrality measure of each node.
A numeric vector giving each node's power centrality measure.
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()
.
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 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 or beta (or Bonacich) 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\).
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.
Other measures:
between_centrality
,
close_centrality
,
closure
,
cohesion()
,
degree_centrality
,
diffusion
,
features
,
heterogeneity
,
hierarchy
,
holes
Other centrality:
between_centrality
,
close_centrality
,
degree_centrality
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.