These functions reduce a network to its backbone, the ties that carry more weight, or hold more structure, than a null model expects:

  • to_backbone() returns the network with only its backbone ties.

  • tie_is_backbone() marks which ties are in the backbone.

A global cutoff such as to_unweighted() compares every tie against the same number, so it deletes a network's whole periphery before it touches a hub. A backbone filter compares each tie against a null model local to its endpoints, so a tie that is weak overall but strong for its own node is retained. This makes the multiscale structure of a weighted network visible, both for analysis and for drawing.

to_backbone(
  .data,
  filter = NULL,
  threshold = NULL,
  endpoints = c("either", "both")
)

Arguments

.data

An object of a {manynet}-consistent class:

  • adjacency or incidence matrix from {base} R

  • edgelist data.frame from {base} R or tbl/tbl_df from {tibble}

  • stocnet stocnet, from the {manynet} package

  • igraph igraph, from the {igraph} package

  • network network, from the {network} package

  • tidygraph tbl_graph, from the {tidygraph} package

filter

Which backbone filter to apply, one of:

  • "disparity": the disparity filter of Serrano et al. (2009), which tests a tie's share of its node's strength against a null model in which that strength is divided at random. Assumes heavy-tailed weights.

  • "lans": locally adaptive network sparsification, Foti et al. (2011), which replaces that null model with the empirical distribution of the node's own tie weights, and so assumes nothing about their shape.

  • "noise": the noise-corrected filter of Coscia and Neffke (2017), which tests a tie's weight against the strengths of both its endpoints and allows for the uncertainty of the null itself. Corrects the disparity filter's bias towards hubs.

  • "mlf": the marginal likelihood filter of Dianati (2016), which reads the weights as counts of independent events and tests each against a maximum-entropy null. Requires whole-number weights.

  • "simmelian": the Simmelian backbone of Nick et al. (2013), which ranks each node's neighbours by how embedded the tie is and retains the ties whose endpoints rank each other similarly. Ignores tie weights, and so is the only filter available for an unweighted network. Reads a directed network as an undirected one, since it counts shared neighbours.

By default NULL, which uses "lans" where the network is weighted and "simmelian" where it is not. "lans" leads because it assumes nothing about the shape of the weights, and because it retains each node's strongest tie whatever that shape is. "disparity" is the better known filter, but its null model expects heavy-tailed weights: where weights are more even, a tie's share of its node's strength approaches 1/k for every tie, the p-value approaches 1/e, and the filter retains nothing at all.

threshold

The cutoff below which a tie is retained. For the four statistical filters this is a significance level, by default 0.05. For "simmelian" it is instead one minus the similarity of the two endpoints' rankings, by default 0.5. By default NULL, which uses whichever of these the filter calls for.

endpoints

Whether a tie is retained where it passes the filter at "either" of its endpoints, by default, or only where it passes at "both". "both" is the more demanding, since a tie must be locally salient to both the sender and the receiver. Applies to the "disparity" and "lans" filters only, since the others weigh both endpoints at once.

Value

An object of the same class as the function was given, modified as explained in the function description, details, or section. Functions that split a network return a list of such objects.

Details

The work is done by the stocnet method, since that class holds both the ties in the order the network records them and the metadata in which the transformation is recorded. Every other class is coerced to it and back again, so all of them are supported.

Each filter is applied to the ties as the network holds them. Where a network holds parallel ties, each is filtered on its own rather than as the bundle they make together, so use to_simplex() first where that is not wanted.

Only closed-form filters are offered here. For the backbone models that resample a null distribution, such as the stochastic and fixed degree sequence models, or that extract the backbone of a two-mode projection, see the backbone package (Neal 2022).

References

On the disparity filter

Serrano, M. Angeles, Marian Boguna, and Alessandro Vespignani. 2009. "Extracting the multiscale backbone of complex weighted networks". Proceedings of the National Academy of Sciences 106(16): 6483-6488. doi:10.1073/pnas.0808904106

On locally adaptive network sparsification

Foti, Nicholas J., James M. Hughes, and Daniel N. Rockmore. 2011. "Nonparametric sparsification of complex multiscale networks". PLoS ONE 6(2): e16431. doi:10.1371/journal.pone.0016431

On the noise-corrected filter

Coscia, Michele, and Frank M. H. Neffke. 2017. "Network backboning with noisy data". IEEE International Conference on Data Engineering 33: 425-436. doi:10.1109/ICDE.2017.100

On the marginal likelihood filter

Dianati, Navid. 2016. "Unwinding the hairball graph: Pruning algorithms for weighted complex networks". Physical Review E 93(1): 012304. doi:10.1103/PhysRevE.93.012304

On Simmelian backbones

Nick, Bobo, Conrad Lee, Padraig Cunningham, and Ulrik Brandes. 2013. "Simmelian backbones: Amplifying hidden homophily in Facebook networks". Advances in Social Networks Analysis and Mining 2013: 525-532. doi:10.1145/2492517.2492569

Nocaj, Arlind, Mark Ortmann, and Ulrik Brandes. 2015. "Untangling the hairballs of multi-centered, small-world online social media networks". Journal of Graph Algorithms and Applications 19(2): 595-618. doi:10.7155/jgaa.00370

On other backbone models

Neal, Zachary P. 2022. "backbone: An R package to extract network backbones". PLoS ONE 17(5): e0269137. doi:10.1371/journal.pone.0269137

Examples

  to_backbone(ison_networkers)
#> 
#> ── # lans backbone of EIES Networkers ──────────────────────────────────────────
#> # A labelled, weighted, directed network of 32 nodes and 71 arcs
#> 
#> ── Nodes 
#> # A tibble: 32 × 3
#>   name               Discipline   Citations
#>   <chr>              <chr>            <dbl>
#> 1 Lin Freeman        Sociology           19
#> 2 Doug White         Anthropology         3
#> 3 Ev Rogers          Other              170
#> 4 Richard Alba       Sociology           23
#> 5 Phipps Arabie      Other               16
#> 6 Carol Barner-Barry Other                6
#> # ℹ 26 more rows
#> 
#> ── Ties 
#> # A tibble: 71 × 3
#>    from    to weight
#>   <int> <int>  <dbl>
#> 1     1     2    488
#> 2     1     3     28
#> 3     1     4     65
#> 4     1     6     65
#> 5     1     7     45
#> 6     1     8    346
#> # ℹ 65 more rows
#> 
  to_backbone(ison_networkers, filter = "disparity", threshold = 0.2)
#> ── # disparity backbone of EIES Networkers ─────────────────────────────────────
#> # A labelled, weighted, directed network of 32 nodes and 123 arcs
#> 
#> ── Nodes 
#> # A tibble: 32 × 3
#>   name               Discipline   Citations
#>   <chr>              <chr>            <dbl>
#> 1 Lin Freeman        Sociology           19
#> 2 Doug White         Anthropology         3
#> 3 Ev Rogers          Other              170
#> 4 Richard Alba       Sociology           23
#> 5 Phipps Arabie      Other               16
#> 6 Carol Barner-Barry Other                6
#> # ℹ 26 more rows
#> 
#> ── Ties 
#> # A tibble: 123 × 3
#>    from    to weight
#>   <int> <int>  <dbl>
#> 1     1     2    488
#> 2     1     3     28
#> 3     1     4     65
#> 4     1     5     20
#> 5     1     6     65
#> 6     1     7     45
#> # ℹ 117 more rows
#>