Learn R Programming

backbone (version 3.0.3)

backbone_from_weighted: Extract the backbone from a weighted network

Description

backbone_from_weighted() extracts the unweighted backbone from a weighted network

Usage

backbone_from_weighted(
  W,
  model = "disparity",
  alpha = 0.05,
  signed = FALSE,
  mtc = "none",
  parameter = 0,
  missing_as_zero = FALSE,
  narrative = FALSE,
  backbone_only = TRUE
)

Value

A backbone in the same class as W, or if backbone_only = FALSE, then a backbone object.

Arguments

W

A weighted network as a valued adjacency matrix or Matrix, or a weighted unipartite igraph object

model

string: backbone model, one of: "disparity", "lans", "mlf", or "global"

alpha

real: significance level of hypothesis test(s) in statistical models

signed

logical: return a signed backbone from a statistical model

mtc

string: type of Multiple Test Correction, either "none" or a method allowed by p.adjust().

parameter

real: parameter used to control structural backbone models

missing_as_zero

logical: treat missing edges as edges with zero weight and consider them for inclusion/exclusion in backbone

narrative

logical: display suggested text & citations

backbone_only

logical: return just the backbone (default), or a detailed backbone object

Details

The backbone_from_weighted function extracts the backbone from a weighted unipartite network. The backbone is an unweighted unipartite network that contains only edges whose weights are statistically significant (based on alpha for statistical models), or which exhibit certain structural properties (based on parameter for structural models). For statistical models, when signed = FALSE, the backbone contains edges that are statistically significantly strong under a one-tailed test. When signed = TRUE, the backbone contains positive edges that are statistically significantly strong, and negative edges that are statistically significantly weak, under a two-tailed test.

The model parameter controls the model used to evaluate the edge weights. The available models include:

Statistical Models (controlled by alpha, signed, and mtc)

  • disparity (default) - The disparity filter (Serrano et al., 2009)

  • lans - Locally adaptive network sparsification (Foti et al., 2011)

  • mlf - Marginal likelihood filter (Dianati, 2016)

Structural Models (controlled by parameter)

  • global - parameter is a numeric vector of length 1 or 2. If length(parameter)==1, then edges with weights above parameter are preserved. If length(parameter)==2, then edges with weights above max(parameter) are preserved as positive, and edges with weights above min(parameter) are preserved as negative.

The models implemented in backbone_from_weighted() can be applied to a weighted network that was obtained by projecting a bipartite network or hypergraph. However, if the original bipartite network or hypergraph is available, it is better to use backbone_from_projection().

References

package: Neal, Z. P. (2025). backbone: An R Package to Extract Network Backbones. CRAN. tools:::Rd_expr_doi("10.32614/CRAN.package.backbone")

disparity: Serrano, M. A., Boguna, M., & Vespignani, A. (2009). Extracting the multiscale backbone of complex weighted networks. Proceedings of the National Academy of Sciences, 106, 6483-6488. tools:::Rd_expr_doi("10.1073/pnas.0808904106")

lans: Foti, N. J., Hughes, J. M., & Rockmore, D. N. (2011). Nonparametric sparsification of complex multiscale networks. PLOS One, 6, e16431. tools:::Rd_expr_doi("10.1371/journal.pone.0016431")

mlf: Dianati, N. (2016). Unwinding the hairball graph: Pruning algorithms for weighted complex networks. Physical Review E, 93, 012304. tools:::Rd_expr_doi("10.1103/PhysRevE.93.012304")

Examples

Run this code
#A weighted network with heterogeneous (i.e. multiscale) weights
W <- matrix(c(0,10,10,10,10,75,0,0,0,0,
              10,0,1,1,1,0,0,0,0,0,
              10,1,0,1,1,0,0,0,0,0,
              10,1,1,0,1,0,0,0,0,0,
              10,1,1,1,0,0,0,0,0,0,
              75,0,0,0,0,0,100,100,100,100,
              0,0,0,0,0,100,0,10,10,10,
              0,0,0,0,0,100,10,0,10,10,
              0,0,0,0,0,100,10,10,0,10,
              0,0,0,0,0,100,10,10,10,0),10)

W <- igraph::graph_from_adjacency_matrix(W, mode = "undirected", weighted = TRUE)
plot(W, edge.width = sqrt(igraph::E(W)$weight)) #A stronger clique & a weaker clique

mean_weight <- mean(igraph::E(W)$weight)  #Find average edge weight
bb <- backbone_from_weighted(W, model = "global", #A backbone with stronger-than-average edges...
      parameter = mean_weight)
plot(bb) #...ignores the weaker clique

bb <- backbone_from_weighted(W, model = "disparity") #A disparity filter backbone...
plot(bb) #...preserves edges at multiple scales

Run the code above in your browser using DataLab