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)

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.

direction

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.

cutoff

Maximum path length to use during calculations.

from, to

Index or name of a node to calculate distances from or to.

Closeness centrality

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

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.

Reach centrality

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

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

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.

Closeness vitality centrality

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.

References

On closeness centrality

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

On harmonic centrality

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).

On reach centrality

Borgatti, Stephen P., Martin G. Everett, and J.C. Johnson. 2013. Analyzing social networks. London: SAGE Publications Limited.

On information centrality

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

On eccentricity centrality

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.

Examples

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