SPB Git

spb/wp44_uqo

Public

WP44: Part VIII v3 graph figures/tables; API-increment attribution corrected

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Nov 4, 2026) parent f6af7f1 Browse files

6 changed files +170 −56

modified manuscript/main.pdf +0 −0

Binary file not shown.

modified manuscript/sections/part08_networks.tex +93 −56
@@ -1,6 +1,7 @@
1 1 % part08_networks.tex — Part VIII, Scientific Knowledge Networks (Agent L/I, 2026-11-03).
2 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).
3 +% Result files: results/bibliometrics/*.csv (corpus v2, 2026-11-03 18:0x) and results/graph/*.csv (corpus v3 graph, 2026-11-03 18:44;
4 +% tables tab_field_flows, tab_reference_coverage, tab_cited_age regenerated from them by tables/make_tables.py, Agent L/M).
4 5
5 6 \section{Scope and reading rules}
6 7 \label{sec:net-scope}
@@ -20,8 +21,8 @@ Part~III (Section~\ref{sec:data-eligibility}), so that ``computer science'' mean
20 21 OpenAlex-primary-field and arXiv \texttt{cs} works after the exclusions of the PRISMA flow, and the indicators
21 22 inherit the boundary decisions and the affiliation completeness of that corpus. Second, the two periods of the
22 23 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
24 +November 2022, the post period from December 2022 to the snapshot of October 2026 (the API increment of
25 +Part~III is archived but not yet merged into the analytical corpus), and the last year of the post period is partial for the reasons set out in
25 26 Section~\ref{sec:data-dates}. Tables by year therefore carry 2026 as an incomplete row, and the fixed-window
26 27 citation statistics of Section~\ref{sec:net-citations} are complete only up to the publication years flagged in
27 28 Table~\ref{tab:citation_windows}. Third, the comparison of periods is descriptive. The protocol states the
@@ -401,7 +402,7 @@ three years falls from \CitationWindowsYearlyTwoZeroOneEightShareUncitedThreeSix
401 402 citing population produces: each publication year is cited by the following two years' output, and that output
402 403 grows, so later cohorts receive more citations at equal exposure \citep{bornmann2015growth}. The reversal in
403 404 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 +is 2025, for which the slower channels of indexing (and citation extraction) are not complete; it is
405 406 flagged in the table and is the reason the 2024 row, whose window is formally incomplete, is not used.
406 407
407 408 The Gini coefficient of $c^{(36)}$ is the inequality statistic named, with a deviation in window length
@@ -506,48 +507,76 @@ H4 predicts that the share of citations crossing area boundaries rises in the po
506 507 defines two levels at which flows are measured: between the taxonomy categories of this study, through the
507 508 flow matrices of equation~\eqref{eq:flow}, and between the corpus and the rest of the literature, through the
508 509 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}.
510 +the second level is available at the time of writing. Figure~\ref{fig:field_inflows} and
511 +Table~\ref{tab:field_flows} are generated from the current graph tables of \texttt{results/graph/}
512 +(\texttt{field\_flows\_yearly.csv}, corpus v3), and Table~\ref{tab:reference_coverage}, from
513 +\texttt{reference\_coverage\_yearly.csv}, gives the denominators on which every share in this section rests:
514 +the declared references of the eligible works of each citing year, the share of them that resolve to an
515 +OpenAlex record, and the split of the resolved references into internal and external edges.
513 516
514 517 \begin{figure}[htbp]
515 518 \centering
516 519 \includegraphics[width=0.95\textwidth]{fig_field_inflows.pdf}
517 520 \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.}
521 +corpus and to works outside it by cited OpenAlex field (seven largest external fields). Generated by
522 +\texttt{figures/make\_figures.py} from \texttt{results/graph/field\_flows\_yearly.csv} (corpus v3); the
523 +values are in Table~\ref{tab:field_flows}.}
520 524 \label{fig:field_inflows}
521 525 \end{figure}
522 526
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.
527 +Table~\ref{tab:reference_coverage} is read first because it conditions the rest. The number of declared
528 +references per eligible work rises through the baseline and falls again in the last three citing years, the
529 +2026 row being the shortest; this is the right-truncation of reference lists (recent records are indexed
530 +before their reference lists are complete) rather than a change in citing practice, and it means that the
531 +shares of the last two rows of every table in this section are computed on fewer references per work than
532 +the earlier rows. The share of declared references that resolve to an OpenAlex record is nearly constant
533 +from 2018 to 2024 and higher in 2025--2026; the recent cohorts carry fewer parsed references per work (the
534 +reference-extraction channels of OpenAlex lag publication), and the references that are already parsed for
535 +them resolve more often. The difference describes how the database was assembled, not what authors cite, and
536 +it is the reason the flow statistics are expressed as shares of resolved references, as the methodology requires.
537 +The internal share of resolved references rises steeply with the citing year, and this is the mechanical
538 +feature of Figure~\ref{fig:field_inflows} that must be read before any other: the corpus starts in 2018, so a
539 +work published in 2018 cannot cite inside it except at age zero, whereas a work published in 2026 has eight
540 +years of corpus to cite. The share of references pointing to computer science outside the corpus, which is
541 +mostly pre-2018 computer science, falls as the internal share rises.
542 +
543 +The two computer-science columns of Table~\ref{tab:field_flows} do not, however, sum to a constant. Their
544 +sum, the share of references that stay within the field, rises in every citing year of the window, and its
545 +complement, the share of references that cross into another OpenAlex field (column `Other fields'), falls in
546 +every year, in the baseline years as in the post years and at a comparable pace on either side of the 2022
547 +boundary. Engineering, the largest external field, accounts for the greater part of the decline;
548 +mathematics, decision sciences, physics and psychology decline slowly; the social sciences are stable; and
549 +medicine is the only field among the seven whose share rises, so that by the end of the window it is the
550 +second largest external destination after engineering. On this evidence the field-level version of H4 is
551 +not supported: the boundary-crossing share of computer-science references toward other fields does not rise
552 +after 2022, it continues to fall, and no change of pace is visible at the boundary.
553 +
554 +Two reservations qualify the direction, though not the absence of a break. The first is a classification
555 +boundary. The eligible corpus is the CS core of Part~III, that is, works with a computer-science topic
556 +whatever their primary field, so a post-2018 engineering work with a computer-science topic is an internal
557 +edge while its pre-2018 counterpart is an external edge typed as engineering; as the corpus lengthens, part
558 +of what used to be counted as a flow to engineering or mathematics is re-counted as internal, and the
559 +decline of the external shares is to that extent mechanical. The field-flow file does not type internal
560 +edges by the cited work's primary field, so the size of this effect cannot be removed here; a flow table
561 +that types every resolved reference, internal or external, by primary field would be the correction, and it
562 +is noted for the director. The second is that H4 concerns boundaries \emph{within} computer science
563 +(systems toward AI, security toward AI, human--computer interaction toward AI), and a field whose sub-areas
564 +converge on a common set of methods may well cite less outside the field, not more, as its internal
565 +frontier absorbs the attention that used to go to engineering or mathematics. A falling external share is
566 +therefore compatible with H4 and with its negation, and only the category flow matrices can decide between
567 +them. What the field-level table does establish is a boundary condition for the interdisciplinarity
568 +literature: the diversity indices of Section~\ref{sec:m-diversity}, whether Rao--Stirling or
569 +Leinster--Cobbold, are computed over a reference distribution whose external component is shrinking
570 +smoothly, so that any change they detect at the 2022 boundary will come from the internal component.
571 +\citet{porter2009interdisciplinarity} found, for six fields over three decades, that interdisciplinarity
572 +measured on references rose slowly and mostly through neighbouring fields; the computer-science columns show
573 +the neighbouring fields (engineering, mathematics, decision sciences) losing share and a non-neighbouring
574 +one (medicine) gaining it, and they do not show the acceleration that the foundation-model narrative would
575 +predict.
576 +
577 +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3pt}\input{tables/tab_reference_coverage}\endgroup
578 +
579 +\begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{2.5pt}\input{tables/tab_field_flows}\endgroup
551 580
552 581 \subsection{The age of cited work}
553 582 \label{sec:net-age}
@@ -563,24 +592,26 @@ turnover is expected to be fastest, and \citet{frank2019citationgraphs} found th
563 592 become more self-referential and more recent-leaning over the 2010s.
564 593
565 594 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
595 +citing year minus the cited work's publication year, for the resolved references of eligible works, read
596 +from the corpus v3 file \texttt{results/graph/cited\_age\_yearly.csv}, which is built on the same edge sets as
597 +Table~\ref{tab:reference_coverage}. The mode of citation age is two years in every citing year (visible in
598 +the figure, where every curve peaks at the same abscissa); the mean age falls in every citing year from 2018
599 +to 2026; the median falls over the baseline years and is constant from 2021 onward; the share of
600 +references to works at most five years old rises by roughly the amount by which the share of references to
601 +works more than ten years old falls; and the share of references to works at most two years old rises less,
602 +and mostly during the baseline years. The shift is steady and does not accelerate at the 2022 boundary; the
603 +post-period curves in the figure continue the movement of the baseline curves, and the year-to-year changes
604 +of the mean in the table are of the same order before and after it, if anything smaller after. A small share of references point to
574 605 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.
606 +a later date and from year-only dates; this share falls to zero over the window as the corpus's own dates
607 +become first-appearance dates, and it is excluded from the age statistics.
577 608
578 609 \begin{figure}[htbp]
579 610 \centering
580 611 \includegraphics[width=0.95\textwidth]{fig_cited_age.pdf}
581 612 \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.}
613 +citing years. Generated by \texttt{figures/make\_figures.py} from
614 +\texttt{results/graph/cited\_age\_yearly.csv} (corpus v3); summary statistics in Table~\ref{tab:cited_age}.}
584 615 \label{fig:cited_age}
585 616 \end{figure}
586 617
@@ -589,9 +620,14 @@ with \citet{verstak2014giants} for this field and this window, with one reservat
589 620 coverage of OpenAlex imposes. If the probability that a reference string resolves to an OpenAlex record is
590 621 higher for recent, DOI-bearing works than for older ones, as \citet{culbert2025openalexcoverage} report in
591 622 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.
623 +constant true age distribution would appear to become younger as the resolvable share rises.
624 +Table~\ref{tab:reference_coverage} is the control. The resolved share is nearly constant from 2018 to 2024,
625 +so over those years a resolution bias toward recent works would shift the level of the age distribution but
626 +not its trend; the fall of the mean and of the over-ten-year share between 2018 and 2024 is therefore not an
627 +artefact of a rising resolvable share. The 2025 and 2026 rows are different: their resolved share is higher
628 +and their reference lists shorter (right-truncation), and the small further decline of the mean age in those
629 +two rows should not be read on its own. The age shift is reported here as observed within the resolved
630 +references, not as corrected for the composition of the unresolved ones, which cannot be typed.
595 631
596 632 \begingroup\renewcommand{\small}{\footnotesize}\setlength{\tabcolsep}{3.5pt}\input{tables/tab_cited_age}\endgroup
597 633
@@ -668,9 +704,10 @@ hypothesis that the available tables test.
668 704
669 705 H4 (convergence) is not testable in its stated form, which concerns citation flows between areas of the
670 706 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.
707 +counterpart, the share of computer-science references that cross into other OpenAlex fields, falls through
708 +the window with no change of pace at the boundary (Table~\ref{tab:field_flows},
709 +Section~\ref{sec:net-flows-fields}), part of the fall being a mechanical consequence of the corpus
710 +boundary; it neither supports nor contradicts the within-field convergence the hypothesis describes.
674 711
675 712 H5 (concentration) has two components. The citation-inequality component is stated for AI categories and is
676 713 pending; its aggregate counterpart gives a Gini of three-year citations that falls through the baseline and
modified manuscript/tables/TABLES.json +18 −0
@@ -233,5 +233,23 @@
233 233 "./results/bibliometrics/indexing_lag.csv"
234 234 ],
235 235 "rows": 9
236 + },
237 + {
238 + "file": "tab_reference_coverage.tex",
239 + "caption": "Reference coverage by citing year: declared, resolved, internal and external references of eligible works.",
240 + "label": "tab:reference_coverage",
241 + "sources": [
242 + "./results/graph/reference_coverage_yearly.csv"
243 + ],
244 + "rows": 9
245 + },
246 + {
247 + "file": "tab_field_flows.tex",
248 + "caption": "Destination of the resolved references of eligible works by citing year: inside the corpus, computer science outside it, and the seven largest other OpenAlex fields (per cent of resolved references).",
249 + "label": "tab:field_flows",
250 + "sources": [
251 + "./results/graph/field_flows_yearly.csv"
252 + ],
253 + "rows": 9
236 254 }
237 255 ]
\ No newline at end of file
added manuscript/tables/tab_field_flows.tex +20 −0
@@ -0,0 +1,20 @@
1 +% generated by tables/make_tables.py from ./results/graph/field_flows_yearly.csv
2 +\begin{table}[htbp]\centering\caption{Destination of the resolved references of eligible works by citing year: inside the corpus, computer science outside it, and the seven largest other OpenAlex fields (per cent of resolved references).}\label{tab:field_flows}
3 +\begin{threeparttable}\small
4 +\begin{tabular}{lrrrrrrrrrr}
5 +\toprule
6 +\textbf{Year} & \textbf{Inside} & \textbf{CS out} & \textbf{Other} & \textbf{Eng.} & \textbf{Soc.} & \textbf{Med.} & \textbf{Math.} & \textbf{Dec.} & \textbf{Psy.} & \textbf{Phys.} \\
7 +\midrule
8 +2018 & 2.36 & 48.04 & 49.61 & 17.57 & 4.11 & 2.93 & 3.93 & 3.13 & 2.36 & 2.37 \\
9 +2019 & 9.13 & 42.91 & 47.96 & 16.52 & 4.00 & 3.03 & 3.72 & 2.99 & 2.34 & 2.33 \\
10 +2020 & 17.35 & 36.57 & 46.08 & 14.93 & 4.01 & 3.44 & 3.51 & 2.73 & 2.17 & 2.22 \\
11 +2021 & 25.21 & 31.07 & 43.72 & 13.04 & 4.01 & 3.73 & 3.34 & 2.55 & 2.09 & 2.12 \\
12 +2022 & 31.89 & 25.32 & 42.79 & 12.48 & 4.09 & 3.79 & 2.92 & 2.38 & 2.11 & 2.05 \\
13 +2023 & 38.55 & 21.47 & 39.98 & 11.49 & 4.01 & 3.60 & 2.60 & 2.17 & 2.01 & 1.92 \\
14 +2024 & 43.81 & 17.68 & 38.51 & 11.01 & 3.74 & 3.70 & 2.37 & 2.01 & 1.90 & 1.79 \\
15 +2025 & 48.66 & 14.62 & 36.73 & 10.04 & 3.47 & 3.99 & 2.23 & 1.92 & 1.97 & 1.81 \\
16 +2026 & 53.06 & 12.94 & 34.00 & 8.39 & 3.66 & 4.12 & 1.90 & 1.88 & 2.08 & 1.62 \\
17 +\bottomrule
18 +\end{tabular}
19 +\begin{tablenotes}\footnotesize\item Shares of all resolved references of the citing year. Inside: cited work is an eligible work (computer science, 2018--2026); CS out: cited work outside the corpus whose primary OpenAlex field is Computer Science (field 17; mostly pre-2018 work); Other: all remaining external references, including those without a field. The seven field columns are the largest components of `Other': Eng. = Engineering (OpenAlex field 22), Soc. = Social Sciences (33), Med. = Medicine (27), Math. = Mathematics (26), Dec. = Decision Sciences (18), Psy. = Psychology (32), Phys. = Physics and Astronomy (31). The rise of the inside-corpus share is mechanical: the corpus starts in 2018, so later citing years have more corpus to cite. The 2026 row is incomplete.\end{tablenotes}
20 +\end{threeparttable}\end{table}
added manuscript/tables/tab_reference_coverage.tex +20 −0
@@ -0,0 +1,20 @@
1 +% generated by tables/make_tables.py from ./results/graph/reference_coverage_yearly.csv
2 +\begin{table}[htbp]\centering\caption{Reference coverage by citing year: declared, resolved, internal and external references of eligible works.}\label{tab:reference_coverage}
3 +\begin{threeparttable}\small
4 +\begin{tabular}{lrrrrrrr}
5 +\toprule
6 +\textbf{Year} & \textbf{Works} & \textbf{Declared refs.} & \textbf{Refs./work} & \textbf{Resolved (\%)} & \textbf{Internal} & \textbf{External} & \textbf{Internal (\%)} \\
7 +\midrule
8 +2018 & 642{,}849 & 11{,}636{,}120 & 18.10 & 91.38 & 250{,}426 & 10{,}382{,}501 & 2.36 \\
9 +2019 & 695{,}369 & 13{,}742{,}477 & 19.76 & 90.90 & 1{,}140{,}570 & 11{,}351{,}646 & 9.13 \\
10 +2020 & 709{,}083 & 15{,}693{,}875 & 22.13 & 90.83 & 2{,}472{,}715 & 11{,}781{,}999 & 17.35 \\
11 +2021 & 711{,}244 & 18{,}149{,}160 & 25.52 & 90.12 & 4{,}123{,}503 & 12{,}233{,}358 & 25.21 \\
12 +2022 & 699{,}548 & 17{,}415{,}217 & 24.89 & 90.16 & 5{,}007{,}511 & 10{,}694{,}227 & 31.89 \\
13 +2023 & 785{,}194 & 19{,}017{,}108 & 24.22 & 90.06 & 6{,}602{,}036 & 10{,}524{,}219 & 38.55 \\
14 +2024 & 901{,}654 & 19{,}707{,}017 & 21.86 & 90.70 & 7{,}830{,}508 & 10{,}044{,}195 & 43.81 \\
15 +2025 & 1{,}065{,}828 & 18{,}600{,}370 & 17.45 & 94.27 & 8{,}532{,}009 & 9{,}003{,}120 & 48.66 \\
16 +2026 & 901{,}651 & 9{,}809{,}537 & 10.88 & 99.81 & 5{,}195{,}458 & 4{,}595{,}776 & 53.06 \\
17 +\bottomrule
18 +\end{tabular}
19 +\begin{tablenotes}\footnotesize\item Works: eligible works of the year (including works with no reference list); Declared: entries of their OpenAlex \texttt{referenced\_works} lists; Resolved: declared references that resolve to an OpenAlex record (internal = cited work in the eligible corpus; external = cited work outside it), as a share of the declared count; Internal (\%): internal share of resolved references. The resolved share of 2025--2026 is higher than in earlier years because the recent cohorts carry fewer parsed references per work (reference extraction lags publication) and the parsed ones resolve more often; it describes the database, not citing behaviour. The 2026 row is incomplete.\end{tablenotes}
20 +\end{threeparttable}\end{table}
modified tables/make_tables.py +19 −0
@@ -202,6 +202,25 @@ def tables_part08():
202 202 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()})
203 203 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}"},
204 204 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.")
205 + # ---- corpus v3 graph tables (appended by Agent L/M, 2026-11-03): reference coverage and field-level inflows ----
206 + p = f"{G}/reference_coverage_yearly.csv"
207 + if os.path.exists(p):
208 + d = pd.read_csv(p); d = d[(d.year >= 2018) & (d.year <= 2026)].copy(); res = d.n_internal + d.n_external
209 + t = pd.DataFrame({"Year": d.year.astype(str), "Works": d.n_works.astype(int), "Declared refs.": d.n_refs_declared.astype(int), "Refs./work": d.n_refs_declared / d.n_works, "Resolved (%)": 100 * res / d.n_refs_declared, "Internal": d.n_internal.astype(int), "External": d.n_external.astype(int), "Internal (%)": 100 * d.n_internal / res})
210 + write("tab_reference_coverage", t, "Reference coverage by citing year: declared, resolved, internal and external references of eligible works.", "tab:reference_coverage", [p], fmt={"Refs./work": "{:.2f}", "Resolved (%)": "{:.2f}", "Internal (%)": "{:.2f}"},
211 + note="Works: eligible works of the year (including works with no reference list); Declared: entries of their OpenAlex \\texttt{referenced\\_works} lists; Resolved: declared references that resolve to an OpenAlex record (internal = cited work in the eligible corpus; external = cited work outside it), as a share of the declared count; Internal (\\%): internal share of resolved references. The resolved share of 2025--2026 is higher than in earlier years because the recent cohorts carry fewer parsed references per work (reference extraction lags publication) and the parsed ones resolve more often; it describes the database, not citing behaviour. The 2026 row is incomplete.")
212 + p = f"{G}/field_flows_yearly.csv"
213 + if os.path.exists(p):
214 + d = pd.read_csv(p); d = d[(d.citing_year >= 2018) & (d.citing_year <= 2026)]; tot = d.groupby("citing_year").n.sum()
215 + names = {17: "CS", 22: "Eng.", 33: "Soc.", 27: "Med.", 26: "Math.", 18: "Dec.", 32: "Psy.", 31: "Phys."}
216 + ext = d[d.kind == "external"]; internal = d[d.kind == "internal"].groupby("citing_year").n.sum().reindex(tot.index).fillna(0)
217 + byf = ext.pivot_table(index="citing_year", columns="cited_field_id", values="n", aggfunc="sum").reindex(tot.index).fillna(0)
218 + cs = byf[17.0] if 17.0 in byf.columns else 0 * tot
219 + t = pd.DataFrame({"Year": [str(y) for y in tot.index], "Inside": 100 * internal.values / tot.values, "CS out": 100 * cs.values / tot.values, "Other": 100 * (tot.values - internal.values - cs.values) / tot.values})
220 + for fid in [22, 33, 27, 26, 18, 32, 31]:
221 + t[names[fid]] = 100 * (byf[float(fid)].values if float(fid) in byf.columns else 0) / tot.values
222 + write("tab_field_flows", t, "Destination of the resolved references of eligible works by citing year: inside the corpus, computer science outside it, and the seven largest other OpenAlex fields (per cent of resolved references).", "tab:field_flows", [p], fmt={c: "{:.2f}" for c in t.columns[1:]},
223 + note="Shares of all resolved references of the citing year. Inside: cited work is an eligible work (computer science, 2018--2026); CS out: cited work outside the corpus whose primary OpenAlex field is Computer Science (field 17; mostly pre-2018 work); Other: all remaining external references, including those without a field. The seven field columns are the largest components of `Other': Eng. = Engineering (OpenAlex field 22), Soc. = Social Sciences (33), Med. = Medicine (27), Math. = Mathematics (26), Dec. = Decision Sciences (18), Psy. = Psychology (32), Phys. = Physics and Astronomy (31). The rise of the inside-corpus share is mechanical: the corpus starts in 2018, so later citing years have more corpus to cite. The 2026 row is incomplete.")
205 224
206 225
207 226 if __name__ == "__main__":
208 227
Menu

Theme