Online Resource 2 - analysis code and banked results

Article: One boundary in two traces: concept vocabulary and cited references in base-of-the-pyramid, social enterprise and social entrepreneurship research, 2000 to 2025

Journal: SN Business and Economics

Author: Faria Zahan Sarna, Lecturer, School of Business and Economics, Metropolitan University, Sylhet, Bangladesh
Email: faria.sarna@metrouni.edu.bd 
ORCID: https://orcid.org/0009-0009-6514-4754


CONTENTS
  analysis/data/     Redistributable reproduction dataset (see REPRODUCTION below).
  analysis/code/     Python scripts. snbe_common.py holds the shared screening and label rules
                     that every script imports, so all scripts reconcile to the same corpus.
  analysis/results/  One JSON file per script, plus CANONICAL_LEDGER.json.

REPRODUCTION
  python3 analysis/code/reproduce_from_deposit.py
  Recomputes corpus counts, reference and concept pool sizes, and all twelve pairwise Jaccard
  values from analysis/data/ alone, then compares them with the deposited results. Verified from
  a clean directory on 10 October 2026: 29 of 29 checks pass, exit status 0.

  analysis/data/corpus_labels.csv  554 rows. OpenAlex id, year, source, citations, database,
                                   abstract flag, and labels under BOTH the title-abstract and
                                   the title-only rule.
  analysis/data/references.csv     34,307 citing-cited OpenAlex id pairs.
  analysis/data/concepts.csv       9,752 concept assignments with level and score.

  Raw titles, abstracts and author strings are NOT redistributed: part of the corpus came from a
  subscription source. Every reported statistic depends on that text only through the label
  assignment, which is deposited pre-computed under both rules, so no reported value is
  unreproducible for want of the text. To re-derive labels from raw text, run
  analysis/code/reconstruct_corpus.py, which rebuilds the text layer from the OpenAlex API by id.

VOCABULARY SPECIFICATION CHANGED 10 OCTOBER 2026
  The former canonical concept-Jaccard range of 0.43-0.56 came from results_final.json, which is
  NOT in this deposit, and could not be reproduced under any of sixty level/score specifications.
  The authoritative specification is OpenAlex concept levels 2 and 3, score >= 0.3, giving
  SE|SEship 0.399, SE|BoP 0.250, SEship|BoP 0.2335. See results/vocabulary_permutation.json.
  analysis/MANIFEST.md  Which script owns which reported quantity.
  analysis/FIGURES.md   How each figure was produced and from which result file.

HOW TO VERIFY A NUMBER IN THE PAPER
  CANONICAL_LEDGER.json maps every statistic to its definition, its population and the result
  file that produced it. Each entry records the population (A, B, C or D) because several
  quantities differ by population and must not be compared across them.

POPULATIONS
  A  614  OpenAlex-matched before document-type exclusion. Not used for any reported result.
  B  554  Screened journal articles. Corpus profile.
  C  461  Labelled papers. Vocabulary, pooled citation and inference.
  D  349  Single-label papers with references. Network and paper-level analysis.

REPRODUCIBILITY
  Scripts are deterministic under a fixed seed; repeat runs were verified by matching checksums.
  Permutation tests use 10,000 draws and report p under the add-one convention, so the smallest
  reportable value is 1/10,001 and is not a literal zero.

KNOWN CORRECTION
  The modularity function was corrected during the analysis: the null term must be summed over
  every same-community pair, not only over connected pairs. The corrected implementation is
  validated against direct evaluation of the definition on seven test graphs (final_checks.json).
  Superseded values are listed in Online Resource 1, Section 2.11.

DATA
  Third-party bibliographic records are not redistributed here, as the source providers' terms
  restrict it. The deposit contains record identifiers and all derived measures, which is
  sufficient to reproduce every statistic reported in the paper.
