These functions identify nodes belonging to (some level of) the core of a network:
node_is_core() identifies whether nodes belong to the core of the
network, as opposed to the periphery.
node_in_core() categorizes nodes into two or more core/periphery
categories based on their coreness.
node_coreness() returns a continuous measure of how closely each node
resembles a typical core node.
node_kcoreness() assigns nodes to their level of k-coreness.
A network object of class mnet, igraph, tbl_graph, network, or similar.
For more information on the standard coercion possible,
see manynet::as_tidygraph().
Which method to use to identify cores and periphery. By default this is "degree", which relies on the heuristic that high degree nodes are more likely to be in the core. An alternative is "eigenvector", which instead begins with high eigenvector nodes. Other methods, such as a genetic algorithm, CONCOR, and Rombach-Porter, can be added if there is interest.
Number of categories to create. Must be at least 2 and at most the number of nodes in the network. Default is 3.
Method to use to create the categories. One of "bins" (equal-width bins), "quantiles" (quantile-based bins), or "kmeans" (k-means clustering). Default is "bins".
This function is used to identify which nodes should belong to the core, and which to the periphery. It seeks to minimize the following quantity: $$Z(S_1) = \sum_{(i<j)\in S_1} \textbf{I}_{\{A_{ij}=0\}} + \sum_{(i<j)\notin S_1} \textbf{I}_{\{A_{ij}=1\}}$$ where nodes \(\{i,j,...,n\}\) are ordered in descending degree, \(A\) is the adjacency matrix, and the indicator function is 1 if the predicate is true or 0 otherwise. Note that minimising this quantity maximises density in the core block and minimises density in the periphery block; it ignores ties between these blocks.
k-coreness captures the maximal subgraphs in which each vertex has at least
degree k, where k is also the order of the subgraph.
As described in igraph::coreness,
a node's coreness is k if it belongs to the k-core
but not to the (k+1)-core.
This function categorizes nodes based on their coreness into a specified number of groups. The groups are labeled as "Core", "Semi-core", "Semi-periphery", and "Periphery" depending on the number of groups specified. The categorization can be done using different methods: equal-width bins, quantile-based bins, or k-means clustering.
Borgatti, Stephen P., & Everett, Martin G. 1999. "Models of core /periphery structures". Social Networks, 21, 375–395. doi:10.1016/S0378-8733(99)00019-2
Lip, Sean Z. W. 2011. “A Fast Algorithm for the Discrete Core/Periphery Bipartitioning Problem.” doi:10.48550/arXiv.1102.5511
Seidman, Stephen B. 1983. "Network structure and minimum degree". Social Networks, 5(3), 269-287. doi:10.1016/0378-8733(83)90028-X
Batagelj, Vladimir, and Matjaz Zaversnik. 2003. "An O(m) algorithm for cores decomposition of networks". arXiv preprint cs/0310049. doi:10.48550/arXiv.cs/0310049
Wallerstein, Immanuel. 1974. "Dependence in an Interdependent World: The Limited Possibilities of Transformation Within the Capitalist World Economy." African Studies Review, 17(1), 1-26. doi:10.2307/523574
Other memberships:
member_brokerage,
member_cliques,
member_community_hier,
member_community_non,
member_components,
member_equivalence
node_is_core(ison_adolescents)
#> Betty Sue Alice Jane Dale Pam Carol Tina
#> 1 FALSE TRUE TRUE FALSE TRUE FALSE FALSE FALSE
#ison_adolescents %>%
# mutate(corep = node_is_core()) %>%
# graphr(node_color = "corep")
node_by_kcoreness(ison_adolescents)
#> ▃▁▁▁▅
#> Betty Sue Alice Jane Dale Pam Carol Tina
#> 1 1 2 2 2 2 2 1 1
node_by_coreness(ison_adolescents)
#> ▃▁▁▁▃
#> Betty Sue Alice Jane Dale Pam Carol Tina
#> 1 0.181 0.89 1 0.562 0.82 0.619 0.071 0
node_in_core(ison_adolescents)
#> 3 groups
#> Betty Sue Alice Jane Dale Pam Carol Tina
#> 1 Periphery Core Core Semi-periphery Core Semi-periphery Periphery Periphery