node_is_core() identifies whether nodes belong to the core of the network, as opposed to the periphery.

node_is_core(
  .data,
  coreness = NULL,
  direction = c("all", "out", "in"),
  centrality = NULL
)

Arguments

.data

A network object of class stocnet, igraph, tbl_graph, network, or similar. Internally any of these will be coerced to an efficient implementation. For more information on possible coercions, see e.g. manynet::as_stocnet().

coreness

Which method to use to calculate nodes' coreness. One of "correlation", "rich", "transition", or "hub"; see method_coreness for what each does. By default NULL, which uses "rich" for a weighted, directed, or two-mode network, since it is the only method that reads those properties directly, and "correlation" otherwise.

direction

One of "all" (the default), "out", or "in". For a directed network, "out" scores nodes on the ties they send and "in" on the ties they receive. Ignored for undirected and two-mode networks.

centrality

Deprecated; use coreness instead.

Value

A node_mark logical vector the length of the nodes in the network, giving either TRUE or FALSE for each node depending on whether the condition is matched.

Core-periphery

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 coreness, \(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.

Which ordering the nodes are swept in depends on the method named by coreness, for which see method_coreness.

References

On core-periphery partitioning

Borgatti, Stephen P., and Martin G. Everett. 2000. "Models of core/periphery structures". Social Networks, 21(4), 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

Examples

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())
#> 
#> ── # The Adolescent Society ────────────────────────────────────────────────────
#> # A labelled, undirected network of 8 adolescents and 10 friendship ties
#> 
#> ── Nodes 
#> # A tibble: 8 × 2
#>   name  corep     
#>   <chr> <node_mrk>
#> 1 Betty FALSE     
#> 2 Sue   TRUE      
#> 3 Alice TRUE      
#> 4 Jane  FALSE     
#> 5 Dale  TRUE      
#> 6 Pam   FALSE     
#> # ℹ 2 more rows
#> 
#> ── Ties 
#> # A tibble: 10 × 2
#>    from    to
#>   <int> <int>
#> 1     1     2
#> 2     2     3
#> 3     3     4
#> 4     2     5
#> 5     3     5
#> 6     4     5
#> # ℹ 4 more rows
#>