Back to Article
SuppMat 2: Effects of Network Reconstruction on Food-Web Structure
Download Source

SuppMat 2: Effects of Network Reconstruction on Food-Web Structure

Author

Tanya Strydom

Published

February 9, 2026

Abstract

Expanded results section.

Effect of Body Size Sampling Method on Network Metrics

To assess whether the choice of body size sampling distribution (uniform, lognormal, or truncated lognormal) influences the estimated structure of ecological networks, we computed partial eta-squared (η²) values for each network metric within each reconstruction model. This approach isolates the effect of body size distribution while controlling for model-specific variation.

Across all models and network metrics, the effect of body size sampling method was extremely small. Most η² values were effectively zero (<0.01), indicating that the choice of distribution had negligible influence on metrics such as connectance, generality, vulnerability, and various motif counts. Only a few metrics in the ATN model showed slightly higher effects (η² ≈ 0.17 for number of linear chains), but these remained the exception rather than the rule.

These findings justify using any of the tested body size sampling approaches for our simulations, as the structural conclusions drawn from the networks are robust to this methodological choice. Consequently, analyses of network metrics and comparisons across reconstruction models are not confounded by the specific form of the synthetic body size distribution.

Multivariate analysis of network structure

We quantified food-web structure using a suite of macro-, meso-, and micro-scale network metrics capturing global topology, motif composition, and species-level interaction patterns (Table S1). Differences among reconstruction approaches were assessed using a multivariate analysis of variance (MANOVA), with model identity as a fixed factor and the full set of network metrics as response variables. Pillai’s trace was used to assess overall multivariate significance due to its robustness to violations of multivariate normality.

To identify the multivariate axes driving differences among models, we performed canonical discriminant analysis (CDA) on the MANOVA model. Canonical variates represent orthogonal linear combinations of network metrics that maximize separation among reconstruction approaches. The contribution of individual metrics to each canonical variate was quantified using canonical structure coefficients (correlations between original metrics and canonical scores).

For visualization, canonical scores were plotted using linear discriminant analysis (LDA), which yields an equivalent discriminant subspace under equal group priors. Model separation in canonical space was visualized using convex hulls encompassing all network replicates for each reconstruction approach. Univariate analyses of variance and effect sizes (partial η²) were calculated for individual metrics and are reported in the Supplementary Materials for descriptive comparison. Pairwise interaction turnover was quantified using link-based beta diversity, which measures dissimilarity in the identity of trophic interactions between networks and captures differences arising from species turnover or changes in interactions among shared species.

Figure S1. Effect of Body Size Sampling Method on Network Metrics

Metrics where η² was notably higher are labelled directly on the bars. The figure highlights that, for the majority of network properties and models, η² values are extremely low (<0.01), confirming that the body size distribution choice has negligible impact on network structure. A few exceptions appear for the ATN model, but these are limited to specific metrics (e.g., number of linear chains).

Effects of Network Reconstruction on Food-Web Structure

Table S1. Descriptive statistics of network metrics by model

In [1]:
library(knitr)
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.2.0     ✔ readr     2.1.6
✔ forcats   1.0.1     ✔ stringr   1.6.0
✔ ggplot2   4.0.2     ✔ tibble    3.3.1
✔ lubridate 1.9.5     ✔ tidyr     1.3.2
✔ purrr     1.2.1     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
readr::read_csv("tables/Table_S1_descriptive_stats.csv") %>%
kable()
Rows: 6 Columns: 17
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr  (1): model
dbl (16): connectance_mean, connectance_sd, trophic_level_mean, trophic_leve...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
model connectance_mean connectance_sd trophic_level_mean trophic_level_sd generality_mean generality_sd vulnerability_mean vulnerability_sd S1_mean S1_sd S2_mean S2_sd S4_mean S4_sd S5_mean S5_sd
ADBM 0.2980289 0.0173274 14.9000 4.394688 0.9018448 0.0950970 0.8893876 0.0559394 0.0000000 0.0000000 1.1891795 0.4682134 1.4537193 0.6319601 1.3887004 0.3871614
ATN 0.2250133 0.0170831 15.7300 6.889176 1.0308906 0.1385251 1.0673261 0.1042244 0.0291176 0.0502323 0.4557063 0.1981065 1.3411211 0.5991332 1.1685892 0.2930910
PFIM 0.1185292 0.0231336 15.6525 6.238513 1.7226598 0.1528536 0.6326936 0.0763279 0.1044935 0.0352603 0.1390467 0.0305457 0.0644215 0.0456966 0.5227883 0.1453698
log ratio 0.1720401 0.0155925 19.9100 10.106545 0.6371490 0.0896016 0.6898121 0.1403929 0.7490114 0.2910247 0.1410731 0.0622885 0.5286292 0.2069172 0.5014183 0.2151592
niche 0.1181557 0.0328685 18.4925 12.145317 1.1245242 0.1685898 0.6482552 0.1672472 0.1924341 0.1096531 0.1088552 0.0890663 0.1434281 0.0855302 0.3231550 0.1852910
random 0.2213846 0.0449628 17.0675 12.154929 0.3263843 0.0833936 1.7046249 0.2168757 0.0107583 0.0127651 0.1808526 0.0937089 1.6233885 0.6556234 0.0296900 0.0213948

Table S2. Canonical discriminant analysis

In [2]:
readr::read_csv("tables/canonical_loadings.csv") %>%
kable()
Rows: 8 Columns: 4
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): Metric
dbl (3): Can1, Can2, Can3

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Metric Can1 Can2 Can3
connectance -0.75 0.36 -0.45
trophic_level -0.31 -0.75 -0.25
generality 0.73 0.58 0.32
vulnerability -0.86 -0.20 0.38
S1 0.38 -0.60 -0.48
S2 -0.35 0.62 -0.53
S4 -0.81 0.14 -0.11
S5 -0.12 0.74 -0.52

Figure S1. Canonical Loadings

Canonical loadings for the first two canonical variates (CV1, CV2) from the canonical discriminant analysis of network metrics. Arrows indicate the contribution of each metric to the multivariate separation among reconstruction models. Colours denote the scale of each metric: Macro (green), Meso (orange), Micro (purple). Metric labels are shown for the most influential variables.

Model choice influences inferred extinction dynamics

Figure S2. Raw temporal trajectories of network structure during extinction simulations.

Panels show mean values of network-level metrics through time for each reconstruction model, grouped by macro-, meso-, and micro-scale properties as in Figure 3. Lines represent raw simulation outputs averaged across replicates. This figure provides the underlying data corresponding to the GAM-predicted trajectories shown in Figure 3.

Table S3. Full generalized additive model (GAM) results for network-level metrics.

Parametric coefficients, model-specific smooth terms, and ANOVA comparisons of shared versus model-specific time effects are shown for each network metric. Estimate/EDF and Std. Error / Ref.df correspond to parametric coefficients or effective degrees of freedom and reference degrees of freedom for smooth terms. t/F value and p-value report statistical significance. Parametric terms represent the baseline effect of each model; smooth terms describe non-linear temporal trajectories of each reconstruction model. ANOVA rows compare the fit of shared versus model-specific smooths. No inference or interpretation is implied in this table; the main text and Figure 3 provide inferential conclusions.

In [3]:
readr::read_csv("tables/Table_S7_GAM_results.csv") %>%
kable()
Rows: 104 Columns: 7
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (4): Term, Network metric, Term type, p-value
dbl (3): Estimate / EDF, Std. Error / Ref.df, t / F value

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Term Network metric Term type Estimate / EDF Std. Error / Ref.df t / F value p-value
(Intercept) connectance parametric 0.298 0.001 241.811 <0.001
Model: Body-size ratio connectance parametric -0.126 0.002 -72.283 <0.001
Model: ATN connectance parametric -0.073 0.002 -41.891 <0.001
Model: Niche connectance parametric -0.180 0.002 -103.197 <0.001
Model: PFIM connectance parametric -0.179 0.002 -102.983 <0.001
Model: Random connectance parametric -0.077 0.002 -43.973 <0.001
Smooth: time by ADBM connectance smooth 2.921 2.995 22.563 <0.001
Smooth: time by Body-size ratio connectance smooth 2.927 2.996 13.810 <0.001
Smooth: time by ATN connectance smooth 2.958 2.999 27.042 <0.001
Smooth: time by Niche connectance smooth 2.249 2.618 2.719 0.112
Smooth: time by PFIM connectance smooth 2.987 3.000 113.849 <0.001
Smooth: time by Random connectance smooth 2.604 2.882 4.720 0.016
ANOVA: shared vs model-specific smooths connectance anova NA NA 32.045 <0.001
(Intercept) trophic_level parametric 3.583 0.032 110.465 <0.001
Model: Body-size ratio trophic_level parametric 2.666 0.046 58.124 <0.001
Model: ATN trophic_level parametric -0.388 0.046 -8.450 <0.001
Model: Niche trophic_level parametric 0.448 0.046 9.771 <0.001
Model: PFIM trophic_level parametric -1.105 0.046 -24.099 <0.001
Model: Random trophic_level parametric 2.312 0.046 50.402 <0.001
Smooth: time by ADBM trophic_level smooth 2.740 2.948 15.265 <0.001
Smooth: time by Body-size ratio trophic_level smooth 2.918 2.995 72.135 <0.001
Smooth: time by ATN trophic_level smooth 2.642 2.903 11.011 <0.001
Smooth: time by Niche trophic_level smooth 2.925 2.996 46.779 <0.001
Smooth: time by PFIM trophic_level smooth 1.496 1.811 6.427 0.007
Smooth: time by Random trophic_level smooth 2.994 3.000 607.810 <0.001
ANOVA: shared vs model-specific smooths trophic_level anova NA NA 78.029 <0.001
(Intercept) generality parametric 0.902 0.004 200.915 <0.001
Model: Body-size ratio generality parametric -0.265 0.006 -41.698 <0.001
Model: ATN generality parametric 0.129 0.006 20.329 <0.001
Model: Niche generality parametric 0.223 0.006 35.079 <0.001
Model: PFIM generality parametric 0.821 0.006 129.304 <0.001
Model: Random generality parametric -0.575 0.006 -90.653 <0.001
Smooth: time by ADBM generality smooth 2.949 2.998 101.687 <0.001
Smooth: time by Body-size ratio generality smooth 2.847 2.981 25.350 <0.001
Smooth: time by ATN generality smooth 2.979 3.000 230.268 <0.001
Smooth: time by Niche generality smooth 1.001 1.001 0.391 0.532
Smooth: time by PFIM generality smooth 2.996 3.000 366.841 <0.001
Smooth: time by Random generality smooth 2.933 2.996 48.486 <0.001
ANOVA: shared vs model-specific smooths generality anova NA NA 122.123 <0.001
(Intercept) vulnerability parametric 0.889 0.006 141.193 <0.001
Model: Body-size ratio vulnerability parametric -0.200 0.009 -22.403 <0.001
Model: ATN vulnerability parametric 0.178 0.009 19.974 <0.001
Model: Niche vulnerability parametric -0.241 0.009 -27.068 <0.001
Model: PFIM vulnerability parametric -0.257 0.009 -28.815 <0.001
Model: Random vulnerability parametric 0.815 0.009 91.514 <0.001
Smooth: time by ADBM vulnerability smooth 2.595 2.877 10.151 <0.001
Smooth: time by Body-size ratio vulnerability smooth 2.909 2.993 49.940 <0.001
Smooth: time by ATN vulnerability smooth 2.912 2.994 45.848 <0.001
Smooth: time by Niche vulnerability smooth 2.824 2.976 20.777 <0.001
Smooth: time by PFIM vulnerability smooth 2.944 2.997 40.497 <0.001
Smooth: time by Random vulnerability smooth 1.412 1.697 0.222 0.695
ANOVA: shared vs model-specific smooths vulnerability anova NA NA 33.392 <0.001
(Intercept) S1 parametric 0.000 0.003 0.000 1
Model: Body-size ratio S1 parametric 0.749 0.004 194.021 <0.001
Model: ATN S1 parametric 0.029 0.004 7.543 <0.001
Model: Niche S1 parametric 0.192 0.004 49.847 <0.001
Model: PFIM S1 parametric 0.104 0.004 27.068 <0.001
Model: Random S1 parametric 0.011 0.004 2.787 0.005
Smooth: time by ADBM S1 smooth 1.000 1.000 0.000 1
Smooth: time by Body-size ratio S1 smooth 2.999 3.000 3454.642 <0.001
Smooth: time by ATN S1 smooth 2.473 2.798 5.453 0.001
Smooth: time by Niche S1 smooth 2.980 3.000 197.148 <0.001
Smooth: time by PFIM S1 smooth 2.952 2.998 41.261 <0.001
Smooth: time by Random S1 smooth 1.000 1.000 0.011 0.916
ANOVA: shared vs model-specific smooths S1 anova NA NA 772.574 <0.001
(Intercept) S2 parametric 1.189 0.004 282.637 <0.001
Model: Body-size ratio S2 parametric -1.048 0.006 -176.145 <0.001
Model: ATN S2 parametric -0.733 0.006 -123.268 <0.001
Model: Niche S2 parametric -1.080 0.006 -181.560 <0.001
Model: PFIM S2 parametric -1.050 0.006 -176.486 <0.001
Model: Random S2 parametric -1.008 0.006 -169.460 <0.001
Smooth: time by ADBM S2 smooth 2.998 3.000 3739.389 <0.001
Smooth: time by Body-size ratio S2 smooth 2.941 2.997 49.584 <0.001
Smooth: time by ATN S2 smooth 2.990 3.000 607.421 <0.001
Smooth: time by Niche S2 smooth 2.860 2.984 22.303 <0.001
Smooth: time by PFIM S2 smooth 2.757 2.954 13.956 <0.001
Smooth: time by Random S2 smooth 2.915 2.994 35.738 <0.001
ANOVA: shared vs model-specific smooths S2 anova NA NA 553.156 <0.001
(Intercept) S4 parametric 1.454 0.005 271.314 <0.001
Model: Body-size ratio S4 parametric -0.925 0.008 -122.084 <0.001
Model: ATN S4 parametric -0.113 0.008 -14.860 <0.001
Model: Niche S4 parametric -1.310 0.008 -172.920 <0.001
Model: PFIM S4 parametric -1.389 0.008 -183.346 <0.001
Model: Random S4 parametric 0.170 0.008 22.391 <0.001
Smooth: time by ADBM S4 smooth 2.999 3.000 4569.752 <0.001
Smooth: time by Body-size ratio S4 smooth 2.994 3.000 444.599 <0.001
Smooth: time by ATN S4 smooth 2.999 3.000 4034.456 <0.001
Smooth: time by Niche S4 smooth 2.854 2.983 24.949 <0.001
Smooth: time by PFIM S4 smooth 2.786 2.964 23.029 <0.001
Smooth: time by Random S4 smooth 2.999 3.000 4479.574 <0.001
ANOVA: shared vs model-specific smooths S4 anova NA NA 990.095 <0.001
(Intercept) S5 parametric 1.389 0.005 283.303 <0.001
Model: Body-size ratio S5 parametric -0.887 0.007 -127.994 <0.001
Model: ATN S5 parametric -0.220 0.007 -31.752 <0.001
Model: Niche S5 parametric -1.066 0.007 -153.709 <0.001
Model: PFIM S5 parametric -0.866 0.007 -124.911 <0.001
Model: Random S5 parametric -1.359 0.007 -196.042 <0.001
Smooth: time by ADBM S5 smooth 2.998 3.000 1900.335 <0.001
Smooth: time by Body-size ratio S5 smooth 2.995 3.000 593.637 <0.001
Smooth: time by ATN S5 smooth 2.996 3.000 940.100 <0.001
Smooth: time by Niche S5 smooth 2.976 3.000 167.436 <0.001
Smooth: time by PFIM S5 smooth 2.980 3.000 286.415 <0.001
Smooth: time by Random S5 smooth 1.000 1.000 0.028 0.867
ANOVA: shared vs model-specific smooths S5 anova NA NA 279.442 <0.001

Table S4. ANOVA comparisons of shared versus model-specific GAM smooths for all network-level metrics.

Each row shows the result of comparing a generalized additive model (GAM) with a shared smooth term for time across reconstruction models versus a model-specific smooth term for each reconstruction model. Columns include the F value and p-value of the ANOVA test. Very small p-values are reported as <0.001. These tests indicate whether allowing model-specific temporal trajectories significantly improves model fit; no inferential claims about the direction or magnitude of changes are made in this table.

In [4]:
readr::read_csv("tables/Table_S8_GAM_model_comparison.csv") %>%
kable()
Rows: 8 Columns: 4
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (3): Term, Network metric, p-value
dbl (1): F value

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Term Network metric F value p-value
ANOVA: shared vs model-specific smooths connectance 32.045 <0.001
ANOVA: shared vs model-specific smooths trophic_level 78.029 <0.001
ANOVA: shared vs model-specific smooths generality 122.123 <0.001
ANOVA: shared vs model-specific smooths vulnerability 33.392 <0.001
ANOVA: shared vs model-specific smooths S1 772.574 <0.001
ANOVA: shared vs model-specific smooths S2 553.156 <0.001
ANOVA: shared vs model-specific smooths S4 990.095 <0.001
ANOVA: shared vs model-specific smooths S5 279.442 <0.001

References