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")
)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
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.
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.
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.
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.
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).
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
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
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
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
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
Neal, Zachary P. 2022. "backbone: An R package to extract network backbones". PLoS ONE 17(5): e0269137. doi:10.1371/journal.pone.0269137
Other ties:
manip_ties_attr,
manip_ties_num,
modif_direction,
modif_weight
Other modifications:
modif_direction,
modif_from,
modif_labels,
modif_levels,
modif_miss,
modif_motifs,
modif_paths,
modif_permutation,
modif_plexity,
modif_project,
modif_proximity,
modif_scope,
modif_split,
modif_weight
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
#>