Choosing a Method#
With 65 functions available, selecting the right backbone method depends on the properties of your network and the goals of your analysis.
Decision guide#
- Is your graph bipartite?
Use
sdsm()(analytical) orfdsm()(Monte Carlo) to score edges in a bipartite projection and then filter by p-value. Fixed null-model variants are also available viafixedfill(),fixedrow(), andfixedcol(). Projection weighting can be selected withprojection="simple"|"hyper"|"probs"|"ycn".- Is your graph unweighted?
Use the
unweightedmodule:sparsify()(generic framework),lspar()(local sparsification), orlocal_degree()(degree-based), then applyboolean_filter()with"sparsify_keep".- Is your graph weighted?
Choose based on your analysis goals:
Statistical significance: Use methods from
statisticalto test whether edge weights are significant under a null model. These produce p-values that can be filtered at a chosen significance level.Topological structure: Use methods from
structuralto extract edges that are important for the network’s topology (shortest paths, spanning trees, planarity).Neighborhood similarity: Use methods from
proximityto score edges based on how similar the neighborhoods of their endpoints are.Combined approach: Use
glab_filter()fromhybridto combine betweenness and degree information.
Method comparison table#
Method |
Weighted |
Directed |
Output Type |
Connectivity |
Approach |
|---|---|---|---|---|---|
Yes |
Yes |
p-value |
No guarantee |
Statistical |
|
Yes |
Yes |
Score + p-value |
No guarantee |
Statistical |
|
Yes |
Yes |
p-value |
No guarantee |
Statistical |
|
Yes |
Yes |
p-value |
No guarantee |
Statistical |
|
Yes |
Yes |
p-value |
No guarantee |
Statistical |
|
Yes |
Yes |
p-value |
No guarantee |
Statistical |
|
Yes |
Yes |
p-value |
No guarantee |
Statistical |
|
Yes |
Yes |
Keep flag |
No guarantee |
Statistical |
|
Yes |
Yes |
Scored graph |
No guarantee |
Structural |
|
Yes |
Yes |
Scored graph |
No guarantee |
Structural |
|
Yes |
Yes |
Scored graph |
No guarantee |
Structural |
|
Yes |
Yes |
Scored graph |
No guarantee |
Structural |
|
Yes |
Yes |
Scored graph |
No guarantee |
Structural |
|
No |
Yes |
Scored graph |
No guarantee |
Structural |
|
Yes |
No |
Score |
No guarantee |
Structural |
|
Yes |
No |
Scored graph |
Depends on filter |
Structural |
|
Yes |
No |
Scored graph |
Depends on filter |
Structural |
|
Yes |
No |
Score + keep flag |
Spans each component ( |
Structural |
|
Yes |
No |
Scored graph |
No guarantee |
Structural |
|
Yes |
No |
Node score |
No guarantee |
Structural |
|
Yes |
No |
Scored graph |
Depends on filter |
Structural |
|
Yes |
No |
Scored graph |
Depends on filter |
Structural |
|
Yes |
No |
p-value |
No guarantee |
Hybrid |
|
Proximity methods (12) |
No |
Yes |
Score |
No guarantee |
Proximity |
Optional |
No |
Scored graph |
No guarantee |
Bipartite |
|
Optional |
No |
Scored graph |
No guarantee |
Bipartite |
|
No |
No |
Scored graph |
Optional (UMST) |
Unweighted |
|
No |
No |
Scored graph |
No guarantee |
Unweighted |
|
No |
No |
Scored graph |
No guarantee |
Unweighted |
Choosing a statistical method#
All eight statistical methods test edge significance, but they differ in their null models (the tutorial Statistical null models side by side runs seven of them on one network and shows what each choice does):
disparity_filter(): Assumes each node’s total strength is uniformly distributed across its edges. Works well for heterogeneous networks with broad degree distributions.a=...tolerates more (a > 1) or less (a < 1) heterogeneity, anda="ml"fits it; see Weights, Units, and Transforms.noise_corrected_filter(): Scores each edge by its lift over the weight expected from its endpoints’ strengths, and estimates the score’s standard deviation with a Bayesian model of noisy counts.nc_pvalueis the exact binomial p-value of its null model, which is the marginal likelihood filter’s null counted on a symmetric weight matrix. The paper’s rulenc_score > 1.64 * nc_sdev(pvalue_method="delta") is not calibrated: it keeps most edges of low-count graphs, even pure noise.marginal_likelihood_filter(): Considers both endpoints of each edge in a binomial null model. Treats weights as integer counts;unit=sets the weight of one count (also onecm_filterandnoise_corrected_filter).ecm_filter(): Uses a maximum-entropy null model that preserves both degree and strength sequences. Most computationally expensive but most principled.lans_filter(): Nonparametric method using empirical CDFs. Makes no distributional assumptions but relies on sufficient data at each node.polya_filter(): Lets each node hand out its strength through a self-reinforcing Pólya urn. The reinforcement parameterasets how much heterogeneity the null tolerates;a=Nonefits it to the data by maximum likelihood. Treats weights as integer counts. Yassin et al. (2025) found it best preserves the weight distribution.gloss_filter(): A global null that keeps the topology and draws every edge weight from the observed weight distribution, conditioned on the endpoints’ degrees and strengths. Keeps the fewest edges of these methods in the Yassin et al. (2025) comparison.multiple_linkage_analysis(): For each node, compares the sorted shares of its link weights with ideal “k equally dominant links” distributions and keeps the links of the best fit (mla_keep, with the number per node inmla_rank). There is no significance level, and every node keeps at least its strongest link.method="lans"thresholds LANS p-values instead, as version 0.2 did.