Auto-Research PipelineA durable, human-gated pipeline for computational research
Research runad88c89b80ff· 8 September 2026

Does intraspecific competition exceed interspecific competition in a desert rodent community, and is interspecific competition stronger between body-size-similar species?

CompleteArchived runEcology & Evolutionary Biology · Modelled on Ecology Letters

Paper

Conspecifics, not heterospecifics, limit individual body condition in a desert rodent community

Abstract

Modern coexistence theory makes an excess of intraspecific over interspecific density dependence the necessary condition for stabilisation, yet the benchmark quantification is entirely botanical. We estimated per-capita interaction coefficients on an individual fitness component, size-adjusted body mass, for the twelve abundant rodent species of the Portal Project record (30,320 measured individuals, 24 plots, 1977-2002). Eleven of twelve species were limited more by conspecifics than by heterospecifics (sign test p = 0.0032), and none showed significant interspecific competition. Substituting one heterospecific neighbour for one conspecific at constant total captures cost 2.07% of body mass (bootstrap 95% CI -2.49 to -1.61), but this unweighted species mean is pulled by two sparse species: seven of twelve contrasts are weaker than -2%. Restricting to structurally adult animals roughly halved it, to -1.119% (-1.676 to -0.644). Size-similar heterospecifics were not detectably stronger competitors. The ordering, not the magnitude, is robust.

Keywordscoexistence theorycompetition coefficientsbody conditiondensity dependencedesert rodentslimiting similaritylong-term monitoringPortal Projectself-limitationstabilising mechanisms

§Ask about this paper

Grounded in this run

Questions are answered from this run's record — the paper, the executed analysis, the data provenance and the referee report. Nothing else is consulted.

This run is finished, so the recorded paper cannot be rewritten. Questions are still answered from its record.

Pipeline

1.Literature review

Attempt 3Done

Literature review complete (live:agent:claude-opus-5): 10 key papers, 22 grounded sources, 5 open gaps.

Summary

Modern coexistence theory rests on one necessary condition: each species must limit itself more than it limits its competitors (Chesson 2000, 2018). Stabilising mechanisms are defined precisely as those that raise intraspecific relative to interspecific density dependence, so the empirical ratio of intra- to interspecific per-capita interaction strength is the field's central quantity. Adler et al. (2018) supplied the benchmark measurement for terrestrial plants: across 39 studies, where both effects were competitive, intraspecific competition was four to five-fold stronger than interspecific competition, and almost all remaining pairs combined intraspecific competition with interspecific facilitation. That synthesis is entirely botanical. No comparable per-capita estimate exists for a free-living vertebrate community, where interference competition and behavioural dominance operate alongside exploitative resource use.

Desert granivorous rodents are the classic vertebrate competition system (Brown, Reichman & Davidson 1979). Body size structures which seeds a species can profitably husk and where it forages (Brown & Lieberman 1973), and Bowers & Brown (1982) found that granivore pairs with mass ratios below about 1.5 co-occur less often than chance, the strongest observational case for body-size limiting similarity in this guild. At Portal, Arizona, three decades of exclosures showed that removing kangaroo rats raises the abundance of five smaller granivores (Brown & Munger 1985; Heske, Brown & Mistry 1994), and the community shows compensatory, energetically homeostatic dynamics (Ernest & Brown 2001; Ernest et al. 2008) punctuated by rapid compositional transitions (Christensen, Harris & Ernest 2018) whose compensatory capacity decays over decades (Diaz & Ernest 2022).

The gap is one of currency and scale. The Portal exclosure results are population-abundance responses to removing an entire guild member, not per-capita interaction coefficients, and they cannot say whether an individual is depressed more by one conspecific neighbour than by one heterospecific neighbour. Eccard & Ylonen (2003) argue explicitly that population-level removals miss the individual-level currencies through which rodent competition acts, and Manlick, Maldonado & Newsome (2021) show individual foraging and survival in a desert rodent ensemble respond to competitors. Body condition, standardised for structural size (Peig & Green 2009), is the natural individual fitness component.

Interpretation must be disciplined. Broekman et al. (2019) show that excess self-limitation measured on a fitness component evidences stabilisation of an interaction, not stable coexistence, which additionally requires the average-fitness-difference condition. Adler et al. (2018) further report that single-fitness-component studies yield smaller intra-minus-inter differences than full-life-cycle studies, making a body-condition test conservative. Yenni, Adler & Ernest (2012) predict the strongest self-limitation in the rarer species, giving a within-community prediction that the same data can test.

Key papers (10)

  1. Competition and coexistence in plant communities: intraspecific competition is stronger than interspecific competition. Adler, P.B., Smull, D., Beard, K.H., Choi, R.T., Furniss, T., Kulmatiski, A., Meiners, J.M., Tredennick, A.T. & Veblen, K.E. — Ecology Letters 21, 1319-1329, 2018.
    The benchmark quantitative synthesis: intraspecific competition four to five-fold stronger than interspecific across 39 plant studies, and the source of the design guidance that single-fitness-component studies give conservative estimates. The animal analogue is missing, which is exactly the space this study occupies.
  2. Mechanisms of maintenance of species diversity. Chesson, P. — Annual Review of Ecology and Systematics 31, 343-366, 2000.
    Defines stabilising mechanisms as those that increase intraspecific relative to interspecific density dependence, making the intra-versus-inter contrast the theoretically motivated target parameter rather than an arbitrary comparison.
  3. Signs of stabilisation and stable coexistence. Broekman, M.J.E., Muller-Landau, H.C., Visser, M.D., Jongejans, E., Wright, S.J. & de Kroon, H. — Ecology Letters 22, 1957-1975, 2019.
    Sets the interpretive limit: excess self-limitation measured on anything other than per-capita population growth evidences stabilisation of an interaction, and is neither necessary nor sufficient for stable coexistence. Dictates how strongly the conclusions may be phrased.
  4. Long-term experimental study of a Chihuahuan Desert rodent community: 13 years of competition. Heske, E.J., Brown, J.H. & Mistry, S. — Ecology 75, 438-445, 1994.
    The manipulative evidence that interspecific competition operates at Portal: excluding Dipodomys raises the abundance of five smaller granivores. Establishes that competition is present, but measures it as a population-abundance response rather than a per-capita coefficient.
  5. Body size and coexistence in desert rodents: chance or community structure?. Bowers, M.A. & Brown, J.H. — Ecology 63, 391-400, 1982.
    The foundational limiting-similarity result for this guild: granivores with mass ratios below about 1.5 co-occur less often than chance. Motivates the prediction that realised interspecific effects should weaken with body-size distance.
  6. Interspecific competition in small rodents: from populations to individuals. Eccard, J.A. & Ylonen, H. — Evolutionary Ecology 17, 423-440, 2003.
    Argues that population-level removal experiments miss the individual-level currencies (growth, condition, maturation) through which rodent competition acts, and that the two levels can disagree. Direct justification for using body condition as the response.
  7. New perspectives for estimating body condition from mass/length data: the scaled mass index as an alternative method. Peig, J. & Green, A.J. — Oikos 118, 1883-1891, 2009.
    The standard reference for size-standardised body condition; also the reason to prefer a single-stage analysis of covariance with log structural length when the mass-length correlation is too weak for a stable standardised major axis slope.
  8. Strong self-limitation promotes the persistence of rare species. Yenni, G., Adler, P.B. & Ernest, S.K.M. — Ecology 93, 456-461, 2012.
    Predicts that self-limitation should be strongest in the rarer members of a community, giving an additional within-community prediction testable on the same coefficients.
  9. Long-term monitoring and experimental manipulation of a Chihuahuan desert ecosystem near Portal, Arizona (1977-2013). Ernest, S.K.M., Yenni, G.M., Allington, G., Christensen, E.M., Geluso, K., Goheen, J.R., Schutzenhofer, M.R., Supp, S.R., Thibault, K.M., Brown, J.H. & Valone, T.J. — Ecology 97, 1082, 2016.
    The peer-reviewed data paper for the Portal research database, documenting the 24-plot design, the exclosure treatments and the trapping protocol that generate the capture records analysed here.
  10. Maintenance of community function through compensation breaks down over time in a desert rodent community. Diaz, R.M. & Ernest, S.K.M. — Ecology 103, e3709, 2022.
    Shows the compensatory dynamics at Portal are not static, which cautions against treating a 26-year pooled interaction coefficient as a constant and motivates reporting variability across plots.

Methods in use

  • Phenomenological competition coefficients: regress a demographic or fitness response on conspecific and heterospecific neighbour density in the same model, so the coefficients are per-capita neighbour effects (the quantities catalogued by Adler et al. 2018).
  • Holding total neighbour density constant when contrasting intraspecific and interspecific effects, so the contrast is a substitution effect rather than a response to total crowding; including both densities in one model achieves this by reparameterisation.
  • Size-standardised body condition as an individual fitness component: the scaled mass index of Peig & Green (2009), or, where the mass-length correlation is too weak for a stable standardised major axis slope, log body mass with log structural length as a covariate in a single-stage analysis of covariance.
  • Fixed effects for plot, year and season to absorb the experimental design and the strong seasonality of desert rodent mass, with identification coming from plot-by-session variation in neighbour density.
  • Cluster-robust standard errors at the trapping-session level and cluster bootstrap resampling at the plot level, plots being the experimental unit in the Portal design.
  • Metabolic rescaling of neighbour abundance by body mass to the three-quarter power, to express heterospecific density in conspecific resource-use equivalents when species differ several-fold in mass.
  • Meta-analytic aggregation of species-specific coefficients into a community-level mean, with the number of species showing the predicted ordering reported alongside the mean.
  • Treating capture counts as an index rather than a density, and restricting inference to comparisons within the same plot and trapping session so that unequal effort affects conspecific and heterospecific counts equally.

Open gaps

  • The four to five-fold intra:inter ratio of Adler et al. (2018) is a plant result. No comparable per-capita estimate exists for a free-living vertebrate community, where interference and behavioural dominance supplement exploitative competition, so the magnitude and even the sign of the contrast in mammals is unknown.
  • At Portal the competitive signal is documented as an abundance response to excluding an entire guild member; the per-capita interaction coefficients that coexistence theory actually specifies have never been estimated there on an individual fitness component.
  • Bowers & Brown (1982) established limiting similarity as a co-occurrence pattern. Whether the realised strength of interspecific competition actually decays with body-size distance among species that do co-occur has not been tested for this guild.
  • Yenni et al. (2012) predict stronger self-limitation in rarer species, but the prediction has not been examined across the members of a single long-term monitored vertebrate community using a common estimator.
  • Because a fitness component rather than population growth is measured, and because trapping records are an effort-dependent index, it is unresolved how much of an apparent intraspecific effect on body mass could arise from recruitment pulses or density-dependent trappability, and which estimators are immune to those artefacts.
Grounded search sources (22) · mode: live:agent:claude-opus-5

2.Ideation

Attempt 2Done

3 candidate ideas generated; selected: “Per-capita self-limitation exceeds interspecific limitation of body condition across a desert rodent community: a 26-year test of the stabilising condition”.

  1. Idea 1Selected

    Per-capita self-limitation exceeds interspecific limitation of body condition across a desert rodent community: a 26-year test of the stabilising condition

    Hypothesis. For the granivorous rodents of the Portal community, the per-capita effect of one additional conspecific neighbour on an individual's size-standardised body mass is more negative than the per-capita effect of one additional heterospecific neighbour, holding total neighbour number constant. Formally, for each focal species s, beta_intra,s < beta_inter,s, and the community mean substitution contrast Delta = mean_s(beta_intra,s - beta_inter,s) is negative with a bootstrap 95% interval excluding zero. Secondary (limiting similarity, after Bowers & Brown 1982): among heterospecific neighbours, those within a factor of two in mean body mass of the focal species depress condition more than those differing by more than a factor of two, beta_similar < beta_dissimilar. Refutation: Delta >= 0, or a 95% interval on Delta that contains zero; for the secondary hypothesis, beta_similar >= beta_dissimilar or an interval containing zero.

    Dataset. Portal Project long-term rodent monitoring, Chihuahuan Desert portal_rodent_surveys

    Test plan, novelty and risk

    Test plan. Data: portal_rodent_surveys, all 35,549 individual capture records, 24 plots, July 1977 to December 2002. Community definition: the 12 rodent species with at least 400 recorded body masses (DM Dipodomys merriami, DO D. ordii, DS D. spectabilis, PB Chaetodipus baileyi, PP C. penicillatus, PF Perognathus flavus, NL Neotoma albigula, OL Onychomys leucogaster, OT O. torridus, PE Peromyscus eremicus, PM P. maniculatus, RM Reithrodontomys megalotis), which together account for about 93 per cent of all captures; unidentified codes and taxa without mass records (including the non-rodent codes in the file) are excluded. Neighbour density: for each plot p and trapping session t (a calendar year-month), count all captures of each community species; n_con is the conspecific count minus the focal individual, n_het is the summed count of the other 11 species; both are captures per plot per session, an index rather than a density, and both are measured on the same session so unequal effort inflates them equally. Response and sample: individual log body mass in grams, restricted to captures with both weight and hindfoot_length present and positive (about 30,300 individuals). Estimator: one ordinary least squares regression per focal species, log(weight) ~ n_con + n_het + log(hindfoot_length) + sex + plot + year + month + number of trapping days in that plot-session; log hindfoot enters as the structural-size covariate in a single-stage analysis of covariance rather than a two-stage scaled mass index, because the mass-length correlation within species (r about 0.14 to 0.45) makes the standardised major axis slope unstable. Plot, year and month fixed effects absorb the exclosure design, the long-term trend and the strong seasonality of desert rodent mass; identification comes from plot-by-session variation in neighbour composition. Coefficients are multiplied by 100 and reported as per cent change in size-adjusted body mass per additional neighbour, a unit comparable across species that differ twenty-fold in mass. Because n_con + n_het + 1 is the total captures in the plot-session, the model is a reparameterisation of one containing total captures, so the contrast beta_intra - beta_inter is the effect of substituting one heterospecific for one conspecific at constant total captures, immune to any artefact acting through total captures such as trap saturation. Standard errors: cluster-robust by plot-session for each species; the community mean contrast and its 95 per cent interval come from 1,000 cluster bootstrap resamples of the 24 plots, seeded. Severity checks, all pre-specified: (i) heterospecific abundance re-expressed in conspecific metabolic equivalents by weighting each neighbour by (M_j/M_s)^0.75 with M the species mean mass in grams, so the comparison is in resource-use rather than head-count units; (ii) the analysis repeated on structurally adult individuals only, hindfoot_length at or above the species median, to test whether the intraspecific effect is an artefact of recruitment pulses producing many juveniles at high abundance; (iii) the secondary hypothesis fitted by splitting n_het into size-similar and size-dissimilar neighbours at a mass ratio of two. Also reported: the number of species out of 12 showing the predicted ordering, and the correlation between beta_intra and species mean abundance, testing the Yenni et al. (2012) prediction that self-limitation is strongest in rarer species. Refuted if Delta >= 0 or its bootstrap interval spans zero.

    Novelty. The four to five-fold excess of intraspecific over interspecific competition established by Adler et al. (2018) is an entirely botanical synthesis. The Portal exclosure literature (Brown & Munger 1985; Heske et al. 1994) shows that removing kangaroo rats raises the abundance of smaller granivores, but that is a population-level response to deleting a whole guild member and its indirect effects, not the per-capita interaction coefficient that Chesson's stabilising condition specifies. Nobody has estimated intraspecific and interspecific per-capita coefficients on a common individual fitness currency for every abundant member of this community, and the substitution contrast at constant total captures is a statistic the existing Portal analyses do not report.

    Expected outcome. Intraspecific effects negative for most species and interspecific effects near zero, giving a community mean substitution contrast of roughly -1 to -3 per cent of body mass per neighbour swapped, with 10 to 12 of the 12 species showing the predicted ordering. The metabolic rescaling should preserve the ordering; the adult-only restriction should attenuate the intraspecific coefficient but not abolish it. The limiting-similarity prediction is the weaker of the two and may well fail, since realised interspecific effects appear close to zero regardless of size distance.

    Main risk. Body condition is one fitness component, not per-capita population growth, so following Broekman et al. (2019) the result evidences stabilisation of the interaction rather than demonstrating stable coexistence. A negative intraspecific coefficient could also arise if abundance peaks coincide with recruitment pulses of small individuals; log hindfoot length as a covariate and the adult-only subsample address this but cannot eliminate it in the absence of an age variable. Capture counts are an effort-dependent index, and the teaching subset lacks the plot treatment labels, so plot fixed effects absorb rather than resolve the exclosure design.

  2. Idea 2

    Species asynchrony, not richness, stabilises rodent biomass: partitioning the diversity-stability relationship across 24 desert plots

    Hypothesis. Across the 24 Portal plots, the temporal stability of total rodent biomass (mean divided by standard deviation of plot biomass across trapping sessions) increases with species richness, but the association is mediated by community-wide synchrony rather than by richness itself: in a joint regression of log stability on log effective richness and the Loreau-de Mazancourt synchrony index phi, the coefficient on phi is negative and significant while the partial coefficient on richness is not distinguishable from zero. Refutation: phi carries no partial association with stability, or richness retains a significant positive partial coefficient once phi is included.

    Dataset. Portal Project long-term rodent monitoring, Chihuahuan Desert portal_rodent_surveys

    Test plan, novelty and risk

    Test plan. Data: portal_rodent_surveys. Build a plot-by-session biomass series: for each plot and calendar year-month, sum individual weights, imputing missing weights by the species mean mass so that abundance-driven variation is not confounded with measurement completeness; restrict to sessions in which the plot was trapped. For each plot compute mean biomass, its temporal standard deviation, stability as the ratio, effective species richness as the exponential of Shannon entropy of summed captures, and synchrony phi = var(total biomass) / (sum over species of the standard deviation of species biomass)^2, which equals 1 under perfect synchrony and approaches 0 under perfect compensation. Estimate ordinary least squares regressions of log stability on log effective richness, on phi, and on both, over the 24 plots; report coefficients with 95 per cent intervals from 2,000 bootstrap resamples of trapping sessions, and the partial R-squared of each predictor. Also test whether mean phi across plots is below the value expected if species fluctuated independently. Refuted if phi has no partial association with stability.

    Novelty. The diversity-stability relationship and the synchrony decomposition have been applied mostly to grassland plant experiments; the compensatory dynamics literature at Portal (Ernest & Brown 2001; Diaz & Ernest 2022) has examined community-wide energy use but has not partitioned plot-level stability into a richness component and a synchrony component with plots as replicates.

    Expected outcome. Synchrony well below 1 in most plots, a positive raw richness-stability slope, and most of that association absorbed by synchrony once both predictors are entered.

    Main risk. Only 24 plots, so the joint regression has little power and the two predictors are correlated. More seriously, the teaching subset omits the plot treatment labels, and the exclosure treatments are the main reason richness differs among plots, so the richness gradient is not independent of an unmeasured manipulation.

  3. Idea 3

    Does energetic equivalence hold within a single community? Testing the Damuth slope on 26 years of desert rodent captures

    Hypothesis. Within the Portal rodent community the local abundance-body size relationship follows the energetic equivalence rule, so that regressing log total captures on log mean body mass across species yields a slope of -0.75, the value at which population energy use is independent of body size given metabolic scaling with exponent 0.75. Refutation: a bootstrap 95 per cent interval on the slope that excludes -0.75, in particular a slope shallower than -0.5 as reported for many local assemblages.

    Dataset. Portal Project long-term rodent monitoring, Chihuahuan Desert portal_rodent_surveys

    Test plan, novelty and risk

    Test plan. Data: portal_rodent_surveys. Restrict to species with at least 30 recorded body masses. For each species compute mean body mass in grams and total captures over 1977 to 2002. Fit ordinary least squares and standardised major axis regressions of log10 total captures on log10 mean mass; obtain 95 per cent intervals by resampling the 24 plots 2,000 times with replacement, recomputing species totals each time, and additionally by resampling years. Test the point nulls slope = -0.75 and slope = 0. Also compute total population energy use per species as N times M^0.75 and test whether it is independent of mass. Refuted if the interval on the slope excludes -0.75.

    Novelty. Energetic equivalence is usually evaluated across assemblages or across broad size ranges; testing it within one intensively monitored local community, with uncertainty propagated from spatial and temporal resampling, is a sharper and more falsifiable version of the claim.

    Expected outcome. A slope substantially shallower than -0.75, so the hypothesis is likely to be refuted, indicating that local abundance is set by community composition rather than by an energetic constraint.

    Main risk. Only about a dozen species have enough mass records, so the regression rests on very few points and is sensitive to the two large-bodied species. Captures are an effort- and trappability-dependent index of abundance, and trappability itself varies with body size, which could bias the slope in an unknown direction.

Ranking rationale

Idea 1 is ranked first because it targets the single quantity that modern coexistence theory identifies as necessary for stabilisation, it has a sharp directional prediction with a pre-specified refutation criterion, and the Portal data supply exactly what the test needs: thousands of individually measured animals whose neighbours are known for the same plot and the same trapping session, over 26 years and 24 replicate plots. Its key statistic, the substitution contrast at constant total captures, is structurally immune to the effort and trap-saturation artefacts that plague capture indices, and the study is designed so that a null or reversed result would be equally publishable. Idea 2 asks a question of comparable interest but has only 24 replicates and, worse, a richness gradient generated largely by an experimental treatment whose labels this subset does not include, so the causal reading is compromised. Idea 3 is the cleanest to execute but rests on about a dozen species-level points, expects refutation of a rule that is already known to fit local assemblages poorly, and cannot separate trappability from abundance.

3.Experimentation

Attempt 3Done

Experiment succeeded in 1 round (12.709s).

Succeeded1 round · exit 0 · 12.709s

Data provenance

Datasetportal_rodent_surveys

Portal Project long-term rodent monitoring, Chihuahuan Desert

Source
R package 'ratdat' (Portal Project Teaching Database), mirrored by the Rdatasets archive; original data from the Portal Project, near Portal, Arizona
Citation
Ernest, M., Brown, J., Valone, T. and White, E.P. (2018) Portal Project Teaching Database. figshare. DOI: 10.6084/m9.figshare.1314459 -- the citation the project's own README instructs users to give, and the source of every dataset in the R package 'ratdat'. Peer-reviewed data papers for the full research database: Ernest, S.K.M., Valone, T.J. and Brown, J.H. (2009) Ecology 90(6), 1708, DOI: 10.1890/08-1222.1; and Ernest, S.K.M. et al. (2016) Ecology 97(4), 1082, DOI: 10.1890/15-2115.1.
Licence
Creative Commons Zero (CC0 1.0) public domain dedication -- the figshare record, the PortalData LICENSE file and the 'ratdat' package DESCRIPTION all state CC0.
File
https://vincentarelbundock.github.io/Rdatasets/csv/ratdat/surveys.csv
Observations
35,549
Variables (10)
record_id, month, day, year, plot_id, species_id, sex, hindfoot_length, weight, date
Units
Each row is one captured individual, not a site-visit summary. hindfoot_length is in millimetres and weight in grams -- the two standard body-size measures. species_id is a two-letter code (for example 'DM' for Dipodomys merriami, the dominant kangaroo rat) across 48 codes, and sex is 'M' or 'F'. plot_id identifies one of 24 fenced plots under different rodent-exclusion treatments. month, day and year give the trapping session, and the loader adds a parsed 'date' column.
Retrieved
8 Sept 2026, 15:49
Checksum
sha256 0e7b92161a10b1fc…

Real, publicly available data — downloaded and checksum-verified before the analysis ran, never simulated.

Result (RESULT_JSON)

{
  "dataset": "portal_rodent_surveys",
  "n_records_file": 35549,
  "n_community_captures": 33052,
  "community_share_of_captures": 0.929758924301668,
  "n_individuals_analysed": 30320,
  "n_species": 12,
  "n_individuals_dropped_missing_measurements": 2732,
  "species_codes": [
    "DM",
    "DO",
    "DS",
    "NL",
    "OL",
    "OT",
    "PB",
    "PE",
    "PF",
    "PM",
    "PP",
    "RM"
  ],
  "n_plots": 24,
  "n_plot_sessions": 5915,
  "n_trapping_sessions": 284,
  "year_first": 1977,
  "year_last": 2002,
  "missing_in_file": {
    "sex": 2511,
    "hindfoot_length": 4111,
    "weight": 3266
  },
  "median_captures_per_plot_session": 5,
  "mean_captures_per_plot_session": 5.5878275570583265,
  "body_mass_range_g": [
    7.92312661498708,
    159.24565972222223
  ],
  "n_bootstrap": 1000,
  "seed": 20260908,
  "units": "coefficients are per cent change in size-adjusted body mass per additional neighbour caught in the same plot and session",
  "mean_intra": -2.0090633259067032,
  "mean_intra_ci": [
    -2.456383482213397,
    -1.547195926181366
  ],
  "mean_intra_sd": 0.23305564273565924,
  "mean_inter": 0.060748812116106575,
  "mean_inter_ci": [
    -0.047569020033543435,
    0.15176678235634633
  ],
  "mean_inter_sd": 0.05065261390783843,
  "delta": -2.06981213802281,
  "delta_ci": [
    -2.4892013565497666,
    -1.610686849164618
  ],
  "delta_sd": 0.2289677516578388,
  "mean_intra_metabolic": -1.9959365487660856,
  "mean_intra_metabolic_ci": [
    -2.448766981842803,
    -1.5496894039499582
  ],
  "delta_metabolic": -2.071649616948471,
  "delta_metabolic_ci": [
    -2.512503574475303,
    -1.5806903824978114
  ],
  "mean_inter_metabolic": 0.07571306818238485,
  "mean_inter_metabolic_ci": [
    -0.11669544331301064,
    0.21540308404364697
  ],
  "delta_adult": -1.119345438730291,
  "delta_adult_ci": [
    -1.67628528026058,
    -0.6439000683762786
  ],
  "mean_intra_adult": -1.097925744055554,
  "mean_intra_adult_ci": [
    -1.6798199999818404,
    -0.6329150759655436
  ],
  "mean_inter_adult": 0.02141969467473714,
  "mean_inter_adult_ci": [
    -0.10951845405397824,
    0.1330459970472669
  ],
  "mean_similar": -0.18105479289096615,
  "mean_similar_ci": [
    -0.4824377793299962,
    0.1256045211796915
  ],
  "mean_dissimilar": 0.12740118950542773,
  "mean_dissimilar_ci": [
    0.02226260193914953,
    0.2162211310821212
  ],
  "delta_similarity": -0.308455982396394,
  "delta_similarity_ci": [
    -0.6135744039541602,
    0.026150493589903748
  ],
  "n_species_predicted_ordering": 11,
  "sign_test_p": 0.003173828125,
  "n_species_intra_negative": 11,
  "n_species_inter_negative": 4,
  "n_species_both_negative": 4,
  "n_species_intra_negative_inter_positive": 7,
  "ratio_intra_inter_median": 8.530601870129024,
  "ratio_intra_inter_mean": 11.223616626767663,
  "ratio_intra_inter_min": 2.0006344868715016,
  "ratio_intra_inter_max": 25.832628279941105,
  "mean_n_con_analysis_sample": 1.8781487953840077,
  "mean_n_het_analysis_sample": 5.192102875186431,
  "n_species_intra_significant_negative": 10,
  "n_species_inter_significant_negative": 0,
  "paired_t_statistic": -2.904917882832565,
  "paired_t_p": 0.01431860098192944,
  "wilcoxon_statistic": 3,
  "wilcoxon_p": 0.00244140625,
  "yenni_pearson_r": 0.6125764094957876,
  "yenni_pearson_p": 0.034211173630676495,
  "yenni_spearman_rho": 0.7202797202797203,
  "yenni_spearman_p": 0.008239768712338436,
  "median_r_squared": 0.22675764650119215,
  "species_table": [
    {
      "species": "DM",
      "n_individuals": 9739,
      "n_adult": 6692,
      "n_plot_sessions": 3085,
      "total_captures": 10596,
      "mean_mass_g": 43.157863964139544,
      "beta_intra": -0.16556636139004416,
      "se_intra": 0.07383503759838869,
      "p_intra": 0.024936692290447263,
      "beta_inter": 0.122038190877867,
      "se_inter": 0.07404446702521768,
      "p_inter": 0.09931689994241602,
      "contrast": -0.28760455226791115,
      "se_contrast": 0.1066208791627542,
      "p_contrast": 0.006987265536080223,
      "r_squared": 0.21005784198076816,
      "mean_n_con": 3.886025259266866,
      "mean_n_het": 3.622651196221378,
      "beta_intra_metabolic": -0.16984272105792916,
      "beta_inter_metabolic": 0.02212396185124945,
      "beta_intra_adult": -0.012192516798284134,
      "beta_inter_adult": 0.11124799530219032,
      "beta_similar": 0.16889746151048396,
      "beta_dissimilar": 0.0645920023895223
    },
    {
      "species": "DO",
      "n_individuals": 2793,
      "n_adult": 1562,
      "n_plot_sessions": 1412,
      "total_captures": 3027,
      "mean_mass_g": 48.87052341597797,
      "beta_intra": -0.7640475088759504,
      "se_intra": 0.24291092466205577,
      "p_intra": 0.0016587042212237917,
      "beta_inter": 0.028301376183173695,
      "se_inter": 0.12367288367851208,
      "p_inter": 0.818992814263801,
      "contrast": -0.792348885059124,
      "se_contrast": 0.2750705920977305,
      "p_contrast": 0.003970081184497199,
      "r_squared": 0.12272598074202734,
      "mean_n_con": 1.9889008234872896,
      "mean_n_het": 6.307554600787683,
      "beta_intra_metabolic": -0.7572960893900551,
      "beta_inter_metabolic": 0.05395960918078077,
      "beta_intra_adult": -0.3527581100093183,
      "beta_inter_adult": -0.16630615266597285,
      "beta_similar": -0.031294515290612376,
      "beta_dissimilar": 0.10031484144020844
    },
    {
      "species": "DS",
      "n_individuals": 2026,
      "n_adult": 1222,
      "n_plot_sessions": 1139,
      "total_captures": 2504,
      "mean_mass_g": 120.13054607508532,
      "beta_intra": -2.04990871258828,
      "se_intra": 0.314352833374231,
      "p_intra": 6.981961686424324e-11,
      "beta_inter": 0.35688810811892824,
      "se_inter": 0.1402289523415677,
      "p_inter": 0.010926563323040546,
      "contrast": -2.406796820707208,
      "se_contrast": 0.3597023428505064,
      "p_contrast": 2.215309034019745e-11,
      "r_squared": 0.34828627945985136,
      "mean_n_con": 1.685587364264561,
      "mean_n_het": 4.584402764067128,
      "beta_intra_metabolic": -2.0413163310132756,
      "beta_inter_metabolic": 0.7616284988682686,
      "beta_intra_adult": -1.1160976592895748,
      "beta_inter_adult": 0.13937135472432208,
      "beta_similar": -0.1997487297499184,
      "beta_dissimilar": 0.3736716238357748
    },
    {
      "species": "NL",
      "n_individuals": 1046,
      "n_adult": 765,
      "n_plot_sessions": 856,
      "total_captures": 1252,
      "mean_mass_g": 159.24565972222223,
      "beta_intra": -6.97254826910746,
      "se_intra": 1.5720287905709316,
      "p_intra": 0.000009190914651761296,
      "beta_inter": 0.3870179203598484,
      "se_inter": 0.2809674334160073,
      "p_inter": 0.16837390098998006,
      "contrast": -7.359566189467308,
      "se_contrast": 1.6196700276704623,
      "p_contrast": 0.000005523135196704785,
      "r_squared": 0.3823785123974085,
      "mean_n_con": 0.4694072657743786,
      "mean_n_het": 6.169216061185469,
      "beta_intra_metabolic": -6.830301052503771,
      "beta_inter_metabolic": 0.021579149338894765,
      "beta_intra_adult": -2.6026379203672843,
      "beta_inter_adult": 0.4988865703731547,
      "beta_similar": -2.738476289790154,
      "beta_dissimilar": 0.5341463451589178
    },
    {
      "species": "OL",
      "n_individuals": 907,
      "n_adult": 478,
      "n_plot_sessions": 661,
      "total_captures": 1006,
      "mean_mass_g": 31.575257731958764,
      "beta_intra": -2.790422118775202,
      "se_intra": 0.9207143792169477,
      "p_intra": 0.002439760860287656,
      "beta_inter": -0.10801928818609408,
      "se_inter": 0.24474984773372,
      "p_inter": 0.6589627601459171,
      "contrast": -2.6824028305891083,
      "se_contrast": 0.9854201420447242,
      "p_contrast": 0.006487037016651084,
      "r_squared": 0.30030062352976306,
      "mean_n_con": 0.782800441014333,
      "mean_n_het": 6.029768467475193,
      "beta_intra_metabolic": -2.810910371729942,
      "beta_inter_metabolic": 0.08816590301402062,
      "beta_intra_adult": -1.0322308601631198,
      "beta_inter_adult": -0.4316814726475625,
      "beta_similar": -0.19626207021895856,
      "beta_dissimilar": 0.27035121328161027
    },
    {
      "species": "OT",
      "n_individuals": 2085,
      "n_adult": 1736,
      "n_plot_sessions": 1403,
      "total_captures": 2249,
      "mean_mass_g": 24.23055555555555,
      "beta_intra": -2.2600818115012253,
      "se_intra": 0.6855040910796241,
      "p_intra": 0.00097736280935226,
      "beta_inter": 0.14171893974069572,
      "se_inter": 0.12955641944179178,
      "p_inter": 0.27400841169890366,
      "contrast": -2.401800751241921,
      "se_contrast": 0.7029273838668906,
      "p_contrast": 0.0006334907509961508,
      "r_squared": 0.14255261256877882,
      "mean_n_con": 0.9127098321342926,
      "mean_n_het": 6.629736211031175,
      "beta_intra_metabolic": -2.2694258273892123,
      "beta_inter_metabolic": 0.07185043151808172,
      "beta_intra_adult": -1.5043245417064317,
      "beta_inter_adult": 0.19057919393577924,
      "beta_similar": 0.09087686190770576,
      "beta_dissimilar": 0.28422311473585427
    },
    {
      "species": "PB",
      "n_individuals": 2808,
      "n_adult": 2157,
      "n_plot_sessions": 784,
      "total_captures": 2891,
      "mean_mass_g": 31.735943060498226,
      "beta_intra": -0.7517109617337533,
      "se_intra": 0.17389422691060336,
      "p_intra": 0.000015405737535230208,
      "beta_inter": 0.049644088204288825,
      "se_inter": 0.1414712085496235,
      "p_inter": 0.7256536077364636,
      "contrast": -0.801355049938042,
      "se_contrast": 0.21089692827195916,
      "p_contrast": 0.00014484366391142274,
      "r_squared": 0.1921417132730323,
      "mean_n_con": 5.038817663817664,
      "mean_n_het": 4.524216524216524,
      "beta_intra_metabolic": -0.7507736782483235,
      "beta_inter_metabolic": 0.06472394606743255,
      "beta_intra_adult": -0.6222597368863396,
      "beta_inter_adult": 0.22178842312260244,
      "beta_similar": 0.06435039271134972,
      "beta_dissimilar": -0.06481623842296766
    },
    {
      "species": "PE",
      "n_individuals": 1200,
      "n_adult": 940,
      "n_plot_sessions": 818,
      "total_captures": 1299,
      "mean_mass_g": 21.586507936507935,
      "beta_intra": -1.4319715820260024,
      "se_intra": 0.6108297650358794,
      "p_intra": 0.019062549785463696,
      "beta_inter": -0.28165401634475845,
      "se_inter": 0.19141068610416156,
      "p_inter": 0.1411655598683842,
      "contrast": -1.150317565681244,
      "se_contrast": 0.6355358328661983,
      "p_contrast": 0.07029634638888448,
      "r_squared": 0.2328705876988004,
      "mean_n_con": 0.9525,
      "mean_n_het": 4.806666666666667,
      "beta_intra_metabolic": -1.3924841120257765,
      "beta_inter_metabolic": -0.14332955544598194,
      "beta_intra_adult": -0.6119279799329386,
      "beta_inter_adult": -0.1281260931136903,
      "beta_similar": -0.4321423424038413,
      "beta_dissimilar": 0.009420724007134368
    },
    {
      "species": "PF",
      "n_individuals": 1471,
      "n_adult": 818,
      "n_plot_sessions": 875,
      "total_captures": 1597,
      "mean_mass_g": 7.92312661498708,
      "beta_intra": 0.3786082121160198,
      "se_intra": 0.30825101043106784,
      "p_intra": 0.2193544630517635,
      "beta_inter": 0.07145209845357772,
      "se_inter": 0.14424497222148633,
      "p_inter": 0.6203513627477919,
      "contrast": 0.30715611366244205,
      "se_contrast": 0.32297562315409406,
      "p_contrast": 0.3415944801850469,
      "r_squared": 0.3095973866122287,
      "mean_n_con": 1.5859959211420802,
      "mean_n_het": 5.296397008837525,
      "beta_intra_metabolic": 0.3877606260420928,
      "beta_inter_metabolic": -0.00553144178680404,
      "beta_intra_adult": 0.3219251352465131,
      "beta_inter_adult": 0.008993584081160196,
      "beta_similar": 0.8661185380491435,
      "beta_dissimilar": 0.03513498390642512
    },
    {
      "species": "PM",
      "n_individuals": 838,
      "n_adult": 709,
      "n_plot_sessions": 559,
      "total_captures": 899,
      "mean_mass_g": 21.36415525114155,
      "beta_intra": -6.276709822172519,
      "se_intra": 0.9433274894101992,
      "p_intra": 2.856261487837114e-11,
      "beta_inter": 0.23540077027331965,
      "se_inter": 0.2512311908615281,
      "p_inter": 0.3487644046369862,
      "contrast": -6.512110592445838,
      "se_contrast": 0.9159212460285578,
      "p_contrast": 1.161251118597908e-12,
      "r_squared": 0.2422697166989749,
      "mean_n_con": 1.0656324582338903,
      "mean_n_het": 5.301909307875895,
      "beta_intra_metabolic": -6.293627498279744,
      "beta_inter_metabolic": 0.08048502540973917,
      "beta_intra_adult": -4.976107870107915,
      "beta_inter_adult": 0.10108429690152532,
      "beta_similar": 0.18589665778411535,
      "beta_dissimilar": 0.2827070306327527
    },
    {
      "species": "PP",
      "n_individuals": 2978,
      "n_adult": 1879,
      "n_plot_sessions": 1340,
      "total_captures": 3123,
      "mean_mass_g": 17.173941798941797,
      "beta_intra": -0.4521984986082668,
      "se_intra": 0.22163839065219476,
      "p_intra": 0.04132508525664444,
      "beta_inter": -0.2260275435496434,
      "se_inter": 0.13484423300352263,
      "p_inter": 0.0936966424892505,
      "contrast": -0.22617095505862336,
      "se_contrast": 0.2418084792420593,
      "p_contrast": 0.34961776889402985,
      "r_squared": 0.20151077734932857,
      "mean_n_con": 2.7659503022162526,
      "mean_n_het": 5.8297515110812625,
      "beta_intra_metabolic": -0.45541819361436175,
      "beta_inter_metabolic": -0.10557630182940483,
      "beta_intra_adult": -0.16363827219408236,
      "beta_inter_adult": -0.22136339487149967,
      "beta_similar": -0.3373996796279745,
      "beta_dissimilar": -0.13047043013195928
    },
    {
      "species": "RM",
      "n_individuals": 2429,
      "n_adult": 1283,
      "n_plot_sessions": 1431,
      "total_captures": 2609,
      "mean_mass_g": 10.58500986193294,
      "beta_intra": -0.5722024762177536,
      "se_intra": 0.31353010022292,
      "p_intra": 0.06799619553600647,
      "beta_inter": -0.04777489873792444,
      "se_inter": 0.1501556342944544,
      "p_inter": 0.7503565910434027,
      "contrast": -0.5244275774798292,
      "se_contrast": 0.33816972900325326,
      "p_contrast": 0.12095390106040282,
      "r_squared": 0.22064470530358393,
      "mean_n_con": 1.403458213256484,
      "mean_n_het": 3.202964182791272,
      "beta_intra_metabolic": -0.5676033359827276,
      "beta_inter_metabolic": -0.0015224079976585564,
      "beta_intra_adult": -0.5028585964578712,
      "beta_inter_adult": -0.06743796904516326,
      "beta_similar": 0.3865262004270665,
      "beta_dissimilar": -0.23046093676814053
    }
  ],
  "hypothesis_supported": true,
  "secondary_hypothesis_supported": false
}
Experiment script · experiment_v1.py
"""Per-capita self-limitation versus interspecific limitation of body condition in the
Portal rodent community (1977-2002, 24 plots). For every abundant species we estimate the
effect on individual size-adjusted body mass of one extra conspecific and one extra
heterospecific caught in the same plot and trapping session; since conspecific +
heterospecific + 1 = total captures, their contrast is the effect of substituting one
heterospecific for one conspecific at constant total captures."""
import json
import numpy as np
import pandas as pd
import statsmodels.api as sm
from scipy import stats
from dataset import load

SEED = 20260908
N_BOOT = 1000
MIN_MASS_RECORDS = 400          # captures with a recorded weight, to enter the community
METABOLIC_EXPONENT = 0.75       # Kleiber scaling of resource use with body mass
SIZE_RATIO_CUT = 2.0            # body-mass ratio separating "similar" from "dissimilar"
rng = np.random.default_rng(SEED)

# ---------------------------------------------------------------- data inspection
df = load()
print("loaded", df.shape[0], "capture records;", df.shape[1], "columns:", list(df.columns))
missing_all = {c: int(df[c].isna().sum()) for c in ("sex", "hindfoot_length", "weight")}
print("missing in full file:", missing_all,
      "| years", int(df.year.min()), "-", int(df.year.max()),
      "| plots", int(df.plot_id.nunique()), "| species codes", int(df.species_id.nunique()))

df = df.copy()
df["session"] = df["year"].astype(int) * 100 + df["month"].astype(int)

weighed = df.dropna(subset=["weight"]).groupby("species_id").size()
COMMUNITY = sorted(weighed[weighed >= MIN_MASS_RECORDS].index.tolist())
com = df[df.species_id.isin(COMMUNITY)].copy()
mean_mass = com.groupby("species_id")["weight"].mean()          # grams
community_share = len(com) / len(df)
print("community:", len(COMMUNITY), "species,", len(com), "captures",
      f"({100 * community_share:.1f}% of all records)")

# --------------------------------------------------- neighbour counts per plot-session
counts = com.groupby(["plot_id", "session", "species_id"]).size().unstack(fill_value=0)
counts = counts.reindex(columns=COMMUNITY, fill_value=0).astype(float)
metab = counts.mul(mean_mass[COMMUNITY].values ** METABOLIC_EXPONENT, axis=1)
tot_n, tot_met = counts.sum(axis=1), metab.sum(axis=1)
ndays = com.groupby(["plot_id", "session"])["date"].nunique().astype(float)
print("plot-sessions with captures:", len(counts),
      "| median captures per plot-session:", float(tot_n.median()))

# ------------------------------------------------------------------ analysis sample
ana = com.dropna(subset=["weight", "hindfoot_length"])
ana = ana[(ana.weight > 0) & (ana.hindfoot_length > 0)].copy()
ana["sex"] = ana["sex"].astype(object).where(ana["sex"].notna(), "U").astype(str)
dropped = len(com) - len(ana)
print("analysis sample:", len(ana), "individuals with weight and hindfoot;",
      dropped, "community captures dropped for missing body measurements")
adult_cut = ana.groupby("species_id")["hindfoot_length"].median()

log_mass = np.log(mean_mass)


def build(sub):
    """Return control block Z, density block D and response y for one species sample."""
    sex_d = pd.get_dummies(sub["sex"], prefix="s", drop_first=True, dtype=float)
    plot_d = pd.get_dummies(sub["plot_id"].astype(str), prefix="p", drop_first=True, dtype=float)
    year_d = pd.get_dummies(sub["year"].astype(str), prefix="y", drop_first=True, dtype=float)
    mon_d = pd.get_dummies(sub["month"].astype(str), prefix="m", drop_first=True, dtype=float)
    Z = np.column_stack([np.ones(len(sub)), np.log(sub["hindfoot_length"].to_numpy(float)),
                         sub["ndays"].to_numpy(float), sex_d.to_numpy(), plot_d.to_numpy(),
                         year_d.to_numpy(), mon_d.to_numpy()])
    D = sub[["n_con", "n_het", "n_het_eq", "n_sim", "n_dis"]].to_numpy(float)
    return Z, D, np.log(sub["weight"].to_numpy(float))


def cluster_fit(Z, D, y, cols, clusters):
    """OLS with cluster-robust (plot-session) standard errors; returns the density part."""
    X = np.column_stack([Z, D[:, cols]])
    res = sm.OLS(y, X).fit(cov_type="cluster", cov_kwds={"groups": clusters})
    k = Z.shape[1]
    con = np.zeros(X.shape[1]); con[k], con[k + 1] = 1.0, -1.0
    t = res.t_test(con)
    extra = (100 * float(np.ravel(t.effect)[0]), 100 * float(np.ravel(t.sd)[0]), float(np.ravel(t.pvalue)[0]))
    return (100 * res.params[k:], 100 * res.bse[k:], res.pvalues[k:], float(res.rsquared), extra)


def fwl(Z, M):
    """Residualise the columns of M on Z (safe under rank deficiency)."""
    coef = np.linalg.lstsq(Z.T @ Z, Z.T @ M, rcond=None)[0]
    return M - Z @ coef


def small_ols(yr, Dr):
    return np.linalg.lstsq(Dr.T @ Dr, Dr.T @ yr, rcond=None)[0]


# ----------------------------------------------------------- per-species estimation
species_rows, store = [], {}
for sp in COMMUNITY:
    cs = counts[sp]
    tab = pd.DataFrame({
        "n_con": cs - 1.0,
        "n_het": tot_n - cs,
        "n_het_eq": (tot_met - metab[sp]) / (mean_mass[sp] ** METABOLIC_EXPONENT),
        "n_sim": counts[[j for j in COMMUNITY if j != sp
                         and abs(log_mass[j] - log_mass[sp]) < np.log(SIZE_RATIO_CUT)]].sum(axis=1),
        "n_dis": counts[[j for j in COMMUNITY if j != sp
                         and abs(log_mass[j] - log_mass[sp]) >= np.log(SIZE_RATIO_CUT)]].sum(axis=1),
        "ndays": ndays})
    sub = ana[ana.species_id == sp].join(tab, on=["plot_id", "session"])
    clusters = (sub["plot_id"].astype(str) + "_" + sub["session"].astype(str)).to_numpy()
    Z, D, y = build(sub)
    b1, se1, p1, r2, con1 = cluster_fit(Z, D, y, [0, 1], clusters)     # conspecific / heterospecific
    b2, se2, p2, _, _ = cluster_fit(Z, D, y, [0, 2], clusters)        # metabolic equivalents
    b4, se4, p4, _, _ = cluster_fit(Z, D, y, [0, 3, 4], clusters)     # similar / dissimilar split
    sub_ad = sub[sub["hindfoot_length"] >= adult_cut[sp]]
    Za, Da, ya = build(sub_ad)
    ca = (sub_ad["plot_id"].astype(str) + "_" + sub_ad["session"].astype(str)).to_numpy()
    b3, se3, p3, _, _ = cluster_fit(Za, Da, ya, [0, 1], ca)

    species_rows.append(dict(
        species=sp, n_individuals=int(len(sub)), n_adult=int(len(sub_ad)),
        n_plot_sessions=int(sub.groupby(["plot_id", "session"]).ngroups),
        total_captures=int(counts[sp].sum()), mean_mass_g=float(mean_mass[sp]),
        beta_intra=float(b1[0]), se_intra=float(se1[0]), p_intra=float(p1[0]),
        beta_inter=float(b1[1]), se_inter=float(se1[1]), p_inter=float(p1[1]),
        contrast=float(con1[0]), se_contrast=float(con1[1]), p_contrast=float(con1[2]),
        r_squared=float(r2), mean_n_con=float(sub.n_con.mean()), mean_n_het=float(sub.n_het.mean()),
        beta_intra_metabolic=float(b2[0]), beta_inter_metabolic=float(b2[1]),
        beta_intra_adult=float(b3[0]),
        beta_inter_adult=float(b3[1]), beta_similar=float(b4[1]), beta_dissimilar=float(b4[2])))
    store[sp] = dict(Z=Z, D=D, y=y, plots=sub["plot_id"].to_numpy(),
                     Za=Za, Da=Da, ya=ya, plots_a=sub_ad["plot_id"].to_numpy())
    print(f"  {sp}: n={len(sub):5d}  intra={b1[0]:+7.3f}%  inter={b1[1]:+7.3f}%  "
          f"contrast={b1[0] - b1[1]:+7.3f}%  R2={r2:.3f}")

tab_sp = pd.DataFrame(species_rows)
obs = {
    "mean_intra": float(tab_sp.beta_intra.mean()),
    "mean_inter": float(tab_sp.beta_inter.mean()),
    "delta": float(tab_sp.contrast.mean()),
    "mean_intra_metabolic": float(tab_sp.beta_intra_metabolic.mean()),
    "mean_inter_metabolic": float(tab_sp.beta_inter_metabolic.mean()),
    "delta_metabolic": float((tab_sp.beta_intra_metabolic - tab_sp.beta_inter_metabolic).mean()),
    "mean_intra_adult": float(tab_sp.beta_intra_adult.mean()),
    "mean_inter_adult": float(tab_sp.beta_inter_adult.mean()),
    "delta_adult": float((tab_sp.beta_intra_adult - tab_sp.beta_inter_adult).mean()),
    "mean_similar": float(tab_sp.beta_similar.mean()),
    "mean_dissimilar": float(tab_sp.beta_dissimilar.mean()),
    "delta_similarity": float((tab_sp.beta_similar - tab_sp.beta_dissimilar).mean())}

# ------------------------------------------------- cluster bootstrap over the 24 plots
plots = np.array(sorted(ana.plot_id.unique()))
for sp in COMMUNITY:
    s = store[sp]
    s["idx"] = {p: np.flatnonzero(s["plots"] == p) for p in plots}
    s["idx_a"] = {p: np.flatnonzero(s["plots_a"] == p) for p in plots}

keys = list(obs.keys())
boot = {k: np.empty(N_BOOT) for k in keys}
for b in range(N_BOOT):
    draw = rng.choice(plots, size=plots.size, replace=True)
    acc = {k: [] for k in keys}
    for sp in COMMUNITY:
        s = store[sp]
        i = np.concatenate([s["idx"][p] for p in draw])
        R = fwl(s["Z"][i], np.column_stack([s["y"][i], s["D"][i]]))
        yr, Dr = R[:, 0], R[:, 1:]
        c1 = small_ols(yr, Dr[:, [0, 1]]) * 100
        c2 = small_ols(yr, Dr[:, [0, 2]]) * 100
        c4 = small_ols(yr, Dr[:, [0, 3, 4]]) * 100
        ia = np.concatenate([s["idx_a"][p] for p in draw])
        Ra = fwl(s["Za"][ia], np.column_stack([s["ya"][ia], s["Da"][ia]]))
        c3 = small_ols(Ra[:, 0], Ra[:, [1, 2]]) * 100
        acc["mean_intra"].append(c1[0]); acc["mean_inter"].append(c1[1])
        acc["delta"].append(c1[0] - c1[1])
        acc["mean_intra_metabolic"].append(c2[0]); acc["mean_inter_metabolic"].append(c2[1])
        acc["delta_metabolic"].append(c2[0] - c2[1])
        acc["mean_intra_adult"].append(c3[0]); acc["mean_inter_adult"].append(c3[1])
        acc["delta_adult"].append(c3[0] - c3[1])
        acc["mean_similar"].append(c4[1]); acc["mean_dissimilar"].append(c4[2])
        acc["delta_similarity"].append(c4[1] - c4[2])
    for k in keys:
        boot[k][b] = float(np.mean(acc[k]))

ci = {k: [float(np.percentile(boot[k], 2.5)), float(np.percentile(boot[k], 97.5))] for k in keys}
sd = {k: float(np.std(boot[k], ddof=1)) for k in keys}
print("bootstrap done:", N_BOOT, "cluster resamples of", plots.size, "plots")

# ------------------------------------------------------------ within-community checks
both_neg = tab_sp[(tab_sp.beta_intra < 0) & (tab_sp.beta_inter < 0)]
ratios = (both_neg.beta_intra / both_neg.beta_inter).to_numpy(float)
n_ordered = int((tab_sp.beta_intra < tab_sp.beta_inter).sum())
sign_p = float(stats.binomtest(n_ordered, len(tab_sp), 0.5, alternative="greater").pvalue)
r_yenni, p_yenni = stats.pearsonr(np.log10(tab_sp.total_captures.to_numpy(float)),
                                  tab_sp.beta_intra.to_numpy(float))
rho_yenni, prho_yenni = stats.spearmanr(tab_sp.total_captures.to_numpy(float),
                                        tab_sp.beta_intra.to_numpy(float))
paired_t = stats.ttest_rel(tab_sp.beta_intra, tab_sp.beta_inter)
wilcox = stats.wilcoxon(tab_sp.beta_intra, tab_sp.beta_inter)

supported = bool(obs["delta"] < 0 and ci["delta"][1] < 0)
secondary = bool(obs["delta_similarity"] < 0 and ci["delta_similarity"][1] < 0)

result = {
    "dataset": "portal_rodent_surveys",
    "n_records_file": int(len(df)), "n_community_captures": int(len(com)),
    "community_share_of_captures": float(community_share),
    "n_individuals_analysed": int(len(ana)), "n_species": int(len(COMMUNITY)),
    "n_individuals_dropped_missing_measurements": int(dropped), "species_codes": COMMUNITY,
    "n_plots": int(plots.size), "n_plot_sessions": int(len(counts)),
    "n_trapping_sessions": int(com.session.nunique()),
    "year_first": int(df.year.min()), "year_last": int(df.year.max()),
    "missing_in_file": missing_all,
    "median_captures_per_plot_session": float(tot_n.median()),
    "mean_captures_per_plot_session": float(tot_n.mean()),
    "body_mass_range_g": [float(mean_mass.min()), float(mean_mass.max())],
    "n_bootstrap": int(N_BOOT), "seed": int(SEED),
    "units": "coefficients are per cent change in size-adjusted body mass per additional neighbour caught in the same plot and session",
    "mean_intra": obs["mean_intra"], "mean_intra_ci": ci["mean_intra"], "mean_intra_sd": sd["mean_intra"],
    "mean_inter": obs["mean_inter"], "mean_inter_ci": ci["mean_inter"], "mean_inter_sd": sd["mean_inter"],
    "delta": obs["delta"], "delta_ci": ci["delta"], "delta_sd": sd["delta"],
    "mean_intra_metabolic": obs["mean_intra_metabolic"], "mean_intra_metabolic_ci": ci["mean_intra_metabolic"],
    "delta_metabolic": obs["delta_metabolic"], "delta_metabolic_ci": ci["delta_metabolic"],
    "mean_inter_metabolic": obs["mean_inter_metabolic"], "mean_inter_metabolic_ci": ci["mean_inter_metabolic"],
    "delta_adult": obs["delta_adult"], "delta_adult_ci": ci["delta_adult"],
    "mean_intra_adult": obs["mean_intra_adult"], "mean_intra_adult_ci": ci["mean_intra_adult"],
    "mean_inter_adult": obs["mean_inter_adult"], "mean_inter_adult_ci": ci["mean_inter_adult"],
    "mean_similar": obs["mean_similar"], "mean_similar_ci": ci["mean_similar"],
    "mean_dissimilar": obs["mean_dissimilar"], "mean_dissimilar_ci": ci["mean_dissimilar"],
    "delta_similarity": obs["delta_similarity"], "delta_similarity_ci": ci["delta_similarity"],
    "n_species_predicted_ordering": n_ordered, "sign_test_p": sign_p,
    "n_species_intra_negative": int((tab_sp.beta_intra < 0).sum()),
    "n_species_inter_negative": int((tab_sp.beta_inter < 0).sum()),
    "n_species_both_negative": int(len(both_neg)),
    "n_species_intra_negative_inter_positive": int(((tab_sp.beta_intra < 0) & (tab_sp.beta_inter > 0)).sum()),
    "ratio_intra_inter_median": float(np.median(ratios)), "ratio_intra_inter_mean": float(np.mean(ratios)),
    "ratio_intra_inter_min": float(np.min(ratios)), "ratio_intra_inter_max": float(np.max(ratios)),
    "mean_n_con_analysis_sample": float(tab_sp.mean_n_con.mean()),
    "mean_n_het_analysis_sample": float(tab_sp.mean_n_het.mean()),
    "n_species_intra_significant_negative": int(((tab_sp.beta_intra < 0) & (tab_sp.p_intra < 0.05)).sum()),
    "n_species_inter_significant_negative": int(((tab_sp.beta_inter < 0) & (tab_sp.p_inter < 0.05)).sum()),
    "paired_t_statistic": float(paired_t.statistic), "paired_t_p": float(paired_t.pvalue),
    "wilcoxon_statistic": float(wilcox.statistic), "wilcoxon_p": float(wilcox.pvalue),
    "yenni_pearson_r": float(r_yenni), "yenni_pearson_p": float(p_yenni),
    "yenni_spearman_rho": float(rho_yenni), "yenni_spearman_p": float(prho_yenni),
    "median_r_squared": float(tab_sp.r_squared.median()),
    "species_table": species_rows,
    "hypothesis_supported": supported,
    "secondary_hypothesis_supported": secondary}

print("RESULT_JSON: " + json.dumps(result))
Listing. experiment_v1.py

4.Analysis

Attempt 2Done

Analysis complete: experiment succeeded; hypothesis supported; 12 key numbers.

Hypothesis supportedExperiment succeeded

Results and analysis

The run completed on the first attempt (exit code 0) over 30,320 individually measured rodents from 33,052 community captures (93.0% of the 35,549 records in the file), spanning 12 species, 24 plots, 284 trapping sessions and 5,915 plot-sessions between 1977 and 2002.

The primary prediction is supported. Averaged over the 12 species, one additional conspecific caught in the same plot and session is associated with a 2.009% reduction in size-adjusted body mass (bootstrap 95% CI -2.456 to -1.547), whereas one additional heterospecific is associated with a change of +0.061% (95% CI -0.048 to +0.152), indistinguishable from zero. The substitution contrast Delta -- swapping one heterospecific neighbour for one conspecific at constant total captures -- is -2.070% per individual (95% CI -2.489 to -1.611; bootstrap SD 0.229), from 1,000 cluster resamples of the 24 plots. Eleven of 12 species show the predicted ordering (sign test p = 0.0032; Wilcoxon p = 0.0024; paired t p = 0.0143). Ten species have significantly negative conspecific coefficients; none has a significantly negative heterospecific coefficient. Where both coefficients are negative (4 species), self-limitation is a median 8.5-fold stronger; in 7 further species intraspecific competition pairs with weak interspecific facilitation.

The ordering survives both severity checks. Re-expressing heterospecific abundance in conspecific metabolic equivalents leaves Delta at -2.072% (95% CI -2.513 to -1.581). Restricting to structurally adult individuals halves but does not abolish the effect: Delta = -1.119% (95% CI -1.676 to -0.644).

The secondary limiting-similarity prediction is not supported. Size-similar heterospecifics give -0.181% (95% CI -0.483 to +0.126) against +0.127% (95% CI +0.022 to +0.216) for dissimilar ones; the difference of -0.308% has a 95% CI of -0.614 to +0.026, spanning zero. Self-limitation is also weaker in commoner species (Pearson r = 0.613, p = 0.034; Spearman rho = 0.720, p = 0.008). Median model R-squared was 0.227.

Key numbers

MetricValueInterpretation
Community mean substitution contrast, Delta-2.070% per neighbour (95% CI -2.489 to -1.611; bootstrap SD 0.229)Replacing one heterospecific neighbour with one conspecific at constant total captures lowers size-adjusted body mass by about 2%, the pre-registered test statistic, and its interval excludes zero.
Mean intraspecific coefficient-2.009% per conspecific (95% CI -2.456 to -1.547)Per-capita self-limitation of body condition, averaged over the 12 species.
Mean interspecific coefficient+0.061% per heterospecific (95% CI -0.048 to +0.152)Per-capita interspecific effect is statistically indistinguishable from zero, not merely weaker.
Species showing the predicted ordering11 of 12 (sign test p = 0.0032)The result is a community-wide regularity, not driven by one or two species.
Species with significant coefficients10 of 12 significantly negative intraspecific; 0 of 12 significantly negative interspecificSelf-limitation is detectable species by species with cluster-robust errors; interspecific competition is not.
Intra:inter ratio where both are competitivemedian 8.53, mean 11.22, range 2.00 to 25.83 across 4 speciesDirectly comparable to the four to five-fold plant benchmark; self-limitation in this vertebrate community is at least as disproportionate.
Metabolic-equivalent checkDelta = -2.072% (95% CI -2.513 to -1.581)Weighting neighbours by (M_j/M_s)^0.75 leaves the contrast unchanged, so it is not an artefact of body-size differences among neighbours.
Adult-only checkDelta = -1.119% (95% CI -1.676 to -0.644); mean intraspecific -1.098%Restricting to individuals at or above the species median hindfoot length roughly halves the effect but keeps the interval clear of zero, so recruitment pulses explain part but not all of it.
Limiting similarity contrast-0.308% (95% CI -0.614 to +0.026); similar -0.181%, dissimilar +0.127%Directionally as predicted but the interval spans zero, so body-size-based limiting similarity is not established.
Self-limitation versus commonnessPearson r = 0.613 (p = 0.034); Spearman rho = 0.720 (p = 0.008)Rarer species show more negative conspecific coefficients, matching the prediction that strong self-limitation accompanies rarity.
Analysis sample30,320 individuals; 12 species; 24 plots; 5,915 plot-sessions; 1977-20022,732 community captures were dropped for missing weight or hindfoot length; the sample size analysed is reported, not the file total.
Model fitmedian R-squared 0.227Structural size, sex, plot, year and month explain about a fifth of within-species mass variation; the density coefficients are small partial effects on top of that.

Caveats

  • Body condition is one fitness component, not per-capita population growth. Excess self-limitation of a fitness component evidences stabilisation of the interaction; it does not demonstrate stable coexistence, which also requires the average-fitness-difference condition.
  • Neighbour abundance is captures per plot per trapping session, an effort-dependent index rather than a density. The absolute coefficients therefore have no density units; only the intra-versus-inter contrast, which holds total captures constant, is immune to session-level effort and trap-saturation effects.
  • The intraspecific effect could partly reflect demographic composition rather than competition: reproductive pulses put many small individuals into the traps at once. Log hindfoot length as a structural-size covariate and the adult-only subsample address this, and the effect halves under that restriction, so some of the raw intraspecific coefficient is compositional.
  • The two most extreme conspecific coefficients (Neotoma albigula -6.97%, Peromyscus maniculatus -6.28%) come from species averaging fewer than 1.1 conspecifics per plot-session, so their coefficients are identified by the contrast between being caught alone and being caught with one or two conspecifics and are the least well conditioned in the set.
  • One species, Perognathus flavus, shows a positive conspecific coefficient (+0.379%, p = 0.219) and so runs against the community pattern.
  • This teaching subset lacks the plot treatment labels, so the kangaroo-rat exclosure design is absorbed by plot fixed effects rather than modelled; the interspecific coefficient is therefore an average over plots in which some heterospecifics were experimentally excluded.
  • There are no individual tags in this subset, so repeated captures of the same animal cannot be identified and the models cannot include individual effects. The plot-level cluster bootstrap, which resamples whole plots, is robust to arbitrary dependence within a plot and is the basis of the reported intervals.
  • Absence of a detectable interspecific effect on body condition is not evidence that interspecific competition is absent at Portal: the exclosure literature shows it acting on abundance, a different currency and a different timescale.
  • The similarity split uses a single mass-ratio threshold of two and only 12 species, several of which have no size-similar neighbour in the community, so the limiting-similarity test has limited power and its null result should be read as inconclusive rather than as a refutation of limiting similarity.
  • All results come from one site and one 26-year record; the community also underwent documented compositional transitions during this period, and the coefficients are averages over those regimes rather than constants.

5.Paper writing

Attempt 5Done

Manuscript drafted: “Conspecifics, not heterospecifics, limit individual body condition in a desert rodent community” (≈ 4815 words).

Reviewer feedback applied: The referee recommends major_revision. Required changes, quoted verbatim: (1) "Report, in both the Abstract and the Results, that the community mean is an unweighted mean across species and is strongly influenced by the two species with the steepest coefficients. State the range of species-level contrasts from Table 3 explicitly, and make clear in the text that most species fall well short of -2%, so that the -2.07% figure is not read as the typical per-capita effect. Frame the robust claim as the ordering (11 of 12 species; sign test p = 0.0032; Wilcoxon p = 0.0024) rather than as the point magnitude." (2) "Add the reproductive-condition confound to the Limitations paragraph: mass at fixed structural size includes reproductive burden and gut contents; pregnancy and lactation raise female mass; reproduction in this system is density- and rainfall-dependent; and the dataset does not record reproductive status, so this pathway cannot be controlled and could contribute to the intraspecific coefficient in either direction." (3) "State explicitly in the Model Description that the exact reparameterisation in equation (2), and therefore the artefact-resistance of the substitution contrast, holds under the assumption that neighbour effects are linear in counts, and add to the Limitations that no saturating or log-density specification was fitted, so nonlinear crowding effects are not excluded." (4) "Qualify the interspecific result: the coefficient is a pooled effect across eleven heterospecific species, so the finding is the absence of a detectable NET interspecific effect, and pairwise coefficients of opposite sign could cancel. Pairwise coefficients were not estimated; say so." (5) "Add to the Limitations that seasonality and interannual variation enter additively as month and year fixed effects, and that a session-level fixed effect, which would control rainfall-pulse timing more strictly, was not fitted." (6) "State in the Abstract that the adult-only restriction approximately halves the contrast (to -1.119%, 95% CI -1.676 to -0.644) rather than describing the result only as having 'survived' the check; readers should see the attenuation in the abstract." (7) "Make the 'Simulation Protocol' subsection intelligible: open it by naming what it actually describes (the sample, the replicate structure and the resampling protocol) so that the heading and the content are not in contradiction."

≈ 4815 words · AI-drafted manuscript · not peer-reviewed

Conspecifics, not heterospecifics, limit individual body condition in a desert rodent community

Abstract

Modern coexistence theory makes an excess of intraspecific over interspecific density dependence the necessary condition for stabilisation, yet the benchmark quantification is entirely botanical. We estimated per-capita interaction coefficients on an individual fitness component, size-adjusted body mass, for the twelve abundant rodent species of the Portal Project record (30,320 measured individuals, 24 plots, 1977-2002). Eleven of twelve species were limited more by conspecifics than by heterospecifics (sign test p = 0.0032), and none showed significant interspecific competition. Substituting one heterospecific neighbour for one conspecific at constant total captures cost 2.07% of body mass (bootstrap 95% CI -2.49 to -1.61), but this unweighted species mean is pulled by two sparse species: seven of twelve contrasts are weaker than -2%. Restricting to structurally adult animals roughly halved it, to -1.119% (-1.676 to -0.644). Size-similar heterospecifics were not detectably stronger competitors. The ordering, not the magnitude, is robust.

Keywords: coexistence theory; competition coefficients; body condition; density dependence; desert rodents; limiting similarity; long-term monitoring; Portal Project; self-limitation; stabilising mechanisms.

Introduction

Modern coexistence theory reduces the maintenance of diversity to stabilising mechanisms, which make each species limit itself more than it limits its competitors, and equalising mechanisms, which shrink average fitness differences (Chesson 2000). The stabilising ingredient is a measurable inequality between per-capita interaction coefficients, and its magnitude is therefore one of the central empirical quantities in community ecology. Adler et al. (2018) supplied the benchmark: across 39 terrestrial plant studies, where both effects were competitive, self-limitation was four to five-fold the stronger, and in almost all remaining pairs intraspecific competition combined with interspecific facilitation, which is also stabilising.

That synthesis is botanical, and the plant ratio need not carry over to mobile vertebrates, which add interference competition and behavioural dominance to exploitative resource use. Desert granivorous rodents are the obvious test system, and at Portal, Arizona, the evidence for interspecific competition is unusually strong: excluding kangaroo rats (Dipodomys spp.) from fenced plots raised the abundance of five smaller granivores over 13 years (Heske et al. 1994). But an abundance response to deleting a whole guild member, with its indirect effects on vegetation and seed banks, is not the per-capita coefficient theory specifies. Eccard & Ylonen (2003) argued exactly this for small mammals: population-level removals miss the individual currencies through which rodent competition operates, and the two levels can disagree.

We therefore measured interaction coefficients on an individual fitness component. Body mass standardised for structural size is the conventional condition index in field mammalogy (Peig & Green 2009), and at Portal it is recorded for tens of thousands of handled animals alongside every other animal caught in the same plot on the same nights, yielding a direct estimate of what one extra neighbour of each kind costs an individual.

We tested two predictions, stated before the analysis was run.

H1 (stabilisation). For each focal species ss, the per-capita effect of a conspecific neighbour on size-adjusted body mass is more negative than that of a heterospecific neighbour, βsintra<βsinter\beta^{\text{intra}}_s < \beta^{\text{inter}}_s, and the community mean substitution contrast Δ\Delta is negative with a bootstrap 95% interval excluding zero. H1 is refuted if Δ≥0\Delta \ge 0 or if its interval spans zero.

H2 (limiting similarity). Among heterospecific neighbours, those within a factor of two of the focal species in mean body mass depress condition more than those differing by more than a factor of two, βsim<βdis\beta^{\text{sim}} < \beta^{\text{dis}}. This follows Bowers & Brown (1982), who found that desert granivores with mass ratios below about 1.5 co-occur less often than chance. H2 is refuted if βsim≥βdis\beta^{\text{sim}} \ge \beta^{\text{dis}} or if the interval on the difference spans zero.

We also examined the prediction of Yenni et al. (2012) that self-limitation is strongest in the rarer members of a community. Following Broekman et al. (2019), we read excess self-limitation on a fitness component as evidence that an interaction is stabilised, not as a demonstration of stable coexistence; because single-component studies give smaller intra-minus-inter differences than full-life-cycle studies (Adler et al. 2018), ours is a conservative test.

Material and Methods

We analysed the Portal Project Teaching Database, the long-term rodent monitoring record of a Chihuahuan Desert site near Portal, Arizona, distributed in the R package ratdat and mirrored by the Rdatasets archive (Ernest et al. 2018; https://vincentarelbundock.github.io/Rdatasets/csv/ratdat/surveys.csv, CC0 1.0), retrieved on 8 September 2026. The file holds 35,549 rows, one per captured individual, from 24 fenced plots between 1977 and 2002; the peer-reviewed data papers for the full research database are Ernest et al. (2009, 2016). We used species_id (two-letter code), plot_id (1-24), year and month (the trapping session), sex, hindfoot_length (mm, the standard structural-size measure), weight (g) and the parsed capture date. Measurements are incomplete as distributed: sex is missing for 2,511 records, hindfoot length for 4,111 and weight for 3,266. Sample construction and the resulting counts are in Table 1.

Model Description

Let ii index a captured individual of focal species ss, caught on plot pp in trapping session tt (a calendar year-month). Write WiW_i for body mass (g), LiL_i for hindfoot length (mm), CiC_i for the number of conspecifics other than ii caught on plot pp in session tt, HiH_i for the number of heterospecific community members caught in the same plot-session, and DiD_i for the number of distinct trapping nights in that plot-session. For each species separately we fit

log⁡Wi=αs+βsintraCi+βsinterHi+γslog⁡Li+δs sex(i)+ηs p(i)+θs y(i)+κs m(i)+λsDi+εi(1)\log W_i = \alpha_s + \beta^{\text{intra}}_s C_i + \beta^{\text{inter}}_s H_i + \gamma_s \log L_i + \delta_s^{\,\text{sex}(i)} + \eta_s^{\,p(i)} + \theta_s^{\,y(i)} + \kappa_s^{\,m(i)} + \lambda_s D_i + \varepsilon_i \tag{1}

by ordinary least squares, with η\eta, θ\theta and κ\kappa fixed effects for plot, calendar year and calendar month. Entering log⁡Li\log L_i alongside the density terms is a one-stage analysis of covariance rather than a two-stage scaled mass index (Peig & Green 2009), because the weak within-species mass-length correlation makes a standardised major axis slope unstable. Coefficients are multiplied by 100 and read as per cent change in size-adjusted body mass per additional neighbour, a currency comparable across species differing twenty-fold in mass.

Because Ci+Hi+1=TiC_i + H_i + 1 = T_i, the total community captures in that plot-session, equation (1) is an exact reparameterisation of a model containing total captures:

βsintraCi+βsinterHi≡βsinter(Ti−1)+ΔsCi(2)\beta^{\text{intra}}_s C_i + \beta^{\text{inter}}_s H_i \equiv \beta^{\text{inter}}_s (T_i - 1) + \Delta_s C_i \tag{2}

so that the quantity

Δs=βsintra−βsinter,Δ=1S∑s=1SΔs(3)\Delta_s = \beta^{\text{intra}}_s - \beta^{\text{inter}}_s, \qquad \Delta = \frac{1}{S}\sum_{s=1}^{S} \Delta_s \tag{3}

is the effect of substituting one heterospecific neighbour for one conspecific at constant total captures. Any artefact acting through the total number of animals caught, trap saturation or session-level effort, is absorbed by the TiT_i term and cannot generate Δs\Delta_s. This equivalence is exact only because neighbour effects enter equation (1) linearly in counts: if the response to crowding saturates, the linear TiT_i term absorbs it only approximately and the protection is correspondingly partial. Δ\Delta is the pre-specified test statistic for H1.

Two further density constructions were fitted. To express neighbours in resource-use rather than head-count units we rescaled heterospecific abundance into conspecific metabolic equivalents by Kleiber scaling,

H~i=∑j≠snj,p(i)t(i)(MˉjMˉs)3/4(4)\tilde H_i = \sum_{j \neq s} n_{j,p(i)t(i)} \left(\frac{\bar M_j}{\bar M_s}\right)^{3/4} \tag{4}

with Mˉj\bar M_j the mean body mass of species jj in grams. To test H2 we split heterospecific abundance by body-size distance,

Hi=Hisim+Hidis,Hisim=∑j≠s,  ∣ln⁡(Mˉj/Mˉs)∣<ln⁡2nj,p(i)t(i)(5)H_i = H_i^{\text{sim}} + H_i^{\text{dis}}, \qquad H_i^{\text{sim}} = \sum_{j \neq s,\; |\ln(\bar M_j / \bar M_s)| < \ln 2} n_{j,p(i)t(i)} \tag{5}

and estimated βssim\beta^{\text{sim}}_s and βsdis\beta^{\text{dis}}_s jointly with βsintra\beta^{\text{intra}}_s. Table 2 lists every quantity, its units and its biological justification.

Table 1. Data provenance and analysis sample.

ItemValue
Source filePortal Project Teaching Database, ratdat surveys table (Rdatasets mirror)
Retrieved8 September 2026
Rows in file (individual captures)35,549
Sample period1977-2002 (284 trapping sessions)
Plots24
Species codes in file48
Missing in file: sex / hindfoot length / weight2,511 / 4,111 / 3,266
Community definitionspecies with at least 400 recorded body masses
Community species12
Community captures33,052 (93.0% of all rows)
Plot-sessions with community captures5,915
Median (mean) community captures per plot-session5.0 (5.59)
Dropped for missing weight or hindfoot length2,732
Individuals analysed30,320
Species mean body mass, range7.92-159.25 g

Notes. Rows are captures, not site-visit summaries, so neighbour abundance is an index rather than a density. The community filter excludes unidentified codes and taxa with no recorded mass, including the non-rodent codes present in the file. All counts are printed by the analysis script from the file as loaded.

Simulation Protocol

This subsection describes the analysis sample, the replicate structure and the resampling protocol; there is no simulation, and every quantity is estimated from the real capture records described above. The experimental unit at Portal is the plot, so uncertainty in each community-level quantity comes from a cluster bootstrap that draws all 24 plots with replacement and refits equations (1), (4) and (5) for all 12 species, recomputing the community means each time. We used 1,000 resamples with seed 20260908; the bootstrap is the only stochastic element, so the run is deterministic given that seed. Resampling whole plots makes the intervals robust to arbitrary within-plot dependence, including repeated captures of the same untagged individual. Species-level coefficients carry cluster-robust standard errors with plot-sessions as clusters.

Two severity checks, specified in advance, were executed on the same protocol. The metabolic check replaces HiH_i by H~i\tilde H_i from equation (4). The adult check keeps only individuals at or above their species' median hindfoot length, because reproductive pulses put many small young animals into the traps at once and could mimic intraspecific competition; it removes structurally immature animals without an age variable, which the record does not contain.

Table 2. Variables and parameters, units and biological justification.

SymbolDefinitionUnitsJustification
WiW_iBody mass of individual iigFitness component; condition predicts survival and reproduction in small mammals (Eccard & Ylonen 2003)
LiL_iHindfoot lengthmmStructural size; standardising mass for skeletal size is the conventional condition index (Peig & Green 2009)
CiC_iConspecific captures in the same plot-session, excluding iiindividualsPer-capita intraspecific neighbourhood
HiH_iHeterospecific community captures in the same plot-sessionindividualsPer-capita interspecific neighbourhood
H~i\tilde H_iHeterospecifics in conspecific metabolic equivalentsconspecific equivalentsKleiber exponent 3/4 converts head counts into resource-use equivalents
DiD_iDistinct trapping nights in the plot-sessionnightsExplicit effort control
βsintra\beta^{\text{intra}}_s, βsinter\beta^{\text{inter}}_sPer-capita neighbour effects% body mass per individualPhenomenological competition coefficients (Adler et al. 2018)
Δs\Delta_s, Δ\DeltaSubstitution contrast, species and community mean% body mass per individualTest statistic for the stabilising condition (Chesson 2000)
Mˉj\bar M_jMean body mass of species jjgSets the metabolic weights and the similarity split
ln⁡2\ln 2Similarity threshold on ∣ln⁡(Mˉj/Mˉs)∣\lvert\ln(\bar M_j/\bar M_s)\rvertdimensionlessA factor-of-two mass ratio, above the ~1.5 threshold of Bowers & Brown (1982)

Notes. Species mean masses are computed from the same file. Fixed effects for plot, year, month and sex are nuisance parameters and are not reported.

Analysis

For each species we report βsintra\beta^{\text{intra}}_s, βsinter\beta^{\text{inter}}_s and Δs\Delta_s with cluster-robust standard errors and two-sided pp-values. Community-level quantities are unweighted means across the 12 species, each species a replicate, with percentile bootstrap 95% intervals and the bootstrap standard deviation; because the mean is unweighted, we also report the full spread of species-level estimates and rank-based tests of the ordering. We counted the species showing the predicted ordering, tested that count with an exact one-sided sign test, and compared the coefficient sets with a paired tt-test and a Wilcoxon signed-rank test, the latter insensitive to extreme values. Where both coefficients were negative we computed the ratio βsintra/βsinter\beta^{\text{intra}}_s / \beta^{\text{inter}}_s, the quantity comparable to the plant benchmark. The Yenni et al. (2012) prediction was tested by correlating βsintra\beta^{\text{intra}}_s with log⁡10\log_{10} total captures.

Results

H1: self-limitation exceeds interspecific limitation

The analysis ran to completion on 30,320 individuals; species-level estimates are in Table 3. Eleven of the 12 species have a negative conspecific coefficient, ten of them individually significant with cluster-robust errors, and not one species has a significantly negative heterospecific coefficient. The single exception is Perognathus flavus, the smallest species at 7.92 g, whose conspecific coefficient is positive and non-significant (+0.379%, pp = 0.219).

Table 3. Per-capita neighbour effects on size-adjusted body mass, by species.

CodeSpeciesnnMˉ\bar M (g)mean CCmean HHβintra\beta^{\text{intra}} (SE)βinter\beta^{\text{inter}} (SE)Δs\Delta_s (SE)p(Δs)p(\Delta_s)
DMDipodomys merriami9,73943.163.893.62-0.166 (0.074)+0.122 (0.074)-0.288 (0.107)0.0070
PPChaetodipus penicillatus2,97817.172.775.83-0.452 (0.222)-0.226 (0.135)-0.226 (0.242)0.350
PBChaetodipus baileyi2,80831.745.044.52-0.752 (0.174)+0.050 (0.141)-0.801 (0.211)0.00014
DODipodomys ordii2,79348.871.996.31-0.764 (0.243)+0.028 (0.124)-0.792 (0.275)0.0040
RMReithrodontomys megalotis2,42910.591.403.20-0.572 (0.314)-0.048 (0.150)-0.524 (0.338)0.121
OTOnychomys torridus2,08524.230.916.63-2.260 (0.686)+0.142 (0.130)-2.402 (0.703)0.00063
DSDipodomys spectabilis2,026120.131.694.58-2.050 (0.314)+0.357 (0.140)-2.407 (0.360)<0.0001
PFPerognathus flavus1,4717.921.595.30+0.379 (0.308)+0.071 (0.144)+0.307 (0.323)0.342
PEPeromyscus eremicus1,20021.590.954.81-1.432 (0.611)-0.282 (0.191)-1.150 (0.636)0.070
NLNeotoma albigula1,046159.250.476.17-6.973 (1.572)+0.387 (0.281)-7.360 (1.620)<0.0001
OLOnychomys leucogaster90731.580.786.03-2.790 (0.921)-0.108 (0.245)-2.682 (0.985)0.0065
PMPeromyscus maniculatus83821.361.075.30-6.277 (0.943)+0.235 (0.251)-6.512 (0.916)<0.0001

Notes. Coefficients are per cent change in size-adjusted body mass per additional neighbour caught in the same plot and trapping session, from equation (1); standard errors are cluster-robust with plot-sessions as clusters. nn is the number of individuals with both weight and hindfoot length. mean CC and mean HH are the average conspecific and heterospecific neighbour counts experienced by the analysed individuals. Δs=βsintra−βsinter\Delta_s = \beta^{\text{intra}}_s - \beta^{\text{inter}}_s is the substitution effect at constant total captures. Rows are ordered by nn. Two-sided pp-values below 0.0001 are shown as <0.0001. Median model R2R^2 across species is 0.227. Species-level contrasts span +0.307% to -7.360%; the two steepest, Neotoma albigula and Peromyscus maniculatus, come from species averaging fewer than 1.1 conspecifics per plot-session and are the least well conditioned in the set.

At the community level (Table 4), one additional conspecific is associated with a 2.009% reduction in size-adjusted body mass (95% CI -2.456 to -1.547; bootstrap SD 0.233), one additional heterospecific with +0.061% (95% CI -0.048 to +0.152; bootstrap SD 0.051), indistinguishable from zero. The substitution contrast is Δ=−2.070\Delta = -2.070% per individual (95% CI -2.489 to -1.611; bootstrap SD 0.229). H1 is supported: the interval excludes zero by a wide margin.

That magnitude should be read with care. Δ\Delta is an unweighted mean over species, and Table 3 shows contrasts spanning +0.307% to -7.360%. Two sparse species, Neotoma albigula (-7.360%) and Peromyscus maniculatus (-6.512%), lie far outside the rest; the other ten fall between +0.307% and -2.682%, and seven of the twelve are weaker than -2%. The mean is therefore pulled well below the typical species, and -2.070% should not be read as the representative per-capita cost. The ordering, not the point magnitude, is what is robust (Table 5). Eleven of 12 show βsintra<βsinter\beta^{\text{intra}}_s < \beta^{\text{inter}}_s (exact sign test pp = 0.0032; Wilcoxon signed-rank pp = 0.0024, a rank test insensitive to the two extreme values; paired tt = -2.905, pp = 0.0143). In the four species where both coefficients are negative, self-limitation is a median 8.53-fold stronger (mean 11.22, range 2.00-25.83). In seven further species intraspecific competition pairs with a weakly positive heterospecific coefficient, the combination Adler et al. (2018) also found to dominate their non-competitive pairs.

Table 4. Community-level per-capita effects and severity checks.

QuantityMean intraspecific (%)Mean interspecific (%)Contrast Δ\Delta (%)95% CI on Δ\Delta
Primary model, eqn (1)-2.009 [-2.456, -1.547]+0.061 [-0.048, +0.152]-2.070[-2.489, -1.611]
Metabolic equivalents, eqn (4)-1.996 [-2.449, -1.550]+0.076 [-0.117, +0.215]-2.072[-2.513, -1.581]
Structurally adult individuals only-1.098 [-1.680, -0.633]+0.021 [-0.110, +0.133]-1.119[-1.676, -0.644]
Size-similar heterospecifics, eqn (5)--0.181 [-0.482, +0.126]--
Size-dissimilar heterospecifics, eqn (5)-+0.127 [+0.022, +0.216]--
Similarity contrast βsim−βdis\beta^{\text{sim}} - \beta^{\text{dis}}---0.308[-0.614, +0.026]

Notes. Unweighted means across the 12 species, each species a replicate; brackets are percentile 95% intervals from 1,000 cluster bootstrap resamples of the 24 plots (seed 20260908). Bootstrap standard deviations for the primary row are 0.233 (intraspecific), 0.051 (interspecific) and 0.229 (contrast). Units are per cent change in size-adjusted body mass per additional neighbour; in the metabolic row the interspecific unit is per conspecific metabolic equivalent. The adult subsample retains individuals at or above the species median hindfoot length. Because the means are unweighted, they are pulled by the two species with the steepest coefficients and should not be read as typical per-capita effects; the species-level spread is in Table 3.

Both severity checks leave the ordering intact. Weighting heterospecific neighbours by resource use rather than counting them alike, so that a 160 g woodrat and an 8 g pocket mouse are no longer equivalent, changes Δ\Delta only from -2.070% to -2.072% (95% CI -2.513 to -1.581). Restricting to structurally adult individuals roughly halves the effect, to Δ=−1.119\Delta = -1.119% (95% CI -1.676 to -0.644), the mean conspecific coefficient falling from -2.009% to -1.098%; recruitment pulses therefore account for part of the raw intraspecific coefficient but not for the ordering, which stays clear of zero.

One qualification applies to every interspecific estimate reported here. βsinter\beta^{\text{inter}}_s is a single pooled coefficient over all eleven heterospecific community members, so what we estimate is the absence of a detectable net interspecific effect: pairwise coefficients of opposite sign could cancel within that pool. We did not estimate pairwise coefficients, and the size-similarity split below is the only disaggregation we fitted.

H2: no detectable effect of body-size similarity

H2 is not supported. Splitting heterospecific neighbours at a factor-of-two mass ratio gives βsim=−0.181\beta^{\text{sim}} = -0.181% (95% CI -0.482 to +0.126) and βdis=+0.127\beta^{\text{dis}} = +0.127% (95% CI +0.022 to +0.216). The difference is in the predicted direction, -0.308%, but its interval, -0.614 to +0.026, contains zero. Body-size distance therefore does not measurably modulate interspecific effects on condition here; because the test rests on 12 species, several with no size-similar neighbour, we read this as inconclusive rather than as a refutation of limiting similarity.

Self-limitation and rarity

Conspecific coefficients scale with commonness in the direction Yenni et al. (2012) predicted: βsintra\beta^{\text{intra}}_s becomes less negative as total captures rise (Pearson rr = 0.613, pp = 0.034; Spearman ρ\rho = 0.720, pp = 0.008). The two most extreme coefficients, Neotoma albigula at -6.97% and Peromyscus maniculatus at -6.28%, belong to species averaging fewer than 1.1 conspecifics per plot-session, so rarity and weak conditioning are confounded in this correlation.

Table 5. Ancillary statistics across the 12 species.

StatisticValue
Species with βintra<βinter\beta^{\text{intra}} < \beta^{\text{inter}}11 of 12 (exact sign test pp = 0.0032)
Species with βintra<0\beta^{\text{intra}} < 0 / significantly so11 / 10
Species with βinter<0\beta^{\text{inter}} < 0 / significantly so4 / 0
Species with intraspecific competition and interspecific facilitation7
Ratio βintra/βinter\beta^{\text{intra}}/\beta^{\text{inter}}, both negative (nn = 4)median 8.53, mean 11.22, range 2.00-25.83
Paired tt-test on the 12 coefficient pairstt = -2.905, pp = 0.0143
Wilcoxon signed-rank testWW = 3.0, pp = 0.0024
βintra\beta^{\text{intra}} vs log⁡10\log_{10} total capturesrr = 0.613, pp = 0.034; ρ\rho = 0.720, pp = 0.008
Median R2R^2 of the species models0.227

Notes. Significance of species-level coefficients is at α\alpha = 0.05 with cluster-robust standard errors. The ratio is computed only where both coefficients are negative, the subset comparable to the plant benchmark of Adler et al. (2018).

Discussion

Across 26 years and 24 plots, individual rodents at Portal pay a measurable cost for conspecific neighbours and no detectable net cost for heterospecific ones. Eleven of twelve species show that ordering, and where both coefficients are competitive self-limitation is a median 8.5-fold stronger, at or above the four to five-fold ratio Adler et al. (2018) report for plants; in most species interspecific effects are weakly positive, the same intraspecific-competition-with-interspecific-facilitation combination they found. The stabilising ingredient of coexistence theory (Chesson 2000) is thus no weaker in this mobile vertebrate community than in sessile plants, at least in the currency of individual condition. It is the ordering we emphasise, not the mean magnitude, which two sparse species inflate.

This does not contradict the exclosure record. Heske et al. (1994) showed that removing kangaroo rats raises the abundance of smaller granivores, and our result is silent about that: abundance and condition are different currencies on different timescales, and an interspecific effect undetectable within a trapping session may still accumulate into a population response over years through vegetation and seed-bank pathways. What our estimates add is that the instantaneous per-capita interaction an individual experiences is overwhelmingly with its own species, the divergence between population- and individual-level readings that Eccard & Ylonen (2003) anticipated. Because the interspecific coefficient pools all eleven heterospecifics, this is a statement about the net neighbourhood, not about every pair within it.

The interpretation must stop short of coexistence. Following Broekman et al. (2019), excess self-limitation on a fitness component shows that an interaction is stabilised; it is neither necessary nor sufficient for stable coexistence, which also requires the average-fitness-difference condition our data cannot address. Because single-component studies understate the intra-minus-inter difference (Adler et al. 2018), our estimate is a lower bound. That conspecific coefficients are steepest in the rarest species (ρ\rho = 0.720) fits the mechanism Yenni et al. (2012) proposed for the persistence of rare species, but with 12 species, and with rarity confounded with estimation precision, the correlation is suggestive rather than decisive.

The failure of H2 is informative. Bowers & Brown (1982) inferred limiting similarity from co-occurrence: granivores of similar mass are found together less often than chance. We asked whether similar-sized neighbours impose a stronger per-capita cost where they do co-occur, and the answer is unresolved. Co-occurrence and interaction strength may decouple, because the pairs whose interactions would be strongest are the ones assembly has already filtered out; or the test may simply lack power. We do not choose between these here.

Several limitations bound these conclusions. Neighbour abundance is captures per plot per trapping session, an effort-dependent index rather than a density, so the absolute coefficients carry no density units; only the substitution contrast, which by equation (2) holds total captures constant, is protected from session-level effort and trap saturation, and it is the contrast we use for inference. The intraspecific coefficient is partly compositional: reproductive pulses deliver many small young animals at once, and the adult restriction halves the effect, so some of the raw self-limitation is demographic rather than competitive. A second compositional pathway we cannot close is reproductive condition. Mass at fixed structural size includes reproductive burden and gut contents, pregnancy and lactation raise female mass appreciably, and reproduction in this system is itself density- and rainfall-dependent; the dataset records no reproductive status, so this pathway is uncontrolled and could push the conspecific coefficient in either direction. Relatedly, the exact reparameterisation in equation (2) assumes neighbour effects are linear in counts; we fitted no saturating or log-density specification, so nonlinear crowding responses are not excluded and the contrast's protection against effort artefacts is correspondingly incomplete. Seasonality and interannual variation enter additively as month and year fixed effects, whereas a session-level (year-by-month) fixed effect would control rainfall-pulse timing more strictly; that specification was not fitted either. The two steepest coefficients come from species averaging fewer than 1.1 conspecifics per plot-session, are the least well conditioned in the set and inflate the community mean, and one species runs against the pattern altogether. The teaching subset carries no plot treatment labels, so the kangaroo-rat exclosure design is absorbed by plot fixed effects rather than modelled, and the interspecific coefficient averages over plots on which some heterospecifics were experimentally excluded (Ernest et al. 2016). It carries no individual tags, so repeated captures of one animal cannot be identified; the plot-level cluster bootstrap accommodates that dependence but cannot remove it. Finally, this is one site and one 26-year window over which the community's compensatory capacity demonstrably changed (Diaz & Ernest 2022), so our coefficients are averages over regimes, not constants.

The practical implication is that individual condition offers a cheap, high-resolution readout of density dependence from data mark-recapture programmes already collect: whether a declining population is limited by its own numbers or by a putative competitor may be visible in body mass within a single trapping session, long before it appears in abundance.

Acknowledgements

We thank the Portal Project and its field workers for three decades of open, meticulously documented monitoring, and the maintainers of the ratdat package and the Rdatasets archive for distributing the teaching database.

Author Contributions

The study was conceived, designed, analysed and written by the author. The analysis code was written and executed by the author; all numbers reported come from that single executed run.

Data Availability Statement

No new data were generated. The analysis uses the Portal Project Teaching Database, distributed under a CC0 1.0 public domain dedication in the R package ratdat and mirrored at https://vincentarelbundock.github.io/Rdatasets/csv/ratdat/surveys.csv (35,549 rows; retrieved 8 September 2026). The dataset should be cited as Ernest et al. (2018); the peer-reviewed data papers for the full research database are Ernest et al. (2009, 2016).

References

Adler, P.B., Smull, D., Beard, K.H., Choi, R.T., Furniss, T., Kulmatiski, A., Meiners, J.M., Tredennick, A.T. & Veblen, K.E. (2018) Competition and coexistence in plant communities: intraspecific competition is stronger than interspecific competition. Ecol. Lett., 21, 1319-1329.

Bowers, M.A. & Brown, J.H. (1982) Body size and coexistence in desert rodents: chance or community structure? Ecology, 63, 391-400.

Broekman, M.J.E., Muller-Landau, H.C., Visser, M.D., Jongejans, E., Wright, S.J. & de Kroon, H. (2019) Signs of stabilisation and stable coexistence. Ecol. Lett., 22, 1957-1975.

Chesson, P. (2000) Mechanisms of maintenance of species diversity. Annu. Rev. Ecol. Syst., 31, 343-366.

Diaz, R.M. & Ernest, S.K.M. (2022) Maintenance of community function through compensation breaks down over time in a desert rodent community. Ecology, 103, e3709.

Eccard, J.A. & Ylonen, H. (2003) Interspecific competition in small rodents: from populations to individuals. Evol. Ecol., 17, 423-440.

Ernest, S.K.M., Valone, T.J. & Brown, J.H. (2009) Long-term monitoring and experimental manipulation of a Chihuahuan Desert ecosystem near Portal, Arizona, USA. Ecology, 90, 1708.

Ernest, S.K.M., Yenni, G.M., Allington, G., Christensen, E.M., Geluso, K., Goheen, J.R., Schutzenhofer, M.R., Supp, S.R., Thibault, K.M., Brown, J.H. & Valone, T.J. (2016) Long-term monitoring and experimental manipulation of a Chihuahuan desert ecosystem near Portal, Arizona (1977-2013). Ecology, 97, 1082.

Ernest, M., Brown, J., Valone, T. & White, E.P. (2018) Portal Project Teaching Database. figshare. DOI: 10.6084/m9.figshare.1314459.

Heske, E.J., Brown, J.H. & Mistry, S. (1994) Long-term experimental study of a Chihuahuan Desert rodent community: 13 years of competition. Ecology, 75, 438-445.

Peig, J. & Green, A.J. (2009) New perspectives for estimating body condition from mass/length data: the scaled mass index as an alternative method. Oikos, 118, 1883-1891.

Yenni, G., Adler, P.B. & Ernest, S.K.M. (2012) Strong self-limitation promotes the persistence of rare species. Ecology, 93, 456-461.

6.Review

Attempt 2Done

Automated review: Minor revision (novelty 4, rigor 4, clarity 5, reproducibility 5).

Minor revision
Novelty 4/5Rigor 4/5Clarity 5/5Reproducibility 5/5

The revision addresses all seven of my required changes substantively rather than cosmetically, and the manuscript is now, in my judgement, a sound Letter. The framing of magnitude is the important fix: the Abstract and Results now lead with the ordering (11 of 12 species; sign test p = 0.0032; Wilcoxon p = 0.0024), state that -2.07% is an unweighted species mean pulled by two sparse and poorly conditioned species, give the range of species-level contrasts (+0.307% to -7.360%) and put the adult-restricted value (-1.119%, 95% CI -1.676 to -0.644) in the Abstract as a number. The linearity assumption behind equation (2) is now stated where the identification argument is made and again in the Limitations; the interspecific coefficient is correctly described as a pooled net effect with pairwise estimation explicitly not attempted; the reproductive-condition confound, which the dataset cannot control, is stated in full; the additive month-plus-year structure and the unfitted session-level fixed effect are acknowledged; and the protocol subsection now names what it contains. I re-checked the numbers: every figure in the text and in Tables 3-5 matches the executed analysis, the dataset is the Portal Project Teaching Database as recorded with the correct URL, retrieval date, 35,549 rows and 30,320 analysed individuals, and nothing is described as simulated. My remaining points are small and do not require new analysis: the significantly positive size-dissimilar coefficient should be addressed directly, the bootstrap's replicate unit should be reconciled with the 'each species a replicate' language, the two compositional pathways should be distinguished by scope, and one clause should say why pairwise coefficients were not estimated. Rigor rises to 4 on the strength of the honest and now essentially complete confound discussion; it stops short of 5 because the linearity and session-shock specifications remain untested rather than merely acknowledged.

Strengths

  • The conceptual target is the quantity coexistence theory actually specifies. Adler et al. (2018) established the intra:inter asymmetry for plants; this is the first estimate I know of that puts per-capita coefficients for every abundant member of a free-living vertebrate community on a common individual currency, and the authors are right that the Portal exclosure literature (Heske et al. 1994) measures a different thing, an abundance response to deleting a guild member.
  • The identification argument in equation (2) remains the paper's best feature, and the revision now states its cost of entry. Because conspecific + heterospecific + 1 = total captures, the model is an exact reparameterisation of one containing total captures, so the substitution contrast is orthogonal to anything acting through session-level effort or trap saturation - and the authors now say plainly that this exactness rests on neighbour effects being linear in counts, and that no saturating specification was fitted.
  • The reporting of magnitude has been fixed properly rather than cosmetically. The Abstract now leads with the ordering (11 of 12 species, sign test p = 0.0032), states that the -2.07% mean is unweighted and pulled by two sparse species with seven of twelve contrasts weaker than -2%, and gives the adult-restricted contrast (-1.119%, 95% CI -1.676 to -0.644) as a number rather than as a claim of survival. The Results carry a dedicated paragraph on the spread (+0.307% to -7.360%), and both Table 3 and Table 4 notes now warn the reader against reading the mean as typical. A reader who sees only the Abstract will not now take -2.07% as the representative per-capita cost.
  • Predictions, refutation criteria and both severity checks were declared before the results and both were executed. The adult-only restriction halves the effect and this is reported in the Abstract, the Results and the Limitations rather than minimised.
  • The secondary hypothesis fails and is reported as failing: the size-similarity contrast is in the predicted direction (-0.308%) but its interval (-0.614 to +0.026) spans zero, and the authors call it inconclusive rather than supportive.
  • Interpretation is disciplined and ecological rather than merely statistical. Following Broekman et al. (2019) the authors claim stabilisation of an interaction and explicitly refuse the coexistence claim; they note that a single fitness component gives a conservative estimate; and they now concede that the rarity-self-limitation correlation confounds rarity with estimation precision.
  • Data provenance and reproducibility are exemplary: a CC0 public dataset with the exact URL and retrieval date, 35,549 rows in the file, the community-membership rule, every sample filter, 30,320 individuals analysed, 24 plots, 5,915 plot-sessions, 1,000 bootstrap resamples and the seed. I checked every quantitative statement in the text and in Tables 3, 4 and 5 against the experiment record; all of them match, and nothing is described as simulated.

Weaknesses

  • The one interspecific coefficient whose interval excludes zero is the size-dissimilar term, beta_dis = +0.127% (95% CI +0.022 to +0.216). Under the manuscript's own reading that is a small but detectable facilitative effect of size-dissimilar neighbours on condition, and it is reported only as the arm of a failed contrast. It deserves a sentence in its own right, if only to say that with 12 species it is not worth interpreting.
  • The community-level intervals come from resampling the 24 plots, not the 12 species, so they propagate sampling error in each species' coefficient but treat the species set as fixed. The text describes the community mean as an unweighted mean 'each species a replicate', which invites the reader to expect among-species variation to be inside the interval. It is not, and the mismatch between the replicate language and the resampling unit should be stated once.
  • The pooled interspecific coefficient is now correctly qualified as a net effect, but the manuscript leaves the reader with no sense of how much cancellation is plausible. A single sentence acknowledging that the data would in principle support pairwise estimation, and that it was not attempted here because per-pair sample sizes are small, would close this.
  • The reproductive-condition confound is now in the Limitations and is well stated, but the Discussion still describes the adult restriction as separating 'demographic' from 'competitive' contributions; strictly, the adult restriction addresses the juvenile-recruitment pathway only, and does nothing about reproductive burden in adult females. The two limitations are adjacent in the text but their different scopes are not distinguished.
  • Minor: the venue-mandated subsection heading 'Simulation Protocol' is now intelligible - the first sentence names the sample, replicate structure and resampling protocol - but the heading itself remains inaccurate for a study with no simulation. This is a house-style constraint rather than an author error, and the authors have handled it as well as the template allows.

Required changes

  • Add one sentence to the H2 subsection noting that beta_dis = +0.127% (95% CI +0.022 to +0.216) is the only interspecific coefficient whose interval excludes zero, and state whether the authors regard that as a real weak facilitation or as unremarkable given 12 species; do not leave it visible only as one arm of the failed contrast.
  • State once, in the Analysis subsection or in the note to Table 4, that the cluster bootstrap resamples the 24 plots and therefore does not treat the 12 species as a sample; the intervals reflect uncertainty in the species coefficients, not among-species variation.
  • In the Limitations, distinguish the scope of the two compositional pathways: the adult restriction addresses juvenile recruitment, whereas reproductive burden in adult females is untouched by it. Adjust the Discussion sentence that reads the adult check as separating demographic from competitive contributions accordingly.
  • Add a half-sentence saying why pairwise interspecific coefficients were not estimated (per-pair co-occurrence sample sizes), so that the acknowledgement of pooling is informative rather than only a caveat.

Record

§Event timeline

  1. Run createdQuestion: “Does intraspecific competition exceed interspecific competition in a desert rodent community, and is interspecific competition stronger between body-size-similar species?” · output language: English · venue: Ecology & Evolutionary Biology · Ecology Letters · models: agent:claude-opus-5
  2. Stage started · Literature reviewAttempt 1 · agent:claude-opus-5
  3. awaiting_agent · Literature reviewsearch response for literature_review: literature_review-search-1.response.json
  4. Resume requested
  5. Stage started · Literature reviewAttempt 2 · agent:claude-opus-5
  6. Search complete · Literature review22 sources · 9,848 characters of notes
  7. awaiting_agent · Literature reviewcomplete_json response for literature_review: literature_review-complete_json-1.response.json
  8. Resume requested
  9. Stage started · Literature reviewAttempt 3 · agent:claude-opus-5
  10. Search complete · Literature review22 sources · 9,848 characters of notes
  11. Stage completed · Literature review
  12. Stage started · IdeationAttempt 1 · agent:claude-opus-5
  13. awaiting_agent · Ideationcomplete_json response for ideation: ideation-complete_json-1.response.json
  14. Resume requested
  15. Stage started · IdeationAttempt 2 · agent:claude-opus-5
  16. Awaiting approval · Ideation
  17. Approved · IdeationIdea 1 selected
  18. Stage started · ExperimentationAttempt 1 · agent:claude-opus-5
  19. Dataset provisioned · Experimentationportal_rodent_surveys · 35,549 observations · 10 variables · sha256 0e7b92161a10
  20. awaiting_agent · Experimentationcomplete response for experimentation: experimentation-complete-1.response.txt
  21. Resume requested
  22. Stage started · ExperimentationAttempt 2 · agent:claude-opus-5
  23. Dataset provisioned · Experimentationportal_rodent_surveys · 35,549 observations · 10 variables · sha256 0e7b92161a10
  24. awaiting_agent · Experimentationcomplete response for experimentation: experimentation-complete-1.response.txt
  25. Resume requested
  26. Stage started · ExperimentationAttempt 3 · agent:claude-opus-5
  27. Dataset provisioned · Experimentationportal_rodent_surveys · 35,549 observations · 10 variables · sha256 0e7b92161a10
  28. Experiment round · ExperimentationRound 1: exit 0; result parsed (12.709s)
  29. Stage completed · Experimentation
  30. Stage started · AnalysisAttempt 1 · agent:claude-opus-5
  31. awaiting_agent · Analysiscomplete_json response for analysis: analysis-complete_json-1.response.json
  32. Resume requested
  33. Stage started · AnalysisAttempt 2 · agent:claude-opus-5
  34. Stage completed · Analysis
  35. Stage started · Paper writingAttempt 1 · agent:claude-opus-5
  36. awaiting_agent · Paper writingcomplete response for paper_writing: paper_writing-complete-1.response.txt
  37. Resume requested
  38. Stage started · Paper writingAttempt 2 · agent:claude-opus-5
  39. Stage completed · Paper writing
  40. Stage started · ReviewAttempt 1 · agent:claude-opus-5
  41. awaiting_agent · Reviewcomplete_json response for review: review-complete_json-1.response.json
  42. Resume requested
  43. Stage started · ReviewAttempt 2 · agent:claude-opus-5
  44. Awaiting approval · Review
  45. Sent back for revision · ReviewRe-running from Paper writing: “The referee recommends MAJOR REVISION (novelty 4, rigor 3, clarity 4, reproducibility 5). Address every required change below, quoted verbatim from the report. Use ONLY numbers already produced by the”
  46. Stage started · Paper writingAttempt 3 · agent:claude-opus-5
  47. Stage completed · Paper writing
  48. Stage started · ReviewAttempt 1 · agent:claude-opus-5
  49. Awaiting approval · Review
  50. Resume requested
  51. Sent back for revision · ReviewRe-running from Paper writing: “The referee recommends major_revision. Required changes, quoted verbatim: (1) "Report, in both the Abstract and the Results, that the community mean is an unweighted mean across species and is strongl”
  52. Stage started · Paper writingAttempt 4 · agent:claude-opus-5
  53. awaiting_agent · Paper writingcomplete response for paper_writing: paper_writing-complete-1.response.txt
  54. Resume requested
  55. Stage started · Paper writingAttempt 5 · agent:claude-opus-5
  56. Stage completed · Paper writing
  57. Stage started · ReviewAttempt 1 · agent:claude-opus-5
  58. awaiting_agent · Reviewcomplete_json response for review: review-complete_json-1.response.json
  59. Resume requested
  60. Stage started · ReviewAttempt 2 · agent:claude-opus-5
  61. Awaiting approval · Review
  62. Approved · Review
  63. Run completereport=/private/tmp/claude-501/-Users-haodingresearch-Desktop-auto-research/579004ae-5819-417d-918c-9d9409997567/scratchpad/studies/ecology-en/runs/ad88c89b80ff/REPORT.md