WP44: Part VIII knowledge networks (Agent L/I), 14 generated tables, critic report K (71 issues), A-006, fixer brief
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
25 changed files +1,929 −6
added
agents/briefs/FIXER_COMMON.md
+25 −0
@@ -0,0 +1,25 @@ | |||||
| 1 | +# Brief — manuscript fixers (after Agent K's critique of 2026-11-03) | ||||
| 2 | + | ||||
| 3 | +Read agents/briefs/WRITER_COMMON.md, then reports/critic/critique_parts_02_03_04_appendices.md and the issue rows of your | ||||
| 4 | +file(s) in reports/critic/issues_parts_02_03_04_appendices.csv. Apply EVERY blocking and major fix and the minor ones that | ||||
| 5 | +are quick; for each issue append a row to reports/critic/resolutions.csv (issue_id, file, action ∈ {fixed, rejected, deferred}, | ||||
| 6 | +note) — a rejection needs a one-line justification. Facts that changed since the critique (use these, not the critique's text): | ||||
| 7 | +- Amendment A-006 (protocol/amendments.csv): the CS-core rule is now `in_dblp OR primary field = CS OR arXiv primary category cs.*` | ||||
| 8 | + (the arXiv clause no longer requires a CS topic); PRISMA now asserts after_exclusions = core + penumbra + neither (the | ||||
| 9 | + "neither" set is reported by \PrismaNeitherCoreNorPenumbraAfterExclusions). Regenerate macros with `python3 tables/make_numbers.py .` | ||||
| 10 | + (data/metadata/*.json are the corpus v3 files) and use \PrismaIdentifiedOpenalexPassOneCsTopicFilter (first-pass count) and | ||||
| 11 | + \PrismaIdentifiedOpenalexPassTwoDblpArxivLinked (second pass) instead of describing 16.6 M as "first pass". | ||||
| 12 | +- linkage_report.json now always carries the keys needed_oa_ids_second_pass.{dblp_doi, arxiv_doi}, link_dblp_oa.{doi, arxiv, title_year}, | ||||
| 13 | + link_arxiv_oa.{arxiv_id, doi, title_year} (zeros when empty) → the macros \LinkNeededOaIdsSecondPassArxivDoi etc. exist. | ||||
| 14 | +- Preprint citations ARE merged into the canonical node (bibliometrics/03_citation_impact.py, CY union) — say so. | ||||
| 15 | +- Dedup routes: title+year (84,776 pairs) AND arXiv id (13,175 pairs) — \PrismaVersionRelationshipTitleYear, \PrismaVersionRelationshipArxivId. | ||||
| 16 | +- first_date rule and date_precision (systematic_review/define_corpus.py): a YYYY-01-01 publication date is overridden by the | ||||
| 17 | + preprint/arXiv date when one exists, and such records count as month-precision. | ||||
| 18 | +- Donut windows ARE implemented (its_results.json its_chatgpt_donut); sensitivity windows are 2026-03 and 2026-08; placebo | ||||
| 19 | + baseline-only p-values exist; bootstrap intervals are computed only in bibliometrics/04_diversity_cagr.py (B = 500, multinomial) | ||||
| 20 | + — do not claim other bootstraps; Krippendorff α (MASI, interval form) IS computed; the keyword known-set evaluation | ||||
| 21 | + (experiments/known_set.py) is a separate, preregistered-concept lead-time check and must be described as such, not as the H8 topic detector test. | ||||
| 22 | +- Realised emerging-detection cutoffs: read the metrics JSON (results/emerging/metrics_h12.json, metrics_h24.json → train_cutoffs/test_cutoffs) when present; otherwise describe the rule (every third month, training ≤ 2021-12 for h=12 and ≤ 2020-12 for h=24, test 2023-01 … 2024-10). | ||||
| 23 | +- Duplicate bib keys for the same DOI: keep ONE key per work (prefer the key in manuscript/references.bib), replace the other | ||||
| 24 | + in your file's \cite commands and delete the duplicate entry from your part's bib; re-run `python3 manuscript/merge_bibs.py`. | ||||
| 25 | +Do not change other files than your .tex, your part's .bib and resolutions.csv. Re-check compile with a scratch document. Report ≤ 15 lines. | ||||
modified
ingestion/link_sources.py
+3 −3
@@ -92,7 +92,7 @@ def main(): | |||||
| 92 | rep["dblp_2018_2026"] = q("SELECT count(*) FROM dblp_keys")[0][0] | 92 | rep["dblp_2018_2026"] = q("SELECT count(*) FROM dblp_keys")[0][0] | ||
| 93 | rep["dblp_with_doi"] = q("SELECT count(*) FROM dblp_keys WHERE doi IS NOT NULL")[0][0] | 93 | rep["dblp_with_doi"] = q("SELECT count(*) FROM dblp_keys WHERE doi IS NOT NULL")[0][0] | ||
| 94 | rep["dblp_with_arxiv"] = q("SELECT count(*) FROM dblp_keys WHERE arxiv_id IS NOT NULL")[0][0] | 94 | rep["dblp_with_arxiv"] = q("SELECT count(*) FROM dblp_keys WHERE arxiv_id IS NOT NULL")[0][0] | ||
| 95 | − rep["link_dblp_oa"] = dict(q("SELECT method, count(*) FROM link_dblp_oa GROUP BY 1")) | 95 | + rep["link_dblp_oa"] = {"doi": 0, "arxiv": 0, "title_year": 0, **dict(q("SELECT method, count(*) FROM link_dblp_oa GROUP BY 1"))} | ||
| 96 | rep["dblp_linked_distinct"] = q("SELECT count(DISTINCT dblp_key) FROM link_dblp_oa")[0][0] | 96 | rep["dblp_linked_distinct"] = q("SELECT count(DISTINCT dblp_key) FROM link_dblp_oa")[0][0] | ||
| 97 | rep["dblp_unlinked"] = rep["dblp_2018_2026"] - rep["dblp_linked_distinct"] | 97 | rep["dblp_unlinked"] = rep["dblp_2018_2026"] - rep["dblp_linked_distinct"] | ||
| 98 | rep["dblp_unlinked_by_type"] = dict(q("SELECT rec_type, count(*) FROM dblp_keys WHERE dblp_key NOT IN (SELECT dblp_key FROM link_dblp_oa) GROUP BY 1")) | 98 | rep["dblp_unlinked_by_type"] = dict(q("SELECT rec_type, count(*) FROM dblp_keys WHERE dblp_key NOT IN (SELECT dblp_key FROM link_dblp_oa) GROUP BY 1")) | ||
@@ -100,7 +100,7 @@ def main(): | |||||
| 100 | WHERE d.dblp_key NOT IN (SELECT dblp_key FROM link_dblp_oa)""")[0][0] | 100 | WHERE d.dblp_key NOT IN (SELECT dblp_key FROM link_dblp_oa)""")[0][0] | ||
| 101 | rep["arxiv_cs_records"] = q("SELECT count(*) FROM arxiv_keys")[0][0] | 101 | rep["arxiv_cs_records"] = q("SELECT count(*) FROM arxiv_keys")[0][0] | ||
| 102 | rep["arxiv_created_2018_2026"] = q("SELECT count(*) FROM arxiv_keys WHERE created_year BETWEEN 2018 AND 2026")[0][0] | 102 | rep["arxiv_created_2018_2026"] = q("SELECT count(*) FROM arxiv_keys WHERE created_year BETWEEN 2018 AND 2026")[0][0] | ||
| 103 | − rep["link_arxiv_oa"] = dict(q("SELECT method, count(*) FROM link_arxiv_oa GROUP BY 1")) | 103 | + rep["link_arxiv_oa"] = {"arxiv_id": 0, "doi": 0, "title_year": 0, **dict(q("SELECT method, count(*) FROM link_arxiv_oa GROUP BY 1"))} | ||
| 104 | rep["arxiv_linked_distinct"] = q("SELECT count(DISTINCT arxiv_id) FROM link_arxiv_oa")[0][0] | 104 | rep["arxiv_linked_distinct"] = q("SELECT count(DISTINCT arxiv_id) FROM link_arxiv_oa")[0][0] | ||
| 105 | rep["acl_records"] = q("SELECT count(*) FROM acl_keys")[0][0] | 105 | rep["acl_records"] = q("SELECT count(*) FROM acl_keys")[0][0] | ||
| 106 | rep["acl_2018_2026"] = q("SELECT count(*) FROM acl_keys WHERE year BETWEEN 2018 AND 2026")[0][0] | 106 | rep["acl_2018_2026"] = q("SELECT count(*) FROM acl_keys WHERE year BETWEEN 2018 AND 2026")[0][0] | ||
@@ -113,7 +113,7 @@ def main(): | |||||
| 113 | UNION | 113 | UNION | ||
| 114 | SELECT DISTINCT s.id, 'arxiv_doi' FROM arxiv_keys x JOIN oa_slim s ON x.doi = s.doi | 114 | SELECT DISTINCT s.id, 'arxiv_doi' FROM arxiv_keys x JOIN oa_slim s ON x.doi = s.doi | ||
| 115 | WHERE x.doi IS NOT NULL AND x.arxiv_id NOT IN (SELECT arxiv_id FROM link_arxiv_oa) AND s.id NOT IN (SELECT oa_id FROM oa_keys)""") | 115 | WHERE x.doi IS NOT NULL AND x.arxiv_id NOT IN (SELECT arxiv_id FROM link_arxiv_oa) AND s.id NOT IN (SELECT oa_id FROM oa_keys)""") | ||
| 116 | − rep["needed_oa_ids_second_pass"] = dict(q("SELECT why, count(*) FROM needed_oa_ids GROUP BY 1")) | 116 | + rep["needed_oa_ids_second_pass"] = {"dblp_doi": 0, "arxiv_doi": 0, **dict(q("SELECT why, count(*) FROM needed_oa_ids GROUP BY 1"))} | ||
| 117 | rep["slim_total"] = q("SELECT count(*) FROM oa_slim")[0][0] | 117 | rep["slim_total"] = q("SELECT count(*) FROM oa_slim")[0][0] | ||
| 118 | rep["slim_cs_any_2018_2026"] = q("SELECT count(*) FROM oa_slim WHERE cs_any_topic AND publication_year BETWEEN 2018 AND 2026")[0][0] | 118 | rep["slim_cs_any_2018_2026"] = q("SELECT count(*) FROM oa_slim WHERE cs_any_topic AND publication_year BETWEEN 2018 AND 2026")[0][0] | ||
| 119 | rep["seconds"] = round(time.time() - t0) | 119 | rep["seconds"] = round(time.time() - t0) | ||
added
manuscript/references_part08.bib
+199 −0
@@ -0,0 +1,199 @@ | |||||
| 1 | +% references_part08.bib — Part VIII (Scientific Knowledge Networks). Every entry verified by a single Crossref or arXiv | ||||
| 2 | +% lookup on 2026-11-03; see references_verification_part08.csv. Keys reused from references.bib (ahmed2023industry, klinger2020narrowing, ahmed2020dedemocratization, ...) are not redefined here. | ||||
| 3 | + | ||||
| 4 | +@article{merton1968matthew, | ||||
| 5 | + author = {Merton, Robert K.}, | ||||
| 6 | + title = {The {Matthew} Effect in Science}, | ||||
| 7 | + journal = {Science}, | ||||
| 8 | + year = {1968}, | ||||
| 9 | + volume = {159}, | ||||
| 10 | + number = {3810}, | ||||
| 11 | + pages = {56--63}, | ||||
| 12 | + doi = {10.1126/science.159.3810.56} | ||||
| 13 | +} | ||||
| 14 | + | ||||
| 15 | +@article{price1976cumulative, | ||||
| 16 | + author = {Price, Derek de Solla}, | ||||
| 17 | + title = {A general theory of bibliometric and other cumulative advantage processes}, | ||||
| 18 | + journal = {Journal of the American Society for Information Science}, | ||||
| 19 | + year = {1976}, | ||||
| 20 | + volume = {27}, | ||||
| 21 | + number = {5}, | ||||
| 22 | + pages = {292--306}, | ||||
| 23 | + doi = {10.1002/asi.4630270505} | ||||
| 24 | +} | ||||
| 25 | + | ||||
| 26 | +@article{glanzel2001national, | ||||
| 27 | + author = {Gl{\"a}nzel, Wolfgang}, | ||||
| 28 | + title = {National characteristics in international scientific co-authorship relations}, | ||||
| 29 | + journal = {Scientometrics}, | ||||
| 30 | + year = {2001}, | ||||
| 31 | + volume = {51}, | ||||
| 32 | + number = {1}, | ||||
| 33 | + pages = {69--115}, | ||||
| 34 | + doi = {10.1023/A:1010512628145} | ||||
| 35 | +} | ||||
| 36 | + | ||||
| 37 | +@article{leydesdorff2008core, | ||||
| 38 | + author = {Leydesdorff, Loet and Wagner, Caroline S.}, | ||||
| 39 | + title = {International collaboration in science and the formation of a core group}, | ||||
| 40 | + journal = {Journal of Informetrics}, | ||||
| 41 | + year = {2008}, | ||||
| 42 | + volume = {2}, | ||||
| 43 | + number = {4}, | ||||
| 44 | + pages = {317--325}, | ||||
| 45 | + doi = {10.1016/j.joi.2008.07.003} | ||||
| 46 | +} | ||||
| 47 | + | ||||
| 48 | +@article{adams2013fourthage, | ||||
| 49 | + author = {Adams, Jonathan}, | ||||
| 50 | + title = {The fourth age of research}, | ||||
| 51 | + journal = {Nature}, | ||||
| 52 | + year = {2013}, | ||||
| 53 | + volume = {497}, | ||||
| 54 | + number = {7451}, | ||||
| 55 | + pages = {557--560}, | ||||
| 56 | + doi = {10.1038/497557a} | ||||
| 57 | +} | ||||
| 58 | + | ||||
| 59 | +@article{ahmadpoor2017dualfrontier, | ||||
| 60 | + author = {Ahmadpoor, Mohammad and Jones, Benjamin F.}, | ||||
| 61 | + title = {The dual frontier: Patented inventions and prior scientific advance}, | ||||
| 62 | + journal = {Science}, | ||||
| 63 | + year = {2017}, | ||||
| 64 | + volume = {357}, | ||||
| 65 | + number = {6351}, | ||||
| 66 | + pages = {583--587}, | ||||
| 67 | + doi = {10.1126/science.aam9527} | ||||
| 68 | +} | ||||
| 69 | + | ||||
| 70 | +@article{wang2013longterm, | ||||
| 71 | + author = {Wang, Dashun and Song, Chaoming and Barab{\'a}si, Albert-L{\'a}szl{\'o}}, | ||||
| 72 | + title = {Quantifying Long-Term Scientific Impact}, | ||||
| 73 | + journal = {Science}, | ||||
| 74 | + year = {2013}, | ||||
| 75 | + volume = {342}, | ||||
| 76 | + number = {6154}, | ||||
| 77 | + pages = {127--132}, | ||||
| 78 | + doi = {10.1126/science.1237825} | ||||
| 79 | +} | ||||
| 80 | + | ||||
| 81 | +@article{lariviere2015oligopoly, | ||||
| 82 | + author = {Larivi{\`e}re, Vincent and Haustein, Stefanie and Mongeon, Philippe}, | ||||
| 83 | + title = {The Oligopoly of Academic Publishers in the Digital Era}, | ||||
| 84 | + journal = {PLOS ONE}, | ||||
| 85 | + year = {2015}, | ||||
| 86 | + volume = {10}, | ||||
| 87 | + number = {6}, | ||||
| 88 | + pages = {e0127502}, | ||||
| 89 | + doi = {10.1371/journal.pone.0127502} | ||||
| 90 | +} | ||||
| 91 | + | ||||
| 92 | +@article{evans2008narrowing, | ||||
| 93 | + author = {Evans, James A.}, | ||||
| 94 | + title = {Electronic Publication and the Narrowing of Science and Scholarship}, | ||||
| 95 | + journal = {Science}, | ||||
| 96 | + year = {2008}, | ||||
| 97 | + volume = {321}, | ||||
| 98 | + number = {5887}, | ||||
| 99 | + pages = {395--399}, | ||||
| 100 | + doi = {10.1126/science.1150473} | ||||
| 101 | +} | ||||
| 102 | + | ||||
| 103 | +@article{parolo2015attention, | ||||
| 104 | + author = {Parolo, Pietro Della Briotta and Pan, Raj Kumar and Ghosh, Rumi and Huberman, Bernardo A. and Kaski, Kimmo and Fortunato, Santo}, | ||||
| 105 | + title = {Attention decay in science}, | ||||
| 106 | + journal = {Journal of Informetrics}, | ||||
| 107 | + year = {2015}, | ||||
| 108 | + volume = {9}, | ||||
| 109 | + number = {4}, | ||||
| 110 | + pages = {734--745}, | ||||
| 111 | + doi = {10.1016/j.joi.2015.07.006} | ||||
| 112 | +} | ||||
| 113 | + | ||||
| 114 | +@article{jones2008multiuniversity, | ||||
| 115 | + author = {Jones, Benjamin F. and Wuchty, Stefan and Uzzi, Brian}, | ||||
| 116 | + title = {Multi-University Research Teams: Shifting Impact, Geography, and Stratification in Science}, | ||||
| 117 | + journal = {Science}, | ||||
| 118 | + year = {2008}, | ||||
| 119 | + volume = {322}, | ||||
| 120 | + number = {5905}, | ||||
| 121 | + pages = {1259--1262}, | ||||
| 122 | + doi = {10.1126/science.1158357} | ||||
| 123 | +} | ||||
| 124 | + | ||||
| 125 | +@article{milojevic2014teams, | ||||
| 126 | + author = {Milojevi{\'c}, Sta{\v{s}}a}, | ||||
| 127 | + title = {Principles of scientific research team formation and evolution}, | ||||
| 128 | + journal = {Proceedings of the National Academy of Sciences}, | ||||
| 129 | + year = {2014}, | ||||
| 130 | + volume = {111}, | ||||
| 131 | + number = {11}, | ||||
| 132 | + pages = {3984--3989}, | ||||
| 133 | + doi = {10.1073/pnas.1309723111} | ||||
| 134 | +} | ||||
| 135 | + | ||||
| 136 | +@article{gauffriau2008counting, | ||||
| 137 | + author = {Gauffriau, Marianne and Larsen, Peder Olesen and Maye, Isabelle and Roulin-Perriard, Anne and von Ins, Markus}, | ||||
| 138 | + title = {Comparisons of results of publication counting using different methods}, | ||||
| 139 | + journal = {Scientometrics}, | ||||
| 140 | + year = {2008}, | ||||
| 141 | + volume = {77}, | ||||
| 142 | + number = {1}, | ||||
| 143 | + pages = {147--176}, | ||||
| 144 | + doi = {10.1007/s11192-007-1934-2} | ||||
| 145 | +} | ||||
| 146 | + | ||||
| 147 | +@article{waltman2015counting, | ||||
| 148 | + author = {Waltman, Ludo and van Eck, Nees Jan}, | ||||
| 149 | + title = {Field-normalized citation impact indicators and the choice of an appropriate counting method}, | ||||
| 150 | + journal = {Journal of Informetrics}, | ||||
| 151 | + year = {2015}, | ||||
| 152 | + volume = {9}, | ||||
| 153 | + number = {4}, | ||||
| 154 | + pages = {872--894}, | ||||
| 155 | + doi = {10.1016/j.joi.2015.08.001} | ||||
| 156 | +} | ||||
| 157 | + | ||||
| 158 | +@article{albarran2011skewness, | ||||
| 159 | + author = {Albarr{\'a}n, Pedro and Crespo, Juan A. and Ortu{\~n}o, Ignacio and Ruiz-Castillo, Javier}, | ||||
| 160 | + title = {The skewness of science in 219 sub-fields and a number of aggregates}, | ||||
| 161 | + journal = {Scientometrics}, | ||||
| 162 | + year = {2011}, | ||||
| 163 | + volume = {88}, | ||||
| 164 | + number = {2}, | ||||
| 165 | + pages = {385--397}, | ||||
| 166 | + doi = {10.1007/s11192-011-0407-9} | ||||
| 167 | +} | ||||
| 168 | + | ||||
| 169 | +@article{barabasi1999scaling, | ||||
| 170 | + author = {Barab{\'a}si, Albert-L{\'a}szl{\'o} and Albert, R{\'e}ka}, | ||||
| 171 | + title = {Emergence of Scaling in Random Networks}, | ||||
| 172 | + journal = {Science}, | ||||
| 173 | + year = {1999}, | ||||
| 174 | + volume = {286}, | ||||
| 175 | + number = {5439}, | ||||
| 176 | + pages = {509--512}, | ||||
| 177 | + doi = {10.1126/science.286.5439.509} | ||||
| 178 | +} | ||||
| 179 | + | ||||
| 180 | +@misc{verstak2014giants, | ||||
| 181 | + author = {Verstak, Alex and Acharya, Anurag and Suzuki, Helder and Henderson, Sean and Iakhiaev, Mikhail and Lin, Cliff Chiung Yu and Shetty, Namit}, | ||||
| 182 | + title = {On the Shoulders of Giants: The Growing Impact of Older Articles}, | ||||
| 183 | + year = {2014}, | ||||
| 184 | + howpublished = {arXiv preprint arXiv:1411.0275}, | ||||
| 185 | + eprint = {1411.0275}, | ||||
| 186 | + archiveprefix = {arXiv} | ||||
| 187 | +} | ||||
| 188 | + | ||||
| 189 | + | ||||
| 190 | +@article{seglen1992skewness, | ||||
| 191 | + author = {Seglen, Per O.}, | ||||
| 192 | + title = {The skewness of science}, | ||||
| 193 | + journal = {Journal of the American Society for Information Science}, | ||||
| 194 | + year = {1992}, | ||||
| 195 | + volume = {43}, | ||||
| 196 | + number = {9}, | ||||
| 197 | + pages = {628--638}, | ||||
| 198 | + doi = {10.1002/(SICI)1097-4571(199210)43:9<628::AID-ASI5>3.0.CO;2-0} | ||||
| 199 | +} | ||||
added
manuscript/references_verification_part08.csv
+19 −0
@@ -0,0 +1,19 @@ | |||||
| 1 | +key,doi_or_arxiv,verified_via,verified_title,match | ||||
| 2 | +merton1968matthew,10.1126/science.159.3810.56,crossref,The Matthew Effect in Science,yes | ||||
| 3 | +price1976cumulative,10.1002/asi.4630270505,crossref,A general theory of bibliometric and other cumulative advantage processes,yes | ||||
| 4 | +glanzel2001national,10.1023/A:1010512628145,crossref,National characteristics in international scientific co-authorship relations,yes | ||||
| 5 | +leydesdorff2008core,10.1016/j.joi.2008.07.003,crossref,International collaboration in science and the formation of a core group,yes | ||||
| 6 | +adams2013fourthage,10.1038/497557a,crossref,The fourth age of research,yes | ||||
| 7 | +ahmadpoor2017dualfrontier,10.1126/science.aam9527,crossref,The dual frontier: Patented inventions and prior scientific advance,yes | ||||
| 8 | +wang2013longterm,10.1126/science.1237825,crossref,Quantifying Long-Term Scientific Impact,yes | ||||
| 9 | +lariviere2015oligopoly,10.1371/journal.pone.0127502,crossref,The Oligopoly of Academic Publishers in the Digital Era,yes | ||||
| 10 | +evans2008narrowing,10.1126/science.1150473,crossref,Electronic Publication and the Narrowing of Science and Scholarship,yes | ||||
| 11 | +parolo2015attention,10.1016/j.joi.2015.07.006,crossref,Attention decay in science,yes | ||||
| 12 | +jones2008multiuniversity,10.1126/science.1158357,crossref,"Multi-University Research Teams: Shifting Impact, Geography, and Stratification in Science",yes | ||||
| 13 | +milojevic2014teams,10.1073/pnas.1309723111,crossref,Principles of scientific research team formation and evolution,yes | ||||
| 14 | +gauffriau2008counting,10.1007/s11192-007-1934-2,crossref,Comparisons of results of publication counting using different methods,yes | ||||
| 15 | +waltman2015counting,10.1016/j.joi.2015.08.001,crossref,Field-normalized citation impact indicators and the choice of an appropriate counting method,yes | ||||
| 16 | +albarran2011skewness,10.1007/s11192-011-0407-9,crossref,The skewness of science in 219 sub-fields and a number of aggregates,yes | ||||
| 17 | +barabasi1999scaling,10.1126/science.286.5439.509,crossref,Emergence of Scaling in Random Networks,yes | ||||
| 18 | +verstak2014giants,arXiv:1411.0275,arxiv,On the Shoulders of Giants: The Growing Impact of Older Articles,yes (preprint) | ||||
| 19 | +seglen1992skewness,10.1002/(SICI)1097-4571(199210)43:9<628::AID-ASI5>3.0.CO;2-0,crossref,The skewness of science,yes | ||||
modified
manuscript/sections/part08_networks.tex
+698 −1
@@ -1 +1,698 @@ | |||||
| 1 | −% part08_networks — to be written (Phase 7) | 1 | +% part08_networks.tex — Part VIII, Scientific Knowledge Networks (Agent L/I, 2026-11-03). | ||
| 2 | +% Every corpus number is a macro from tables/numbers.tex or appears in a generated table (tables/make_tables.py). | ||||
| 3 | +% Result files: results/bibliometrics/*.csv (corpus v2, 2026-11-03 18:0x) and results/graph/cited_age_yearly.csv (v1, pending v2). | ||||
| 4 | + | ||||
| 5 | +\section{Scope and reading rules} | ||||
| 6 | +\label{sec:net-scope} | ||||
| 7 | + | ||||
| 8 | +This part reports what the eligible corpus shows about the people, organisations, countries and venues that | ||||
| 9 | +produce computer-science research, about the distribution of attention over the works they produce, and about | ||||
| 10 | +the sources on which that research draws. It is the empirical counterpart of research questions RQ4 and RQ6 | ||||
| 11 | +and of the networks section of the methodology (Section~\ref{sec:m-networks}), and it tests the parts of | ||||
| 12 | +hypotheses H4, H5 and H6 that the current result files make testable. The citation-flow statistics between | ||||
| 13 | +taxonomy categories, which carry the main weight of H4, depend on the classification of Part~IX and are not | ||||
| 14 | +yet available; Section~\ref{sec:net-flows-categories} is a placeholder for them. The reader should | ||||
| 15 | +therefore expect a part that is complete on collaboration, geography, institutions, venues and aggregate | ||||
| 16 | +citation structure, and provisional on knowledge flows. | ||||
| 17 | + | ||||
| 18 | +Three reading rules apply throughout. First, every indicator is computed on the eligible corpus defined in | ||||
| 19 | +Part~III (Section~\ref{sec:data-eligibility}), so that ``computer science'' means the union of DBLP-indexed, | ||||
| 20 | +OpenAlex-primary-field and arXiv \texttt{cs} works after the exclusions of the PRISMA flow, and the indicators | ||||
| 21 | +inherit the boundary decisions and the affiliation completeness of that corpus. Second, the two periods of the | ||||
| 22 | +protocol are unequal in length and in completeness: the baseline runs from January 2018 to the end of | ||||
| 23 | +November 2022, the post period from December 2022 to the snapshot of October 2026 completed by the API | ||||
| 24 | +increment, and the last year of the post period is partial for the reasons set out in | ||||
| 25 | +Section~\ref{sec:data-dates}. Tables by year therefore carry 2026 as an incomplete row, and the fixed-window | ||||
| 26 | +citation statistics of Section~\ref{sec:net-citations} are complete only up to the publication years flagged in | ||||
| 27 | +Table~\ref{tab:citation_windows}. Third, the comparison of periods is descriptive. The protocol states the | ||||
| 28 | +hypotheses with a direction so that null and opposite results can be reported as such, and several of the | ||||
| 29 | +results below are of that kind; none of them is evidence of an effect of any single event, and the language of | ||||
| 30 | +this part is deliberately that of association and composition. | ||||
| 31 | + | ||||
| 32 | +The part is organised from the smallest unit of production outward. Section~\ref{sec:net-teams} describes | ||||
| 33 | +authorship and team structure; Section~\ref{sec:net-international} the international co-authorship network; | ||||
| 34 | +Section~\ref{sec:net-geography} the geography of output; Section~\ref{sec:net-institutions} institutions and | ||||
| 35 | +sectors, including the industry share that H6 concerns; Section~\ref{sec:net-venues} publication channels and | ||||
| 36 | +venue concentration; Section~\ref{sec:net-citations} the distribution of citations and its inequality; | ||||
| 37 | +Section~\ref{sec:net-flows} the inflows of knowledge from other fields and the age of the works cited; | ||||
| 38 | +Section~\ref{sec:net-boundaries} the boundary of the database itself, through the DBLP-only records and the | ||||
| 39 | +\texttt{created\_date} diagnostic; and Section~\ref{sec:net-hypotheses} collects the verdicts on H4--H6. | ||||
| 40 | + | ||||
| 41 | +\section{Authorship and team structure} | ||||
| 42 | +\label{sec:net-teams} | ||||
| 43 | + | ||||
| 44 | +The long-run growth of team size in science is one of the most replicated findings of scientometrics: | ||||
| 45 | +\citet{wuchty2007teams} documented the shift from solo to team production across fields over five decades, | ||||
| 46 | +\citet{lariviere2015teamsize} extended the series back to 1900 and showed that the citation advantage of teams | ||||
| 47 | +has grown with it, and \citet{milojevic2014teams} proposed a generative account in which a core of small, | ||||
| 48 | +``Poisson-like'' teams coexists with an expanding tail of large ones. Computer science has long been a field of | ||||
| 49 | +small teams by the standards of the laboratory sciences, which is why the question for this corpus is not | ||||
| 50 | +whether teams grow but whether the rate of growth or the shape of the distribution changes across the 2022 | ||||
| 51 | +boundary. The hypothesis set of the protocol does not take a position on team size, and the evidence is | ||||
| 52 | +reported for its own sake and as a control for the collaboration indicators that follow. | ||||
| 53 | + | ||||
| 54 | +Table~\ref{tab:collaboration} gives the annual series, and Figure~\ref{fig:collaboration} plots the mean and the | ||||
| 55 | +tail shares. The mean number of authors per eligible work rises from | ||||
| 56 | +\VolumeYearlyTwoZeroOneEightMeanAuthors{} in 2018 to \VolumeYearlyTwoZeroTwoTwoMeanAuthors{} in 2022 and | ||||
| 57 | +\VolumeYearlyTwoZeroTwoFiveMeanAuthors{} in 2025, a monotone increase at a pace that does not visibly change at | ||||
| 58 | +the boundary; the median stays at three authors in every year, so the growth of the mean is a growth of the | ||||
| 59 | +upper tail. The tail shares in the table make the same point: the share of works with five or more authors | ||||
| 60 | +rises steadily, and the share with ten or more, although small, roughly triples over the window. The | ||||
| 61 | +single-author share falls through 2022 and then rises again, sharply in 2025 and 2026. That reversal is not a change in | ||||
| 62 | +research practice. The column of works without any resolved country shows the same U-shape, and the | ||||
| 63 | +single-author and unaffiliated shares move together because the records that enter the corpus fastest after | ||||
| 64 | +publication (preprints, repository deposits, records not yet enriched with affiliations) are also those whose | ||||
| 65 | +authorship metadata is least complete; as those records are enriched and matched to their published versions | ||||
| 66 | +in later snapshots, both shares fall. The 2025 and 2026 rows of Table~\ref{tab:collaboration} must therefore | ||||
| 67 | +be read as a snapshot of the indexing process as much as of authorship, and the pre-2024 trend is the only | ||||
| 68 | +part of the series on which a substantive statement rests. | ||||
| 69 | + | ||||
| 70 | +\begin{figure}[htbp] | ||||
| 71 | +\centering | ||||
| 72 | +\includegraphics[width=0.95\textwidth]{fig_collaboration.pdf} | ||||
| 73 | +\caption{Team size, international co-authorship and industry participation by year. Mean authors per work and | ||||
| 74 | +tail shares from \texttt{team\_size\_yearly.csv}; the international share is the ICS of Part~IV (works with | ||||
| 75 | +two or more countries among works with at least one); the company share is over works with at least one | ||||
| 76 | +typed affiliation (\texttt{industry\_share\_yearly.csv}). 2026 is incomplete.} | ||||
| 77 | +\label{fig:collaboration} | ||||
| 78 | +\end{figure} | ||||
| 79 | + | ||||
| 80 | +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3.5pt}\input{tables/tab_collaboration}\endgroup | ||||
| 81 | + | ||||
| 82 | +The multi-institution share, the fraction of works whose authors list more than one distinct institution, | ||||
| 83 | +follows the mean team size through 2022 and then declines, with the same affiliation-completeness | ||||
| 84 | +explanation as the single-author reversal: an unaffiliated record cannot be multi-institutional. Here the | ||||
| 85 | +substantive literature gives a reason to expect genuine growth. \citet{jones2008multiuniversity} showed that | ||||
| 86 | +multi-university collaboration had become the fastest-growing form of team production in the United States, | ||||
| 87 | +with a citation premium concentrated in the top-tier institutions, and \citet{adams2013fourthage} argued | ||||
| 88 | +that a ``fourth age'' of research organised around international networks of elite institutions was | ||||
| 89 | +displacing the national systems of the previous one. The corpus is consistent with continued growth of | ||||
| 90 | +multi-institution work up to the point where the affiliation data become unreliable and is silent beyond it. | ||||
| 91 | + | ||||
| 92 | +Two cautions apply to all of these shares, and they are not specific to this corpus. The first is that | ||||
| 93 | +OpenAlex author counts are taken from the authorship lists of the surviving record after deduplication | ||||
| 94 | +(Section~\ref{sec:m-dedup}); where a preprint and its published version differ in author list, the published | ||||
| 95 | +version wins, which is the appropriate choice but one that makes the count depend on the linkage. The second | ||||
| 96 | +is that very large author lists in computer science come disproportionately from a few genres, namely | ||||
| 97 | +consortium reports, shared-task overviews and large model ``technical reports'', so that the ten-plus share | ||||
| 98 | +measures the prevalence of those genres as much as the size of ordinary research teams. The disruption | ||||
| 99 | +literature attaches a substantive interpretation to team size, with \citet{wu2019disruption} reporting that | ||||
| 100 | +small teams produce more disruptive work and large teams more developmental work; that interpretation is | ||||
| 101 | +not tested here, because the disruption index requires a citation graph with a long post-publication horizon | ||||
| 102 | +that the post period does not yet provide. | ||||
| 103 | + | ||||
| 104 | +\section{International co-authorship} | ||||
| 105 | +\label{sec:net-international} | ||||
| 106 | + | ||||
| 107 | +International collaboration has grown in every field and every country for which long series exist | ||||
| 108 | +\citep{wagner2015cooperation, wagner2017collaboration}, and the growth has been described as the emergence | ||||
| 109 | +of a self-organising global network with a core group of countries that is stable over time | ||||
| 110 | +\citep{leydesdorff2008core}. The protocol's H6 predicts, against this background, that the international | ||||
| 111 | +co-authorship share of computer science does \emph{not} rise in the post period. The prediction was motivated | ||||
| 112 | +by two considerations stated in the protocol discussion: the geopolitical restriction of some | ||||
| 113 | +bilateral channels after 2020, and the shift of a growing share of the field's output into | ||||
| 114 | +preprint channels and into countries whose output is predominantly domestic. | ||||
| 115 | + | ||||
| 116 | +The international collaboration share (ICS, Section~\ref{sec:m-bibliometrics}) is computed among works with | ||||
| 117 | +at least one resolved country, so that the affiliation-completeness problem of the previous section does not | ||||
| 118 | +enter the denominator. Its yearly values are in the last column of Table~\ref{tab:collaboration} and are | ||||
| 119 | +macro-reported here for the end points: \InternationalCollabYearlyTwoZeroOneEightShareIntl{} in 2018, | ||||
| 120 | +\InternationalCollabYearlyTwoZeroTwoZeroShareIntl{} in 2020, \InternationalCollabYearlyTwoZeroTwoTwoShareIntl{} | ||||
| 121 | +in 2022, \InternationalCollabYearlyTwoZeroTwoFourShareIntl{} in 2024 and | ||||
| 122 | +\InternationalCollabYearlyTwoZeroTwoFiveShareIntl{} in 2025. The series is flat to slightly declining: it | ||||
| 123 | +peaks in 2020, is lower in every subsequent year, and the post-period values are below every baseline value. | ||||
| 124 | +The null part of H6 is therefore supported in the direction stated, and the result is in fact stronger than | ||||
| 125 | +the hypothesis, which only predicted the absence of a rise. Two qualifications prevent a stronger reading. | ||||
| 126 | +The denominator grows faster than the numerator over the window | ||||
| 127 | +(\InternationalCollabYearlyTwoZeroOneEightN{} works with a country in 2018 against | ||||
| 128 | +\InternationalCollabYearlyTwoZeroTwoFiveN{} in 2025), and the composition of that growth, examined in the next | ||||
| 129 | +section, is dominated by countries with low international shares; a constant propensity to collaborate within | ||||
| 130 | +every country would produce exactly this aggregate decline. And the share is a share of works, not of | ||||
| 131 | +authors or of citations, so that the increasing size of international teams noted by | ||||
| 132 | +\citet{wagner2017collaboration} would not register in it. | ||||
| 133 | + | ||||
| 134 | +The structure of the network behind the share is summarised in Tables~\ref{tab:country_network} and~\ref{tab:country_pairs}, which are built from the edge list of country pairs with at least fifty joint works | ||||
| 135 | +in a period. The threshold is a reporting choice (Section~\ref{sec:m-bibliometrics}); it keeps the network to | ||||
| 136 | +the pairs whose weight is robust to small linkage errors, at the cost of excluding the long tail of weak ties | ||||
| 137 | +through which, in the account of \citet{leydesdorff2008core}, peripheral countries enter the core. On this | ||||
| 138 | +restricted network, the number of edges and the number of countries both increase from the baseline to the | ||||
| 139 | +post period even though the post period is about ten months shorter, so the network densifies at the | ||||
| 140 | +threshold. The ordering of countries by strength, the sum of a country's edge weights, changes at the top: | ||||
| 141 | +the United States has the largest strength in the baseline and China in the post period, with the United | ||||
| 142 | +Kingdom third in both. The twenty strongest pairs (Table~\ref{tab:country_pairs}) show where the change comes | ||||
| 143 | +from. The China--United States pair is the heaviest edge in both periods, but its weight is lower in the post | ||||
| 144 | +period than in the baseline in absolute terms, while the pairs of China with Hong Kong, Singapore, the United | ||||
| 145 | +Kingdom and Australia rise in weight, and Hong Kong and Singapore rise in rank; the China--Hong Kong pair | ||||
| 146 | +moves from fourth to second. | ||||
| 147 | +The share of the China--United States edge in the total weight of the network falls accordingly | ||||
| 148 | +(Table~\ref{tab:country_network}). A decline in the absolute volume of joint work between the two largest | ||||
| 149 | +producers, in a period in which the output of both grew, is the most distinctive structural feature of the | ||||
| 150 | +collaboration data, and it is consistent with the bilateral-restriction channel that motivated H6; it is | ||||
| 151 | +not, on its own, evidence about the cause, and the reader should note that Hong Kong and Macau carry their | ||||
| 152 | +own country codes in OpenAlex, so that part of the apparent reorientation of China's collaboration is a | ||||
| 153 | +reorientation toward its own special administrative regions. | ||||
| 154 | + | ||||
| 155 | +Most of the rest of the pair table is continuity. The United Kingdom--United States, Germany--United | ||||
| 156 | +States and Germany--United Kingdom pairs keep approximately their weights; the India--United States pair | ||||
| 157 | +rises; the Canada--China and Canada--United States pairs fall slightly; and the France--United States and | ||||
| 158 | +Australia--United States pairs fall more and drop in rank, two movements that the table records and this | ||||
| 159 | +part does not explain. The picture is that of a core group whose composition is stable, as | ||||
| 160 | +\citet{leydesdorff2008core} and \citet{glanzel2001national} found for science as a whole, with one edge | ||||
| 161 | +weakening and a cluster of East-Asian edges strengthening. Degree-based statistics of the network | ||||
| 162 | +(density, clustering, assortativity) are not reported, because at a fixed weight threshold they measure | ||||
| 163 | +the growth of the corpus as much as the structure of collaboration; the strength ordering and the pair | ||||
| 164 | +weights, which are counts, are the statistics that survive that objection. | ||||
| 165 | + | ||||
| 166 | +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3.5pt}\input{tables/tab_country_network}\endgroup | ||||
| 167 | +\input{tables/tab_country_pairs} | ||||
| 168 | + | ||||
| 169 | +\section{The geography of production} | ||||
| 170 | +\label{sec:net-geography} | ||||
| 171 | + | ||||
| 172 | +The country-level composition of output is the part of this study where the counting convention matters | ||||
| 173 | +most, and the methodology (Section~\ref{sec:m-bibliometrics}) reports both. Under full counting a work with | ||||
| 174 | +authors in three countries is counted once for each; under fractional counting it is divided among them. | ||||
| 175 | +The two conventions give different levels, and the difference is itself informative, because a country whose | ||||
| 176 | +full-count share is much larger than its fractional share is one whose output is predominantly | ||||
| 177 | +collaborative \citep{gauffriau2008counting, waltman2015counting}. Table~\ref{tab:countries} gives the | ||||
| 178 | +fractional counts of the fifteen largest countries by year, Table~\ref{tab:country_shares} the corresponding | ||||
| 179 | +shares, Table~\ref{tab:country_concentration} the concentration of the distribution and the full-count shares | ||||
| 180 | +of the two largest producers, and Figure~\ref{fig:country_shares} the shares of the eight largest. | ||||
| 181 | + | ||||
| 182 | +\begin{figure}[htbp] | ||||
| 183 | +\centering | ||||
| 184 | +\includegraphics[width=0.95\textwidth]{fig_country_shares.pdf} | ||||
| 185 | +\caption{Country shares of eligible output under fractional counting, eight largest countries by cumulative | ||||
| 186 | +output. Each work is divided equally among its distinct author countries; works without a resolved country | ||||
| 187 | +are excluded. Source: \texttt{results/bibliometrics/countries\_yearly.csv}. 2026 is incomplete.} | ||||
| 188 | +\label{fig:country_shares} | ||||
| 189 | +\end{figure} | ||||
| 190 | + | ||||
| 191 | +The dominant movement is the rise of China's share, which is already the largest in 2018 and grows in every | ||||
| 192 | +complete year of the window, under both counting conventions. The second is the decline of the United | ||||
| 193 | +States' share, which is monotone through 2025 under both conventions and recovers only in the incomplete | ||||
| 194 | +2026 row, where the fast channels in which American output is over-represented (preprint servers) weigh more | ||||
| 195 | +than they will once the year is fully indexed. The third is the growth of India and, more sharply in | ||||
| 196 | +relative terms, Indonesia, which enters the top five by the end of the window; the fourth is the slow | ||||
| 197 | +relative decline of the large European producers, Japan and Korea, whose absolute output is flat or rising | ||||
| 198 | +(Table~\ref{tab:countries}) while the total grows. The Russian series falls after 2021 and does not | ||||
| 199 | +recover. These movements are gradual and are visible in the baseline as well as in the post period; | ||||
| 200 | +nothing in the country shares changes direction at the 2022 boundary, and the growth of China's share is | ||||
| 201 | +if anything slower in 2024 and 2025 than in 2021 and 2022. | ||||
| 202 | + | ||||
| 203 | +The China part of H6 asks whether the share of works with China-affiliated authors rises in the post period | ||||
| 204 | +\emph{in the AI categories}. The aggregate rise is established by Table~\ref{tab:country_concentration}, | ||||
| 205 | +whose column of works with a China-affiliated author is the quantity the hypothesis names; the category-specific version requires the | ||||
| 206 | +classification and is \pending{China share by category after classification}. The aggregate result is, | ||||
| 207 | +however, weaker evidence than it looks, because the rise is a continuation of a trend that predates the | ||||
| 208 | +window and is documented in every recent comparison of national output | ||||
| 209 | +\citep{bornmann2021growth}; a test of H6 that would be informative must compare the post-period | ||||
| 210 | +growth of China's share in AI categories with its growth in the rest of computer science, which is what the | ||||
| 211 | +pending analysis will do. | ||||
| 212 | + | ||||
| 213 | +Concentration across countries, measured by the Herfindahl--Hirschman index of fractional shares and by the | ||||
| 214 | +shares of the five and ten largest countries, rises through 2025 (Table~\ref{tab:country_concentration}). | ||||
| 215 | +The index is dominated by the largest share, so the rise is mostly China's rise; the top-ten share moves | ||||
| 216 | +less than the top-five share, which means that the countries ranked six to ten lose share to those ranked | ||||
| 217 | +one to five rather than to the tail. The number of countries with any output is stable. The widely | ||||
| 218 | +discussed concern that the geography of AI research is narrowing \citep{klinger2020narrowing, | ||||
| 219 | +ahmed2020dedemocratization} is a concern about institutions and compute rather than about countries, and the | ||||
| 220 | +country-level concentration measured here speaks to it only indirectly; the institutional evidence is in the | ||||
| 221 | +next section. | ||||
| 222 | + | ||||
| 223 | +The ratio of a country's full count to its fractional count, in the last two columns of | ||||
| 224 | +Table~\ref{tab:country_concentration}, exceeds one by the extent to which its works are co-authored with | ||||
| 225 | +other countries, and it is informative about collaboration intensity. China's ratio is lower than the United | ||||
| 226 | +States' in every year, which is the signature of a more domestic output: a larger fraction of | ||||
| 227 | +Chinese-affiliated works has only Chinese affiliations. Since China's share grows and the | ||||
| 228 | +United States' falls, the aggregate international share of Section~\ref{sec:net-international} is pulled | ||||
| 229 | +down by composition even if no country's propensity to collaborate changes. This is the mechanical | ||||
| 230 | +channel behind the null result on international collaboration, and it is the reason that result is | ||||
| 231 | +reported with the composition caveat rather than as a change in behaviour. | ||||
| 232 | + | ||||
| 233 | +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3.5pt}\input{tables/tab_countries}\endgroup | ||||
| 234 | +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3.5pt}\input{tables/tab_country_shares}\endgroup | ||||
| 235 | +\begingroup\renewcommand{\small}{\scriptsize}\setlength{\tabcolsep}{3pt}\input{tables/tab_country_concentration}\endgroup | ||||
| 236 | + | ||||
| 237 | +\section{Institutions and sectors} | ||||
| 238 | +\label{sec:net-institutions} | ||||
| 239 | + | ||||
| 240 | +\subsection{The sectoral mix of affiliations} | ||||
| 241 | + | ||||
| 242 | +OpenAlex types every institution as education, facility, company, government, healthcare, nonprofit, | ||||
| 243 | +funder, archive or other. Table~\ref{tab:institution_types} gives the distribution of typed affiliations over | ||||
| 244 | +these classes by year, and Table~\ref{tab:industry} the share of works with at least one company affiliation, | ||||
| 245 | +which is the statistic named by H6. The hypothesis predicts that the industry share rises in the post period | ||||
| 246 | +in AI categories. The prediction follows a line of work that has documented the growing weight of industry in | ||||
| 247 | +machine-learning research: \citet{frank2019citationgraphs} traced the shift of the AI citation graph toward | ||||
| 248 | +industry-authored and computer-science-internal sources, \citet{ahmed2023industry} reported that industry's | ||||
| 249 | +share of the largest models, of the most cited papers and of the field's PhD graduates had risen sharply in | ||||
| 250 | +the decade to 2022, and \citet{klinger2020narrowing} argued, in a preprint, that the thematic diversity of AI | ||||
| 251 | +research had narrowed as the private sector's share rose. | ||||
| 252 | + | ||||
| 253 | +The aggregate corpus does not show a rising industry share. The company share of works with a typed | ||||
| 254 | +affiliation is \IndustryShareYearlyTwoZeroOneEightShareCompany{} in 2018, rises to a maximum of | ||||
| 255 | +\IndustryShareYearlyTwoZeroTwoOneShareCompany{} in 2021, and then falls in every subsequent year to | ||||
| 256 | +\IndustryShareYearlyTwoZeroTwoFiveShareCompany{} in 2025, which is below the 2018 value; the incomplete | ||||
| 257 | +2026 row is at \IndustryShareYearlyTwoZeroTwoSixShareCompany{}. The absolute number of works with a company | ||||
| 258 | +affiliation keeps growing (\IndustryShareYearlyTwoZeroOneEightNCompany{} in 2018 against | ||||
| 259 | +\IndustryShareYearlyTwoZeroTwoFiveNCompany{} in 2025), so the falling share is a matter of the denominator | ||||
| 260 | +growing faster: the growth of the post-period corpus comes disproportionately from education-sector output, | ||||
| 261 | +and within that from the countries of Section~\ref{sec:net-geography} whose output is almost entirely | ||||
| 262 | +academic. Table~\ref{tab:institution_types} shows the same thing from the other side, with the education | ||||
| 263 | +share of affiliations rising through the window and the facility, government and company shares all giving | ||||
| 264 | +way. The aggregate part of H6 is therefore not supported; the sign is opposite to the one predicted. Whether | ||||
| 265 | +the category-specific version holds, that is, whether the company share rises within the AI categories while | ||||
| 266 | +falling in the aggregate, is exactly the kind of composition question that the aggregate cannot settle, and it | ||||
| 267 | +is \pending{industry share by category after classification}. | ||||
| 268 | + | ||||
| 269 | +The result is less at odds with the cited literature than it seems, for three reasons that matter for its | ||||
| 270 | +interpretation. \citet{ahmed2023industry} measure industry's presence at the frontier---the largest models, | ||||
| 271 | +the most cited papers, the leading conferences---and not its share of all output; a sector can dominate the | ||||
| 272 | +frontier of a field while its share of the field's total publications falls, and the two facts are compatible | ||||
| 273 | +with a frontier that is increasingly expensive to reach \citep{ahmed2020dedemocratization}. Second, the | ||||
| 274 | +OpenAlex institution type is assigned to the institution, not to the author's role, so a work by a | ||||
| 275 | +corporate research laboratory published with an academic co-author counts as both, and the share reported | ||||
| 276 | +here is the share of works with \emph{any} company affiliation, which is the most inclusive definition. | ||||
| 277 | +Third, the affiliation completeness problem of Section~\ref{sec:net-teams} affects the typed denominator: | ||||
| 278 | +records without affiliation data are excluded, and if industry-authored preprints are less often enriched | ||||
| 279 | +with affiliations than journal articles, the company share of recent years is understated. None of these | ||||
| 280 | +reasons reverses the aggregate finding, but together they confine it to what it measures. | ||||
| 281 | + | ||||
| 282 | +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3.5pt}\input{tables/tab_industry}\endgroup | ||||
| 283 | +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3.5pt}\input{tables/tab_institution_types}\endgroup | ||||
| 284 | + | ||||
| 285 | +\subsection{Institutional concentration and stability} | ||||
| 286 | + | ||||
| 287 | +The institution tables (Tables~\ref{tab:institution_concentration} and~\ref{tab:top_institutions}) list | ||||
| 288 | +institutions with at least two hundred works in a period, identified by their OpenAlex identifiers only; the | ||||
| 289 | +result files do not carry institution names, and this part refrains from resolving the identifiers by hand so | ||||
| 290 | +that every statement remains reproducible from the released artefacts. The number of institutions above the | ||||
| 291 | +threshold rises from the baseline to the post period, as does the number of works they account for, in both | ||||
| 292 | +counting conventions. The ratio of full to fractional counts among the largest institutions is close to two, | ||||
| 293 | +meaning that the average work of a large institution carries about one other institution, which is the | ||||
| 294 | +multi-institution pattern of Section~\ref{sec:net-teams} seen from the institution's side. | ||||
| 295 | + | ||||
| 296 | +Concentration among the listed institutions is low and stable: the ten largest account for a few per cent of | ||||
| 297 | +the listed fractional output and the hundred largest for less than a quarter, with both shares slightly | ||||
| 298 | +higher in the post period. This is a different picture from the one that the concern over the | ||||
| 299 | +``de-democratisation'' of AI research conveys \citep{ahmed2020dedemocratization}, and the difference is again | ||||
| 300 | +one of object: the distribution of \emph{all} computer-science output over institutions is wide, whereas the | ||||
| 301 | +distribution of the frontier of one sub-area may be narrow, and only the latter has been claimed to be | ||||
| 302 | +narrowing. The rank stability of institutions across periods is high: of the institutions listed in the | ||||
| 303 | +baseline, the great majority are also listed in the post period, and the Spearman correlation of their | ||||
| 304 | +fractional counts across the two periods, given in the note to Table~\ref{tab:institution_concentration}, is | ||||
| 305 | +close to nine tenths. Among the institutions listed in both periods, the twenty-five largest of the post period | ||||
| 306 | +(Table~\ref{tab:top_institutions}) have post-to-baseline ratios that cluster around or somewhat above the | ||||
| 307 | +ratio of the two periods' listed totals, with a few institutions growing considerably faster and two of the | ||||
| 308 | +largest full-count producers growing slower than the corpus. The institutional hierarchy of computer science, in other words, was not reshuffled in the | ||||
| 309 | +post period; it grew in place. | ||||
| 310 | + | ||||
| 311 | +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3.5pt}\input{tables/tab_institution_concentration}\endgroup | ||||
| 312 | +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3.5pt}\input{tables/tab_top_institutions}\endgroup | ||||
| 313 | + | ||||
| 314 | +\section{Publication channels and venue concentration} | ||||
| 315 | +\label{sec:net-venues} | ||||
| 316 | + | ||||
| 317 | +The venue is the unit at which the publishing system intersects the research system, and the two have been | ||||
| 318 | +changing in opposite directions in computer science for two decades: the publishing side has consolidated | ||||
| 319 | +into a small number of commercial and society publishers \citep{lariviere2015oligopoly}, while the research | ||||
| 320 | +side has moved a growing share of its first dissemination to arXiv | ||||
| 321 | +\citep{sutton2017arxivcs, lin2020arxivcs, lariviere2014arxiv}. The OpenAlex notion of source, on which the | ||||
| 322 | +tables of this section are built, follows the venue (a journal, a conference series, a book series, a | ||||
| 323 | +repository, an ebook platform) rather than the publisher, so what is measured here is concentration over | ||||
| 324 | +venues, and arXiv counts as one venue. The protocol's H5 anticipated this when it predicted that venue | ||||
| 325 | +concentration would be ``stable or lower because of preprint growth'' once the preprint source is treated | ||||
| 326 | +separately; the methodology (Section~\ref{sec:m-bibliometrics}) notes that the index with arXiv included | ||||
| 327 | +rises mechanically with preprint growth. | ||||
| 328 | + | ||||
| 329 | +Table~\ref{tab:venue_hhi} and Figure~\ref{fig:venue_concentration} give the yearly number of distinct sources, | ||||
| 330 | +the Herfindahl--Hirschman index over sources and the share of the largest source. The number of distinct | ||||
| 331 | +sources rises every complete year, from \VenueHhiYearlyTwoZeroOneEightNSources{} in 2018 to | ||||
| 332 | +\VenueHhiYearlyTwoZeroTwoFiveNSources{} in 2025, so the venue landscape is widening in the sense of variety. | ||||
| 333 | +The index, however, rises as well: from \VenueHhiYearlyTwoZeroOneEightHhi{} in 2018 to | ||||
| 334 | +\VenueHhiYearlyTwoZeroTwoFiveHhi{} in 2025 and \VenueHhiYearlyTwoZeroTwoSixHhi{} in the incomplete 2026 | ||||
| 335 | +row, and the share of the largest source, which is arXiv in every year, goes from | ||||
| 336 | +\VenueHhiYearlyTwoZeroOneEightTopOneShare{} to \VenueHhiYearlyTwoZeroTwoFiveTopOneShare{} and then to | ||||
| 337 | +\VenueHhiYearlyTwoZeroTwoSixTopOneShare{} in 2026. The index is small in absolute terms (its upper bound is | ||||
| 338 | +one, reached when a single venue carries all works), and the squared share of arXiv accounts for most of it | ||||
| 339 | +in the later years; the 2026 value is an artefact of right truncation, since preprints are indexed within | ||||
| 340 | +days and journal and conference records months later (Section~\ref{sec:data-dates}), and will fall as the | ||||
| 341 | +year completes. The concentration result is therefore the one the protocol expected in mechanism and the | ||||
| 342 | +opposite of the one it expected in sign: concentration over venues, with arXiv counted as a venue, rises | ||||
| 343 | +because of preprint growth, and the version of the index without the preprint type, which H5 names, is | ||||
| 344 | +\pending{venue HHI excluding preprints}. The qualitative conclusion that does not depend on it is that the | ||||
| 345 | +rest of the venue landscape is not concentrating: the number of venues grows, and the second-ranked sources | ||||
| 346 | +in Table~\ref{tab:top_sources} hold shares that are an order of magnitude below arXiv's. | ||||
| 347 | + | ||||
| 348 | +\begin{figure}[htbp] | ||||
| 349 | +\centering | ||||
| 350 | +\includegraphics[width=0.95\textwidth]{fig_venue_concentration.pdf} | ||||
| 351 | +\caption{Number of distinct sources per year (left) and venue concentration (right): Herfindahl--Hirschman | ||||
| 352 | +index over sources, scaled by $10^4$, and share of the largest source, which is arXiv in every year. | ||||
| 353 | +Source: \texttt{results/bibliometrics/venue\_hhi\_yearly.csv}. 2026 is incomplete and inflated by the | ||||
| 354 | +faster indexing of preprints.} | ||||
| 355 | +\label{fig:venue_concentration} | ||||
| 356 | +\end{figure} | ||||
| 357 | + | ||||
| 358 | +Tables~\ref{tab:source_types} and~\ref{tab:top_sources} describe the channels themselves. By source type, | ||||
| 359 | +journals carry about half of the listed works in both periods, conferences between a fifth and a quarter, | ||||
| 360 | +and repositories rise from about an eighth to about a fifth between the baseline and the post period, at | ||||
| 361 | +the expense of conferences, book series and ebook platforms. The twenty largest sources make the composition concrete. arXiv | ||||
| 362 | +is first in both periods and more than doubles its count; Lecture Notes in Computer Science is second in both; | ||||
| 363 | +SSRN, which is not a computer-science venue but hosts a growing number of works that OpenAlex classifies in the | ||||
| 364 | +field, moves from the lower part of the baseline list to third; Research Square and NeurIPS enter the | ||||
| 365 | +post-period list and the AAAI conference proceedings rise within it; the large open-access | ||||
| 366 | +journals (IEEE Access, Sensors, Remote Sensing) remain in the list but with lower counts in the post period | ||||
| 367 | +than in the baseline, a decline whose cause (editorial policy, reclassification by OpenAlex, or the shorter | ||||
| 368 | +period) the corpus does not identify. The | ||||
| 369 | +appearance of generalist repositories (SSRN, Research Square, OSF) among the largest computer-science | ||||
| 370 | +sources is a boundary effect of the OpenAlex topic classification rather than a change in where computer | ||||
| 371 | +scientists publish, and it is one of the reasons the strict-core sensitivity set of Part~III exists. | ||||
| 372 | + | ||||
| 373 | +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3.5pt}\input{tables/tab_venue_hhi}\endgroup | ||||
| 374 | +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3.5pt}\input{tables/tab_source_types}\endgroup | ||||
| 375 | +\begingroup\scriptsize\setlength{\tabcolsep}{3pt}\input{tables/tab_top_sources}\endgroup | ||||
| 376 | + | ||||
| 377 | +\section{The distribution of citations} | ||||
| 378 | +\label{sec:net-citations} | ||||
| 379 | + | ||||
| 380 | +\subsection{Levels, zeros and inequality within fixed windows} | ||||
| 381 | + | ||||
| 382 | +Citation distributions are heavy-tailed in every field, and the degree of skewness is remarkably similar | ||||
| 383 | +across fields once counts are normalised by the field mean \citep{seglen1992skewness, radicchi2008universality, | ||||
| 384 | +albarran2011skewness}. The mechanisms proposed for the tail are cumulative advantage, the ``Matthew effect'' | ||||
| 385 | +by which recognised work attracts recognition \citep{merton1968matthew, price1976cumulative}, and its | ||||
| 386 | +network formalisation as preferential attachment \citep{barabasi1999scaling}; the mechanism proposed for the | ||||
| 387 | +mass of the distribution is a combination of a work's intrinsic fitness and an ageing function | ||||
| 388 | +\citep{wang2013longterm}. What a cross-period comparison can measure is not these mechanisms but the shape | ||||
| 389 | +of the distribution at a fixed exposure, and the fixed windows of Section~\ref{sec:m-citations} are the device | ||||
| 390 | +that makes the shape comparable: $c^{(36)}$ counts the citations received in the publication year and the two | ||||
| 391 | +following calendar years, and is complete for publication years up to 2023. | ||||
| 392 | + | ||||
| 393 | +Table~\ref{tab:citation_windows} and Figure~\ref{fig:citation_inequality} give the yearly statistics. The mean | ||||
| 394 | +of $c^{(36)}$ rises from \CitationWindowsYearlyTwoZeroOneEightMeanCThreeSix{} for works published in 2018 to | ||||
| 395 | +\CitationWindowsYearlyTwoZeroTwoTwoMeanCThreeSix{} for 2022 and | ||||
| 396 | +\CitationWindowsYearlyTwoZeroTwoThreeMeanCThreeSix{} for 2023, the last complete year; the median is one | ||||
| 397 | +citation in most years and two in 2022, so the mean is carried by the tail. The share of works uncited at | ||||
| 398 | +three years falls from \CitationWindowsYearlyTwoZeroOneEightShareUncitedThreeSix{} for 2018 to | ||||
| 399 | +\CitationWindowsYearlyTwoZeroTwoTwoShareUncitedThreeSix{} for 2022 and rises again to | ||||
| 400 | +\CitationWindowsYearlyTwoZeroTwoThreeShareUncitedThreeSix{} for 2023. Both movements are what a growing | ||||
| 401 | +citing population produces: each publication year is cited by the following two years' output, and that output | ||||
| 402 | +grows, so later cohorts receive more citations at equal exposure \citep{bornmann2015growth}. The reversal in | ||||
| 403 | +2023 is the first sign of right truncation in the window, since the third calendar year of the 2023 cohort | ||||
| 404 | +is 2025, for which the increment of Part~III is complete but the slower channels of indexing are not; it is | ||||
| 405 | +flagged in the table and is the reason the 2024 row, whose window is formally incomplete, is not used. | ||||
| 406 | + | ||||
| 407 | +The Gini coefficient of $c^{(36)}$ is the inequality statistic named, with a deviation in window length | ||||
| 408 | +recorded in Section~\ref{sec:m-bibliometrics}, by H5. It falls from | ||||
| 409 | +\CitationWindowsYearlyTwoZeroOneEightGiniCThreeSix{} for 2018 to | ||||
| 410 | +\CitationWindowsYearlyTwoZeroTwoTwoGiniCThreeSix{} for 2022, then rises to | ||||
| 411 | +\CitationWindowsYearlyTwoZeroTwoThreeGiniCThreeSix{} for 2023; the 12-month Gini follows the same path at a | ||||
| 412 | +slightly higher level, as expected from the larger share of zeros in the shorter window. Since the share of | ||||
| 413 | +uncited works moves with the Gini, and uncited works are the main contributor to inequality in a short window | ||||
| 414 | +(Section~\ref{sec:m-bibliometrics}), the fall through 2022 is to a large extent a fall in the share of zeros | ||||
| 415 | +rather than a change in the shape of the tail, and the 2023 uptick is the truncation effect just described. | ||||
| 416 | +H5 predicts that citation inequality is higher in the post period than in the baseline \emph{for AI | ||||
| 417 | +categories}. The aggregate series can test only the aggregate statement, and for the one post-period | ||||
| 418 | +publication year with a complete window (2023) the aggregate Gini is above the 2022 value and below every | ||||
| 419 | +baseline value before 2021, so the aggregate evidence is mixed and dominated by truncation; the category | ||||
| 420 | +version of the test, which is the one the hypothesis states, is \pending{Gini by category after classification}. | ||||
| 421 | +The reader should also weigh the finding of \citet{nielsen2021inequality} that global citation inequality has | ||||
| 422 | +risen over several decades when measured on long windows across all fields; the three-year windows used here | ||||
| 423 | +measure a different quantity, early attention, whose inequality is driven by zeros, and the two results are | ||||
| 424 | +not in contradiction. | ||||
| 425 | + | ||||
| 426 | +\begin{figure}[htbp] | ||||
| 427 | +\centering | ||||
| 428 | +\includegraphics[width=0.95\textwidth]{fig_citation_inequality.pdf} | ||||
| 429 | +\caption{Fixed-window citation levels and inequality by publication year, for years with a complete | ||||
| 430 | +36-month window. Left: mean $c^{(36)}$ and the 99th percentile divided by ten. Right: Gini coefficient of | ||||
| 431 | +$c^{(36)}$ and share of works uncited at 36 months. Source: | ||||
| 432 | +\texttt{results/bibliometrics/citation\_windows\_yearly.csv}.} | ||||
| 433 | +\label{fig:citation_inequality} | ||||
| 434 | +\end{figure} | ||||
| 435 | + | ||||
| 436 | +The field-weighted citation impact supplied by OpenAlex, reported for comparison in | ||||
| 437 | +Table~\ref{tab:citation_windows}, has a mean above one in every year, which says that the eligible corpus is | ||||
| 438 | +cited above the OpenAlex world average for works of the same type, year and subfield; its median is below | ||||
| 439 | +one in every year, which says that the typical computer-science work is not. The two statements together | ||||
| 440 | +are the skewness result once more. The mean FWCI declines slowly, though not monotonically, across cohorts and the median rises through | ||||
| 441 | +2022 and collapses for 2025 and 2026, where the exposure is too short for the indicator to mean anything; | ||||
| 442 | +the methodology's reservations about FWCI (Section~\ref{sec:m-bibliometrics}) are borne out and the | ||||
| 443 | +indicator is not used further. | ||||
| 444 | + | ||||
| 445 | +\begingroup\renewcommand{\small}{\scriptsize}\setlength{\tabcolsep}{3pt}\input{tables/tab_citation_windows}\endgroup | ||||
| 446 | + | ||||
| 447 | +\subsection{The most cited works and what they reveal about the database} | ||||
| 448 | + | ||||
| 449 | +Table~\ref{tab:top_cited} lists the ten works with the largest $c^{(36)}$ in each publication year from 2018 | ||||
| 450 | +to 2025, with their total citations to date. The list is reported because research question RQ3 asks for the | ||||
| 451 | +most influential contributions and because the mandate requires that the manuscript identify them; it is | ||||
| 452 | +reported with its errors visible because the errors are instructive. Three kinds of entry appear. The first | ||||
| 453 | +is the expected one: the foundational works of the deep-learning decade are present with the citation counts | ||||
| 454 | +one would expect, among them \emph{Deep Contextualized Word Representations}, \emph{MobileNetV2} and | ||||
| 455 | +\emph{Squeeze-and-Excitation Networks} for 2018, \emph{BERT} for 2019, \emph{Momentum Contrast} and | ||||
| 456 | +\emph{A Simple Framework for Contrastive Learning} for 2020, the \emph{Vision Transformer} and the | ||||
| 457 | +\emph{Swin Transformer} for 2021, \emph{High-Resolution Image Synthesis with Latent Diffusion Models} and | ||||
| 458 | +\emph{Masked Autoencoders Are Scalable Vision Learners} for 2022, \emph{Segment Anything} and | ||||
| 459 | +\emph{YOLOv7} for 2023, and \emph{DeepSeek-R1} for 2025, together with the scientific-software and | ||||
| 460 | +bioinformatics-resource papers (SciPy, NumPy, STRING, SWISS-MODEL, iTOL, AlphaFold Protein Structure | ||||
| 461 | +Database, UniProt, KEGG) that the OpenAlex topic classification places in computer science and that are | ||||
| 462 | +among the most cited works of any field. | ||||
| 463 | + | ||||
| 464 | +The second kind of entry is a duplicate or misdated record of a canonical work: \emph{Bitcoin: A Peer-to-Peer | ||||
| 465 | +Electronic Cash System} appears as an SSRN record dated 2019 and again dated 2022, \emph{Generative | ||||
| 466 | +Adversarial Nets} as a 2023 book chapter, \emph{Batch Normalization} as a 2024 preprint, \emph{Learning | ||||
| 467 | +Multiple Layers of Features from Tiny Images} as a 2024 article, and \emph{Attention Is All You Need} as a 2025 | ||||
| 468 | +preprint. These are not errors of this study's deduplication, which merges a preprint with its published | ||||
| 469 | +version within the window (Section~\ref{sec:m-dedup}); they are distinct OpenAlex works, with their own | ||||
| 470 | +identifiers and their own citation counts, created when a reference string resolved to a new record rather | ||||
| 471 | +than to the existing one, and dated by the record rather than by the work. Their $c^{(36)}$ is large because | ||||
| 472 | +the citations of a canonical work accrue to whichever record the citing works' reference strings resolve to. | ||||
| 473 | +The third kind is the inconsistent record: entries whose window count exceeds their total count, or whose | ||||
| 474 | +total count is zero while their window count is in the thousands, including several records of the Dagstuhl | ||||
| 475 | +DROPS series and of regional journals whose titles bear no relation to the citation volume attached to | ||||
| 476 | +them. These are, to the best of the author's understanding, artefacts of OpenAlex's reference matching, | ||||
| 477 | +where a frequently cited string has been mapped to a wrong target; they are recognisable precisely because | ||||
| 478 | +the two counts disagree, and \citet{alperin2024openalex} and \citet{culbert2025openalexcoverage} document | ||||
| 479 | +related inconsistencies in OpenAlex citation data at the aggregate level. | ||||
| 480 | + | ||||
| 481 | +The consequences for this part are limited but must be stated. The aggregate citation statistics of the | ||||
| 482 | +previous subsection are insensitive to a small number of misattributed records among hundreds of | ||||
| 483 | +thousands per year, except through the maximum and the 99th percentile, which Table~\ref{tab:citation_windows} reports and | ||||
| 484 | +which should not be interpreted. The identification of the most influential works for RQ3, by contrast, | ||||
| 485 | +cannot rely on a ranked list from the database without a record-level audit, and the audit must check the | ||||
| 486 | +consistency of window and total counts, the uniqueness of the work across records, and the agreement of the | ||||
| 487 | +record's date with the work's first appearance. That audit is part of the human-review checkpoint on RQ3 and | ||||
| 488 | +is \pending{record-level audit of the top-cited lists}; until it is done, the titles above are quoted as what | ||||
| 489 | +the database returns, not as a ranking endorsed by this study. The lesson for the field-normalised scores | ||||
| 490 | +of Section~\ref{sec:m-citations} is the same as the one \citet{waltman2016review} draw for all mean-based | ||||
| 491 | +indicators: a reference class containing one record with tens of thousands of misattributed citations has a | ||||
| 492 | +mean that is wrong for every work in the class, and the normalised scores of Part~IX should be computed | ||||
| 493 | +after the exclusion of records failing the consistency check; whether the current pipeline applies that | ||||
| 494 | +exclusion is \pending{NCS computed after exclusion of inconsistent records}. | ||||
| 495 | + | ||||
| 496 | +\begingroup\footnotesize\setlength{\tabcolsep}{4pt}\input{tables/tab_top_cited}\endgroup | ||||
| 497 | + | ||||
| 498 | +\section{Knowledge inflows and the age of cited work} | ||||
| 499 | +\label{sec:net-flows} | ||||
| 500 | + | ||||
| 501 | +\subsection{Where the references of computer science point} | ||||
| 502 | +\label{sec:net-flows-fields} | ||||
| 503 | + | ||||
| 504 | +Research question RQ4 asks how citation networks and interdisciplinary knowledge flows have evolved, and | ||||
| 505 | +H4 predicts that the share of citations crossing area boundaries rises in the post period. The methodology | ||||
| 506 | +defines two levels at which flows are measured: between the taxonomy categories of this study, through the | ||||
| 507 | +flow matrices of equation~\eqref{eq:flow}, and between the corpus and the rest of the literature, through the | ||||
| 508 | +external edge set of Section~\ref{sec:m-citgraph}, whose cited works are typed by their OpenAlex field. Only | ||||
| 509 | +the second level is available at the time of writing, and only from the first version of the corpus: the | ||||
| 510 | +graph tables of \texttt{results/graph/} are being regenerated for corpus v2, and the field-flow file was not | ||||
| 511 | +present when this part was written. Figure~\ref{fig:field_inflows}, generated from the v1 file, is | ||||
| 512 | +described here qualitatively, and every quantitative statement about it is \pending{v2 graph}. | ||||
| 513 | + | ||||
| 514 | +\begin{figure}[htbp] | ||||
| 515 | +\centering | ||||
| 516 | +\includegraphics[width=0.95\textwidth]{fig_field_inflows.pdf} | ||||
| 517 | +\caption{Share of the resolved references of eligible works, by citing year, that point to works inside the | ||||
| 518 | +corpus and to works outside it by cited OpenAlex field (seven largest external fields). Generated from the | ||||
| 519 | +corpus v1 file \texttt{results/graph/field\_flows\_yearly.csv}; to be regenerated for v2.} | ||||
| 520 | +\label{fig:field_inflows} | ||||
| 521 | +\end{figure} | ||||
| 522 | + | ||||
| 523 | +The figure separates the references of each citing year into those that point inside the corpus, that is, to | ||||
| 524 | +computer-science works published from 2018 onward, and those that point outside it, by the cited work's | ||||
| 525 | +field. Its dominant feature is mechanical and must be read first: the share of references pointing inside the | ||||
| 526 | +corpus rises steeply with the citing year, and the share pointing to computer science outside the corpus | ||||
| 527 | +falls by the same amount, because the corpus starts in 2018 and a work published in 2018 cannot cite inside | ||||
| 528 | +it except at age zero, whereas a work published in 2026 has eight years of corpus to cite. The two | ||||
| 529 | +computer-science curves together are approximately flat, and their sum is the share of references that | ||||
| 530 | +stay within the field. The curves of the other fields are what the flow question is about, and they are | ||||
| 531 | +nearly flat over the window: engineering is the largest external field and declines slowly, the social | ||||
| 532 | +sciences, mathematics, medicine, psychology and decision sciences each hold a few per cent of references | ||||
| 533 | +with no visible change of direction in the post period, and medicine is the only external field whose share | ||||
| 534 | +rises slightly at the end of the window. On the v1 evidence the field-level version of H4 is not supported: | ||||
| 535 | +the boundary-crossing share of computer-science references toward other OpenAlex fields does not rise | ||||
| 536 | +after 2022, and the slow decline of the engineering share continues a trend visible in the baseline. | ||||
| 537 | + | ||||
| 538 | +This is a weaker statement than the one H4 makes, and the difference should be kept in view. The | ||||
| 539 | +hypothesis concerns boundaries \emph{within} computer science (systems toward AI, security toward AI, | ||||
| 540 | +human--computer interaction toward AI), and a field whose sub-areas converge on a common set of methods | ||||
| 541 | +may well cite less outside the field, not more, as its internal frontier absorbs the attention that used to | ||||
| 542 | +go to mathematics or engineering. The flat external shares are therefore compatible with H4 and with its | ||||
| 543 | +negation, and only the category flow matrices can decide between them. What the field-level curves do | ||||
| 544 | +establish is a boundary condition for the interdisciplinarity literature: the diversity indices of | ||||
| 545 | +Section~\ref{sec:m-diversity}, whether Rao--Stirling or Leinster--Cobbold, will be computed over a reference | ||||
| 546 | +distribution whose external component is small and stable, so that any change they detect will come from | ||||
| 547 | +the internal component. \citet{porter2009interdisciplinarity} found, for six fields over three decades, that | ||||
| 548 | +interdisciplinarity measured on references rose slowly and mostly through neighbouring fields; the | ||||
| 549 | +computer-science curves are consistent with that pattern and do not show the acceleration that the | ||||
| 550 | +foundation-model narrative would predict. | ||||
| 551 | + | ||||
| 552 | +\subsection{The age of cited work} | ||||
| 553 | +\label{sec:net-age} | ||||
| 554 | + | ||||
| 555 | +The age of the works a field cites is the simplest measure of how fast its knowledge turns over, and the | ||||
| 556 | +literature disagrees on its direction. \citet{evans2008narrowing} reported that online availability narrowed | ||||
| 557 | +citation toward fewer and more recent works; \citet{verstak2014giants}, in a preprint based on Google Scholar, | ||||
| 558 | +reported the opposite, a growing share of citations to older articles; \citet{parolo2015attention} measured | ||||
| 559 | +an accelerating decay of attention to individual papers as the volume of publication grew; and | ||||
| 560 | +\citet{chu2021slowed} argued that in very large fields the growth of publication itself ossifies the canon, | ||||
| 561 | +because new work cannot be read widely enough to displace it. Computer science is the field in which the | ||||
| 562 | +turnover is expected to be fastest, and \citet{frank2019citationgraphs} found that the AI citation graph had | ||||
| 563 | +become more self-referential and more recent-leaning over the 2010s. | ||||
| 564 | + | ||||
| 565 | +Figure~\ref{fig:cited_age} and Table~\ref{tab:cited_age} give the distribution of the age of cited works, the | ||||
| 566 | +citing year minus the cited work's publication year, for the resolved references of eligible works. The | ||||
| 567 | +cited-age file is the one graph table available at the time of writing, and it is a v1 file; the table will | ||||
| 568 | +be regenerated from the v2 file by the same script and its values are \pending{v2 graph}. On the v1 | ||||
| 569 | +distribution, the mode of citation age is two years in every citing year, the mean falls monotonically from | ||||
| 570 | +2018 to 2025, the median falls from six to five years, the share of references to works at most five years | ||||
| 571 | +old rises by more than ten points over the window, and the share to works more than ten years old falls by | ||||
| 572 | +about the same amount. The shift is steady and does not accelerate at the 2022 boundary; the post-period | ||||
| 573 | +curves in the figure continue the movement of the baseline curves. A small share of references point to | ||||
| 574 | +works dated after the citing work, which arises from preprints cited before their published version carries | ||||
| 575 | +a later date and from year-only dates; this share falls over the window as the corpus's own dates become | ||||
| 576 | +first-appearance dates, and is excluded from the age statistics. | ||||
| 577 | + | ||||
| 578 | +\begin{figure}[htbp] | ||||
| 579 | +\centering | ||||
| 580 | +\includegraphics[width=0.95\textwidth]{fig_cited_age.pdf} | ||||
| 581 | +\caption{Distribution of the age of cited works (citing year minus cited year, 0 to 30 years) for five | ||||
| 582 | +citing years. Generated from the corpus v1 file \texttt{results/graph/cited\_age\_yearly.csv}; to be | ||||
| 583 | +regenerated for v2.} | ||||
| 584 | +\label{fig:cited_age} | ||||
| 585 | +\end{figure} | ||||
| 586 | + | ||||
| 587 | +The evidence therefore sides with \citet{evans2008narrowing} and \citet{parolo2015attention} rather than | ||||
| 588 | +with \citet{verstak2014giants} for this field and this window, with one reservation that the reference | ||||
| 589 | +coverage of OpenAlex imposes. If the probability that a reference string resolves to an OpenAlex record is | ||||
| 590 | +higher for recent, DOI-bearing works than for older ones, as \citet{culbert2025openalexcoverage} report in | ||||
| 591 | +their comparison with Web of Science and Scopus, then the resolved references are biased toward youth, and a | ||||
| 592 | +constant true age distribution would appear to become younger as the resolvable share rises. The reference | ||||
| 593 | +coverage table of the methodology (declared, internal and external references by year) is the control for | ||||
| 594 | +this and is part of the pending v2 graph; the age shift is reported here as observed, not as corrected. | ||||
| 595 | + | ||||
| 596 | +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3.5pt}\input{tables/tab_cited_age}\endgroup | ||||
| 597 | + | ||||
| 598 | +\subsection{Knowledge flows between categories} | ||||
| 599 | +\label{sec:net-flows-categories} | ||||
| 600 | + | ||||
| 601 | +The flow matrices $F_t$ between the categories of the ontology, the cross-area shares $X_{\alpha,t}$ of | ||||
| 602 | +equation~\eqref{eq:cross-area} and the yearly modularities $Q_{\mathrm{cat}}$ and $Q_{\mathrm{area}}$ of | ||||
| 603 | +equation~\eqref{eq:modularity} are the statistics on which H4 turns and the ones that would show whether | ||||
| 604 | +systems, security and human--computer interaction cite the AI categories more after 2022 than before. They | ||||
| 605 | +require the primary category of every work and are produced by | ||||
| 606 | +\texttt{knowledge\_graph/02\_category\_flows.py} once the classification of Part~IX is complete. The result | ||||
| 607 | +files \texttt{category\_flows\_yearly.csv}, \texttt{cross\_area\_share\_yearly.csv} and | ||||
| 608 | +\texttt{modularity\_yearly.csv} do not exist at the time of writing, and this subsection is | ||||
| 609 | +\pending{category flows after classification}. When it is filled, it should report, for each citing area, the | ||||
| 610 | +cross-area share by year with the composition-adjusted variant of Section~\ref{sec:m-networks}, the two | ||||
| 611 | +modularities with the self-share, and a comparison of the baseline and post means with the caveat that the | ||||
| 612 | +post-period citing years have shorter reference lists in the incomplete 2026 row. | ||||
| 613 | + | ||||
| 614 | +\section{The boundary of the database} | ||||
| 615 | +\label{sec:net-boundaries} | ||||
| 616 | + | ||||
| 617 | +\subsection{What DBLP sees that the corpus does not} | ||||
| 618 | + | ||||
| 619 | +The corpus is the union of several sources resolved to OpenAlex records (Section~\ref{sec:data-linkage}), | ||||
| 620 | +and a DBLP record without an OpenAlex counterpart cannot enter it, because the citation, affiliation and | ||||
| 621 | +topic data on which every indicator of this part depends are OpenAlex's. Table~\ref{tab:dblp_only} counts | ||||
| 622 | +these records by DBLP type and year. They are a small fraction of DBLP's annual output, and their | ||||
| 623 | +composition is specific: journal articles with a DOI that OpenAlex has not indexed or has indexed under a | ||||
| 624 | +different identifier, conference papers mostly without a DOI, which are the hardest to link by title, and | ||||
| 625 | +doctoral theses, which DBLP indexes from a few national repositories and OpenAlex largely does not. The | ||||
| 626 | +``data'' type, DBLP's record of datasets and software, grows across the window and is almost entirely | ||||
| 627 | +unmatched, which is a reminder that the research outputs of computer science that are not papers are | ||||
| 628 | +outside the corpus altogether. For 2026 the conference share of the unmatched records rises sharply, which | ||||
| 629 | +is the DBLP-side manifestation of the right truncation discussed in Section~\ref{sec:data-dates}: DBLP | ||||
| 630 | +indexes a proceedings volume as a whole when it appears, OpenAlex matches it paper by paper over the | ||||
| 631 | +following months, and the gap is largest in the most recent year. The missing records bias the indicators | ||||
| 632 | +of this part toward the parts of computer science that publish with DOIs in journals and large conference | ||||
| 633 | +series, that is, away from theses, workshop papers and national venues; the direction of the bias is known | ||||
| 634 | +and its magnitude is bounded by the table. | ||||
| 635 | + | ||||
| 636 | +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3.5pt}\input{tables/tab_dblp_only}\endgroup | ||||
| 637 | + | ||||
| 638 | +\subsection{Why the creation date does not measure indexing lag} | ||||
| 639 | + | ||||
| 640 | +The research plan proposed to estimate the indexing delay of OpenAlex from the \texttt{created\_date} of | ||||
| 641 | +each record and to correct the recent months of the publication series for it. Part~III | ||||
| 642 | +(Section~\ref{sec:data-dates}) records why the proposal was abandoned; Table~\ref{tab:indexing_lag} gives | ||||
| 643 | +the evidence in annual form. For every publication year up to 2024, the median lag between publication and | ||||
| 644 | +record creation is of the order of years, it is larger for January than for June publications by almost | ||||
| 645 | +exactly five months, and more than nine tenths of the year's records were ``created'' more than 180 days | ||||
| 646 | +after publication. A genuine indexing delay cannot have that shape: it would be measured in weeks or | ||||
| 647 | +months, would not depend on the month of publication within the year, and would not place nearly all | ||||
| 648 | +records beyond the 180-day mark. The shape is that of a single creation date for the bulk of the database, | ||||
| 649 | +with the lag equal to the time between each work's publication and that date, which places the date in the | ||||
| 650 | +second half of 2025. For works published in 2025 and 2026 the field behaves differently: a large share of | ||||
| 651 | +records is created within 90 days of publication, and the median lag collapses to days by mid-2026. The | ||||
| 652 | +field therefore measures the delay only for records created after the re-ingestion, and only for them | ||||
| 653 | +would a lag profile be meaningful; a profile estimated from the whole table, or from the years that the | ||||
| 654 | +structural-change analysis needs for its pre-trend diagnostics, would be an artefact of database | ||||
| 655 | +maintenance. This is the reason the structural-change analysis truncates the series rather than correcting | ||||
| 656 | +it (Section~\ref{sec:m-truncation}), and it is the reason the only honest estimator of indexing lag is the | ||||
| 657 | +comparison of two snapshots of the same database, which the released raw snapshots make possible for a | ||||
| 658 | +future study. | ||||
| 659 | + | ||||
| 660 | +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3.5pt}\input{tables/tab_indexing_lag}\endgroup | ||||
| 661 | + | ||||
| 662 | +\section{Hypotheses H4--H6 at this stage} | ||||
| 663 | +\label{sec:net-hypotheses} | ||||
| 664 | + | ||||
| 665 | +The protocol states its hypotheses with a direction so that null and opposite results are reported as | ||||
| 666 | +such. On the evidence of this part, the verdicts are the following, each limited to the component of the | ||||
| 667 | +hypothesis that the available tables test. | ||||
| 668 | + | ||||
| 669 | +H4 (convergence) is not testable in its stated form, which concerns citation flows between areas of the | ||||
| 670 | +ontology and the modularity of the area network; those statistics await the classification. Its field-level | ||||
| 671 | +counterpart, the share of computer-science references that cross into other OpenAlex fields, is flat over the | ||||
| 672 | +window on the v1 graph (Section~\ref{sec:net-flows-fields}), which neither supports nor contradicts the | ||||
| 673 | +within-field convergence the hypothesis describes. | ||||
| 674 | + | ||||
| 675 | +H5 (concentration) has two components. The citation-inequality component is stated for AI categories and is | ||||
| 676 | +pending; its aggregate counterpart gives a Gini of three-year citations that falls through the baseline and | ||||
| 677 | +rises for the one complete post-period cohort, a movement dominated by the share of uncited works and by | ||||
| 678 | +right truncation, and therefore not interpretable as a change in concentration. The venue-concentration | ||||
| 679 | +component predicted a stable or lower index once preprints are treated separately; the index with arXiv | ||||
| 680 | +included rises, for the mechanical reason the protocol anticipated, and the index without the preprint type | ||||
| 681 | +is pending. The non-arXiv venue landscape widens. | ||||
| 682 | + | ||||
| 683 | +H6 (geography and collaboration) has three components. The international co-authorship share does not | ||||
| 684 | +rise, as predicted, and in fact declines slightly, with a composition explanation that the country shares | ||||
| 685 | +support. The China share rises in the aggregate under both counting conventions, as predicted, but as the | ||||
| 686 | +continuation of a baseline trend, and the category-specific version is pending. The industry share does | ||||
| 687 | +\emph{not} rise in the aggregate: it peaks in 2021 and declines in every post-period year, which is the | ||||
| 688 | +opposite of the predicted direction, with the category-specific version pending and with the frontier-level | ||||
| 689 | +measures of the literature it was drawn from measuring a different object. | ||||
| 690 | + | ||||
| 691 | +What the part adds beyond the hypotheses is a set of structural observations that were not predicted and | ||||
| 692 | +that the pending analyses will have to accommodate: the fall in absolute joint output between China and the | ||||
| 693 | +United States during a period in which both grew; the stability of the institutional hierarchy; the rise of | ||||
| 694 | +generalist repositories among the largest sources of computer-science records; the steady shift of | ||||
| 695 | +references toward younger work without acceleration at the boundary; and the record-level artefacts in the | ||||
| 696 | +most-cited lists, which make any ranking of influential works conditional on an audit that this part has | ||||
| 697 | +specified but not performed. | ||||
| 698 | + | ||||
modified
manuscript/tables/TABLES.json
+127 −0
@@ -106,5 +106,132 @@ | |||||
| 106 | "./results/emerging/known_set_lead_times.csv" | 106 | "./results/emerging/known_set_lead_times.csv" | ||
| 107 | ], | 107 | ], | ||
| 108 | "rows": 12 | 108 | "rows": 12 | ||
| 109 | + }, | ||||
| 110 | + { | ||||
| 111 | + "file": "tab_collaboration.tex", | ||||
| 112 | + "caption": "Team size and collaboration indicators by publication year (all eligible works; periods of the source file summed).", | ||||
| 113 | + "label": "tab:collaboration", | ||||
| 114 | + "sources": [ | ||||
| 115 | + "./results/bibliometrics/team_size_yearly.csv", | ||||
| 116 | + "./results/bibliometrics/international_collab_yearly.csv" | ||||
| 117 | + ], | ||||
| 118 | + "rows": 9 | ||||
| 119 | + }, | ||||
| 120 | + { | ||||
| 121 | + "file": "tab_institution_types.tex", | ||||
| 122 | + "caption": "Share of typed affiliations by OpenAlex institution type and year (per cent of affiliation-work pairs).", | ||||
| 123 | + "label": "tab:institution_types", | ||||
| 124 | + "sources": [ | ||||
| 125 | + "./results/bibliometrics/institution_types_yearly.csv" | ||||
| 126 | + ], | ||||
| 127 | + "rows": 9 | ||||
| 128 | + }, | ||||
| 129 | + { | ||||
| 130 | + "file": "tab_country_shares.tex", | ||||
| 131 | + "caption": "Share of fractional output of the fifteen largest countries by year (per cent).", | ||||
| 132 | + "label": "tab:country_shares", | ||||
| 133 | + "sources": [ | ||||
| 134 | + "./results/bibliometrics/countries_yearly.csv" | ||||
| 135 | + ], | ||||
| 136 | + "rows": 15 | ||||
| 137 | + }, | ||||
| 138 | + { | ||||
| 139 | + "file": "tab_country_concentration.tex", | ||||
| 140 | + "caption": "Concentration of output across countries by year, and the two largest producers under full counting.", | ||||
| 141 | + "label": "tab:country_concentration", | ||||
| 142 | + "sources": [ | ||||
| 143 | + "./results/bibliometrics/countries_yearly.csv" | ||||
| 144 | + ], | ||||
| 145 | + "rows": 9 | ||||
| 146 | + }, | ||||
| 147 | + { | ||||
| 148 | + "file": "tab_country_network.tex", | ||||
| 149 | + "caption": "The country co-authorship network by period: edges with at least fifty joint works.", | ||||
| 150 | + "label": "tab:country_network", | ||||
| 151 | + "sources": [ | ||||
| 152 | + "./results/bibliometrics/country_pairs_by_period.csv" | ||||
| 153 | + ], | ||||
| 154 | + "rows": 2 | ||||
| 155 | + }, | ||||
| 156 | + { | ||||
| 157 | + "file": "tab_country_pairs.tex", | ||||
| 158 | + "caption": "The twenty strongest country pairs by period (number of joint works).", | ||||
| 159 | + "label": "tab:country_pairs", | ||||
| 160 | + "sources": [ | ||||
| 161 | + "./results/bibliometrics/country_pairs_by_period.csv" | ||||
| 162 | + ], | ||||
| 163 | + "rows": 20 | ||||
| 164 | + }, | ||||
| 165 | + { | ||||
| 166 | + "file": "tab_institution_concentration.tex", | ||||
| 167 | + "caption": "Institutions with at least two hundred works per period: coverage and concentration (fractional counting).", | ||||
| 168 | + "label": "tab:institution_concentration", | ||||
| 169 | + "sources": [ | ||||
| 170 | + "./results/bibliometrics/top_institutions_by_period.csv" | ||||
| 171 | + ], | ||||
| 172 | + "rows": 3 | ||||
| 173 | + }, | ||||
| 174 | + { | ||||
| 175 | + "file": "tab_top_institutions.tex", | ||||
| 176 | + "caption": "The twenty-five institutions with the largest fractional output in the post period, with their baseline output.", | ||||
| 177 | + "label": "tab:top_institutions", | ||||
| 178 | + "sources": [ | ||||
| 179 | + "./results/bibliometrics/top_institutions_by_period.csv" | ||||
| 180 | + ], | ||||
| 181 | + "rows": 25 | ||||
| 182 | + }, | ||||
| 183 | + { | ||||
| 184 | + "file": "tab_source_types.tex", | ||||
| 185 | + "caption": "Distribution of works over source types among the listed sources, by period (per cent).", | ||||
| 186 | + "label": "tab:source_types", | ||||
| 187 | + "sources": [ | ||||
| 188 | + "./results/bibliometrics/top_sources_by_period.csv" | ||||
| 189 | + ], | ||||
| 190 | + "rows": 2 | ||||
| 191 | + }, | ||||
| 192 | + { | ||||
| 193 | + "file": "tab_top_sources.tex", | ||||
| 194 | + "caption": "The twenty largest sources (venues) by period, with OpenAlex source type.", | ||||
| 195 | + "label": "tab:top_sources", | ||||
| 196 | + "sources": [ | ||||
| 197 | + "./results/bibliometrics/top_sources_by_period.csv" | ||||
| 198 | + ], | ||||
| 199 | + "rows": 20 | ||||
| 200 | + }, | ||||
| 201 | + { | ||||
| 202 | + "file": "tab_cited_age.tex", | ||||
| 203 | + "caption": "Age of cited works by citing year (resolved references of eligible works; corpus version of the result file at generation time).", | ||||
| 204 | + "label": "tab:cited_age", | ||||
| 205 | + "sources": [ | ||||
| 206 | + "./results/graph/cited_age_yearly.csv" | ||||
| 207 | + ], | ||||
| 208 | + "rows": 9 | ||||
| 209 | + }, | ||||
| 210 | + { | ||||
| 211 | + "file": "tab_top_cited.tex", | ||||
| 212 | + "caption": "The ten most cited works of each publication year by 36-month window citations (c36), with total citations to date.", | ||||
| 213 | + "label": "tab:top_cited", | ||||
| 214 | + "sources": [ | ||||
| 215 | + "./results/bibliometrics/top_cited_by_year.csv" | ||||
| 216 | + ], | ||||
| 217 | + "rows": 80 | ||||
| 218 | + }, | ||||
| 219 | + { | ||||
| 220 | + "file": "tab_dblp_only.tex", | ||||
| 221 | + "caption": "DBLP records of 2018--2026 without an OpenAlex counterpart, by DBLP record type and year.", | ||||
| 222 | + "label": "tab:dblp_only", | ||||
| 223 | + "sources": [ | ||||
| 224 | + "./results/bibliometrics/dblp_only_yearly.csv" | ||||
| 225 | + ], | ||||
| 226 | + "rows": 9 | ||||
| 227 | + }, | ||||
| 228 | + { | ||||
| 229 | + "file": "tab_indexing_lag.tex", | ||||
| 230 | + "caption": "The OpenAlex \\texttt{created\\_date} relative to the publication date, by publication year.", | ||||
| 231 | + "label": "tab:indexing_lag", | ||||
| 232 | + "sources": [ | ||||
| 233 | + "./results/bibliometrics/indexing_lag.csv" | ||||
| 234 | + ], | ||||
| 235 | + "rows": 9 | ||||
| 109 | } | 236 | } | ||
| 110 | ] | 237 | ] | ||
| \ No newline at end of file | |||||
added
manuscript/tables/tab_cited_age.tex
+20 −0
@@ -0,0 +1,20 @@ | |||||
| 1 | +% generated by tables/make_tables.py from ./results/graph/cited_age_yearly.csv | ||||
| 2 | +\begin{table}[htbp]\centering\caption{Age of cited works by citing year (resolved references of eligible works; corpus version of the result file at generation time).}\label{tab:cited_age} | ||||
| 3 | +\begin{threeparttable}\small | ||||
| 4 | +\begin{tabular}{lrrrrrrr} | ||||
| 5 | +\toprule | ||||
| 6 | +\textbf{Citing year} & \textbf{References} & \textbf{Negative (\%)} & \textbf{Mean age} & \textbf{Median} & \textbf{0--2 y (\%)} & \textbf{0--5 y (\%)} & \textbf{over 10 y (\%)} \\ | ||||
| 7 | +\midrule | ||||
| 8 | +2018 & 8{,}030{,}095 & 0.87 & 9.72 & 6 & 21.0 & 44.5 & 31.8 \\ | ||||
| 9 | +2019 & 9{,}394{,}192 & 0.86 & 9.44 & 6 & 22.8 & 47.2 & 30.4 \\ | ||||
| 10 | +2020 & 10{,}724{,}215 & 0.85 & 9.11 & 6 & 24.1 & 49.6 & 29.0 \\ | ||||
| 11 | +2021 & 12{,}371{,}582 & 0.77 & 8.76 & 5 & 25.2 & 52.3 & 27.1 \\ | ||||
| 12 | +2022 & 11{,}826{,}877 & 0.49 & 8.39 & 5 & 25.4 & 54.0 & 25.1 \\ | ||||
| 13 | +2023 & 13{,}154{,}579 & 0.32 & 8.13 & 5 & 25.1 & 55.3 & 23.3 \\ | ||||
| 14 | +2024 & 13{,}790{,}112 & 0.15 & 7.91 & 5 & 25.7 & 56.2 & 21.9 \\ | ||||
| 15 | +2025 & 13{,}789{,}314 & 0.05 & 7.73 & 5 & 27.8 & 57.1 & 21.0 \\ | ||||
| 16 | +2026 & 8{,}276{,}031 & 0.00 & 7.80 & 5 & 27.3 & 56.6 & 20.9 \\ | ||||
| 17 | +\bottomrule | ||||
| 18 | +\end{tabular} | ||||
| 19 | +\begin{tablenotes}\footnotesize\item References: resolved references of eligible works of the citing year. Age is the citing year minus the cited work's publication year. Negative ages (cited work dated after the citing work: preprints cited before their published version, or year-only dates) are excluded from the age statistics and reported as a share. The 2026 row is incomplete.\end{tablenotes} | ||||
| 20 | +\end{threeparttable}\end{table} | ||||
added
manuscript/tables/tab_collaboration.tex
+20 −0
@@ -0,0 +1,20 @@ | |||||
| 1 | +% generated by tables/make_tables.py from ./results/bibliometrics/team_size_yearly.csv, ./results/bibliometrics/international_collab_yearly.csv | ||||
| 2 | +\begin{table}[htbp]\centering\caption{Team size and collaboration indicators by publication year (all eligible works; periods of the source file summed).}\label{tab:collaboration} | ||||
| 3 | +\begin{threeparttable}\small | ||||
| 4 | +\begin{tabular}{lrrrrrrrr} | ||||
| 5 | +\toprule | ||||
| 6 | +\textbf{Year} & \textbf{Works} & \textbf{Mean authors} & \textbf{Single (\%)} & \textbf{5+ (\%)} & \textbf{10+ (\%)} & \textbf{Multi-inst. (\%)} & \textbf{No country (\%)} & \textbf{Intl. (\%)} \\ | ||||
| 7 | +\midrule | ||||
| 8 | +2018 & 642{,}661 & 3.023 & 23.2 & 17.9 & 1.0 & 31.8 & 32.5 & 21.5 \\ | ||||
| 9 | +2019 & 695{,}209 & 3.141 & 21.7 & 20.0 & 1.2 & 33.1 & 30.9 & 21.7 \\ | ||||
| 10 | +2020 & 708{,}854 & 3.229 & 20.9 & 21.3 & 1.4 & 35.1 & 28.5 & 22.5 \\ | ||||
| 11 | +2021 & 710{,}953 & 3.413 & 17.2 & 24.0 & 1.6 & 38.6 & 21.5 & 21.8 \\ | ||||
| 12 | +2022 & 699{,}308 & 3.587 & 14.8 & 26.9 & 1.9 & 41.3 & 16.8 & 21.2 \\ | ||||
| 13 | +2023 & 784{,}990 & 3.642 & 15.1 & 28.4 & 2.0 & 40.7 & 17.1 & 20.7 \\ | ||||
| 14 | +2024 & 901{,}406 & 3.744 & 15.4 & 30.2 & 2.3 & 38.9 & 19.2 & 20.1 \\ | ||||
| 15 | +2025 & 1{,}065{,}569 & 3.760 & 17.6 & 30.6 & 2.7 & 35.1 & 26.2 & 20.0 \\ | ||||
| 16 | +2026 & 901{,}339 & 3.702 & 20.8 & 29.7 & 3.1 & 32.9 & 30.1 & 20.3 \\ | ||||
| 17 | +\bottomrule | ||||
| 18 | +\end{tabular} | ||||
| 19 | +\begin{tablenotes}\footnotesize\item Columns: works with one author, five or more, ten or more authors, and more than one institution. Shares are over all eligible works of the year, including works without affiliation data (column `No country'); the international share is over works with at least one resolved country (ICS, Part IV). 2026 is incomplete.\end{tablenotes} | ||||
| 20 | +\end{threeparttable}\end{table} | ||||
added
manuscript/tables/tab_country_concentration.tex
+20 −0
@@ -0,0 +1,20 @@ | |||||
| 1 | +% generated by tables/make_tables.py from ./results/bibliometrics/countries_yearly.csv | ||||
| 2 | +\begin{table}[htbp]\centering\caption{Concentration of output across countries by year, and the two largest producers under full counting.}\label{tab:country_concentration} | ||||
| 3 | +\begin{threeparttable}\small | ||||
| 4 | +\begin{tabular}{lrrrrrrrrr} | ||||
| 5 | +\toprule | ||||
| 6 | +\textbf{Year} & \textbf{Works} & \textbf{Countries} & \textbf{HHI} & \textbf{Top-5 (\%)} & \textbf{Top-10 (\%)} & \textbf{CN works (\%)} & \textbf{US works (\%)} & \textbf{CN full/frac} & \textbf{US full/frac} \\ | ||||
| 7 | +\midrule | ||||
| 8 | +2018 & 433{,}475 & 196 & 0.0717 & 48.1 & 63.3 & 21.21 & 19.24 & 1.190 & 1.257 \\ | ||||
| 9 | +2019 & 480{,}052 & 195 & 0.0763 & 48.7 & 63.7 & 23.28 & 18.92 & 1.186 & 1.259 \\ | ||||
| 10 | +2020 & 506{,}990 & 203 & 0.0772 & 49.4 & 63.6 & 23.85 & 18.67 & 1.193 & 1.269 \\ | ||||
| 11 | +2021 & 558{,}396 & 202 & 0.0827 & 51.0 & 64.5 & 25.80 & 17.17 & 1.166 & 1.274 \\ | ||||
| 12 | +2022 & 581{,}511 & 204 & 0.0900 & 53.1 & 66.2 & 27.88 & 15.64 & 1.152 & 1.273 \\ | ||||
| 13 | +2023 & 650{,}807 & 204 & 0.0936 & 54.7 & 67.1 & 28.55 & 15.00 & 1.146 & 1.274 \\ | ||||
| 14 | +2024 & 727{,}907 & 206 & 0.0997 & 56.3 & 68.2 & 29.75 & 14.83 & 1.142 & 1.268 \\ | ||||
| 15 | +2025 & 786{,}380 & 210 & 0.1005 & 56.5 & 67.7 & 30.24 & 14.13 & 1.146 & 1.284 \\ | ||||
| 16 | +2026 & 630{,}222 & 207 & 0.0955 & 55.9 & 67.1 & 28.72 & 16.23 & 1.159 & 1.252 \\ | ||||
| 17 | +\bottomrule | ||||
| 18 | +\end{tabular} | ||||
| 19 | +\begin{tablenotes}\footnotesize\item Works: fractional total of works with at least one country; Countries: number of countries with any output; HHI: Herfindahl--Hirschman index of fractional country shares; Top-5/Top-10: fractional share of the five and ten largest countries. CN/US works: share of works with at least one author in the country among works with a country (full counting); CN/US full/frac: ratio of the country's full count to its fractional count, which exceeds one by the extent to which its works are co-authored with other countries.\end{tablenotes} | ||||
| 20 | +\end{threeparttable}\end{table} | ||||
added
manuscript/tables/tab_country_network.tex
+13 −0
@@ -0,0 +1,13 @@ | |||||
| 1 | +% generated by tables/make_tables.py from ./results/bibliometrics/country_pairs_by_period.csv | ||||
| 2 | +\begin{table}[htbp]\centering\caption{The country co-authorship network by period: edges with at least fifty joint works.}\label{tab:country_network} | ||||
| 3 | +\begin{threeparttable}\small | ||||
| 4 | +\begin{tabular}{lrrrrrr} | ||||
| 5 | +\toprule | ||||
| 6 | +\textbf{Period} & \textbf{Edges} & \textbf{Countries} & \textbf{Weight} & \textbf{CN--US} & \textbf{CN--US (\%)} & \textbf{Top strength} \\ | ||||
| 7 | +\midrule | ||||
| 8 | +baseline & 1{,}603 & 122 & 960{,}955 & 55{,}438 & 5.77 & US, CN, GB \\ | ||||
| 9 | +post & 1{,}774 & 132 & 1{,}042{,}695 & 46{,}875 & 4.50 & CN, US, GB \\ | ||||
| 10 | +\bottomrule | ||||
| 11 | +\end{tabular} | ||||
| 12 | +\begin{tablenotes}\footnotesize\item Edges: country pairs with at least fifty joint works; Weight: total joint works over these edges; CN--US: weight of the China--United States edge and its share of the total; Top strength: the three countries with the largest strength (sum of edge weights). Baseline: 2018-01-01 to 2022-11-29; post: 2022-11-30 to 2026-11-02 (incomplete).\end{tablenotes} | ||||
| 13 | +\end{threeparttable}\end{table} | ||||
added
manuscript/tables/tab_country_pairs.tex
+31 −0
@@ -0,0 +1,31 @@ | |||||
| 1 | +% generated by tables/make_tables.py from ./results/bibliometrics/country_pairs_by_period.csv | ||||
| 2 | +\begin{table}[htbp]\centering\caption{The twenty strongest country pairs by period (number of joint works).}\label{tab:country_pairs} | ||||
| 3 | +\begin{threeparttable}\small | ||||
| 4 | +\begin{tabular}{lrrrr} | ||||
| 5 | +\toprule | ||||
| 6 | +\textbf{Rank} & \textbf{Pair (baseline)} & \textbf{Joint works (baseline)} & \textbf{Pair (post)} & \textbf{Joint works (post)} \\ | ||||
| 7 | +\midrule | ||||
| 8 | +1 & CN--US & 55{,}438 & CN--US & 46{,}875 \\ | ||||
| 9 | +2 & CN--GB & 22{,}078 & CN--HK & 34{,}365 \\ | ||||
| 10 | +3 & GB--US & 19{,}217 & CN--GB & 26{,}828 \\ | ||||
| 11 | +4 & CN--HK & 18{,}609 & CN--SG & 20{,}205 \\ | ||||
| 12 | +5 & AU--CN & 17{,}679 & GB--US & 18{,}829 \\ | ||||
| 13 | +6 & CA--US & 14{,}091 & AU--CN & 18{,}768 \\ | ||||
| 14 | +7 & DE--US & 13{,}715 & CA--US & 13{,}603 \\ | ||||
| 15 | +8 & CA--CN & 13{,}018 & DE--US & 13{,}013 \\ | ||||
| 16 | +9 & CN--SG & 10{,}749 & IN--US & 12{,}144 \\ | ||||
| 17 | +10 & FR--US & 9{,}074 & CA--CN & 11{,}588 \\ | ||||
| 18 | +11 & IN--US & 9{,}025 & CN--JP & 8{,}669 \\ | ||||
| 19 | +12 & DE--GB & 9{,}009 & DE--GB & 8{,}648 \\ | ||||
| 20 | +13 & AU--US & 7{,}990 & KR--US & 8{,}452 \\ | ||||
| 21 | +14 & KR--US & 7{,}680 & CN--MO & 8{,}242 \\ | ||||
| 22 | +15 & CN--JP & 7{,}554 & HK--US & 7{,}643 \\ | ||||
| 23 | +16 & IT--US & 7{,}385 & AU--US & 6{,}918 \\ | ||||
| 24 | +17 & GB--IT & 6{,}141 & FR--US & 6{,}822 \\ | ||||
| 25 | +18 & FR--GB & 6{,}010 & IN--SA & 6{,}673 \\ | ||||
| 26 | +19 & CH--US & 5{,}961 & IT--US & 6{,}652 \\ | ||||
| 27 | +20 & FR--IT & 5{,}675 & CN--KR & 6{,}252 \\ | ||||
| 28 | +\bottomrule | ||||
| 29 | +\end{tabular} | ||||
| 30 | +\begin{tablenotes}\footnotesize\item Pairs are unordered; HK and MO are OpenAlex country codes for Hong Kong and Macau and are distinct from CN in the affiliation data. The post period is incomplete.\end{tablenotes} | ||||
| 31 | +\end{threeparttable}\end{table} | ||||
added
manuscript/tables/tab_country_shares.tex
+26 −0
@@ -0,0 +1,26 @@ | |||||
| 1 | +% generated by tables/make_tables.py from ./results/bibliometrics/countries_yearly.csv | ||||
| 2 | +\begin{table}[htbp]\centering\caption{Share of fractional output of the fifteen largest countries by year (per cent).}\label{tab:country_shares} | ||||
| 3 | +\begin{threeparttable}\small | ||||
| 4 | +\begin{tabular}{lrrrrrrrrr} | ||||
| 5 | +\toprule | ||||
| 6 | +\textbf{Country} & \textbf{2018} & \textbf{2019} & \textbf{2020} & \textbf{2021} & \textbf{2022} & \textbf{2023} & \textbf{2024} & \textbf{2025} & \textbf{2026} \\ | ||||
| 7 | +\midrule | ||||
| 8 | +CN & 17.83 & 19.64 & 19.99 & 22.12 & 24.19 & 24.91 & 26.05 & 26.39 & 24.79 \\ | ||||
| 9 | +US & 15.30 & 15.02 & 14.71 & 13.47 & 12.28 & 11.78 & 11.70 & 11.00 & 12.97 \\ | ||||
| 10 | +IN & 6.61 & 5.99 & 6.72 & 7.01 & 7.81 & 8.35 & 8.73 & 9.04 & 8.32 \\ | ||||
| 11 | +ID & 2.76 & 3.30 & 3.82 & 4.41 & 4.94 & 5.97 & 6.37 & 6.79 & 6.46 \\ | ||||
| 12 | +DE & 4.49 & 4.38 & 4.17 & 4.01 & 3.86 & 3.71 & 3.47 & 3.24 & 3.36 \\ | ||||
| 13 | +GB & 3.83 & 3.68 & 3.55 & 3.32 & 3.10 & 3.01 & 2.95 & 2.75 & 2.95 \\ | ||||
| 14 | +JP & 3.64 & 3.44 & 3.01 & 2.80 & 2.70 & 2.54 & 2.43 & 2.23 & 2.11 \\ | ||||
| 15 | +FR & 3.84 & 3.40 & 2.92 & 2.86 & 2.83 & 2.58 & 2.30 & 2.07 & 1.99 \\ | ||||
| 16 | +IT & 2.47 & 2.45 & 2.35 & 2.28 & 2.29 & 2.22 & 2.13 & 2.10 & 1.95 \\ | ||||
| 17 | +KR & 2.25 & 2.18 & 2.23 & 2.17 & 2.18 & 2.07 & 2.03 & 2.09 & 2.19 \\ | ||||
| 18 | +CA & 2.27 & 2.28 & 2.25 & 2.15 & 2.05 & 1.94 & 1.82 & 1.65 & 1.73 \\ | ||||
| 19 | +BR & 2.52 & 2.38 & 2.18 & 1.94 & 1.67 & 1.62 & 1.58 & 1.64 & 1.52 \\ | ||||
| 20 | +RU & 1.97 & 2.09 & 2.31 & 2.22 & 1.75 & 1.41 & 1.24 & 1.20 & 1.35 \\ | ||||
| 21 | +ES & 2.07 & 1.97 & 1.90 & 1.72 & 1.61 & 1.53 & 1.42 & 1.32 & 1.29 \\ | ||||
| 22 | +AU & 1.81 & 1.77 & 1.74 & 1.66 & 1.51 & 1.39 & 1.38 & 1.28 & 1.38 \\ | ||||
| 23 | +\bottomrule | ||||
| 24 | +\end{tabular} | ||||
| 25 | +\begin{tablenotes}\footnotesize\item Fractional counting: each work is divided equally among its distinct author countries, so the shares of all countries sum to 100 within a year. ISO 3166-1 alpha-2 codes. 2026 is incomplete.\end{tablenotes} | ||||
| 26 | +\end{threeparttable}\end{table} | ||||
added
manuscript/tables/tab_dblp_only.tex
+20 −0
@@ -0,0 +1,20 @@ | |||||
| 1 | +% generated by tables/make_tables.py from ./results/bibliometrics/dblp_only_yearly.csv | ||||
| 2 | +\begin{table}[htbp]\centering\caption{DBLP records of 2018--2026 without an OpenAlex counterpart, by DBLP record type and year.}\label{tab:dblp_only} | ||||
| 3 | +\begin{threeparttable}\small | ||||
| 4 | +\begin{tabular}{lrrrrrrrr} | ||||
| 5 | +\toprule | ||||
| 6 | +\textbf{Year} & \textbf{article} & \textbf{book} & \textbf{data} & \textbf{incollection} & \textbf{inproceedings} & \textbf{phdthesis} & \textbf{total} & \textbf{with DOI (\%)} \\ | ||||
| 7 | +\midrule | ||||
| 8 | +2018 & 22{,}769 & 89 & 246 & 171 & 11{,}322 & 4{,}430 & 39{,}027 & 52.6 \\ | ||||
| 9 | +2019 & 29{,}350 & 115 & 471 & 30 & 11{,}656 & 4{,}162 & 45{,}784 & 59.9 \\ | ||||
| 10 | +2020 & 37{,}639 & 62 & 816 & 52 & 13{,}639 & 3{,}857 & 56{,}065 & 64.8 \\ | ||||
| 11 | +2021 & 39{,}300 & 80 & 972 & 47 & 15{,}423 & 4{,}222 & 60{,}044 & 63.1 \\ | ||||
| 12 | +2022 & 46{,}967 & 70 & 1{,}335 & 33 & 19{,}180 & 4{,}133 & 71{,}718 & 62.9 \\ | ||||
| 13 | +2023 & 56{,}159 & 88 & 1{,}773 & 21 & 18{,}807 & 3{,}648 & 80{,}496 & 67.7 \\ | ||||
| 14 | +2024 & 66{,}262 & 60 & 2{,}471 & 23 & 24{,}391 & 3{,}343 & 96{,}550 & 66.8 \\ | ||||
| 15 | +2025 & 53{,}124 & 44 & 3{,}835 & 41 & 26{,}050 & 2{,}099 & 85{,}193 & 61.3 \\ | ||||
| 16 | +2026 & 16{,}280 & 21 & 2{,}765 & 0 & 18{,}840 & 398 & 38{,}304 & 47.3 \\ | ||||
| 17 | +\bottomrule | ||||
| 18 | +\end{tabular} | ||||
| 19 | +\begin{tablenotes}\footnotesize\item These records are in DBLP but were not linked to any OpenAlex work by DOI, arXiv identifier or normalised title (Part IV). They are not in the eligible corpus; the table bounds what DBLP-based studies would see that this corpus does not.\end{tablenotes} | ||||
| 20 | +\end{threeparttable}\end{table} | ||||
added
manuscript/tables/tab_indexing_lag.tex
+20 −0
@@ -0,0 +1,20 @@ | |||||
| 1 | +% generated by tables/make_tables.py from ./results/bibliometrics/indexing_lag.csv | ||||
| 2 | +\begin{table}[htbp]\centering\caption{The OpenAlex \texttt{created\_date} relative to the publication date, by publication year.}\label{tab:indexing_lag} | ||||
| 3 | +\begin{threeparttable}\small | ||||
| 4 | +\begin{tabular}{lrrrrr} | ||||
| 5 | +\toprule | ||||
| 6 | +\textbf{Year} & \textbf{Works} & \textbf{Lag, Jan. (d)} & \textbf{Lag, June (d)} & \textbf{Within 90 d (\%)} & \textbf{After 180 d (\%)} \\ | ||||
| 7 | +\midrule | ||||
| 8 | +2018 & 642{,}661 & 2839 & 2678 & 4.2 & 95.2 \\ | ||||
| 9 | +2019 & 695{,}209 & 2474 & 2313 & 4.6 & 94.6 \\ | ||||
| 10 | +2020 & 708{,}854 & 2109 & 1946 & 5.3 & 94.0 \\ | ||||
| 11 | +2021 & 710{,}953 & 1743 & 1577 & 6.1 & 93.1 \\ | ||||
| 12 | +2022 & 699{,}308 & 1378 & 1212 & 7.1 & 92.1 \\ | ||||
| 13 | +2023 & 784{,}990 & 1013 & 847 & 6.7 & 92.7 \\ | ||||
| 14 | +2024 & 901{,}406 & 648 & 480 & 6.0 & 93.4 \\ | ||||
| 15 | +2025 & 1{,}065{,}569 & 282 & 121 & 36.4 & 41.0 \\ | ||||
| 16 | +2026 & 901{,}339 & 112 & 2 & 80.5 & 9.0 \\ | ||||
| 17 | +\bottomrule | ||||
| 18 | +\end{tabular} | ||||
| 19 | +\begin{tablenotes}\footnotesize\item Lag is created\_date minus publication date; the two lag columns give the median lag in days for works published in January and in June of the year; the last two columns give the shares of the year's works whose record was created within 90 days and after 180 days of publication. The near-constant decline of the median by one month per publication month in 2018--2024 identifies a single creation date for most records (a re-ingestion), not an indexing delay; see Part III.\end{tablenotes} | ||||
| 20 | +\end{threeparttable}\end{table} | ||||
added
manuscript/tables/tab_institution_concentration.tex
+14 −0
@@ -0,0 +1,14 @@ | |||||
| 1 | +% generated by tables/make_tables.py from ./results/bibliometrics/top_institutions_by_period.csv | ||||
| 2 | +\begin{table}[htbp]\centering\caption{Institutions with at least two hundred works per period: coverage and concentration (fractional counting).}\label{tab:institution_concentration} | ||||
| 3 | +\begin{threeparttable}\small | ||||
| 4 | +\begin{tabular}{lrrrrrr} | ||||
| 5 | +\toprule | ||||
| 6 | +\textbf{Period} & \textbf{Institutions} & \textbf{Fractional works} & \textbf{Full-count works} & \textbf{Top-10 (\%)} & \textbf{Top-50 (\%)} & \textbf{Top-100 (\%)} \\ | ||||
| 7 | +\midrule | ||||
| 8 | +baseline & 3{,}774 & 2{,}106{,}169 & 4{,}041{,}943 & 4.21 & 14.16 & 22.10 \\ | ||||
| 9 | +post & 4{,}302 & 2{,}381{,}805 & 4{,}584{,}088 & 4.53 & 14.55 & 22.31 \\ | ||||
| 10 | +both periods & 3{,}385 & 2{,}057{,}448 & 3{,}933{,}963 & & & \\ | ||||
| 11 | +\bottomrule | ||||
| 12 | +\end{tabular} | ||||
| 13 | +\begin{tablenotes}\footnotesize\item Institutions: number with at least two hundred works in the period; Top-10/50/100: fractional share of the largest listed institutions relative to the listed institutions, not to all works. The row `both periods' counts the institutions present in both lists (its work columns are their baseline totals); the Spearman rank correlation of their fractional counts across periods is 0.893.\end{tablenotes} | ||||
| 14 | +\end{threeparttable}\end{table} | ||||
added
manuscript/tables/tab_institution_types.tex
+20 −0
@@ -0,0 +1,20 @@ | |||||
| 1 | +% generated by tables/make_tables.py from ./results/bibliometrics/institution_types_yearly.csv | ||||
| 2 | +\begin{table}[htbp]\centering\caption{Share of typed affiliations by OpenAlex institution type and year (per cent of affiliation-work pairs).}\label{tab:institution_types} | ||||
| 3 | +\begin{threeparttable}\small | ||||
| 4 | +\begin{tabular}{lrrrrrrrrr} | ||||
| 5 | +\toprule | ||||
| 6 | +\textbf{Institution type} & \textbf{2018} & \textbf{2019} & \textbf{2020} & \textbf{2021} & \textbf{2022} & \textbf{2023} & \textbf{2024} & \textbf{2025} & \textbf{2026} \\ | ||||
| 7 | +\midrule | ||||
| 8 | +education & 74.33 & 74.03 & 74.14 & 73.80 & 74.09 & 74.85 & 76.24 & 77.85 & 78.16 \\ | ||||
| 9 | +facility & 11.20 & 11.11 & 10.79 & 10.73 & 10.66 & 10.22 & 9.50 & 8.60 & 8.13 \\ | ||||
| 10 | +company & 4.88 & 5.13 & 5.25 & 5.41 & 5.27 & 5.29 & 4.94 & 4.74 & 5.03 \\ | ||||
| 11 | +government & 5.29 & 5.23 & 5.20 & 5.26 & 5.21 & 5.00 & 4.74 & 4.28 & 4.07 \\ | ||||
| 12 | +healthcare & 1.55 & 1.77 & 1.95 & 2.12 & 2.18 & 2.13 & 2.19 & 2.32 & 2.37 \\ | ||||
| 13 | +nonprofit & 1.58 & 1.56 & 1.55 & 1.54 & 1.47 & 1.36 & 1.32 & 1.22 & 1.21 \\ | ||||
| 14 | +other & 0.65 & 0.67 & 0.65 & 0.67 & 0.66 & 0.66 & 0.62 & 0.58 & 0.61 \\ | ||||
| 15 | +funder & 0.32 & 0.31 & 0.29 & 0.31 & 0.31 & 0.33 & 0.31 & 0.29 & 0.28 \\ | ||||
| 16 | +archive & 0.19 & 0.19 & 0.18 & 0.17 & 0.16 & 0.15 & 0.14 & 0.12 & 0.14 \\ | ||||
| 17 | +\bottomrule | ||||
| 18 | +\end{tabular} | ||||
| 19 | +\begin{tablenotes}\footnotesize\item A work with affiliations of several types counts once under each type; shares therefore describe the mix of affiliation types, not of works. Types follow the OpenAlex institution ontology (education, facility, company, government, healthcare, nonprofit, funder, archive, other).\end{tablenotes} | ||||
| 20 | +\end{threeparttable}\end{table} | ||||
added
manuscript/tables/tab_source_types.tex
+13 −0
@@ -0,0 +1,13 @@ | |||||
| 1 | +% generated by tables/make_tables.py from ./results/bibliometrics/top_sources_by_period.csv | ||||
| 2 | +\begin{table}[htbp]\centering\caption{Distribution of works over source types among the listed sources, by period (per cent).}\label{tab:source_types} | ||||
| 3 | +\begin{threeparttable}\small | ||||
| 4 | +\begin{tabular}{lrrrrrrr} | ||||
| 5 | +\toprule | ||||
| 6 | +\textbf{Period} & \textbf{Sources} & \textbf{Works} & \textbf{journal (\%)} & \textbf{conference (\%)} & \textbf{repository (\%)} & \textbf{series (\%)} & \textbf{ebook (\%)} \\ | ||||
| 7 | +\midrule | ||||
| 8 | +baseline & 4{,}151 & 2{,}482{,}218 & 49.4 & 23.6 & 13.4 & 9.3 & 4.3 \\ | ||||
| 9 | +post & 4{,}330 & 2{,}754{,}321 & 47.6 & 20.3 & 20.9 & 7.7 & 3.6 \\ | ||||
| 10 | +\bottomrule | ||||
| 11 | +\end{tabular} | ||||
| 12 | +\begin{tablenotes}\footnotesize\item Source types are OpenAlex's (series = book series; ebook = ebook platform). The listed sources are those retained by the bibliometric script for each period; works whose primary source is not listed are excluded from the denominators.\end{tablenotes} | ||||
| 13 | +\end{threeparttable}\end{table} | ||||
added
manuscript/tables/tab_top_cited.tex
+94 −0
@@ -0,0 +1,94 @@ | |||||
| 1 | +% generated by tables/make_tables.py from ./results/bibliometrics/top_cited_by_year.csv | ||||
| 2 | +\begin{longtable}{lrrrr} | ||||
| 3 | +\caption{The ten most cited works of each publication year by 36-month window citations (c36), with total citations to date.}\label{tab:top_cited}\\ | ||||
| 4 | +\toprule | ||||
| 5 | +\textbf{Year} & \textbf{Rk} & \textbf{Title (truncated)} & \textbf{c36} & \textbf{Total} \\ | ||||
| 6 | +\midrule | ||||
| 7 | +\endfirsthead | ||||
| 8 | +\toprule | ||||
| 9 | +\textbf{Year} & \textbf{Rk} & \textbf{Title (truncated)} & \textbf{c36} & \textbf{Total} \\ | ||||
| 10 | +\midrule | ||||
| 11 | +\endhead | ||||
| 12 | +2018 & 1 & AI-Assisted Pipeline for Dynamic Generati\dots & 5{,}855 & 44{,}705 \\ | ||||
| 13 | +2018 & 2 & Deep Contextualized Word Representations & 4{,}791 & 11{,}541 \\ | ||||
| 14 | +2018 & 3 & MobileNetV2: Inverted Residuals and Linea\dots & 3{,}514 & 27{,}247 \\ | ||||
| 15 | +2018 & 4 & YOLOv3: An Incremental Improvement & 3{,}187 & 5{,}512 \\ | ||||
| 16 | +2018 & 5 & Squeeze-and-Excitation Networks & 3{,}107 & 30{,}519 \\ | ||||
| 17 | +2018 & 6 & STRING v11: protein-protein association n\dots & 2{,}624 & 17{,}675 \\ | ||||
| 18 | +2018 & 7 & SWISS-MODEL: homology modelling of protei\dots & 2{,}454 & 13{,}067 \\ | ||||
| 19 | +2018 & 8 & Encoder-Decoder with Atrous Separable Con\dots & 2{,}432 & 18{,}734 \\ | ||||
| 20 | +2018 & 9 & MapReduce: Simplified Data Processing on\dots & 2{,}186 & 2{,}948 \\ | ||||
| 21 | +2018 & 10 & UniProt: a worldwide hub of protein knowl\dots & 2{,}078 & 7{,}679 \\ | ||||
| 22 | +2019 & 1 & BERT: Pre-training of Deep Bidirectional\dots & 19{,}296 & 31{,}944 \\ | ||||
| 23 | +2019 & 2 & Bitcoin: A Peer-to-Peer Electronic Cash S\dots & 7{,}534 & 13{,}922 \\ | ||||
| 24 | +2019 & 3 & Squeeze-and-Excitation Networks & 5{,}976 & 12{,}104 \\ | ||||
| 25 | +2019 & 4 & The REDCap consortium: Building an intern\dots & 3{,}835 & 23{,}807 \\ | ||||
| 26 | +2019 & 5 & Particle Swarm Optimization & 3{,}767 & 6{,}270 \\ | ||||
| 27 | +2019 & 6 & Welcome to the Tidyverse & 2{,}788 & 21{,}504 \\ | ||||
| 28 | +2019 & 7 & Interactive Tree Of Life (iTOL) v4: recen\dots & 2{,}754 & 5{,}925 \\ | ||||
| 29 | +2019 & 8 & A Style-Based Generator Architecture for\dots & 2{,}727 & 11{,}051 \\ | ||||
| 30 | +2019 & 9 & The EMBL-EBI search and sequence analysis\dots & 2{,}262 & 4{,}162 \\ | ||||
| 31 | +2019 & 10 & Quantum supremacy using a programmable su\dots & 2{,}260 & 7{,}695 \\ | ||||
| 32 | +2020 & 1 & SciPy 1.0: fundamental algorithms for sci\dots & 10{,}506 & 37{,}925 \\ | ||||
| 33 | +2020 & 2 & Array programming with NumPy & 5{,}512 & 17{,}096 \\ | ||||
| 34 | +2020 & 3 & Array programming with NumPy & 5{,}137 & 23{,}207 \\ | ||||
| 35 | +2020 & 4 & A Mathematical Theory of Evidence & 5{,}066 & 11{,}711 \\ | ||||
| 36 | +2020 & 5 & Evaluation: from precision, recall and F-\dots & 3{,}906 & 4{,}311 \\ | ||||
| 37 | +2020 & 6 & Momentum Contrast for Unsupervised Visual\dots & 3{,}802 & 12{,}652 \\ | ||||
| 38 | +2020 & 7 & A Simple Framework for Contrastive Learni\dots & 3{,}360 & 6{,}894 \\ | ||||
| 39 | +2020 & 8 & BART: Denoising Sequence-to-Sequence Pre-\dots & 2{,}915 & 8{,}244 \\ | ||||
| 40 | +2020 & 9 & End-to-End Object Detection with Transfor\dots & 2{,}877 & 16{,}417 \\ | ||||
| 41 | +2020 & 10 & UniProt: the universal protein knowledgeb\dots & 2{,}641 & 6{,}342 \\ | ||||
| 42 | +2021 & 1 & HISTORIAE, History of Socio-Cultural Tran\dots & 12{,}201 & 0 \\ | ||||
| 43 | +2021 & 2 & An Image is Worth 16x16 Words: Transforme\dots & 9{,}465 & 449 \\ | ||||
| 44 | +2021 & 3 & Swin Transformer: Hierarchical Vision Tra\dots & 9{,}391 & 33{,}262 \\ | ||||
| 45 | +2021 & 4 & Numerical optimization & 9{,}351 & 13{,}724 \\ | ||||
| 46 | +2021 & 5 & Comparative Analysis of Defect Detection\dots & 6{,}845 & 8 \\ | ||||
| 47 | +2021 & 6 & Interactive Tree Of Life (iTOL) v5: an on\dots & 4{,}291 & 11{,}124 \\ | ||||
| 48 | +2021 & 7 & AlphaFold Protein Structure Database: mas\dots & 3{,}084 & 7{,}770 \\ | ||||
| 49 | +2021 & 8 & LAMMPS - a flexible simulation tool for p\dots & 2{,}697 & 12{,}382 \\ | ||||
| 50 | +2021 & 9 & Review of deep learning: concepts, CNN ar\dots & 2{,}452 & 7{,}842 \\ | ||||
| 51 | +2021 & 10 & seaborn: statistical data visualization & 2{,}401 & 7{,}190 \\ | ||||
| 52 | +2022 & 1 & Bitcoin: A Peer-to-Peer Electronic Cash S\dots & 10{,}307 & 11{,}148 \\ | ||||
| 53 | +2022 & 2 & High-Resolution Image Synthesis with Late\dots & 6{,}719 & 16{,}051 \\ | ||||
| 54 | +2022 & 3 & Masked Autoencoders Are Scalable Vision L\dots & 4{,}278 & 7{,}977 \\ | ||||
| 55 | +2022 & 4 & A ConvNet for the 2020s & 3{,}671 & 8{,}300 \\ | ||||
| 56 | +2022 & 5 & KEGG for taxonomy-based analysis of pathw\dots & 3{,}498 & 5{,}752 \\ | ||||
| 57 | +2022 & 6 & UniProt: the Universal Protein Knowledgeb\dots & 3{,}250 & 6{,}940 \\ | ||||
| 58 | +2022 & 7 & DAVID: a web server for functional enrich\dots & 3{,}170 & 6{,}142 \\ | ||||
| 59 | +2022 & 8 & Discernment and Social Learning as a Comp\dots & 3{,}077 & 4{,}202 \\ | ||||
| 60 | +2022 & 9 & The STRING database in 2023: protein-prot\dots & 2{,}781 & 9{,}363 \\ | ||||
| 61 | +2022 & 10 & BNAI, NO-TOKEN, and MIND-UNITY: Pillars o\dots & 2{,}465 & 4{,}203 \\ | ||||
| 62 | +2023 & 1 & Exploiting Generative AI to Scale up Inte\dots & 72{,}130 & 76{,}658 \\ | ||||
| 63 | +2023 & 2 & Generative Adversarial Nets & 19{,}230 & 19{,}272 \\ | ||||
| 64 | +2023 & 3 & Aion Framework: Dimensional Emergence of\dots & 13{,}333 & 13{,}690 \\ | ||||
| 65 | +2023 & 4 & Suspending OpenMP Tasks on Asynchronous E\dots & 12{,}891 & 12{,}935 \\ | ||||
| 66 | +2023 & 5 & YOLOv7: Trainable Bag-of-Freebies Sets Ne\dots & 10{,}586 & 12{,}390 \\ | ||||
| 67 | +2023 & 6 & Segment Anything & 7{,}864 & 10{,}910 \\ | ||||
| 68 | +2023 & 7 & ChatGPT for good? On opportunities and ch\dots & 4{,}227 & 7{,}222 \\ | ||||
| 69 | +2023 & 8 & Swin-Unet: Unet-Like Pure Transformer for\dots & 3{,}841 & 4{,}853 \\ | ||||
| 70 | +2023 & 9 & 3D Gaussian Splatting for Real-Time Radia\dots & 3{,}644 & 5{,}862 \\ | ||||
| 71 | +2023 & 10 & LLaMA: Open and Efficient Foundation Lang\dots & 3{,}629 & 3{,}837 \\ | ||||
| 72 | +2024 & 1 & Learning Multiple Layers of Features from\dots & 23{,}341 & 23{,}395 \\ | ||||
| 73 | +2024 & 2 & The effects of back-projection variants i\dots & 14{,}915 & 0 \\ | ||||
| 74 | +2024 & 3 & Batch Normalization: Accelerating Deep Ne\dots & 14{,}214 & 14{,}214 \\ | ||||
| 75 | +2024 & 4 & A Multi-Modal Distributed Real-Time IoT S\dots & 14{,}039 & 14{,}040 \\ | ||||
| 76 | +2024 & 5 & On a Method to Measure Supervised Multicl\dots & 12{,}586 & 12{,}586 \\ | ||||
| 77 | +2024 & 6 & Targeted Branching for the Maximum Indepe\dots & 5{,}183 & 5{,}183 \\ | ||||
| 78 | +2024 & 7 & DETRs Beat YOLOs on Real-time Object Dete\dots & 4{,}773 & 4{,}548 \\ | ||||
| 79 | +2024 & 8 & Kaldi Speech Recognition Toolkit & 4{,}599 & 4{,}609 \\ | ||||
| 80 | +2024 & 9 & YOLOv9: Learning What You Want to Learn U\dots & 4{,}486 & 4{,}486 \\ | ||||
| 81 | +2024 & 10 & Reading digits in natural images with uns\dots & 4{,}149 & 4{,}149 \\ | ||||
| 82 | +2025 & 1 & Attention Is All You Need & 24{,}486 & 24{,}487 \\ | ||||
| 83 | +2025 & 2 & Detecting Functionality-Specific Vulnerab\dots & 15{,}245 & 15{,}246 \\ | ||||
| 84 | +2025 & 3 & On Assessing ML Model Robustness: A Metho\dots & 4{,}701 & 4{,}702 \\ | ||||
| 85 | +2025 & 4 & Fast Kd-Trees for the Kullback-Leibler Di\dots & 2{,}355 & 2{,}354 \\ | ||||
| 86 | +2025 & 5 & Identifying Resilient Communities in Road\dots & 1{,}542 & 1{,}543 \\ | ||||
| 87 | +2025 & 6 & DeepSeek-R1 incentivizes reasoning in LLM\dots & 1{,}099 & 1{,}099 \\ | ||||
| 88 | +2025 & 7 & A Comprehensive Overview of Large Languag\dots & 1{,}097 & 1{,}097 \\ | ||||
| 89 | +2025 & 8 & U-Prithvi: Integrating a Foundation Model\dots & 977 & 977 \\ | ||||
| 90 | +2025 & 9 & Accurate predictions on small data with a\dots & 974 & 974 \\ | ||||
| 91 | +2025 & 10 & The rise and potential of large language\dots & 914 & 914 \\ | ||||
| 92 | +\bottomrule | ||||
| 93 | +\multicolumn{5}{p{0.95\linewidth}}{\footnotesize As recorded in OpenAlex (snapshot 2026-10-14 plus increment). Several entries are duplicate or misdated records of canonical works, or records whose citation counts are inconsistent with their total (c36 larger than the total, or a total of zero); they are kept because the table documents what the database returns, and are discussed in the text.}\\ | ||||
| 94 | +\end{longtable} | ||||
added
manuscript/tables/tab_top_institutions.tex
+36 −0
@@ -0,0 +1,36 @@ | |||||
| 1 | +% generated by tables/make_tables.py from ./results/bibliometrics/top_institutions_by_period.csv | ||||
| 2 | +\begin{table}[htbp]\centering\caption{The twenty-five institutions with the largest fractional output in the post period, with their baseline output.}\label{tab:top_institutions} | ||||
| 3 | +\begin{threeparttable}\small | ||||
| 4 | +\begin{tabular}{lrrrrr} | ||||
| 5 | +\toprule | ||||
| 6 | +\textbf{OpenAlex id} & \textbf{Full, base} & \textbf{Frac., base} & \textbf{Full, post} & \textbf{Frac., post} & \textbf{Ratio} \\ | ||||
| 7 | +\midrule | ||||
| 8 | +I99065089 & 22{,}538 & 11{,}029 & 31{,}113 & 13{,}895 & 1.26 \\ | ||||
| 9 | +I76130692 & 15{,}313 & 7{,}602 & 25{,}969 & 12{,}544 & 1.65 \\ | ||||
| 10 | +I183067930 & 16{,}978 & 9{,}536 & 24{,}692 & 12{,}218 & 1.28 \\ | ||||
| 11 | +I19820366 & 38{,}352 & 10{,}567 & 42{,}050 & 11{,}779 & 1.11 \\ | ||||
| 12 | +I150229711 & 16{,}047 & 9{,}158 & 18{,}433 & 10{,}376 & 1.13 \\ | ||||
| 13 | +I204983213 & 14{,}253 & 8{,}281 & 18{,}650 & 10{,}317 & 1.25 \\ | ||||
| 14 | +I82880672 & 13{,}870 & 7{,}918 & 17{,}887 & 9{,}770 & 1.23 \\ | ||||
| 15 | +I76569877 & 12{,}412 & 6{,}441 & 18{,}377 & 9{,}479 & 1.47 \\ | ||||
| 16 | +I125839683 & 11{,}397 & 6{,}820 & 15{,}546 & 8{,}943 & 1.31 \\ | ||||
| 17 | +I149594827 & 13{,}182 & 7{,}577 & 15{,}300 & 8{,}675 & 1.14 \\ | ||||
| 18 | +I139759216 & 14{,}042 & 8{,}257 & 16{,}158 & 8{,}604 & 1.04 \\ | ||||
| 19 | +I170215575 & 11{,}019 & 7{,}936 & 12{,}517 & 8{,}589 & 1.08 \\ | ||||
| 20 | +I20231570 & 12{,}392 & 6{,}346 & 17{,}984 & 8{,}509 & 1.34 \\ | ||||
| 21 | +I126520041 & 11{,}204 & 5{,}945 & 15{,}955 & 8{,}437 & 1.42 \\ | ||||
| 22 | +I17145004 & 10{,}813 & 6{,}570 & 13{,}170 & 7{,}533 & 1.15 \\ | ||||
| 23 | +I157773358 & 9{,}630 & 4{,}894 & 14{,}118 & 7{,}065 & 1.44 \\ | ||||
| 24 | +I172675005 & 12{,}130 & 5{,}790 & 16{,}869 & 6{,}985 & 1.21 \\ | ||||
| 25 | +I47720641 & 10{,}577 & 5{,}454 & 12{,}918 & 6{,}979 & 1.28 \\ | ||||
| 26 | +I876193797 & 6{,}565 & 4{,}684 & 9{,}448 & 6{,}842 & 1.46 \\ | ||||
| 27 | +I74973139 & 13{,}757 & 8{,}054 & 12{,}960 & 6{,}766 & 0.84 \\ | ||||
| 28 | +I24943067 & 7{,}191 & 3{,}567 & 13{,}299 & 6{,}656 & 1.87 \\ | ||||
| 29 | +I87445476 & 9{,}354 & 5{,}397 & 12{,}007 & 6{,}540 & 1.21 \\ | ||||
| 30 | +I37461747 & 11{,}153 & 5{,}687 & 13{,}095 & 6{,}497 & 1.14 \\ | ||||
| 31 | +I1294671590 & 37{,}021 & 7{,}872 & 30{,}409 & 6{,}388 & 0.81 \\ | ||||
| 32 | +I145286018 & 3{,}558 & 2{,}604 & 9{,}510 & 6{,}324 & 2.43 \\ | ||||
| 33 | +\bottomrule | ||||
| 34 | +\end{tabular} | ||||
| 35 | +\begin{tablenotes}\footnotesize\item Full and fractional counts in the baseline and post periods; Ratio is the post-to-baseline ratio of fractional counts. Institution names are not stored in the result file; the identifiers resolve at https://openalex.org/I<id>. The post period is about ten months shorter than the baseline, so a ratio below the corpus-wide ratio does not indicate decline.\end{tablenotes} | ||||
| 36 | +\end{threeparttable}\end{table} | ||||
added
manuscript/tables/tab_top_sources.tex
+34 −0
@@ -0,0 +1,34 @@ | |||||
| 1 | +% generated by tables/make_tables.py from ./results/bibliometrics/top_sources_by_period.csv | ||||
| 2 | +\begin{longtable}{lrrrrrr} | ||||
| 3 | +\caption{The twenty largest sources (venues) by period, with OpenAlex source type.}\label{tab:top_sources}\\ | ||||
| 4 | +\toprule | ||||
| 5 | +\textbf{Rank} & \textbf{Source (baseline)} & \textbf{Type} & \textbf{Works} & \textbf{Source (post)} & \textbf{Type } & \textbf{Works } \\ | ||||
| 6 | +\midrule | ||||
| 7 | +\endfirsthead | ||||
| 8 | +\toprule | ||||
| 9 | +\textbf{Rank} & \textbf{Source (baseline)} & \textbf{Type} & \textbf{Works} & \textbf{Source (post)} & \textbf{Type } & \textbf{Works } \\ | ||||
| 10 | +\midrule | ||||
| 11 | +\endhead | ||||
| 12 | +1 & arXiv (Cornell University) & repos. & 140{,}278 & arXiv (Cornell University) & repos. & 333{,}020 \\ | ||||
| 13 | +2 & Lecture notes in computer s\dots & series & 103{,}497 & Lecture notes in computer s\dots & series & 95{,}018 \\ | ||||
| 14 | +3 & IEEE Access & journal & 61{,}511 & SSRN Electronic Journal & repos. & 46{,}714 \\ | ||||
| 15 | +4 & Sensors & journal & 35{,}050 & IEEE Access & journal & 46{,}436 \\ | ||||
| 16 | +5 & Advances in intelligent sys\dots & series & 28{,}956 & Lecture notes in networks a\dots & series & 29{,}711 \\ | ||||
| 17 | +6 & Communications in computer\dots & series & 23{,}599 & Communications in computer\dots & series & 25{,}012 \\ | ||||
| 18 | +7 & Springer eBooks & ebook & 22{,}660 & Sensors & journal & 21{,}109 \\ | ||||
| 19 | +8 & Remote Sensing & journal & 20{,}294 & Springer eBooks & ebook & 18{,}470 \\ | ||||
| 20 | +9 & HAL (Le Centre pour la Comm\dots & repos. & 19{,}978 & CRC Press eBooks & ebook & 17{,}187 \\ | ||||
| 21 | +10 & Journal of Physics Conferen\dots & journal & 16{,}076 & HAL (Le Centre pour la Comm\dots & repos. & 14{,}376 \\ | ||||
| 22 | +11 & Apress eBooks & ebook & 16{,}005 & Research Square & repos. & 14{,}088 \\ | ||||
| 23 | +12 & Lecture notes in networks a\dots & series & 14{,}913 & Expert Systems with Applica\dots & journal & 13{,}159 \\ | ||||
| 24 | +13 & CRC Press eBooks & ebook & 11{,}465 & Proceedings of the AAAI Con\dots & conf. & 12{,}982 \\ | ||||
| 25 | +14 & SSRN Electronic Journal & repos. & 10{,}887 & neural information processi\dots & conf. & 12{,}520 \\ | ||||
| 26 | +15 & Lecture notes in electrical\dots & series & 10{,}301 & IEEE Internet of Things Jou\dots & journal & 11{,}927 \\ | ||||
| 27 | +16 & IEEE International Geoscien\dots & conf. & 10{,}197 & IEEE International Conferen\dots & conf. & 11{,}826 \\ | ||||
| 28 | +17 & Routledge eBooks & ebook & 10{,}161 & Remote Sensing & journal & 11{,}695 \\ | ||||
| 29 | +18 & Symmetry & journal & 9{,}334 & Scientific Reports & journal & 11{,}680 \\ | ||||
| 30 | +19 & IEEE International Conferen\dots & conf. & 8{,}847 & Lecture notes in electrical\dots & series & 10{,}207 \\ | ||||
| 31 | +20 & Proceedings of the AAAI Con\dots & conf. & 8{,}407 & AIP conference proceedings & journal & 9{,}506 \\ | ||||
| 32 | +\bottomrule | ||||
| 33 | +\multicolumn{7}{p{0.95\linewidth}}{\footnotesize Source names are OpenAlex display names, truncated; types abbreviated (repos. = repository, conf. = conference, series = book series, ebook = ebook platform).}\\ | ||||
| 34 | +\end{longtable} | ||||
modified
protocol/amendments.csv
+1 −0
@@ -5,3 +5,4 @@ A-002,2026-11-03,1,"Records whose primary source is a generic deposit platform ( | |||||
| 5 | A-003,2026-11-03,2,"LLM rating budget for taxonomy validation fixed at 25 USD (two raters: claude-haiku-5-5 and claude-sonnet-5-5, structured outputs); knowledge-graph extraction budget fixed separately when designed","mandate §7 requires agent-based validation with human checkpoints; the PI is the third rater on 200 works",executing agent (pending PI) | 5 | A-003,2026-11-03,2,"LLM rating budget for taxonomy validation fixed at 25 USD (two raters: claude-haiku-5-5 and claude-sonnet-5-5, structured outputs); knowledge-graph extraction budget fixed separately when designed","mandate §7 requires agent-based validation with human checkpoints; the PI is the third rater on 200 works",executing agent (pending PI) | ||
| 6 | A-004,2026-11-03,3,"Knowledge-graph extraction from abstracts of the high-priority set with claude-sonnet-5-5 (structured outputs, provenance spans, machine verification of spans); budget 150 USD","mandate §6.4 requires provenance, confidence and verification status on every inferred relationship; abstract-level evidence is labelled as such",executing agent (pending PI) | 6 | A-004,2026-11-03,3,"Knowledge-graph extraction from abstracts of the high-priority set with claude-sonnet-5-5 (structured outputs, provenance spans, machine verification of spans); budget 150 USD","mandate §6.4 requires provenance, confidence and verification status on every inferred relationship; abstract-level evidence is labelled as such",executing agent (pending PI) | ||
| 7 | A-005,2026-11-03,1,"Exclusion code E7 redefined as the generic-deposit exclusion (A-002); the CS penumbra is a membership flag, not an exclusion code","Part IV writer found the protocol and code labels inconsistent",executing agent (pending PI) | 7 | A-005,2026-11-03,1,"Exclusion code E7 redefined as the generic-deposit exclusion (A-002); the CS penumbra is a membership flag, not an exclusion code","Part IV writer found the protocol and code labels inconsistent",executing agent (pending PI) | ||
| 8 | +A-006,2026-11-03,1,"CS-core rule: an arXiv primary category cs.* is a sufficient membership signal (previously required a CS topic as well, which excluded the arXiv-linked works recovered by the second pass); PRISMA partition core + penumbra + neither asserted","Agent K found 6,263 post-exclusion records in neither set and the clause unreachable for second-pass works",executing agent (pending PI) | ||||
added
reports/critic/critique_parts_02_03_04_appendices.md
+287 −0
@@ -0,0 +1,287 @@ | |||||
| 1 | +# Critique — Parts II, III, IV and Appendices A, B, C, E, H | ||||
| 2 | + | ||||
| 3 | +Agent K (Scientific Critic), 2026-11-03. Artefacts: `manuscript/sections/part02_evolution.tex`, `part03_data.tex`, | ||||
| 4 | +`part04_methodology.tex`; `manuscript/appendices/appA_taxonomy.tex`, `appB_search_and_sources.tex`, | ||||
| 5 | +`appC_derivations.tex`, `appE_data_dictionary.tex`, `appH_reproducibility.tex`. Machine-readable issue list: | ||||
| 6 | +`reports/critic/issues_parts_02_03_04_appendices.csv` (71 issues: 8 blocking, 20 major, 43 minor; issue ids K-nn are | ||||
| 7 | +cited below). Nothing in the manuscript was edited. | ||||
| 8 | + | ||||
| 9 | +What was checked. Every statement about the pipeline was read against the code (`ingestion/link_sources.py`, | ||||
| 10 | +`systematic_review/define_corpus.py`, `systematic_review/linkage_sample.py`, `taxonomy/classify.py`, | ||||
| 11 | +`taxonomy/build_ontology.py`, `taxonomy/validate_sample.py`, `taxonomy/ontology.yaml`, `bibliometrics/01–04`, | ||||
| 12 | +`econometrics/structural_change.py`, `econometrics/run_structural_change.py`, `experiments/emerging_detection.py`, | ||||
| 13 | +`experiments/known_set.py`, `knowledge_graph/01–03`, `embeddings/embed_corpus.py`, `embeddings/semantic_atlas.py`, | ||||
| 14 | +`literature_synthesis/select_landmarks.py`, `tables/make_numbers.py`), against the result files | ||||
| 15 | +(`data/metadata/prisma_counts.json`, `linkage_report.json`, `linkage_sample_summary.json`, `linkage_sample.csv`, | ||||
| 16 | +`api_increment_ledger.json`, `manuscript/tables/numbers.tex`, `reports/*.md`, `protocol/*`), and against the | ||||
| 17 | +bibliography (`references_all.bib`, merge report; two cited abstracts fetched from Crossref). The manuscript was compiled | ||||
| 18 | +from a copy in `/tmp` to test the macro discipline. Every formula of Part IV and Appendix C was re-derived (ITS design and | ||||
| 19 | +HAC, placebo rank, Bai–Perron dynamic programme with BIC/LWZ and trimming, PELT penalty, BOCPD conjugate updates and the | ||||
| 20 | +R(0)=H identity, Gini rank form and its bounds, Leinster–Cobbold/Rao–Stirling identity at q=2, directed modularity, | ||||
| 21 | +Krippendorff α with MASI, the score rule and tie-break, the filtration argument for the detector); all are correct as | ||||
| 22 | +stated, and the only mathematical defects are the two statements marked K-42/K-43 (first-date and precision rules that do | ||||
| 23 | +not match the implemented code) and the minor items K-90–K-93. | ||||
| 24 | + | ||||
| 25 | +Verdict summary. | ||||
| 26 | + | ||||
| 27 | +| File | Verdict | Blocking | Major | Minor | | ||||
| 28 | +|---|---|---|---|---| | ||||
| 29 | +| part02_evolution.tex | ACCEPT WITH FIXES | 0 | 4 | 7 | | ||||
| 30 | +| part03_data.tex | REJECT (resubmit after fixes) | 4 | 4 | 9 | | ||||
| 31 | +| part04_methodology.tex | REJECT (resubmit after fixes) | 3 | 8 | 13 | | ||||
| 32 | +| appA_taxonomy.tex | ACCEPT WITH FIXES | 0 | 0 | 2 | | ||||
| 33 | +| appB_search_and_sources.tex | ACCEPT WITH FIXES (one compile-blocking macro) | 1 | 3 | 3 | | ||||
| 34 | +| appC_derivations.tex | ACCEPT WITH FIXES | 0 | 1 | 3 | | ||||
| 35 | +| appE_data_dictionary.tex | ACCEPT WITH FIXES | 0 | 0 | 2 | | ||||
| 36 | +| appH_reproducibility.tex | ACCEPT WITH FIXES | 0 | 0 | 4 | | ||||
| 37 | + | ||||
| 38 | +"REJECT" means the part must go back to its writer because it asserts things about the study's own data or code that | ||||
| 39 | +are false, not that the design is unsound; most of Part IV is accurate and unusually candid, and the rejection rests on a | ||||
| 40 | +handful of statements that contradict the implementation. | ||||
| 41 | + | ||||
| 42 | +--- | ||||
| 43 | + | ||||
| 44 | +## 1. Blocking issues (all files, in order of consequence) | ||||
| 45 | + | ||||
| 46 | +**B1 — The manuscript does not compile (K-20, K-40, K-80).** `\LinkNeededOaIdsSecondPassArxivDoi{}` is used in Part III | ||||
| 47 | +l.288, Part IV l.235 and Appendix B l.182 but is not defined in `tables/numbers.tex`, because | ||||
| 48 | +`linkage_report.json["needed_oa_ids_second_pass"]` contains only the key `dblp_doi` (1,605). A fresh `latexmk` run on a copy | ||||
| 49 | +stops at Part III l.288 with "Undefined control sequence". The `main.pdf` in the repository (17:59) predates the current | ||||
| 50 | +`numbers.tex` (18:11). Fix: emit the macro with value 0 from `make_numbers.py` (or write in prose that no arXiv-DOI | ||||
| 51 | +identifier was needed in this run) and recompile before any further review. | ||||
| 52 | + | ||||
| 53 | +**B2 — The PRISMA flow does not add up (K-21, K-47).** `after_exclusions` = 10,519,027 but core 7,110,289 + penumbra | ||||
| 54 | +3,402,475 = 10,512,764. Part III's Figure caption (l.539) states that "the core and the penumbra partition the records that | ||||
| 55 | +survive the exclusions"; 6,263 surviving records are neither. By construction (`define_corpus.py` l.71–72) these are | ||||
| 56 | +records with `cs_any = false` that are not DBLP-linked, i.e. second-pass works recovered through arXiv DOIs. This exposes a | ||||
| 57 | +substantive point about the membership rule: its third clause is `cs_any ∧ arxiv_cs_primary`, so an author-declared `cs.*` | ||||
| 58 | +preprint can never enter the core unless OpenAlex already gave the work a CS topic; Part IV l.236–240 ("the union of that set | ||||
| 59 | +with what DBLP and arXiv call computer science") overstates what the rule does. Required: report the third class in the | ||||
| 60 | +PRISMA figure and text, explain it, and either reword Part IV or amend the rule (with a logged amendment). | ||||
| 61 | + | ||||
| 62 | +**B3 — The identification count is mislabelled across Parts II/III and Appendix B (K-04, K-22, K-81, K-82).** | ||||
| 63 | +`PrismaIdentifiedOpenalexCsTopic…PassOne` = 16,592,966 is computed on `oa_keys`, which is built over the union of both | ||||
| 64 | +snapshot passes; the first pass retained 15,490,159 records (RUNBOOK, Appendix H, `slim_cs_any_2018_2026`). Part III l.191–193 | ||||
| 65 | +("The filter yields … in the first pass"), Part II l.49 ("works classified in computer science"), Appendix B l.111 ("about | ||||
| 66 | +20 GB for … records") and Appendix B l.195–200 (which says the PRISMA counts were generated from the first pass and leaves the | ||||
| 67 | +two-pass total pending) are all wrong in the same direction: about 1.10 M of the quoted works carry no CS topic. Fix in | ||||
| 68 | +`define_corpus.py`/`make_numbers.py` (record the real pass-1 count) and in the four passages. | ||||
| 69 | + | ||||
| 70 | +**B4 — Part III contradicts the citation code (K-23).** l.356–358: preprint citations "are not added to the published node, | ||||
| 71 | +a known under-count". `bibliometrics/03_citation_impact.py` (CTE `CY`, `UNION ALL … ON e.preprint_work_id = c.work_id`) adds | ||||
| 72 | +the merged preprint's `counts_by_year` to the canonical node, and Appendix E l.604–606 says so. Every c12/c36/Gini figure | ||||
| 73 | +in `numbers.tex` was produced with the merge. Correct Part III and state the merge in Part IV §Fixed citation windows. | ||||
| 74 | + | ||||
| 75 | +**B5 — Part IV's first-date equation is not the implemented rule (K-42, K-43).** Eq. (eq:first-date) takes the minimum of | ||||
| 76 | +the three dates; `define_corpus.py` l.58–60 drops a 1-January publication date from the minimum whenever a preprint or | ||||
| 77 | +arXiv date exists (Appendix B l.511–514 and Appendix E l.566 describe the code correctly). The precision flag (eq. prec) is | ||||
| 78 | +likewise mis-stated (the code sets `month` when such a date exists), and the sentence "it does not depend on the period, so | ||||
| 79 | +it cannot manufacture a break" is unsupported: the rescue depends on arXiv linkage, which grows over the window, and Part | ||||
| 80 | +III itself reports year-only shares between 18 % and 28 % varying by source and type. The consequence is not cosmetic: a | ||||
| 81 | +year-only 2022 record with a 2023 arXiv date is dated 2023 and changes period. | ||||
| 82 | + | ||||
| 83 | +**B6 — Garbled paragraph in Part IV (K-41).** l.766–777 splice two contradictory drafts ("the two diversity indices are not | ||||
| 84 | +yet produced by a script … their values in Part IX are / The yearly Rao–Stirling … are computed by | ||||
| 85 | +`bibliometrics/04_diversity_cagr.py` … / until the computation is added and audited"), leaving an unfinished sentence. The | ||||
| 86 | +script exists; rewrite the paragraph. | ||||
| 87 | + | ||||
| 88 | +--- | ||||
| 89 | + | ||||
| 90 | +## 2. Part II — `part02_evolution.tex` — ACCEPT WITH FIXES | ||||
| 91 | + | ||||
| 92 | +The historical synthesis is well sourced and the section on why the date is descriptive (l.291–305) is exactly the | ||||
| 93 | +posture the mandate requires. Four factual problems and a few superlatives remain. | ||||
| 94 | + | ||||
| 95 | +Major. | ||||
| 96 | +- K-01 (l.62): Bornmann & Mutz (2015) is misreported. Their abstract (Crossref, retrieved today) gives three phases of | ||||
| 97 | + growth in cited references — under 1 % to the mid-18th century, 2–3 % up to the inter-war period, 8–9 % to 2010. The | ||||
| 98 | + manuscript's "roughly three per cent per year with a doubling time of about a quarter of a century" is the pre-1940s | ||||
| 99 | + phase presented as the long-run estimate. Report 8–9 % (doubling ≈ 9 years) or attribute the 2–3 % to its phase. | ||||
| 100 | +- K-02 (l.151, l.55): "a majority of computer-science preprints in their sample could not be matched to a published | ||||
| 101 | + version" (Lin et al. 2020). I could not retrieve the abstract (neither Crossref nor OpenAlex carries it) and therefore | ||||
| 102 | + cannot certify the claim either way; the paper is generally quoted as finding roughly two thirds of arXiv CS preprints | ||||
| 103 | + published. Verify against the full text before this sentence stays; Part III l.369–370 uses the same reference without | ||||
| 104 | + a direction and is safe. | ||||
| 105 | +- K-03 (l.153): "the seasonal component … is modelled separately for the baseline and the research period". It is not: | ||||
| 106 | + `_design()` fits eleven month dummies common to both periods. Either state the common seasonality or implement and | ||||
| 107 | + report interacted dummies. | ||||
| 108 | +- K-04 (l.49): see B3. | ||||
| 109 | + | ||||
| 110 | +Minor: unbalanced parenthesis and a preprint citation for a work that is published and cited under a second key in | ||||
| 111 | +Part III (K-05); three unsupported superlatives (K-06 "faster than any previous software product", K-07 "the first | ||||
| 112 | +systems language", K-09 "informative about the mechanism, not merely about measurement"); Kepler-conjecture dating (K-08); | ||||
| 113 | +Ott et al. 2022 called a preprint although the bib entry is Nature Communications (K-10); the venue-only classification | ||||
| 114 | +promised for Appendix D does not exist in `classify.py` (K-11). | ||||
| 115 | + | ||||
| 116 | +Checked and found correct: the eight areas and leaf counts (9/6/4/2/6/5/5/3), the seven specialisation edges, the | ||||
| 117 | +thirteen keyword-driven categories and the build-time check (`build_ontology.py` l.157–163), the equation (eq:p2-score) | ||||
| 118 | +(matches `score_row`), the timeline table's preprint/report labels, FIPS 203/204/205 (August 2024), BIG-bench (>200 | ||||
| 119 | +tasks), Sevilla et al. (≈6-month doubling). | ||||
| 120 | + | ||||
| 121 | +## 3. Part III — `part03_data.tex` — REJECT | ||||
| 122 | + | ||||
| 123 | +The part is the best-written account of a bibliographic pipeline I have reviewed in this project, and its integrity | ||||
| 124 | +section (l.792–893) is a model. It is rejected because, as it stands, it misdescribes its own data at four points (B1–B4) | ||||
| 125 | +and is stale against result files that already exist. | ||||
| 126 | + | ||||
| 127 | +Blocking: K-20 (compile), K-21 (partition), K-22 (first-pass count), K-23 (citation merge). | ||||
| 128 | + | ||||
| 129 | +Major. | ||||
| 130 | +- K-24 (l.664–665): the truncation sensitivity is said to end in December 2025; the driver and `numbers.tex` use | ||||
| 131 | + March and August 2026 (Part IV l.1047 agrees with the code). | ||||
| 132 | +- K-25 (l.313–316): "the sample has not been drawn". `data/metadata/linkage_sample.csv` (450 pairs) and | ||||
| 133 | + `linkage_sample_summary.json` exist: DOI stratum 235/250 pass the automatic check (0.94), title–year 200/200. The 15 | ||||
| 134 | + DOI failures include a book-level DOI matched to a chapter and retitled versions ("Textual Entailment and Token | ||||
| 135 | + Probability…" vs "Textual Entailment is not a Better Bias Metric…"), which matters because Part IV assumes the DOI | ||||
| 136 | + stratum is error-free (K-48). Report the automatic rates now, as the text promises to do. | ||||
| 137 | +- K-27 (l.443, 600–602): three `\pending{}` markers for macros that exist in `numbers.tex` (E7 sequential 473,549; | ||||
| 138 | + month precision 5,703,718; year precision 1,406,571). | ||||
| 139 | +- K-31 (l.336–339): the deduplication rule omits the shared-arXiv-identifier route (13,175 eligible pairs, macro | ||||
| 140 | + `\PrismaVersionRelationshipArxivId`) and the conditions imposed on the published twin. | ||||
| 141 | +Minor: 180 not 200 PI-review pairs (K-26); A-005 already resolves the E7 numbering (K-28); six amendments, not five | ||||
| 142 | +(K-29); the ACL URL step linked nothing (K-30); first-author condition of the title step omitted (K-32); 138,796 typed | ||||
| 143 | +although `\AclParsedEntries` exists (K-33); E1 also removes out-of-window pass-2 records (K-34); date-precision definition | ||||
| 144 | +incomplete (K-35); duplicate bibliography entries under two keys (K-36 with K-05: culbert 2024/2025, martinmartin | ||||
| 145 | +coverage/comparison, fortunato science/sos, kinney s2/s2ag, radev acl/aclanthology, openalex 2024/2025 topics; 20 | ||||
| 146 | +duplicated DOIs in `references_all.bib`). | ||||
| 147 | + | ||||
| 148 | +Checked and found correct: all `\Prisma*`/`\Link*` macros quoted (sequential exclusions sum to the loaded total; year | ||||
| 149 | +counts sum to the core; arXiv 864,677/890,852; ACL 72,949/85,625), the E1–E7 predicates, the asymmetric type rule | ||||
| 150 | +(A-001), the generic-deposit list (A-002), the strict core, the "pre" residue of 1,864 works, the `created_date` | ||||
| 151 | +diagnosis, the right-truncation rule (last complete month June 2026), the Semantic Scholar record. | ||||
| 152 | + | ||||
| 153 | +## 4. Part IV — `part04_methodology.tex` — REJECT | ||||
| 154 | + | ||||
| 155 | +Strengths: the part describes the code rather than the plan, declares every deviation (max-vs-sum, c36 vs 24 months, | ||||
| 156 | +placebo range, no sup-F, topics instead of clusters, volume-only label), states what the look-ahead safeguards do not | ||||
| 157 | +cover, and uses no causal vocabulary. The mathematics is right. The rejection is for statements that are contradicted by | ||||
| 158 | +the code or by result files. | ||||
| 159 | + | ||||
| 160 | +Blocking: K-40 (compile), K-41 (garbled diversity paragraph), K-42 (first-date equation). | ||||
| 161 | + | ||||
| 162 | +Major. | ||||
| 163 | +- K-43 (l.76–87): precision rule and the "cannot manufacture a break" assertion (see B5). | ||||
| 164 | +- K-44 (l.250–261): deduplication rule incomplete (as K-31). | ||||
| 165 | +- K-47 (l.236–240): "the union … with what … arXiv call[s] computer science" overstates the membership rule (B2). | ||||
| 166 | +- K-48 (l.368–369): "the title–year stratum … is the only one where errors are plausible" — contradicted by the sample | ||||
| 167 | + (DOI 0.94 vs title 1.00); with weights L_s/L the DOI stratum dominates the precision estimate. | ||||
| 168 | +- K-50 (l.1067–1068): "Donut windows … are not implemented". `run_structural_change.py --donut` (default 3) is | ||||
| 169 | + implemented and `numbers.tex` carries the result (n = 94, level change 0.049, p = 0.056). Report it. | ||||
| 170 | +- K-51 (l.1568–1572): a 1,000-replication bootstrap of the Gini and the cross-area shares "computed by the | ||||
| 171 | + table-making script" does not exist anywhere (`make_numbers.py` has no bootstrap; the only bootstrap is | ||||
| 172 | + `04_diversity_cagr.py`, B = 500 multinomial over categories, as l.772 says). This is a claimed uncertainty quantification | ||||
| 173 | + without an artefact. | ||||
| 174 | +- K-54 (l.1379–1390): internally contradictory training-cutoff description (December 2020 vs December 2021 for h = 24; | ||||
| 175 | + "label uses data to December 2023"). Code: `last_train = 2020-12` for h > 12; cutoffs are months with index ≡ 0 (mod 3) | ||||
| 176 | + from January 2018, so realised cutoffs run January 2020 → October 2021 (h = 12) / October 2020 (h = 24), test | ||||
| 177 | + January 2023 → October 2024. Appendix C l.772–776 records the contradiction instead of fixing it. | ||||
| 178 | +- K-57 (l.1427–1435): the known-emergence lead time is said to be pending because the topic mapping is empty, but | ||||
| 179 | + `experiments/known_set.py` exists and has produced `results/emerging/known_set_lead_times.csv` under a different design | ||||
| 180 | + (hand-written regexes; detection = trailing z > 3 ∧ 12-month doubling ∧ ≥ 30 works; peak = full-window maximum of | ||||
| 181 | + 12-month growth). That is the baseline rule on keyword series, not the trained detector, and the peak month is | ||||
| 182 | + chosen with full-sample knowledge; it must be described, labelled as a deviation from H8's lead-time definition, and | ||||
| 183 | + not presented as the H8 test. | ||||
| 184 | + | ||||
| 185 | +Minor (13): period labels `pre`/`future` missing (K-45); first-author condition missing (K-46); raw vs normalised titles in | ||||
| 186 | +the auto check (K-49); CAGR script exists (K-52); HHI without preprints is not computed (K-53); detector `--last-month` | ||||
| 187 | +default is June, not October 2026 (K-55); no window overlap (K-56); five vs six checkpoints (K-58); `created_date` | ||||
| 188 | +definition (K-59); unsupported seasonality remark in the Bai–Perron section (K-60); Gini/NCS populations exclude retracted | ||||
| 189 | +works (K-61); the baseline-only placebo rank excludes the true event and can be 0 (K-62); the February 2018 start is | ||||
| 190 | +asserted immaterial (K-63). | ||||
| 191 | + | ||||
| 192 | +Checked and found correct: linkage cascade order and thresholds (except the omissions above), `T_keep`/`T_hard`/G lists, | ||||
| 193 | +e1–e7 and the membership flags, the score rule with caps and veto, the tie-break, validation sampling (50 × 40 + 200, seed | ||||
| 194 | +44, 200 for the PI), κ/Jaccard/α definitions, citation windows and completeness years, NCS reference class, Gini rank | ||||
| 195 | +form, HHI, counting conventions and thresholds (50, 200), Rao–Stirling/Leinster–Cobbold, modularity, citation-graph | ||||
| 196 | +edge sets, embedding text/length/precision, atlas parameters (200,000; UMAP 30/0.0/50; HDBSCAN 200/20; split-half 5 ×, | ||||
| 197 | +100/20, 5-NN; 12 TF-IDF terms, min_df 5), ITS design and HAC bandwidth 6, placebo range 24/12 and |T'| = 65, Bai–Perron | ||||
| 198 | +h = 15 and the April 2025 bound, BIC/LWZ forms, PELT penalty and min_size 6, BOCPD hazard and initialisation, alternative | ||||
| 199 | +event months, detector features and label, model hyper-parameters, landmark selection formulas, extraction schema and | ||||
| 200 | +verification rule. | ||||
| 201 | + | ||||
| 202 | +## 5. Appendix A — `appA_taxonomy.tex` — ACCEPT WITH FIXES | ||||
| 203 | + | ||||
| 204 | +All counts of Table tab:appA-signals and its totals (646/93/21/162/1,320/291/273/106/24/236), the 144 unordered related | ||||
| 205 | +pairs, the seven edges, the thirteen-category build check and the "all keyword patterns on title+abstract" statement were | ||||
| 206 | +recomputed from `ontology.yaml` and are exact. Two minor points: the DBLP-coverage numbers (l.396–399, 405, 422–446) are | ||||
| 207 | +data-derived counts typed from `ONTOLOGY.md` rather than macros (K-70); "The ontology was validated" (l.675) is premature | ||||
| 208 | +— `taxonomy/validation/` does not exist and Part IV/Appendix H mark the step as not run (K-71). | ||||
| 209 | + | ||||
| 210 | +## 6. Appendix B — `appB_search_and_sources.tex` — ACCEPT WITH FIXES (one blocking macro) | ||||
| 211 | + | ||||
| 212 | +The cascade table (tab:appB-cascade) is the most accurate description of `link_sources.py` in the manuscript (it alone | ||||
| 213 | +states the first-author condition and the asymmetric uniqueness rules), and the first-date/precision/period paragraph | ||||
| 214 | +(l.510–519) is correct where Part IV is not. Fixes: the undefined macro (K-80); the stale "generated from the first pass / | ||||
| 215 | +pending after the second pass" paragraph and the 20 GB figure (K-81, K-82, see B3); the API-increment totals now exist | ||||
| 216 | +(1,002 calls, 193,369 records, 64 slices done, one truncated slice — 2026-10-16 `cs_secondary`, count 37,712 of which | ||||
| 217 | +10,000 retrieved — K-83); three other stale `\pending{}` (K-84); 110 vs 108 MB/s (K-85); duplicate citation keys (K-86). | ||||
| 218 | + | ||||
| 219 | +## 7. Appendix C — `appC_derivations.tex` — ACCEPT WITH FIXES | ||||
| 220 | + | ||||
| 221 | +Every derivation was re-done and holds: the centred post-trend parametrisation; Bartlett weights 1 − ℓ/7 and the | ||||
| 222 | +positive-semi-definiteness argument; statsmodels defaults (no small-sample correction, normal reference); the placebo rank | ||||
| 223 | +floor 1/65; segment additivity and the DP recursion with limits mh ≤ i ≤ j − h; BIC and LWZ (c₀ = 0.299, exponent 2.1) as | ||||
| 224 | +coded; the PELT pruning proof with K = 0 for ℓ₂ and the 2σ² log n penalty; the NIG one-step and batch updates and the | ||||
| 225 | +Student-t predictive (df 2α, scale² β(κ+1)/(ακ)); R_{t+1}(0) = H; the Gini trapezoid derivation, its bounds 0 and 1 − 1/n | ||||
| 226 | +and the monotone effect of adding uncited works (checked algebraically); ²D^Z = 1/(1 − Δ_RS); the directed-modularity | ||||
| 227 | +decomposition; MASI with the 0.67/0.33 rounding (max error 0.0034) and the squared-distance caveat; the score rule and the | ||||
| 228 | +non-transitive tie-break; the filtration argument. Fixes: the realised cutoff months (K-90); the paragraph that documents | ||||
| 229 | +Part IV's contradiction must disappear once Part IV is fixed (K-91); "at least two post-event months" (K-92); "fifteen | ||||
| 230 | +columns" (K-93). | ||||
| 231 | + | ||||
| 232 | +## 8. Appendix E — `appE_data_dictionary.tex` — ACCEPT WITH FIXES | ||||
| 233 | + | ||||
| 234 | +Column lists match the Arrow schemas and the SQL statements (slim, works, authorships, small tables, locations, key | ||||
| 235 | +tables, link tables, `corpus_works`, citation windows, edge tables, classification, embeddings). The `first_date`, | ||||
| 236 | +`date_precision` and citation-merge descriptions are the correct ones. Two minor items: the `created_date` caveat (K-100) | ||||
| 237 | +and the missing `data` record type (K-101). | ||||
| 238 | + | ||||
| 239 | +## 9. Appendix H — `appH_reproducibility.tex` — ACCEPT WITH FIXES | ||||
| 240 | + | ||||
| 241 | +Steps, incidents, amendments (six) and licences agree with `RUNBOOK.md`, `INCIDENTS.md`, `amendments.csv` and the | ||||
| 242 | +ledgers; both unit-test files exist; the 15,490,159 / 464,765,485 / 1,898 figures are right and expose the mislabel in | ||||
| 243 | +Part III. Minor: the "28 cores" has no source in the environment capture and conflicts with the cluster inventory (32) | ||||
| 244 | +(K-110); three provenance counts are typed although macros exist (K-111); the "same locked environment" on the three | ||||
| 245 | +other nodes is unverified (K-112); arXiv licence wording differs from Part III (K-113). | ||||
| 246 | + | ||||
| 247 | +--- | ||||
| 248 | + | ||||
| 249 | +## 10. Cross-cutting observations for the Director | ||||
| 250 | + | ||||
| 251 | +1. Stale `\pending{}` markers (Part III, Appendix B) and stale "not yet / not implemented" statements (Part III linkage | ||||
| 252 | + sample, Part IV donut, diversity, known set) show that the writers worked from an earlier state of `results/` and | ||||
| 253 | + `numbers.tex`. A rule "regenerate `numbers.tex`, then grep the sections for `\pending{` and for every macro name" | ||||
| 254 | + before each writing pass would have caught K-27, K-83, K-84 and the undefined macro. | ||||
| 255 | +2. The mislabelled first-pass count (B3) originates in `define_corpus.py` (`openalex_cs_topic_2018_2026_pass1` counts the | ||||
| 256 | + union view). This is a code fix with manuscript consequences in four places; it should carry an entry in | ||||
| 257 | + `reports/DISCREPANCIES_PLAN_VS_CODE.md`. | ||||
| 258 | +3. The 6,263 orphan records (B2) are the first empirical sign that the arXiv clause of the membership rule is inert | ||||
| 259 | + outside the topic filter. Before Part IX is written, the Director should decide whether to amend the rule (A-006) or | ||||
| 260 | + to keep it and reword Part IV; either way the PRISMA figure must show the class. | ||||
| 261 | +4. The preprint-citation merge (B4) is a methodological choice that affects every impact statistic and is currently | ||||
| 262 | + documented only in a data-dictionary sentence; Part IV §Fixed citation windows must own it. | ||||
| 263 | +5. No causal language about the reference date was found in any of the eight files; superlatives are limited to the three | ||||
| 264 | + flagged in Part II; no preprint is called peer-reviewed (the opposite error occurs once, K-10); abstracts are never | ||||
| 265 | + treated as full text (Part IV §Knowledge-graph extraction is explicit). | ||||
| 266 | + | ||||
| 267 | +## Summary (≤ 20 lines) | ||||
| 268 | + | ||||
| 269 | +- Verdicts: Part II ACCEPT WITH FIXES; Part III REJECT; Part IV REJECT; App A, C, E, H ACCEPT WITH FIXES; App B ACCEPT | ||||
| 270 | + WITH FIXES plus one compile-blocking macro. 71 issues (8 blocking, 20 major, 43 minor) in the CSV. | ||||
| 271 | +- The manuscript does not compile: `\LinkNeededOaIdsSecondPassArxivDoi` is undefined (Part III l.288, Part IV l.235, App B l.182). | ||||
| 272 | +- PRISMA accounting fails: core + penumbra = 10,512,764 ≠ 10,519,027 after exclusions; 6,263 records belong to neither, | ||||
| 273 | + and they show that the arXiv membership clause never admits works outside the OpenAlex topic filter (Part IV overstates it). | ||||
| 274 | +- The "first-pass" identification macro (16,592,966) is the two-pass total; the first pass retained 15,490,159 | ||||
| 275 | + (Parts II/III and App B wrong, App H right). | ||||
| 276 | +- Part III says preprint citations are not merged into the published node; the code merges them (App E agrees with code). | ||||
| 277 | +- Part IV's first-date and date-precision equations do not match `define_corpus.py` (1-January dates are overridden). | ||||
| 278 | +- Part IV contradicts the code on: donut windows ("not implemented" — they are), the 1,000-replication bootstrap (does not | ||||
| 279 | + exist), training cutoffs for h = 24, the known-emergence lead time (a different script exists), the HHI-without-preprints table. | ||||
| 280 | +- Part II misreports Bornmann & Mutz 2015 (modern growth is 8–9 %/yr, not 3 %) and claims period-specific seasonality the code | ||||
| 281 | + does not fit; the Lin et al. 2020 "majority unmatched" claim could not be verified and is probably reversed. | ||||
| 282 | +- Linkage precision: the sample exists (DOI 0.94, title 1.00 automatic agreement) and contradicts the assumption that only | ||||
| 283 | + the title stratum can err; Part III still says the sample was not drawn. | ||||
| 284 | +- Three `\pending{}` markers in Part III and six in App B refer to macros that already exist; amendments are six, not five. | ||||
| 285 | +- All mathematics in Part IV and Appendix C re-derives correctly; Appendix A's counts recompute exactly from `ontology.yaml`. | ||||
| 286 | +- Duplicate bibliography entries under two keys for at least six works (20 duplicated DOIs in `references_all.bib`). | ||||
| 287 | +- No causal language, no preprint called peer-reviewed, no abstract treated as full text; three superlatives to soften. | ||||
added
reports/critic/issues_parts_02_03_04_appendices.csv
+72 −0
@@ -0,0 +1,72 @@ | |||||
| 1 | +"issue_id","file","line","severity","type","quote","required_fix" | ||||
| 2 | +"K-01","manuscript/sections/part02_evolution.tex","62","major","citation_unverified","estimated the long-run growth of science at roughly three per cent per year with a doubling time of about a quarter of a century","Bornmann & Mutz (2015) abstract (Crossref, checked 2026-11-03): three phases, <1 % to mid-18th c., 2-3 % up to the inter-war period, 8-9 % to 2010. The 2-3 % figure is the pre-1940s phase, not the long-run/modern rate. Report 8-9 % (doubling about 9 years) or attribute the 2-3 % explicitly to the earlier phase." | ||||
| 3 | +"K-02","manuscript/sections/part02_evolution.tex","151 (also 55)","major","citation_unverified","found that a majority of computer-science preprints in their sample could not be matched to a published version","Abstract not retrievable through Crossref/OpenAlex (checked); the paper is widely quoted as finding about 66 % of arXiv CS preprints published. Verify against the full text and correct or delete the 'majority' claim; l.55 ('a large share ... never matched') depends on it. Part III l.369-370 cites the same paper neutrally." | ||||
| 4 | +"K-03","manuscript/sections/part02_evolution.tex","153","major","inconsistency","the seasonal component s_c(t) of equation (eq:p2-its) is modelled separately for the baseline and the research period for that reason","econometrics/structural_change.py `_design` fits one set of eleven month dummies common to both periods; no period-specific seasonality exists in any script or result. State that seasonality is common (or implement interacted dummies and report them)." | ||||
| 5 | +"K-04","manuscript/sections/part02_evolution.tex","49","major","inconsistency","The OpenAlex snapshot contains \LinkOaCsRecords{} works classified in computer science between 2018 and 2026","\LinkOaCsRecords = 16,592,966 is the union of pass 1 and pass 2 (oa_keys over the unioned view); the CS-topic filter itself yielded 15,490,159 (App H Table tab:appH-steps, RUNBOOK). About 1.10 M of the quoted works carry no CS topic. Use the pass-1 figure (add a macro) or reword." | ||||
| 6 | +"K-05","manuscript/sections/part02_evolution.tex","49","minor","citation_unverified","(a preprint finding; \citealp{culbert2024openalex}.","Unbalanced parenthesis. The work is published (Scientometrics 2025, cited in Part III as culbert2025openalex): cite the journal version, drop 'a preprint finding', and merge the duplicate bib entries (also martinmartin2021coverage/comparison, fortunato2018sos/science, kinney2023s2/s2ag, radev2013acl/aclanthology, openalex2024topics/2025topics; references_all.bib has 20 duplicated DOIs)." | ||||
| 7 | +"K-06","manuscript/sections/part02_evolution.tex","251","minor","overclaim","its diffusion among the public was by all accounts faster than that of any previous software product","Superlative with no independent source (the sentence itself says the usual figures are unverifiable). Delete or cite a verifiable source." | ||||
| 8 | +"K-07","manuscript/sections/part02_evolution.tex","190","minor","overclaim","became the first systems language to be adopted at scale on the strength of a safety guarantee","Unsupported 'first'; soften ('one of the first', or cite)." | ||||
| 9 | +"K-08","manuscript/sections/part02_evolution.tex","192","minor","inconsistency","the Kepler conjecture was formally proved in 2017 after a twelve-year effort","Flyspeck started in 2003 and was completed in August 2014; the Forum of Mathematics Pi paper appeared in 2017. Write 'completed in 2014 (published 2017)'." | ||||
| 10 | +"K-09","manuscript/sections/part02_evolution.tex","142","minor","overclaim","A break detected in one series and not in the other is informative about the mechanism, not merely about measurement.","It can equally reflect indexing lag, linkage failure or right truncation (Part III sec:data-dates). Add the competing explanation." | ||||
| 11 | +"K-10","manuscript/sections/part02_evolution.tex","336","minor","inconsistency","In a preprint, \citet{ott2022benchmarks} mapped the creation and saturation of benchmarks","Bib entry is Nature Communications 13 (2022), peer-reviewed. Remove 'In a preprint'." | ||||
| 12 | +"K-11","manuscript/sections/part02_evolution.tex","324","minor","unsupported_claim","the robustness checks of Appendix D re-estimate the main breaks with classifications that use no keyword signals","taxonomy/classify.py has no option to drop keyword signals and no venue-only classification exists; label as planned or implement." | ||||
| 13 | +"K-20","manuscript/sections/part03_data.tex","288","blocking","number_without_artifact","\LinkNeededOaIdsSecondPassDblpDoi{} identifiers from DBLP DOIs and \LinkNeededOaIdsSecondPassArxivDoi{} from arXiv DOIs","Macro undefined (linkage_report.json has no needed_oa_ids_second_pass.arxiv_doi key): the manuscript stops with 'Undefined control sequence' (verified by compiling a copy in /tmp). Emit the macro with value 0 from make_numbers.py or state in prose that no arXiv-DOI identifier was needed. Same macro in Part IV l.235 and App B l.182." | ||||
| 14 | +"K-21","manuscript/sections/part03_data.tex","517-531; 539 (caption)","blocking","inconsistency","the core and the penumbra partition the records that survive the exclusions","prisma_counts.json: after_exclusions 10,519,027 but cs_core_eligible 7,110,289 + cs_penumbra 3,402,475 = 10,512,764; 6,263 surviving records are neither (cs_any false, not DBLP-linked: pass-2 works reached through arXiv DOIs). Report the third class in the PRISMA flow and explain it, and reconcile with the membership rule (see K-47)." | ||||
| 15 | +"K-22","manuscript/sections/part03_data.tex","191-193","blocking","inconsistency","The filter yields \PrismaIdentifiedOpenalexCsTopicTwoZeroOneEightTwoZeroTwoSixPassOne{} records in the first pass over the snapshot","define_corpus.py counts oa_keys over the union of both passes, so the 'pass1' key equals the total loaded (16,592,966). The first pass retained 15,490,159 (RUNBOOK, App H, slim_cs_any_2018_2026). Record the true pass-1 count in prisma_counts.json and fix the prose here and in App B l.111/195-200." | ||||
| 16 | +"K-23","manuscript/sections/part03_data.tex","356-358","blocking","inconsistency","OpenAlex attributes to the preprint record the citations that cite the preprint DOI, and these are not added to the published node, a known under-count","bibliometrics/03_citation_impact.py (CTE CY, UNION ALL on preprint_work_id) adds the merged preprint's counts_by_year to the canonical node; App E l.604-606 documents the merge. Correct the prose (and state the merge in Part IV sec:m-citations)." | ||||
| 17 | +"K-24","manuscript/sections/part03_data.tex","664-665","major","inconsistency","re-estimates every break with the window ending in December 2025","run_structural_change.py --sensitivity defaults to 2026-03 and 2026-08 and numbers.tex carries \ItsSensitivityLastCompleteTotalTwoZeroTwoSixZeroThree/Eight; Part IV l.1047 says March and August 2026. Fix." | ||||
| 18 | +"K-25","manuscript/sections/part03_data.tex","313-316","major","unsupported_claim","At the time of writing the sampling script exists but the sample has not been drawn","data/metadata/linkage_sample.csv (450 pairs) and linkage_sample_summary.json exist: DOI stratum 235/250 auto_ok (0.94), title-year 200/200 (1.00). Report the automatic rates; note that the 15 DOI-step failures include chapter/book DOI collisions and retitled versions, which contradicts Part IV l.368 ('the only [stratum] where errors are plausible')." | ||||
| 19 | +"K-26","manuscript/sections/part03_data.tex","310 (also Part IV l.357)","minor","inconsistency","a 200-pair subsample reserved for the principal investigator","With 450 realised pairs the rule pi_review = (i % 5 < 2) flags 180 pairs. Say 180 (or draw 200)." | ||||
| 20 | +"K-27","manuscript/sections/part03_data.tex","443; 600-602","major","number_without_artifact","\pending{PrismaExcludedSequentialESevenGenericDeposit} ... \pending{PrismaEligibleDatePrecisionMonth} and \pending{PrismaEligibleDatePrecisionYear}","All three macros exist in tables/numbers.tex (473,549; 5,703,718; 1,406,571). Replace the pending markers by the macros." | ||||
| 21 | +"K-28","manuscript/sections/part03_data.tex","445-451","minor","inconsistency","The conflict of numbering is flagged here for correction in the amendments log","Amendment A-005 (2026-11-03) already resolves it (App B l.526-527, App H Table). Update the paragraph." | ||||
| 22 | +"K-29","manuscript/sections/part03_data.tex","816","minor","inconsistency","At the time of writing the log holds five entries","protocol/amendments.csv holds six (A-000 to A-005); App H says 'All six amendments'." | ||||
| 23 | +"K-30","manuscript/sections/part03_data.tex","277","minor","inconsistency","with the URL step contributing the remainder","linkage_report.json link_acl_oa has only doi (58,174) and title_year (15,004); the URL step linked no record. State that it contributed none." | ||||
| 24 | +"K-31","manuscript/sections/part03_data.tex","336-339","major","inconsistency","Two records are paired when their normalised titles are identical, both titles have at least 25 characters, and their publication years differ by at most two","define_corpus.py also pairs on a shared arXiv identifier (relation 'arxiv_id': \PrismaVersionRelationshipArxivId = 13,175 eligible pairs vs 84,776 by title) and requires the published twin to be in window, non-XPAC, titled and of a kept type (or DBLP-linked). Describe both routes and the twin conditions; same omission in Part IV eq. (eq:duppair)." | ||||
| 25 | +"K-32","manuscript/sections/part03_data.tex","251-253","minor","inconsistency","(iii) normalised title equality with a year difference of at most one","link_sources.py l.63 also requires equal first-author surnames when both are present (App B l.540-542 states it). Add the condition; same omission in Part IV l.198-201." | ||||
| 26 | +"K-33","manuscript/sections/part03_data.tex","123","minor","number_without_artifact","parsed into a table of 138{,}796 entries","Macro \AclParsedEntries exists; use it (policy of sec:data-integrity)." | ||||
| 27 | +"K-34","manuscript/sections/part03_data.tex","390-392","minor","inconsistency","this code catches only records with a missing date or a date beyond the extraction date","Pass-2 records are loaded by identifier without a year restriction, so E1 also removes out-of-window pass-2 works (part of the 59,453). Reword." | ||||
| 28 | +"K-35","manuscript/sections/part03_data.tex","596-600","minor","inconsistency","equal to year when the publication date is the first of January and month otherwise","Code sets 'month' when a merged-preprint or arXiv date exists even if the publication date is 1 January (App B l.515-516, App E l.573). Align the definition." | ||||
| 29 | +"K-36","manuscript/sections/part03_data.tex","32; 36; 689","minor","citation_unverified","\citep{visser2021comparison,martinmartin2021comparison} ... \citep{alperin2024openalex,culbert2025openalex,...}","Duplicate bibliography entries for the same works under two keys (see K-05). Keep one key per work." | ||||
| 30 | +"K-40","manuscript/sections/part04_methodology.tex","235","blocking","number_without_artifact","\LinkNeededOaIdsSecondPassArxivDoi{} from arXiv","Undefined macro; compile failure (see K-20)." | ||||
| 31 | +"K-41","manuscript/sections/part04_methodology.tex","766-777","blocking","inconsistency","the two diversity indices are not yet produced by a script; they are defined here because the protocol commits to them, and their values in Part IX are [line break] The yearly Rao--Stirling and Leinster--Cobbold indices ... are computed by \texttt{bibliometrics/04\_diversity\_cagr.py} ... [line break] until the computation is added and audited.","Garbled paragraph: two contradictory drafts spliced together, leaving an unfinished sentence. Rewrite: the script exists (B = 500, seed 44; dissimilarity from centroids when available, else co-classification Jaccard)." | ||||
| 32 | +"K-42","manuscript/sections/part04_methodology.tex","46-52 (eq:first-date)","blocking","inconsistency","d(w) = min{ d_pub(w), d_pub(pi(w)), d_arx(w) } ... each missing term is replaced by d_pub(w)","define_corpus.py l.58-60: when d_pub is YYYY-01-01 and a preprint or arXiv date exists, d_pub is dropped and the first date is the least of the other two (App B l.511-514 and App E l.566 state the code rule). The equation is wrong as written; a year-only 2022 record with a 2023 arXiv date is dated 2023 by the code. Fix the equation and state the consequence." | ||||
| 33 | +"K-43","manuscript/sections/part04_methodology.tex","76-87 (eq prec)","major","unsupported_claim","prec(w) = year if d_pub(w) falls on 1 January ... the loss is small and, more importantly, it does not depend on the period, so it cannot manufacture a break","Code: 'year' only when no preprint/arXiv date exists. The rescue of 1-January records by arXiv dates grows with arXiv linkage over time and Part III reports year-only shares of 18-28 % varying by source and type, so the exclusion is period-dependent. Correct the definition and replace the 'cannot manufacture a break' assertion by the sensitivity it calls for." | ||||
| 34 | +"K-44","manuscript/sections/part04_methodology.tex","250-261 (eq:duppair)","major","inconsistency","(p, b) is a candidate pair iff eta(p) = eta(b), |y(p) - y(b)| <= 2, p in P, b notin P, |title| >= 25","Omits the shared-arXiv-identifier route and the conditions on b (in window, non-XPAC, titled, kept type or DBLP-linked); see K-31. Also the length test is on the normalised title (length(ntitle))." | ||||
| 35 | +"K-45","manuscript/sections/part04_methodology.tex","64-70","minor","inconsistency","period(w) = B ... P ...","define_corpus.py also yields 'pre' (first date before 2018; 1,864 eligible works, Part III l.529) and 'future'. Add both and say how they are treated." | ||||
| 36 | +"K-46","manuscript/sections/part04_methodology.tex","198-201","minor","inconsistency","restrict each side to normalised titles that are unique within that side, join on equal eta, and keep the pair if the years differ by at most one","Add the first-author surname condition of link_sources.py l.63 (App B has it)." | ||||
| 37 | +"K-47","manuscript/sections/part04_methodology.tex","236-240","major","overclaim","it is the union of that set with what DBLP and arXiv call computer science","The third membership clause is cs_any AND arxiv_cs_primary, so an arXiv-declared CS work outside the topic filter is never admitted; the 6,263 orphan records of K-21 are such works. Either reword ('and, within the topic filter, what arXiv calls computer science') or amend the rule." | ||||
| 38 | +"K-48","manuscript/sections/part04_methodology.tex","368-369","major","unsupported_claim","the title--year stratum, which is the only one where errors are plausible, is weighted by its small share of the links","Contradicted by linkage_sample_summary.json (DOI stratum auto-precision 0.94; title 1.00) and by the failing DOI pairs (book-level DOI, retitled versions). Rewrite; with weights L_s/L the DOI stratum dominates p-hat." | ||||
| 39 | +"K-49","manuscript/sections/part04_methodology.tex","353","minor","inconsistency","a string similarity between the two raw titles","linkage_sample.py compares normalised titles (lower-cased, ASCII-folded, alphanumeric). Say so." | ||||
| 40 | +"K-50","manuscript/sections/part04_methodology.tex","1067-1068","major","inconsistency","Donut windows (dropping the months adjacent to the event) are not implemented","run_structural_change.py implements --donut (default 3 months each side) and numbers.tex carries \ItsSeriesTotalItsChatgptDonut* (n = 94, level change 0.049, p = 0.056). Describe and report it." | ||||
| 41 | +"K-51","manuscript/sections/part04_methodology.tex","1568-1572","major","number_without_artifact","it is the percentile interval of the non-parametric bootstrap over works, with 1,000 replications and seed 44, computed by the table-making script at reporting time","tables/make_numbers.py contains no bootstrap and no script bootstraps the Gini or the cross-area shares; the only bootstrap is 04_diversity_cagr.py (multinomial over categories, B = 500, l.772). Remove the claim or implement it, and reconcile 500 vs 1,000." | ||||
| 42 | +"K-52","manuscript/sections/part04_methodology.tex","588-589","minor","inconsistency","The CAGR is computed at table-making time from the annual counts rather than by a dedicated script","bibliometrics/04_diversity_cagr.py computes cagr_by_category.csv (2018->2022 and 2023->2025), as l.771-776 says." | ||||
| 43 | +"K-53","manuscript/sections/part04_methodology.tex","690-695","minor","unsupported_claim","the tables report the index with and without the preprint type","02_collaboration.py writes venue_hhi_yearly.csv over all types only; no preprint-excluded variant exists. Implement or delete." | ||||
| 44 | +"K-54","manuscript/sections/part04_methodology.tex","1379-1390","major","inconsistency","With h = 24 the last training label uses data to December 2023 ... the implementation stops at December 2021 so that the training labels do not extend into the test period at h = 24","Contradicts l.1379-1380 (December 2020 for h = 24) and the code (last_train = 2020-12 for h > 12; label closes December 2022). Cutoffs are months with index = 0 mod 3 from January 2018, so the realised training cutoffs run January 2020 to October 2021 (h = 12) or October 2020 (h = 24), not 'December 2019 to December 2021'. App C l.772-776 records the contradiction instead of fixing it." | ||||
| 45 | +"K-55","manuscript/sections/part04_methodology.tex","1309","minor","inconsistency","to the last month (October 2026 by default)","emerging_detection.py --last-month defaults to 2026-06." | ||||
| 46 | +"K-56","manuscript/sections/part04_methodology.tex","1337-1338","minor","inconsistency","the one-month overlap between the z-score's trailing window and the quarter it is compared with is immaterial","The trailing window ends at T-3 and the quarter is T-2..T: there is no overlap. Delete." | ||||
| 47 | +"K-57","manuscript/sections/part04_methodology.tex","1427-1435","major","inconsistency","The script reserves a table for this mapping and it is empty in the current version; the lead-time statistic is therefore \pending{...}","experiments/known_set.py exists and produced results/emerging/known_set_lead_times.csv with a different design: keyword-regex monthly series per concept; detection = trailing-3-month z > 3 and 12-month doubling with >= 30 works; peak = month of maximum 12-month log growth over the whole window. That is the z-score baseline rule applied to hand-written regexes, not the trained detector of H8, and the peak uses full-sample information. Describe it, label it a deviation from the preregistered lead-time definition, and do not present it as the H8 test." | ||||
| 48 | +"K-58","manuscript/sections/part04_methodology.tex","1622","minor","inconsistency","Five checkpoints (H-1 to H-5, ...)","Six checkpoints H-0 to H-5 (Part III l.876, reports/HUMAN_REVIEW_CHECKPOINTS.md)." | ||||
| 49 | +"K-59","manuscript/sections/part04_methodology.tex","37-38","minor","inconsistency","a creation date d_cr(w) (the date at which the record entered OpenAlex)","Part III l.626-634 shows created_date reflects a 2025 re-ingestion for most records; qualify here and in App E l.253." | ||||
| 50 | +"K-60","manuscript/sections/part04_methodology.tex","1181-1183","minor","unsupported_claim","with a trimming of eight or more months per segment this cannot create a break by itself","Asserted without argument; the Bai-Perron input is already seasonally adjusted with baseline month means (l.54 of the driver). Say that instead." | ||||
| 51 | +"K-61","manuscript/sections/part04_methodology.tex","662-663; 637-638","minor","inconsistency","the Gini coefficient of c^(36) among the n eligible works of that year ... the set of eligible works sharing year, type and subfield","03_citation_impact.py excludes retracted works (NOT e6_retracted) from both; say 'eligible, non-retracted' (the CitationWindowsYearly N differs from VolumeYearly N by the retracted count)." | ||||
| 52 | +"K-62","manuscript/sections/part04_methodology.tex","1131-1139 (and App C l.122-125)","minor","missing_uncertainty","the implementation ranges over the baseline and the post period","The baseline-only placebo (reported: \ItsSeriesTotalPlaceboChatgptBaselineOnly*) excludes the true event from the candidate set, so its value can be 0 (slope: 0.000), unlike the full-range rank whose floor is 1/|T'|. State the convention next to the result." | ||||
| 53 | +"K-63","manuscript/sections/part04_methodology.tex","1044-1046","minor","unsupported_claim","from February 2018 (the default start of the driver script, which drops one month and is immaterial)","Give the reason for dropping January 2018 or start at 2018-01; 'immaterial' is asserted, not shown." | ||||
| 54 | +"K-70","manuscript/appendices/appA_taxonomy.tex","396-399; 405; 422-446","minor","number_without_artifact","the mapped streams cover 2{,}017{,}910 of 3{,}319{,}884 records (60.8\,\%)","DBLP record counts are data-derived quantities typed from ONTOLOGY.md, not ontology properties; generate macros from dblp_streams_2018_2026.csv or label the table as 'ontology-build statistics (taxonomy/ONTOLOGY.md, generated section)'." | ||||
| 55 | +"K-71","manuscript/appendices/appA_taxonomy.tex","675","minor","inconsistency","The ontology was validated, after the classification run, on a stratified sample","taxonomy/validation/ does not exist in the repository mirror and Part IV l.370/App H step 13 mark the validation as not yet run; write 'is validated' / 'will be validated'." | ||||
| 56 | +"K-80","manuscript/appendices/appB_search_and_sources.tex","182","blocking","number_without_artifact","\LinkNeededOaIdsSecondPassArxivDoi{} through an arXiv DOI","Undefined macro (see K-20)." | ||||
| 57 | +"K-81","manuscript/appendices/appB_search_and_sources.tex","195-200","major","inconsistency","The PRISMA counts of Part III were generated from the first pass (\PrismaIdentifiedOpenalexTotalRecordsLoaded{} records loaded); ... \pending{PrismaIdentifiedOpenalexTotalRecordsLoaded after the second pass}","prisma_counts.json (generated 2026-11-03T23:03) already counts the union of both passes (16,592,966 = 15,490,159 pass 1 + 1,102,807 pass 2); the 'pass 1' macro name is a code labelling error (K-22). Rewrite with the two counts." | ||||
| 58 | +"K-82","manuscript/appendices/appB_search_and_sources.tex","111","major","inconsistency","about 20~GB in total for \PrismaIdentifiedOpenalexCsTopicTwoZeroOneEightTwoZeroTwoSixPassOne{} records","The 20 GB CS subset holds 15,490,159 records (App H Table tab:appH-raw); the macro value is the two-pass total." | ||||
| 59 | +"K-83","manuscript/appendices/appB_search_and_sources.tex","238-247","major","number_without_artifact","(\pending{IncrementApiCalls}, \pending{IncrementRecordsRetrieved}, \pending{IncrementTruncatedSlices})","Macros exist: 1,002 calls; 193,369 records; 1 truncated slice; 64 slices done; USD 0.100. Report them, say how many of the 66 day-slices (33 days x 2) are done, and quantify the truncated slice (2026-10-16 cs_secondary: count 37,712, 10,000 retrieved). \IncrementNewWorks has no source file yet (increment_report.json absent) and may stay pending." | ||||
| 60 | +"K-84","manuscript/appendices/appB_search_and_sources.tex","297; 365; 501","minor","number_without_artifact","\pending{DblpParsedRecords} ... \pending{AclParsedEntries} ... \pending{PrismaExcludedESevenGenericDeposit}","All three macros exist (8,840,866; 138,796; 1,277,584). Replace." | ||||
| 61 | +"K-85","manuscript/appendices/appB_search_and_sources.tex","84-86","minor","inconsistency","the aggregate over eight streams about 110~MB/s","App H l.76 and the RUNBOOK say about 108 MB/s; harmonise." | ||||
| 62 | +"K-86","manuscript/appendices/appB_search_and_sources.tex","102; 350; 384","minor","citation_unverified","\citealp{openalex2024topics} ... \citep{radev2013aclanthology, acl2024anthology} ... \citep{kinney2023s2ag}","Duplicate keys of openalex2025topics (Part II), radev2013acl and kinney2023s2 (Part III). One key per work." | ||||
| 63 | +"K-90","manuscript/appendices/appC_derivations.tex","760-762","minor","inconsistency","The implementation sets T_max^tr to December 2021 for h = 12 and to December 2020 for h = 24, so that T_max^tr + h is December 2022 in both cases","Cutoffs are months with index = 0 mod 3 from January 2018: the last training cutoffs are October 2021 and October 2020, so T_max + h = October 2022 (the gap inequality still holds). State the realised cutoffs." | ||||
| 64 | +"K-91","manuscript/appendices/appC_derivations.tex","772-776","major","inconsistency","stricter for h = 24 than the description of Part IV, which gives December 2021 as the last training cutoff for both horizons---the code's rule is the one that guarantees (eq) and the manuscript follows the code","An appendix must not document a live contradiction with the main text; fix Part IV (K-54) and delete this remark." | ||||
| 65 | +"K-92","manuscript/appendices/appC_derivations.tex","47-51","minor","method_weakness","at least one post-event month with t > t_e, guaranteed by the driver's rule that twelve months follow every event","Separating beta_2 from beta_3 needs at least two post-event months (t_post is identically zero with one); the driver's twelve-month rule suffices, so state 'at least two'." | ||||
| 66 | +"K-93","manuscript/appendices/appC_derivations.tex","86-87","minor","inconsistency","With n of the order of one hundred and fourteen regressors, the difference between the normal and the t_{n-15} reference distribution","X has 15 columns including the constant (l.32); write 'fifteen columns' to match t_{n-15}." | ||||
| 67 | +"K-100","manuscript/appendices/appE_data_dictionary.tex","253","minor","inconsistency","Date the record entered OpenAlex (used for indexing-lag diagnostics)","Part III l.626-634 shows the field reflects a 2025 re-ingestion and was not usable for the lag profile; add the caveat." | ||||
| 68 | +"K-101","manuscript/appendices/appE_data_dictionary.tex","130","minor","inconsistency","Record type: article, inproceedings, proceedings, book, incollection, phdthesis, mastersthesis","The parser also emits 'data' records (dblp_parse_report: 30,631; dblp_keys admits type data). Add it." | ||||
| 69 | +"K-110","manuscript/appendices/appH_reproducibility.tex","24-25","minor","number_without_artifact","M3U96b (Mac Studio, Apple M3~Ultra, 28~cores, 96~GB of unified memory, 103{,}079{,}215{,}104 bytes as recorded by the environment capture)","The environment capture holds no core count (lines: Python 3.12.15 / 26.4 / Apple M3 Ultra / 103079215104); '28 cores' comes from the RUNBOOK header, while the cluster inventory lists M3U96b at 32 cores. Record hw.ncpu / hw.perflevel in the capture and quote it." | ||||
| 70 | +"K-111","manuscript/appendices/appH_reproducibility.tex","107-109; 287-292","minor","number_without_artifact","\texttt{dblp\_publications.parquet} (8{,}840{,}866 records) ... (915{,}115 records) ... (138{,}796 entries)","These provenance counts are also macros (\DblpParsedRecords, \LinkArxivCsRecords, \AclParsedEntries); use them so that a regenerated run cannot leave the appendix stale." | ||||
| 71 | +"K-112","manuscript/appendices/appH_reproducibility.tex","32-33","minor","unsupported_claim","M5M36 for the second snapshot pass and M4M64c and M3U96a for embedding shards; they run the same locked environment","No environment capture exists for those nodes under reproducibility/; add captures or state it as an assumption." | ||||
| 72 | +"K-113","manuscript/appendices/appH_reproducibility.tex","269-271 (vs Part III Table tab:data-sources)","minor","inconsistency","arXiv metadata obtained through OAI-PMH is under the CC0 terms of that feed","Part III's source table says 'arXiv metadata terms'; harmonise the licence statement across the two." | ||||
modified
systematic_review/define_corpus.py
+7 −2
@@ -68,8 +68,9 @@ def main(): | |||||
| 68 | (c.title IS NULL OR length(trim(c.title)) = 0) AS e4_no_title, | 68 | (c.title IS NULL OR length(trim(c.title)) = 0) AS e4_no_title, | ||
| 69 | (dp.published_id IS NOT NULL) AS e5_duplicate, | 69 | (dp.published_id IS NOT NULL) AS e5_duplicate, | ||
| 70 | c.is_retracted AS e6_retracted, | 70 | c.is_retracted AS e6_retracted, | ||
| 71 | − (c.in_dblp OR c.cs_primary OR (c.cs_any AND coalesce(c.arxiv_cs_primary, FALSE))) AS cs_core, | 71 | + -- A-006: an arXiv primary category cs.* is itself a CS membership signal (works recovered by the second pass have no CS topic) | ||
| 72 | − (c.cs_any AND NOT (c.in_dblp OR c.cs_primary OR (c.cs_any AND coalesce(c.arxiv_cs_primary, FALSE)))) AS cs_penumbra | 72 | + (c.in_dblp OR c.cs_primary OR coalesce(c.arxiv_cs_primary, FALSE)) AS cs_core, | ||
| 73 | + (c.cs_any AND NOT (c.in_dblp OR c.cs_primary OR coalesce(c.arxiv_cs_primary, FALSE))) AS cs_penumbra | ||||
| 73 | FROM cw0 c | 74 | FROM cw0 c | ||
| 74 | LEFT JOIN dup_pairs dp ON dp.preprint_id = c.id | 75 | LEFT JOIN dup_pairs dp ON dp.preprint_id = c.id | ||
| 75 | LEFT JOIN dup_pairs dp2 ON dp2.published_id = c.id""") | 76 | LEFT JOIN dup_pairs dp2 ON dp2.published_id = c.id""") | ||
@@ -88,6 +89,8 @@ def main(): | |||||
| 88 | # ---- PRISMA counts ---- | 89 | # ---- PRISMA counts ---- | ||
| 89 | P = {"generated": dt.datetime.now(dt.UTC).isoformat(), "window": [WINDOW_START, WINDOW_END], "boundary": BOUNDARY} | 90 | P = {"generated": dt.datetime.now(dt.UTC).isoformat(), "window": [WINDOW_START, WINDOW_END], "boundary": BOUNDARY} | ||
| 90 | P["identified"] = { | 91 | P["identified"] = { | ||
| 92 | + "openalex_pass1_cs_topic_filter": n(f"SELECT count(*) FROM read_parquet('{R}/data/processed/compact/works.parquet')"), | ||||
| 93 | + "openalex_pass2_dblp_arxiv_linked": n(f"SELECT count(*) FROM read_parquet('{R}/data/processed/compact/works_p2.parquet')") if os.path.exists(f"{R}/data/processed/compact/works_p2.parquet") else 0, | ||||
| 91 | "openalex_cs_topic_2018_2026_pass1": n("SELECT count(*) FROM oa_keys"), | 94 | "openalex_cs_topic_2018_2026_pass1": n("SELECT count(*) FROM oa_keys"), | ||
| 92 | "openalex_total_records_loaded": n("SELECT count(*) FROM cw0"), | 95 | "openalex_total_records_loaded": n("SELECT count(*) FROM cw0"), | ||
| 93 | "dblp_2018_2026": n("SELECT count(*) FROM dblp_keys"), "arxiv_cs_2018_2026": n("SELECT count(*) FROM arxiv_keys WHERE created_year BETWEEN 2018 AND 2026"), | 96 | "dblp_2018_2026": n("SELECT count(*) FROM dblp_keys"), "arxiv_cs_2018_2026": n("SELECT count(*) FROM arxiv_keys WHERE created_year BETWEEN 2018 AND 2026"), | ||
@@ -105,6 +108,8 @@ def main(): | |||||
| 105 | P["version_relationship"] = dict(q("SELECT version_relationship, count(*) FROM corpus_works WHERE eligible AND version_relationship IS NOT NULL GROUP BY 1")) | 108 | P["version_relationship"] = dict(q("SELECT version_relationship, count(*) FROM corpus_works WHERE eligible AND version_relationship IS NOT NULL GROUP BY 1")) | ||
| 106 | P["cs_core_eligible"] = n("SELECT count(*) FROM corpus_works WHERE eligible") | 109 | P["cs_core_eligible"] = n("SELECT count(*) FROM corpus_works WHERE eligible") | ||
| 107 | P["cs_penumbra_eligible_otherwise"] = n(f"SELECT count(*) FROM corpus_works WHERE {cond} AND cs_penumbra") | 110 | P["cs_penumbra_eligible_otherwise"] = n(f"SELECT count(*) FROM corpus_works WHERE {cond} AND cs_penumbra") | ||
| 111 | + P["neither_core_nor_penumbra_after_exclusions"] = n(f"SELECT count(*) FROM corpus_works WHERE {cond} AND NOT cs_core AND NOT cs_penumbra") | ||||
| 112 | + assert P["after_exclusions"] == P["cs_core_eligible"] + P["cs_penumbra_eligible_otherwise"] + P["neither_core_nor_penumbra_after_exclusions"], "core/penumbra partition violated" | ||||
| 108 | P["eligible_by_period"] = dict(q("SELECT period, count(*) FROM corpus_works WHERE eligible GROUP BY 1")) | 113 | P["eligible_by_period"] = dict(q("SELECT period, count(*) FROM corpus_works WHERE eligible GROUP BY 1")) | ||
| 109 | P["eligible_by_year"] = dict(q("SELECT publication_year, count(*) FROM corpus_works WHERE eligible GROUP BY 1 ORDER BY 1")) | 114 | P["eligible_by_year"] = dict(q("SELECT publication_year, count(*) FROM corpus_works WHERE eligible GROUP BY 1 ORDER BY 1")) | ||
| 110 | P["eligible_by_type"] = dict(q("SELECT type, count(*) FROM corpus_works WHERE eligible GROUP BY 1 ORDER BY 2 DESC")) | 115 | P["eligible_by_type"] = dict(q("SELECT type, count(*) FROM corpus_works WHERE eligible GROUP BY 1 ORDER BY 2 DESC")) | ||
modified
tables/make_tables.py
+110 −0
@@ -88,8 +88,118 @@ def main(): | |||||
| 88 | p = f"{R}/results/emerging/known_set_lead_times.csv" | 88 | p = f"{R}/results/emerging/known_set_lead_times.csv" | ||
| 89 | if os.path.exists(p): | 89 | if os.path.exists(p): | ||
| 90 | d = pd.read_csv(p)[["concept", "total_works", "detection_month", "peak_growth_month", "lead_months"]]; write("tab_known_set", d, "Preregistered known-emergence set: detection month, peak-growth month and lead time.", "tab:known_set", [p]) | 90 | d = pd.read_csv(p)[["concept", "total_works", "detection_month", "peak_growth_month", "lead_months"]]; write("tab_known_set", d, "Preregistered known-emergence set: detection month, peak-growth month and lead time.", "tab:known_set", [p]) | ||
| 91 | + tables_part08() # Part VIII tables (appended 2026-11-03) | ||||
| 91 | json.dump(INV, open(os.path.join(OUT, "TABLES.json"), "w"), indent=1); print(len(INV), "tables") | 92 | json.dump(INV, open(os.path.join(OUT, "TABLES.json"), "w"), indent=1); print(len(INV), "tables") | ||
| 92 | 93 | ||||
| 93 | 94 | ||||
| 95 | +# ---------------- Part VIII (Scientific Knowledge Networks): tables appended by Agent L/I, 2026-11-03 ---------------- | ||||
| 96 | +def _ascii(s, n=None): | ||||
| 97 | + """Titles and venue names contain characters (U+2010, curly quotes, ...) that inputenc does not define; normalise to ASCII.""" | ||||
| 98 | + import unicodedata | ||||
| 99 | + t = str(s).replace("‐", "-").replace("‑", "-").replace("–", "-").replace("—", "-").replace("’", "'").replace("‘", "'").replace("“", '"').replace("”", '"').replace("×", "x") | ||||
| 100 | + t = unicodedata.normalize("NFKD", t).encode("ascii", "ignore").decode("ascii").replace("$", "\\$").replace("^", "").replace("~", "-").replace("{", "").replace("}", "") | ||||
| 101 | + return (t[: n - 3].rstrip() + "\\dots") if (n and len(t) > n) else t | ||||
| 102 | + | ||||
| 103 | + | ||||
| 104 | +def tables_part08(): | ||||
| 105 | + B = f"{R}/results/bibliometrics"; G = f"{R}/results/graph" | ||||
| 106 | + p = f"{B}/team_size_yearly.csv"; q = f"{B}/international_collab_yearly.csv" | ||||
| 107 | + if os.path.exists(p): | ||||
| 108 | + d = pd.read_csv(p); d = d[d.year <= 2026] | ||||
| 109 | + d["sum_authors"] = d.mean_authors * d.n | ||||
| 110 | + g = d.groupby("year").agg(n=("n", "sum"), sum_authors=("sum_authors", "sum"), single=("single", "sum"), five_plus=("five_plus", "sum"), ten_plus=("ten_plus", "sum"), multi_inst=("multi_inst", "sum"), no_country=("no_country", "sum")).reset_index() | ||||
| 111 | + t = pd.DataFrame({"Year": g.year, "Works": g.n, "Mean authors": g.sum_authors / g.n, "Single (%)": 100 * g.single / g.n, "5+ (%)": 100 * g.five_plus / g.n, "10+ (%)": 100 * g.ten_plus / g.n, "Multi-inst. (%)": 100 * g.multi_inst / g.n, "No country (%)": 100 * g.no_country / g.n}) | ||||
| 112 | + if os.path.exists(q): | ||||
| 113 | + i = pd.read_csv(q); t = t.merge(pd.DataFrame({"Year": i.year, "Intl. (%)": 100 * i.share_intl}), on="Year", how="left") | ||||
| 114 | + t["Year"] = t.Year.astype(str) | ||||
| 115 | + write("tab_collaboration", t, "Team size and collaboration indicators by publication year (all eligible works; periods of the source file summed).", "tab:collaboration", [p, q], fmt={"Mean authors": "{:.3f}", "Single (%)": "{:.1f}", "5+ (%)": "{:.1f}", "10+ (%)": "{:.1f}", "Multi-inst. (%)": "{:.1f}", "No country (%)": "{:.1f}", "Intl. (%)": "{:.1f}"}, | ||||
| 116 | + note="Columns: works with one author, five or more, ten or more authors, and more than one institution. Shares are over all eligible works of the year, including works without affiliation data (column `No country'); the international share is over works with at least one resolved country (ICS, Part IV). 2026 is incomplete.") | ||||
| 117 | + p = f"{B}/institution_types_yearly.csv" | ||||
| 118 | + if os.path.exists(p): | ||||
| 119 | + d = pd.read_csv(p); d = d[d.year <= 2026]; tot = d.groupby("year").n.transform("sum"); d["share"] = 100 * d.n / tot | ||||
| 120 | + piv = d.pivot_table(index="itype", columns="year", values="share").fillna(0); piv = piv.loc[piv.sum(axis=1).sort_values(ascending=False).index].reset_index(); piv.columns = ["Institution type"] + [str(c) for c in piv.columns[1:]] | ||||
| 121 | + write("tab_institution_types", piv, "Share of typed affiliations by OpenAlex institution type and year (per cent of affiliation-work pairs).", "tab:institution_types", [p], fmt={c: "{:.2f}" for c in piv.columns[1:]}, note="A work with affiliations of several types counts once under each type; shares therefore describe the mix of affiliation types, not of works. Types follow the OpenAlex institution ontology (education, facility, company, government, healthcare, nonprofit, funder, archive, other).") | ||||
| 122 | + p = f"{B}/countries_yearly.csv" | ||||
| 123 | + if os.path.exists(p): | ||||
| 124 | + d = pd.read_csv(p); d = d[d.year <= 2026]; tot = d.groupby("year")[["n_full", "n_frac"]].sum() | ||||
| 125 | + top = d.groupby("country").n_frac.sum().nlargest(15).index | ||||
| 126 | + sh = d[d.country.isin(top)].copy(); sh["share"] = 100 * sh.n_frac / sh.year.map(tot.n_frac); piv = sh.pivot_table(index="country", columns="year", values="share").loc[top].reset_index(); piv.columns = ["Country"] + [str(c) for c in piv.columns[1:]] | ||||
| 127 | + write("tab_country_shares", piv, "Share of fractional output of the fifteen largest countries by year (per cent).", "tab:country_shares", [p], fmt={c: "{:.2f}" for c in piv.columns[1:]}, note="Fractional counting: each work is divided equally among its distinct author countries, so the shares of all countries sum to 100 within a year. ISO 3166-1 alpha-2 codes. 2026 is incomplete.") | ||||
| 128 | + rows = [] | ||||
| 129 | + for y, g in d.groupby("year"): | ||||
| 130 | + pf = g.n_frac / g.n_frac.sum(); cn = g[g.country == "CN"]; us = g[g.country == "US"] | ||||
| 131 | + rows.append({"Year": str(y), "Works": int(round(g.n_frac.sum())), "Countries": int(len(g)), "HHI": float((pf ** 2).sum()), "Top-5 (%)": 100 * pf.nlargest(5).sum(), "Top-10 (%)": 100 * pf.nlargest(10).sum(), "CN works (%)": 100 * float(cn.n_full.sum()) / g.n_frac.sum(), "US works (%)": 100 * float(us.n_full.sum()) / g.n_frac.sum(), "CN full/frac": float(cn.n_full.sum()) / float(cn.n_frac.sum()), "US full/frac": float(us.n_full.sum()) / float(us.n_frac.sum())}) | ||||
| 132 | + write("tab_country_concentration", pd.DataFrame(rows), "Concentration of output across countries by year, and the two largest producers under full counting.", "tab:country_concentration", [p], fmt={"HHI": "{:.4f}", "Top-5 (%)": "{:.1f}", "Top-10 (%)": "{:.1f}", "CN works (%)": "{:.2f}", "US works (%)": "{:.2f}", "CN full/frac": "{:.3f}", "US full/frac": "{:.3f}"}, | ||||
| 133 | + note="Works: fractional total of works with at least one country; Countries: number of countries with any output; HHI: Herfindahl--Hirschman index of fractional country shares; Top-5/Top-10: fractional share of the five and ten largest countries. CN/US works: share of works with at least one author in the country among works with a country (full counting); CN/US full/frac: ratio of the country's full count to its fractional count, which exceeds one by the extent to which its works are co-authored with other countries.") | ||||
| 134 | + p = f"{B}/country_pairs_by_period.csv" | ||||
| 135 | + if os.path.exists(p): | ||||
| 136 | + d = pd.read_csv(p); d = d[d.period.isin(["baseline", "post"])] | ||||
| 137 | + rows = [] | ||||
| 138 | + for per in ["baseline", "post"]: | ||||
| 139 | + g = d[d.period == per]; w = g.n.sum(); cu = g[g.c1.isin(["CN", "US"]) & g.c2.isin(["CN", "US"])].n.sum(); st = pd.concat([g[["c1", "n"]].rename(columns={"c1": "c"}), g[["c2", "n"]].rename(columns={"c2": "c"})]).groupby("c").n.sum().sort_values(ascending=False) | ||||
| 140 | + rows.append({"Period": per, "Edges": int(len(g)), "Countries": int(len(set(g.c1) | set(g.c2))), "Weight": int(w), "CN--US": int(cu), "CN--US (%)": 100 * cu / w, "Top strength": st.index[0] + ", " + st.index[1] + ", " + st.index[2]}) | ||||
| 141 | + write("tab_country_network", pd.DataFrame(rows), "The country co-authorship network by period: edges with at least fifty joint works.", "tab:country_network", [p], fmt={"CN--US (%)": "{:.2f}"}, note="Edges: country pairs with at least fifty joint works; Weight: total joint works over these edges; CN--US: weight of the China--United States edge and its share of the total; Top strength: the three countries with the largest strength (sum of edge weights). Baseline: 2018-01-01 to 2022-11-29; post: 2022-11-30 to 2026-11-02 (incomplete).") | ||||
| 142 | + b = d[d.period == "baseline"].sort_values("n", ascending=False).head(20).reset_index(drop=True); q = d[d.period == "post"].sort_values("n", ascending=False).head(20).reset_index(drop=True) | ||||
| 143 | + t = pd.DataFrame({"Rank": [str(i + 1) for i in range(20)], "Pair (baseline)": b.c1 + "--" + b.c2, "Joint works (baseline)": b.n.astype(int), "Pair (post)": q.c1 + "--" + q.c2, "Joint works (post)": q.n.astype(int)}) | ||||
| 144 | + write("tab_country_pairs", t, "The twenty strongest country pairs by period (number of joint works).", "tab:country_pairs", [p], note="Pairs are unordered; HK and MO are OpenAlex country codes for Hong Kong and Macau and are distinct from CN in the affiliation data. The post period is incomplete.") | ||||
| 145 | + p = f"{B}/top_institutions_by_period.csv" | ||||
| 146 | + if os.path.exists(p): | ||||
| 147 | + d = pd.read_csv(p); b = d[d.period == "baseline"].set_index("inst_id"); q = d[d.period == "post"].set_index("inst_id"); j = b.join(q, lsuffix="_b", rsuffix="_p", how="inner") | ||||
| 148 | + rows = [] | ||||
| 149 | + for per, g in [("baseline", b), ("post", q)]: | ||||
| 150 | + pf = g.n_frac / g.n_frac.sum() | ||||
| 151 | + rows.append({"Period": per, "Institutions": int(len(g)), "Fractional works": int(round(g.n_frac.sum())), "Full-count works": int(g.n_full.sum()), "Top-10 (%)": 100 * pf.nlargest(10).sum(), "Top-50 (%)": 100 * pf.nlargest(50).sum(), "Top-100 (%)": 100 * pf.nlargest(100).sum()}) | ||||
| 152 | + rows.append({"Period": "both periods", "Institutions": int(len(j)), "Fractional works": int(round(j.n_frac_b.sum())), "Full-count works": int(j.n_full_b.sum()), "Top-10 (%)": float("nan"), "Top-50 (%)": float("nan"), "Top-100 (%)": float("nan")}) | ||||
| 153 | + t = pd.DataFrame(rows); write("tab_institution_concentration", t, "Institutions with at least two hundred works per period: coverage and concentration (fractional counting).", "tab:institution_concentration", [p], fmt={"Top-10 (%)": "{:.2f}", "Top-50 (%)": "{:.2f}", "Top-100 (%)": "{:.2f}"}, | ||||
| 154 | + note=f"Institutions: number with at least two hundred works in the period; Top-10/50/100: fractional share of the largest listed institutions relative to the listed institutions, not to all works. The row `both periods' counts the institutions present in both lists (its work columns are their baseline totals); the Spearman rank correlation of their fractional counts across periods is {j.n_frac_b.rank().corr(j.n_frac_p.rank(), method='spearman'):.3f}.") | ||||
| 155 | + top = j.sort_values("n_frac_p", ascending=False).head(25) | ||||
| 156 | + t = pd.DataFrame({"OpenAlex id": ["I" + str(i) for i in top.index], "Full, base": top.n_full_b.astype(int).values, "Frac., base": top.n_frac_b.values, "Full, post": top.n_full_p.astype(int).values, "Frac., post": top.n_frac_p.values, "Ratio": (top.n_frac_p / top.n_frac_b).values}) | ||||
| 157 | + write("tab_top_institutions", t, "The twenty-five institutions with the largest fractional output in the post period, with their baseline output.", "tab:top_institutions", [p], fmt={"Frac., base": "{:,.0f}", "Frac., post": "{:,.0f}", "Ratio": "{:.2f}"}, longtable=False, | ||||
| 158 | + note="Full and fractional counts in the baseline and post periods; Ratio is the post-to-baseline ratio of fractional counts. Institution names are not stored in the result file; the identifiers resolve at https://openalex.org/I<id>. The post period is about ten months shorter than the baseline, so a ratio below the corpus-wide ratio does not indicate decline.") | ||||
| 159 | + p = f"{B}/top_sources_by_period.csv" | ||||
| 160 | + if os.path.exists(p): | ||||
| 161 | + d = pd.read_csv(p); d = d[d.period.isin(["baseline", "post"])] | ||||
| 162 | + rows = [] | ||||
| 163 | + for per in ["baseline", "post"]: | ||||
| 164 | + g = d[d.period == per]; bt = g.groupby("source_type").n.sum(); w = bt.sum() | ||||
| 165 | + r = {"Period": per, "Sources": int(len(g)), "Works": int(w)} | ||||
| 166 | + for ty in ["journal", "conference", "repository", "book series", "ebook platform"]: | ||||
| 167 | + r[ty.replace("ebook platform", "ebook").replace("book series", "series") + " (%)"] = 100 * float(bt.get(ty, 0)) / w | ||||
| 168 | + rows.append(r) | ||||
| 169 | + write("tab_source_types", pd.DataFrame(rows), "Distribution of works over source types among the listed sources, by period (per cent).", "tab:source_types", [p], fmt={c: "{:.1f}" for c in ["journal (%)", "conference (%)", "repository (%)", "series (%)", "ebook (%)"]}, note="Source types are OpenAlex's (series = book series; ebook = ebook platform). The listed sources are those retained by the bibliometric script for each period; works whose primary source is not listed are excluded from the denominators.") | ||||
| 170 | + b = d[d.period == "baseline"].sort_values("n", ascending=False).head(20).reset_index(drop=True); q = d[d.period == "post"].sort_values("n", ascending=False).head(20).reset_index(drop=True) | ||||
| 171 | + t = pd.DataFrame({"Rank": [str(i + 1) for i in range(20)], "Source (baseline)": [_ascii(x, 30) for x in b.source_name], "Type": [_ascii(x).replace("ebook platform", "ebook").replace("book series", "series").replace("repository", "repos.").replace("conference", "conf.") for x in b.source_type], "Works": b.n.astype(int), "Source (post)": [_ascii(x, 30) for x in q.source_name], "Type ": [_ascii(x).replace("ebook platform", "ebook").replace("book series", "series").replace("repository", "repos.").replace("conference", "conf.") for x in q.source_type], "Works ": q.n.astype(int)}) | ||||
| 172 | + write("tab_top_sources", t, "The twenty largest sources (venues) by period, with OpenAlex source type.", "tab:top_sources", [p], longtable=True, note="Source names are OpenAlex display names, truncated; types abbreviated (repos. = repository, conf. = conference, series = book series, ebook = ebook platform).") | ||||
| 173 | + p = f"{G}/cited_age_yearly.csv" | ||||
| 174 | + if os.path.exists(p): | ||||
| 175 | + d = pd.read_csv(p); rows = [] | ||||
| 176 | + for y, g in d.groupby("citing_year"): | ||||
| 177 | + if y < 2018 or y > 2026: continue | ||||
| 178 | + n = g.n.sum(); neg = g[g.age < 0].n.sum(); gg = g[g.age >= 0].sort_values("age"); w = gg.n.values; ag = gg.age.values | ||||
| 179 | + import numpy as np | ||||
| 180 | + cum = np.cumsum(w) / w.sum(); med = int(ag[np.searchsorted(cum, 0.5)]) | ||||
| 181 | + rows.append({"Citing year": str(y), "References": int(n), "Negative (%)": 100 * neg / n, "Mean age": float((w * ag).sum() / w.sum()), "Median": med, "0--2 y (%)": 100 * gg[gg.age <= 2].n.sum() / w.sum(), "0--5 y (%)": 100 * gg[gg.age <= 5].n.sum() / w.sum(), "over 10 y (%)": 100 * gg[gg.age > 10].n.sum() / w.sum()}) | ||||
| 182 | + write("tab_cited_age", pd.DataFrame(rows), "Age of cited works by citing year (resolved references of eligible works; corpus version of the result file at generation time).", "tab:cited_age", [p], fmt={"Negative (%)": "{:.2f}", "Mean age": "{:.2f}", "0--2 y (%)": "{:.1f}", "0--5 y (%)": "{:.1f}", "over 10 y (%)": "{:.1f}"}, | ||||
| 183 | + note="References: resolved references of eligible works of the citing year. Age is the citing year minus the cited work's publication year. Negative ages (cited work dated after the citing work: preprints cited before their published version, or year-only dates) are excluded from the age statistics and reported as a share. The 2026 row is incomplete.") | ||||
| 184 | + p = f"{B}/top_cited_by_year.csv" | ||||
| 185 | + if os.path.exists(p): | ||||
| 186 | + d = pd.read_csv(p); d = d[(d.year >= 2018) & (d.year <= 2025) & (d.rk <= 10)].sort_values(["year", "rk"]) | ||||
| 187 | + t = pd.DataFrame({"Year": d.year.astype(str).values, "Rk": d.rk.astype(str).values, "Title (truncated)": [_ascii(x, 44) for x in d.title], "c36": d.c36.astype(int).values, "Total": d.cited_by_count.astype(int).values}) | ||||
| 188 | + write("tab_top_cited", t, "The ten most cited works of each publication year by 36-month window citations (c36), with total citations to date.", "tab:top_cited", [p], longtable=True, note="As recorded in OpenAlex (snapshot 2026-10-14 plus increment). Several entries are duplicate or misdated records of canonical works, or records whose citation counts are inconsistent with their total (c36 larger than the total, or a total of zero); they are kept because the table documents what the database returns, and are discussed in the text.") | ||||
| 189 | + p = f"{B}/dblp_only_yearly.csv" | ||||
| 190 | + if os.path.exists(p): | ||||
| 191 | + d = pd.read_csv(p); piv = d.pivot_table(index="year", columns="rec_type", values="n", aggfunc="sum").fillna(0).astype(int); piv["total"] = piv.sum(axis=1); piv["with DOI (%)"] = 100 * d.groupby("year").with_doi.sum() / d.groupby("year").n.sum() | ||||
| 192 | + piv = piv.reset_index(); piv["year"] = piv.year.astype(str); piv.columns = ["Year"] + [str(c) for c in piv.columns[1:]] | ||||
| 193 | + write("tab_dblp_only", piv, "DBLP records of 2018--2026 without an OpenAlex counterpart, by DBLP record type and year.", "tab:dblp_only", [p], fmt={"with DOI (%)": "{:.1f}"}, note="These records are in DBLP but were not linked to any OpenAlex work by DOI, arXiv identifier or normalised title (Part IV). They are not in the eligible corpus; the table bounds what DBLP-based studies would see that this corpus does not.") | ||||
| 194 | + p = f"{B}/indexing_lag.csv" | ||||
| 195 | + if os.path.exists(p): | ||||
| 196 | + d = pd.read_csv(p); d["year"] = d.pub_month.str[:4].astype(int); rows = [] | ||||
| 197 | + for y, g in d.groupby("year"): | ||||
| 198 | + jan = g[g.pub_month.str.endswith("-01")]; jun = g[g.pub_month.str.endswith("-06")] | ||||
| 199 | + rows.append({"Year": str(y), "Works": int(g.n.sum()), "Lag, Jan. (d)": float(jan.lag_days_p50.iloc[0]) if len(jan) else float("nan"), "Lag, June (d)": float(jun.lag_days_p50.iloc[0]) if len(jun) else float("nan"), "Within 90 d (%)": 100 * g.n_indexed_within_90d.sum() / g.n.sum(), "After 180 d (%)": 100 * g.n_indexed_after_180d.sum() / g.n.sum()}) | ||||
| 200 | + write("tab_indexing_lag", pd.DataFrame(rows), "The OpenAlex \\texttt{created\\_date} relative to the publication date, by publication year.", "tab:indexing_lag", [p], fmt={"Lag, Jan. (d)": "{:.0f}", "Lag, June (d)": "{:.0f}", "Within 90 d (%)": "{:.1f}", "After 180 d (%)": "{:.1f}"}, | ||||
| 201 | + note="Lag is created\\_date minus publication date; the two lag columns give the median lag in days for works published in January and in June of the year; the last two columns give the shares of the year's works whose record was created within 90 days and after 180 days of publication. The near-constant decline of the median by one month per publication month in 2018--2024 identifies a single creation date for most records (a re-ingestion), not an indexing delay; see Part III.") | ||||
| 202 | + | ||||
| 203 | + | ||||
| 94 | if __name__ == "__main__": | 204 | if __name__ == "__main__": | ||
| 95 | main() | 205 | main() | ||
| 96 | 206 | ||||