R/measure_centrality.R
measure_central_close.Rd
These functions calculate common closeness-related centrality measures that rely on path-length for one- and two-mode networks:
node_closeness()
measures the closeness centrality of nodes in a
network.
node_reach()
measures nodes' reach centrality,
or how many nodes they can reach within k steps.
node_harmonic()
measures nodes' harmonic centrality or valued
centrality, which is thought to behave better than reach centrality
for disconnected networks.
node_information()
measures nodes' information centrality or
current-flow closeness centrality.
node_eccentricity()
measures nodes' eccentricity or maximum distance
from another node in the network.
node_distance()
measures nodes' geodesic distance from or to a
given node.
tie_closeness()
measures the closeness of each tie to other ties
in the network.
net_closeness()
measures a network's closeness centralization.
net_reach()
measures a network's reach centralization.
net_harmonic()
measures a network's harmonic centralization.
All measures attempt to use as much information as they are offered,
including whether the networks are directed, weighted, or multimodal.
If this would produce unintended results,
first transform the salient properties using e.g. to_undirected()
functions.
All centrality and centralization measures return normalized measures by default,
including for two-mode networks.
node_closeness(.data, normalized = TRUE, direction = "out", cutoff = NULL)
node_harmonic(.data, normalized = TRUE, cutoff = -1)
node_reach(.data, normalized = TRUE, cutoff = 2)
node_information(.data, normalized = TRUE)
node_eccentricity(.data, normalized = TRUE)
node_distance(.data, from, to, normalized = TRUE)
node_vitality(.data, normalized = TRUE)
tie_closeness(.data, normalized = TRUE)
net_closeness(.data, normalized = TRUE, direction = c("all", "out", "in"))
net_reach(.data, normalized = TRUE, cutoff = 2)
net_harmonic(.data, normalized = TRUE, cutoff = 2)
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.
Character string, “out” bases the measure on outgoing ties, “in” on incoming ties, and "all" on either/the sum of the two. For two-mode networks, "all" uses as numerator the sum of differences between the maximum centrality score for the mode against all other centrality scores in the network, whereas "in" uses as numerator the sum of differences between the maximum centrality score for the mode against only the centrality scores of the other nodes in that mode.
Maximum path length to use during calculations.
Index or name of a node to calculate distances from or to.
Closeness centrality or status centrality is defined as the reciprocal of the farness or distance, \(d\), from a node to all other nodes in the network: $$C_C(i) = \frac{1}{\sum_j d(i,j)}$$ When (more commonly) normalised, the numerator is instead \(N-1\).
Harmonic centrality or valued centrality reverses the sum and reciprocal operations compared to closeness centrality: $$C_H(i) = \sum_{i, i \neq j} \frac{1}{d(i,j)}$$ where \(\frac{1}{d(i,j)} = 0\) where there is no path between \(i\) and \(j\). Normalization is by \(N-1\). Since the harmonic mean performs better than the arithmetic mean on unconnected networks, i.e. networks with infinite distances, harmonic centrality is to be preferred in these cases.
In some cases, longer path lengths are irrelevant and 'closeness' should be defined as how many others are in a local neighbourhood. How many steps out this neighbourhood should be defined as is given by the 'cutoff' parameter. This is usually termed \(k\) or \(m\) in equations, which is why this is sometimes called (\(m\)- or) \(k\)-step reach centrality: $$C_R(i) = \sum_j d(i,j) \leq k$$ The maximum reach score is \(N-1\), achieved when the node can reach all other nodes in the network in \(k\) steps or less, but the normalised version, \(\frac{C_R}{N-1}\), is more common. Note that if \(k = 1\) (i.e. cutoff = 1), then this returns the node's degree. At higher cutoff reach centrality returns the size of the node's component.
Information centrality, also known as current-flow centrality, is a hybrid measure relating to both path-length and walk-based measures. The information centrality of a node is the harmonic average of the “bandwidth” or inverse path-length for all paths originating from the node.
As described in the {sna}
package,
information centrality works on an undirected but potentially weighted
network excluding isolates (which take scores of zero).
It is defined as:
$$C_I = \frac{1}{T + \frac{\sum T - 2 \sum C_1}{|N|}}$$
where \(C = B^-1\) with \(B\) is a pseudo-adjacency matrix replacing
the diagonal of \(1-A\) with \(1+k\),
and \(T\) is the trace of \(C\) and \(S_R\) an arbitrary row sum
(all rows in \(C\) have the same sum).
Nodes with higher information centrality have a large number of short paths to many others in the network, and are thus considered to have greater control of the flow of information.
Eccentricity centrality, graph centrality, or the Koenig number, is the (if normalized, inverse of) the distance to the furthest node: $$C_E(i) = \frac{1}{max_{j \in N} d(i,j)}$$ where the distance from \(i\) to \(j\) is \(\infty\) if unconnected. As such it is only well defined for connected networks.
The closeness vitality of a node is the change in the sum of all distances in a network, also known as the Wiener Index, when that node is removed. Note that the closeness vitality may be negative infinity if removing that node would disconnect the network.
Bavelas, Alex. 1950. "Communication Patterns in Task‐Oriented Groups". The Journal of the Acoustical Society of America, 22(6): 725–730. doi:10.1121/1.1906679
Harary, Frank. 1959. "Status and Contrastatus". Sociometry, 22(1): 23–43. doi:10.2307/2785610
Marchiori, Massimo, and Vito Latora. 2000. "Harmony in the small-world". Physica A 285: 539-546. doi:10.1016/S0378-4371(00)00311-3
Dekker, Anthony. 2005. "Conceptual distance in social network analysis". Journal of Social Structure 6(3).
Borgatti, Stephen P., Martin G. Everett, and J.C. Johnson. 2013. Analyzing social networks. London: SAGE Publications Limited.
Stephenson, Karen, and Marvin Zelen. 1989. "Rethinking centrality: Methods and examples". Social Networks 11(1):1-37. doi:10.1016/0378-8733(89)90016-6
Brandes, Ulrik, and Daniel Fleischer. 2005. "Centrality Measures Based on Current Flow". Proc. 22nd Symp. Theoretical Aspects of Computer Science LNCS 3404: 533-544. doi:10.1007/978-3-540-31856-9_44
Hage, Per, and Frank Harary. 1995. "Eccentricity and centrality in networks". Social Networks, 17(1): 57-63. doi:10.1016/0378-8733(94)00248-9
Koschuetzki, Dirk, Katharina Lehmann, Leon Peeters, Stefan Richter, Dagmar Tenfelde-Podehl, and Oliver Zlotowski. 2005. "Centrality Indices", in Brandes, Ulrik, and Thomas Erlebach (eds.). Network Analysis: Methodological Foundations. Springer: Berlin, pp. 16-61.
Other centrality:
measure_central_between
,
measure_central_degree
,
measure_central_eigen
Other measures:
measure_attributes
,
measure_central_between
,
measure_central_degree
,
measure_central_eigen
,
measure_closure
,
measure_cohesion
,
measure_diffusion_infection
,
measure_diffusion_net
,
measure_diffusion_node
,
measure_features
,
measure_heterogeneity
,
measure_hierarchy
,
measure_holes
,
measure_periods
,
measure_properties
,
member_diffusion
node_closeness(ison_southern_women)
#> Evelyn Laura Theresa Brenda Charlotte Frances Eleanor Pearl Ruth Verne Myra
#> 1 0.8 0.727 0.8 0.727 0.6 0.667 0.667 0.667 0.706 0.706 0.686
#> # ... 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.524 0.524 0.564 0.537 0.595 0.688 0.733 0.846 0.786 0.55 0.537 0.564 0.524
#> # ... with 1 more values from this nodeset unprinted. Use `print(..., n = Inf)` to print all values.
node_reach(ison_adolescents)
#> Betty Sue Alice Jane Dale Pam Carol Tina
#> 1 0.714 1 1 0.714 0.857 1.14 0.714 0.429
(ec <- tie_closeness(ison_adolescents))
#> `Betty-Sue` `Sue-Alice` `Alice-Jane` `Sue-Dale` `Alice-Dale` `Jane-Dale`
#> 1 0.562 0.692 0.6 0.643 0.643 0.5
#> # ... with 4 more values from this nodeset unprinted. Use `print(..., n = Inf)` to print all values.
plot(ec)
ison_adolescents %>% mutate_ties(weight = ec) %>%
graphr()
net_closeness(ison_southern_women, direction = "in")
#> Mode 1 Mode 2
#> 0.224 0.537