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.

Cognitive social structures

A cognitive social structure records each node's report of the ties in the whole network, in a by column that names who reported each tie. Counting every report as a tie of its own would count each tie once for every perceiver who reports it. So the functions here first combine the reports into the locally aggregated structure of Krackhardt (1987), with the intersection rule: a tie exists if both of its ends report it, and a message says so. A tie that names no reporter is kept as it is.

A tie-level function still returns one value for each report, so that the result can be added back to the network it was given. Each report takes the value of the tie that it reports. A report of a tie that is not in the aggregated structure takes NA, or FALSE for a mark. tie_is_random() is the exception, and draws among the reports.

To combine the reports in a different way, do this before the function, e.g. with manynet::to_aggregated(over = "by").

Krackhardt, David. 1987. "Cognitive social structures". Social Networks 9(2): 109-134. doi:10.1016/0378-8733(87)90009-8

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
#>