SPB Git

spb/wp44_uqo

Public

WP44: Appendices B, C (Agent L); Part IV aligned with code; provenance macros

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

11 changed files +950 −14

modified agents/REGISTER.md +1 −1
@@ -10,4 +10,4 @@
10 10 | 2026-11-03 | N (code auditor, subagent) | prompt in session | reports/audit/CODE_AUDIT_2026-11-03.md, code_issues.csv (67 issues: 2 blocking, 20 major, 45 minor) | A: P0 + main P1 fixed in commit of 2026-11-03 17:10 (see reports/DISCREPANCIES_PLAN_VS_CODE.md) | delivered |
11 11 | 2026-11-03 | L (appendices A/E/H, subagent) | agents/briefs/WRITER_APPENDICES_AEH.md | manuscript/appendices/appA_taxonomy.tex (8,360 w), appE_data_dictionary.tex (5,598 w, schema-checked), appH_reproducibility.tex (3,446 w) | M (compile) + N (Phase 8) | delivered |
12 12 | 2026-11-03 | L (Part II, subagent) | agents/briefs/WRITER_PART02.md | manuscript/sections/part02_evolution.tex (12,677 w, 224 verified refs) | K + M | delivered |
13 −| 2026-11-03 | L (appendices B/C, subagent) | agents/briefs/WRITER_APPENDICES_BC.md | appB_search_and_sources.tex, appC_derivations.tex | K + M | running |
13 +| 2026-11-03 | L (appendices B/C, subagent) | agents/briefs/WRITER_APPENDICES_BC.md | appB_search_and_sources.tex (5,336 w), appC_derivations.tex (6,509 w), references_appBC.bib (5 verified) | K + M; A aligned Part IV with the code (α MASI, standardised features, cutoffs, diversity script) | delivered |
added data/metadata/acl_parse_report.json +13 −0
@@ -0,0 +1,13 @@
1 +{
2 + "input": "data/raw/acl/anthology+abstracts.bib.gz",
3 + "sha256": "44c3f7e907f221b740bea09069818a3d7c0dfd88b2da3b750d9f02955efc58b3",
4 + "bytes": 46723382,
5 + "entries": 138796,
6 + "types": {
7 + "proceedings": 3016,
8 + "inproceedings": 132105,
9 + "article": 3453,
10 + "book": 222
11 + },
12 + "parsed_at": "2026-11-03T02:21:46.022435+00:00"
13 +}
\ No newline at end of file
added data/metadata/api_increment_ledger.json +397 −0
@@ -0,0 +1,397 @@
1 +{
2 + "slices": {
3 + "2026-10-01_cs_primary": {
4 + "pages": 36,
5 + "records": 7092,
6 + "done": true,
7 + "count": 7092
8 + },
9 + "2026-10-01_cs_secondary": {
10 + "pages": 31,
11 + "records": 6167,
12 + "done": true,
13 + "count": 6167
14 + },
15 + "2026-10-02_cs_primary": {
16 + "pages": 17,
17 + "records": 3365,
18 + "done": true,
19 + "count": 3365
20 + },
21 + "2026-10-02_cs_secondary": {
22 + "pages": 11,
23 + "records": 2057,
24 + "done": true,
25 + "count": 2057
26 + },
27 + "2026-10-03_cs_primary": {
28 + "pages": 9,
29 + "records": 1735,
30 + "done": true,
31 + "count": 1735
32 + },
33 + "2026-10-03_cs_secondary": {
34 + "pages": 49,
35 + "records": 9746,
36 + "done": true,
37 + "count": 9746
38 + },
39 + "2026-10-04_cs_primary": {
40 + "pages": 9,
41 + "records": 1764,
42 + "done": true,
43 + "count": 1764
44 + },
45 + "2026-10-04_cs_secondary": {
46 + "pages": 30,
47 + "records": 5919,
48 + "done": true,
49 + "count": 5919
50 + },
51 + "2026-10-05_cs_primary": {
52 + "pages": 16,
53 + "records": 3091,
54 + "done": true,
55 + "count": 3091
56 + },
57 + "2026-10-05_cs_secondary": {
58 + "pages": 12,
59 + "records": 2215,
60 + "done": true,
61 + "count": 2215
62 + },
63 + "2026-10-06_cs_primary": {
64 + "pages": 18,
65 + "records": 3537,
66 + "done": true,
67 + "count": 3537
68 + },
69 + "2026-10-06_cs_secondary": {
70 + "pages": 14,
71 + "records": 2622,
72 + "done": true,
73 + "count": 2622
74 + },
75 + "2026-10-07_cs_primary": {
76 + "pages": 18,
77 + "records": 3597,
78 + "done": true,
79 + "count": 3597
80 + },
81 + "2026-10-07_cs_secondary": {
82 + "pages": 13,
83 + "records": 2515,
84 + "done": true,
85 + "count": 2515
86 + },
87 + "2026-10-08_cs_primary": {
88 + "pages": 18,
89 + "records": 3425,
90 + "done": true,
91 + "count": 3425
92 + },
93 + "2026-10-08_cs_secondary": {
94 + "pages": 14,
95 + "records": 2624,
96 + "done": true,
97 + "count": 2624
98 + },
99 + "2026-10-09_cs_primary": {
100 + "pages": 16,
101 + "records": 3129,
102 + "done": true,
103 + "count": 3129
104 + },
105 + "2026-10-09_cs_secondary": {
106 + "pages": 12,
107 + "records": 2312,
108 + "done": true,
109 + "count": 2312
110 + },
111 + "2026-10-10_cs_primary": {
112 + "pages": 10,
113 + "records": 1968,
114 + "done": true,
115 + "count": 1968
116 + },
117 + "2026-10-10_cs_secondary": {
118 + "pages": 8,
119 + "records": 1504,
120 + "done": true,
121 + "count": 1504
122 + },
123 + "2026-10-11_cs_primary": {
124 + "pages": 9,
125 + "records": 1668,
126 + "done": true,
127 + "count": 1668
128 + },
129 + "2026-10-11_cs_secondary": {
130 + "pages": 7,
131 + "records": 1278,
132 + "done": true,
133 + "count": 1278
134 + },
135 + "2026-10-12_cs_primary": {
136 + "pages": 15,
137 + "records": 2896,
138 + "done": true,
139 + "count": 2896
140 + },
141 + "2026-10-12_cs_secondary": {
142 + "pages": 12,
143 + "records": 2209,
144 + "done": true,
145 + "count": 2209
146 + },
147 + "2026-10-13_cs_primary": {
148 + "pages": 17,
149 + "records": 3289,
150 + "done": true,
151 + "count": 3289
152 + },
153 + "2026-10-13_cs_secondary": {
154 + "pages": 14,
155 + "records": 2717,
156 + "done": true,
157 + "count": 2717
158 + },
159 + "2026-10-14_cs_primary": {
160 + "pages": 17,
161 + "records": 3209,
162 + "done": true,
163 + "count": 3209
164 + },
165 + "2026-10-14_cs_secondary": {
166 + "pages": 13,
167 + "records": 2555,
168 + "done": true,
169 + "count": 2555
170 + },
171 + "2026-10-15_cs_primary": {
172 + "pages": 19,
173 + "records": 3758,
174 + "done": true,
175 + "count": 3758
176 + },
177 + "2026-10-15_cs_secondary": {
178 + "pages": 14,
179 + "records": 2684,
180 + "done": true,
181 + "count": 2684
182 + },
183 + "2026-10-16_cs_primary": {
184 + "pages": 15,
185 + "records": 2870,
186 + "done": true,
187 + "count": 2870
188 + },
189 + "2026-10-16_cs_secondary": {
190 + "pages": 50,
191 + "records": 10000,
192 + "done": true,
193 + "count": 37712,
194 + "truncated": true
195 + },
196 + "2026-10-17_cs_primary": {
197 + "pages": 9,
198 + "records": 1796,
199 + "done": true,
200 + "count": 1796
201 + },
202 + "2026-10-17_cs_secondary": {
203 + "pages": 7,
204 + "records": 1244,
205 + "done": true,
206 + "count": 1244
207 + },
208 + "2026-10-18_cs_primary": {
209 + "pages": 8,
210 + "records": 1593,
211 + "done": true,
212 + "count": 1593
213 + },
214 + "2026-10-18_cs_secondary": {
215 + "pages": 6,
216 + "records": 1097,
217 + "done": true,
218 + "count": 1097
219 + },
220 + "2026-10-19_cs_primary": {
221 + "pages": 16,
222 + "records": 3118,
223 + "done": true,
224 + "count": 3118
225 + },
226 + "2026-10-19_cs_secondary": {
227 + "pages": 12,
228 + "records": 2281,
229 + "done": true,
230 + "count": 2281
231 + },
232 + "2026-10-20_cs_primary": {
233 + "pages": 16,
234 + "records": 3056,
235 + "done": true,
236 + "count": 3056
237 + },
238 + "2026-10-20_cs_secondary": {
239 + "pages": 13,
240 + "records": 2402,
241 + "done": true,
242 + "count": 2402
243 + },
244 + "2026-10-21_cs_primary": {
245 + "pages": 17,
246 + "records": 3241,
247 + "done": true,
248 + "count": 3241
249 + },
250 + "2026-10-21_cs_secondary": {
251 + "pages": 13,
252 + "records": 2488,
253 + "done": true,
254 + "count": 2488
255 + },
256 + "2026-10-22_cs_primary": {
257 + "pages": 16,
258 + "records": 3025,
259 + "done": true,
260 + "count": 3025
261 + },
262 + "2026-10-22_cs_secondary": {
263 + "pages": 12,
264 + "records": 2346,
265 + "done": true,
266 + "count": 2346
267 + },
268 + "2026-10-23_cs_primary": {
269 + "pages": 17,
270 + "records": 3220,
271 + "done": true,
272 + "count": 3220
273 + },
274 + "2026-10-23_cs_secondary": {
275 + "pages": 13,
276 + "records": 2401,
277 + "done": true,
278 + "count": 2401
279 + },
280 + "2026-10-24_cs_primary": {
281 + "pages": 11,
282 + "records": 2074,
283 + "done": true,
284 + "count": 2074
285 + },
286 + "2026-10-24_cs_secondary": {
287 + "pages": 9,
288 + "records": 1784,
289 + "done": true,
290 + "count": 1784
291 + },
292 + "2026-10-25_cs_primary": {
293 + "pages": 9,
294 + "records": 1735,
295 + "done": true,
296 + "count": 1735
297 + },
298 + "2026-10-25_cs_secondary": {
299 + "pages": 9,
300 + "records": 1772,
301 + "done": true,
302 + "count": 1772
303 + },
304 + "2026-10-26_cs_primary": {
305 + "pages": 16,
306 + "records": 3197,
307 + "done": true,
308 + "count": 3197
309 + },
310 + "2026-10-26_cs_secondary": {
311 + "pages": 14,
312 + "records": 2719,
313 + "done": true,
314 + "count": 2719
315 + },
316 + "2026-10-27_cs_primary": {
317 + "pages": 15,
318 + "records": 2953,
319 + "done": true,
320 + "count": 2953
321 + },
322 + "2026-10-27_cs_secondary": {
323 + "pages": 15,
324 + "records": 2829,
325 + "done": true,
326 + "count": 2829
327 + },
328 + "2026-10-28_cs_primary": {
329 + "pages": 15,
330 + "records": 2910,
331 + "done": true,
332 + "count": 2910
333 + },
334 + "2026-10-28_cs_secondary": {
335 + "pages": 12,
336 + "records": 2234,
337 + "done": true,
338 + "count": 2234
339 + },
340 + "2026-10-29_cs_primary": {
341 + "pages": 17,
342 + "records": 3363,
343 + "done": true,
344 + "count": 3363
345 + },
346 + "2026-10-29_cs_secondary": {
347 + "pages": 13,
348 + "records": 2544,
349 + "done": true,
350 + "count": 2544
351 + },
352 + "2026-10-30_cs_primary": {
353 + "pages": 17,
354 + "records": 3266,
355 + "done": true,
356 + "count": 3266
357 + },
358 + "2026-10-30_cs_secondary": {
359 + "pages": 49,
360 + "records": 9607,
361 + "done": true,
362 + "count": 9607
363 + },
364 + "2026-10-31_cs_primary": {
365 + "pages": 11,
366 + "records": 2044,
367 + "done": true,
368 + "count": 2044
369 + },
370 + "2026-10-31_cs_secondary": {
371 + "pages": 8,
372 + "records": 1600,
373 + "done": true,
374 + "count": 1600
375 + },
376 + "2026-11-01_cs_primary": {
377 + "pages": 8,
378 + "records": 1559,
379 + "done": true,
380 + "count": 1559
381 + },
382 + "2026-11-01_cs_secondary": {
383 + "pages": 7,
384 + "records": 1354,
385 + "done": true,
386 + "count": 1354
387 + },
388 + "2026-11-02_cs_primary": {
389 + "pages": 5,
390 + "records": 1000,
391 + "done": false,
392 + "count": 1832
393 + }
394 + },
395 + "calls": 1002,
396 + "cost_usd_total": 0.09990000000000183
397 +}
\ No newline at end of file
added data/metadata/dblp_parse_report.json +114 −0
@@ -0,0 +1,114 @@
1 +{
2 + "input": "/Users/simon-pierreboucher/wp44_uqo/data/raw/dblp/dblp.xml.gz",
3 + "input_bytes": 1116270104,
4 + "input_md5_first_GiB": "187624d86f19db0c6daacc099f11b778",
5 + "parsed_at": "2026-11-03T02:27:30.783487+00:00",
6 + "rows_written": 8840866,
7 + "min_year": 0,
8 + "counts_by_type": {
9 + "incollection": 71247,
10 + "book": 21648,
11 + "proceedings": 65792,
12 + "mastersthesis": 27,
13 + "data": 30631,
14 + "article": 4500501,
15 + "inproceedings": 3995530,
16 + "phdthesis": 158398
17 + },
18 + "counts_by_year": {
19 + "1936": 12,
20 + "1937": 16,
21 + "1938": 11,
22 + "1939": 18,
23 + "1940": 10,
24 + "1941": 13,
25 + "1942": 13,
26 + "1943": 8,
27 + "1944": 5,
28 + "1945": 9,
29 + "1946": 31,
30 + "1947": 10,
31 + "1948": 41,
32 + "1949": 52,
33 + "1950": 29,
34 + "1951": 46,
35 + "1952": 115,
36 + "1953": 173,
37 + "1954": 226,
38 + "1955": 213,
39 + "1956": 355,
40 + "1957": 343,
41 + "1958": 464,
42 + "1959": 716,
43 + "1960": 625,
44 + "1961": 903,
45 + "1962": 1186,
46 + "1963": 1034,
47 + "1964": 1108,
48 + "1965": 1291,
49 + "1966": 1506,
50 + "1967": 1763,
51 + "1968": 2184,
52 + "1969": 2120,
53 + "1970": 2239,
54 + "1971": 3138,
55 + "1972": 3774,
56 + "1973": 4434,
57 + "1974": 5037,
58 + "1975": 5307,
59 + "1976": 5766,
60 + "1977": 6048,
61 + "1978": 6862,
62 + "1979": 7045,
63 + "1980": 7931,
64 + "1981": 8797,
65 + "1982": 10070,
66 + "1983": 10981,
67 + "1984": 12452,
68 + "1985": 14028,
69 + "1986": 16627,
70 + "1987": 17875,
71 + "1988": 22028,
72 + "1989": 24567,
73 + "1990": 28769,
74 + "1991": 31766,
75 + "1992": 35486,
76 + "1993": 41246,
77 + "1994": 45575,
78 + "1995": 47992,
79 + "1996": 53087,
80 + "1997": 57423,
81 + "1998": 64742,
82 + "1999": 71314,
83 + "2000": 81557,
84 + "2001": 87405,
85 + "2002": 98626,
86 + "2003": 118281,
87 + "2004": 137602,
88 + "2005": 160421,
89 + "2006": 178083,
90 + "2007": 191043,
91 + "2008": 205328,
92 + "2009": 224377,
93 + "2010": 231160,
94 + "2011": 252779,
95 + "2012": 265810,
96 + "2013": 282991,
97 + "2014": 294858,
98 + "2015": 305175,
99 + "2016": 317540,
100 + "2017": 342474,
101 + "2018": 378942,
102 + "2019": 422314,
103 + "2020": 439815,
104 + "2021": 468931,
105 + "2022": 489072,
106 + "2023": 530579,
107 + "2024": 590864,
108 + "2025": 605696,
109 + "2026": 446274,
110 + "2027": 3814,
111 + "None": 2908
112 + },
113 + "seconds": 285
114 +}
\ No newline at end of file
modified manuscript/appendices/appB_search_and_sources.tex +2 −2
@@ -177,7 +177,7 @@ exists in the slim table of all works but not in the retained subset, that is,
177 177 works indexed by DBLP that OpenAlex labels with no computer-science topic.
178 178 Rather than accept OpenAlex's boundary, the pipeline reads the bucket a
179 179 second time in \emph{identifier-set mode}. The linkage script writes
180 −the list \texttt{data/metadata/needed\_oa\_ids.csv} of OpenAlex identifiers to
180 +the list \texttt{data/metadata/}\allowbreak\texttt{needed\_oa\_ids.csv} of OpenAlex identifiers to
181 181 recover (\LinkNeededOaIdsSecondPassDblpDoi{} reached through a DBLP DOI and
182 182 \LinkNeededOaIdsSecondPassArxivDoi{} through an arXiv DOI), and
183 183 \texttt{openalex\_snapshot.py --id-list} streams every part file again,
@@ -590,7 +590,7 @@ interim figure until the principal investigator's review (checkpoint H-1).
590 590
591 591 The acquisition can be repeated from the runbook in six commands, in the
592 592 order of Table~\ref{tab:appB-acq}, on a machine with Python~3.12 and the
593 −locked environment of \texttt{reproducibility/environment\_M3U96b.txt}:
593 +locked environment of \texttt{reproducibility/}\allowbreak\texttt{environment\_M3U96b.txt}:
594 594 \begin{enumerate}
595 595 \item \texttt{openalex\_snapshot.py} with the manifest copy (then once more with \texttt{--id-list});
596 596 \item \texttt{openalex\_entities.py};
modified manuscript/appendices/appC_derivations.tex +376 −1
@@ -392,7 +392,7 @@ followed by normalisation, $R_{t+1}(r) = \tilde R_{t+1}(r) / \sum_{r'}
392 392 predictive likelihood of $y_{t+1}$. Then $\sum_{r \ge 1}\tilde R_{t+1}(r) =
393 393 (1-H) Z_t$ and $\tilde R_{t+1}(0) = H Z_t$, so the normaliser is $Z_t$ and
394 394 \begin{equation}
395 − R_{t+1}(0) \;=\; \frac{H Z_t}{H Z_t + (1-H) Z_t} \;=\; H \qquad \text{for every } t .
395 + R_{t+1}(0) \;=\; \frac{H Z_t}{H Z_t + (1-H) Z_t} \;=\; H \qquad \text{for every } t.
396 396 \label{eq:appC-r0}
397 397 \end{equation}
398 398 The filtered probability that a changepoint occurs \emph{at} the current
@@ -417,3 +417,378 @@ one; the smoothed posterior of \citet{fearnhead2006exact} would require a
417 417 backward pass and answers the retrospective question that the offline
418 418 methods of Sections~\ref{sec:appC-bp} and~\ref{sec:appC-pelt} already
419 419 address.
420 +
421 +\subsection{The Gini coefficient: rank form and Lorenz form}
422 +\label{sec:appC-gini}
423 +
424 +Let $c_{(1)} \le c_{(2)} \le \dots \le c_{(n)}$ be the citation counts of
425 +the $n$ works of a publication year sorted in ascending order, $S =
426 +\sum_i c_{(i)} > 0$ their total, and $L_i = \sum_{j \le i} c_{(j)} / S$ the
427 +cumulative share held by the $i$ least-cited works, with $L_0 = 0$ and
428 +$L_n = 1$. The Lorenz curve \citep{lorenz1905concentration} is the polygon
429 +through the points $(i/n, L_i)$, and the Gini coefficient is defined as one
430 +minus twice the area $A$ under it \citep{ceriani2012gini}. By the
431 +trapezoidal rule, which is exact for a polygon,
432 +\begin{equation}
433 + A \;=\; \sum_{i=1}^{n} \frac{1}{n}\cdot\frac{L_{i-1} + L_i}{2}
434 + \;=\; \frac{1}{2n}\Bigl( 2\sum_{i=1}^{n} L_i - L_n \Bigr)
435 + \;=\; \frac{1}{n}\sum_{i=1}^{n} L_i - \frac{1}{2n}.
436 +\end{equation}
437 +Exchanging the order of summation in $\sum_i L_i$,
438 +\begin{equation}
439 + \sum_{i=1}^{n} L_i \;=\; \frac{1}{S}\sum_{i=1}^{n}\sum_{j=1}^{i} c_{(j)}
440 + \;=\; \frac{1}{S}\sum_{j=1}^{n} (n - j + 1)\, c_{(j)}
441 + \;=\; (n+1) - \frac{1}{S}\sum_{j=1}^{n} j\, c_{(j)},
442 +\end{equation}
443 +so that
444 +\begin{equation}
445 + G \;=\; 1 - 2A
446 + \;=\; 1 - \frac{2(n+1)}{n} + \frac{2}{nS}\sum_{j=1}^{n} j\, c_{(j)} + \frac{1}{n}
447 + \;=\; \frac{2\sum_{j=1}^{n} j\, c_{(j)}}{n \sum_{j} c_{(j)}} - \frac{n+1}{n},
448 + \label{eq:appC-gini}
449 +\end{equation}
450 +which is equation~\eqref{eq:gini} of Part~IV and the expression that
451 +\texttt{bibliometrics/03\_citation\_impact.py} evaluates in SQL, the rank
452 +$j$ being the window function \texttt{row\_number()} partitioned by year and
453 +ordered by the citation count and then by the work identifier.
454 +The secondary ordering by work identifier is needed only to make the rank a
455 +permutation when counts tie; since tied values receive consecutive ranks and
456 +contribute $c \cdot (j + j')$ to the numerator whichever of the two tied
457 +works gets the smaller rank, the value of $G$ does not depend on how ties are
458 +broken. The bounds follow from \eqref{eq:appC-gini}: $G = 0$ when all
459 +$c_{(j)}$ are equal (then $\sum_j j c_{(j)} = c\,n(n+1)/2$ and the two terms
460 +cancel), and $G = 1 - 1/n$ when a single work holds all citations (then
461 +$\sum_j j c_{(j)} = nS$), so the maximum attainable value is $1 - 1/n$ rather
462 +than one and the coefficient is not normalised by that factor. Uncited works
463 +enter with $c_{(j)} = 0$ at the lowest ranks; adding $u$ uncited works to a
464 +year leaves $\sum_j j c_{(j)}$ shifted by $uS$ and $n$ increased by $u$, and
465 +one checks from \eqref{eq:appC-gini} that $G$ increases, which is the
466 +direction stated in Part~IV and the reason the uncited share accompanies the
467 +coefficient in the tables.
468 +
469 +\subsection{Rao--Stirling and Leinster--Cobbold at order two}
470 +\label{sec:appC-diversity}
471 +
472 +Let $p \in \R^K$ be a probability vector over categories, $\delta_{ij} \in
473 +[0,1]$ a dissimilarity with $\delta_{ii} = 0$, and $Z = (z_{ij})$ the
474 +similarity matrix $z_{ij} = 1 - \delta_{ij}$, so that $z_{ii} = 1$. The
475 +Rao--Stirling index \citep{rao1982diversity, stirling2007diversity} is
476 +$\Delta_{\mathrm{RS}}(p) = \sum_{i \ne j} p_i p_j \delta_{ij} = p^{\top}\Delta p$
477 +with $\Delta = (\delta_{ij})$, the diagonal contributing nothing. The
478 +Leinster--Cobbold diversity of order $q$ \citep{leinster2012diversity} is
479 +${}^{q}D^{Z}(p) = \bigl(\sum_{i : p_i > 0} p_i (Zp)_i^{q-1}\bigr)^{1/(1-q)}$;
480 +at $q = 2$ the exponent $1/(1-q) = -1$ and the inner power is one, so
481 +\begin{equation}
482 + {}^{2}D^{Z}(p) \;=\; \Bigl(\sum_i p_i (Zp)_i\Bigr)^{-1} \;=\; \frac{1}{p^{\top} Z p}.
483 +\end{equation}
484 +Since $Z = \mathbf{1}\mathbf{1}^{\top} - \Delta$ entrywise (using $z_{ii} = 1
485 += 1 - \delta_{ii}$ on the diagonal as well), and $p^{\top}\mathbf{1}\mathbf{1}^{\top}p
486 += (\sum_i p_i)^2 = 1$,
487 +\begin{equation}
488 + p^{\top} Z p \;=\; 1 - p^{\top}\Delta p \;=\; 1 - \Delta_{\mathrm{RS}}(p),
489 + \qquad\text{hence}\qquad
490 + {}^{2}D^{Z}(p) \;=\; \frac{1}{1 - \Delta_{\mathrm{RS}}(p)},
491 + \label{eq:appC-lc2}
492 +\end{equation}
493 +the identity quoted in Part~IV\@. It shows that at order two the two
494 +families carry the same information: ${}^{2}D^{Z}$ is a strictly increasing
495 +function of $\Delta_{\mathrm{RS}}$ on $[0, 1)$, and the ordering of years or
496 +categories by either index is the same. They differ in scale and in
497 +behaviour near saturation. $\Delta_{\mathrm{RS}}$ is bounded by the mean
498 +dissimilarity and compresses differences among very even distributions;
499 +${}^{2}D^{Z}$ is an effective number of categories, equal to $K$ for the
500 +uniform distribution over $K$ mutually dissimilar categories
501 +($\Delta_{\mathrm{RS}} = 1 - 1/K$) and to one for a distribution concentrated
502 +on a single category ($\Delta_{\mathrm{RS}} = 0$), and it expands the
503 +compressed end. The identity requires only $z_{ii} = 1$ and $z_{ij} = 1 -
504 +\delta_{ij}$; it does not require $\delta$ to be a metric, and the
505 +dissimilarity used, one minus a cosine similarity of category centroids,
506 +is not one. The script \texttt{bibliometrics/04\_diversity\_cagr.py}
507 +computes both quantities from the yearly category mix exactly as
508 +\eqref{eq:appC-lc2} prescribes, $\Delta_{\mathrm{RS}} = p^{\top}(1 - Z)p$
509 +with the diagonal of $Z$ set to one and ${}^{2}D^{Z} = 1/(p^{\top}Zp)$, and
510 +attaches a percentile bootstrap interval to $\Delta_{\mathrm{RS}}$ by
511 +multinomial resampling of the works over categories ($B = 500$, seed 44),
512 +which is the sampling model under which the category counts of a year are
513 +a multinomial draw of fixed size; the interval of ${}^{2}D^{Z}$ follows by
514 +the monotone transformation.
515 +
516 +\subsection{Modularity of a directed weighted graph at a fixed partition}
517 +\label{sec:appC-modularity}
518 +
519 +Let $W \in \R_{\ge 0}^{K \times K}$ be the flow matrix of a citing year,
520 +$W_{ij}$ the number of citations from category $i$ to category $j$, with
521 +$m = \sum_{ij} W_{ij}$, out-strength $k^{\mathrm{out}}_i = \sum_j W_{ij}$ and
522 +in-strength $k^{\mathrm{in}}_j = \sum_i W_{ij}$, and let $g : \{1, \dots, K\}
523 +\to \mathcal{G}$ be a given assignment of categories to communities. The
524 +statistic implemented by \texttt{modularity()} in
525 +\texttt{knowledge\_graph/02\_category\_flows.py} is
526 +\begin{equation}
527 + Q(W, g) \;=\; \frac{1}{m}\sum_{i,j}\Bigl( W_{ij} - \frac{k^{\mathrm{out}}_i k^{\mathrm{in}}_j}{m} \Bigr)\mathbf{1}[g_i = g_j],
528 + \label{eq:appC-Q}
529 +\end{equation}
530 +the directed form of \citet{leicht2008directed}, which reduces to the
531 +Newman--Girvan modularity \citep{newman2004community} when $W$ is symmetric
532 +(then $k^{\mathrm{out}} = k^{\mathrm{in}} = k$ and $m = 2|E|$ for an
533 +unweighted graph). Three facts are used in Part~IV\@. First, the null term
534 +is the expected weight of the edge $i \to j$ under random rewiring that
535 +preserves every node's out- and in-strength in expectation: a configuration
536 +model in which each of the $m$ units of weight leaves node $i$ with
537 +probability $k^{\mathrm{out}}_i/m$ and enters node $j$ with probability
538 +$k^{\mathrm{in}}_j/m$ independently gives expected weight
539 +$m \cdot (k^{\mathrm{out}}_i/m)(k^{\mathrm{in}}_j/m) = k^{\mathrm{out}}_i
540 +k^{\mathrm{in}}_j/m$, and summing over $j$ recovers $k^{\mathrm{out}}_i$, so
541 +the null model has the observed strengths. Second, $Q$ vanishes when all
542 +nodes are in one community: then the indicator is identically one and
543 +$\sum_{ij} W_{ij} = m = \sum_{ij} k^{\mathrm{out}}_i k^{\mathrm{in}}_j/m$.
544 +Third, writing $e_{gg} = \sum_{i,j : g_i = g_j = g} W_{ij}/m$ for the fraction
545 +of weight inside community $g$, $a^{\mathrm{out}}_g = \sum_{i : g_i = g}
546 +k^{\mathrm{out}}_i/m$ and $a^{\mathrm{in}}_g$ likewise,
547 +\begin{equation}
548 + Q \;=\; \sum_{g \in \mathcal{G}} \bigl( e_{gg} - a^{\mathrm{out}}_g\, a^{\mathrm{in}}_g \bigr),
549 + \label{eq:appC-Qcomm}
550 +\end{equation}
551 +so that $Q \le \sum_g e_{gg} \le 1$ and $Q \ge -\sum_g a^{\mathrm{out}}_g
552 +a^{\mathrm{in}}_g \ge -1$; the value is positive when more weight stays
553 +inside communities than the strength-preserving null predicts. The
554 +self-share reported alongside, $\operatorname{tr}(W)/m = \sum_i e_{ii}$ at
555 +the category partition, is the first term of \eqref{eq:appC-Qcomm} alone and
556 +differs from $Q_{\mathrm{cat}}$ by the correction $\sum_i a^{\mathrm{out}}_i
557 +a^{\mathrm{in}}_i$, which grows with the concentration of flows on a few
558 +large categories. For the area partition, \eqref{eq:appC-Qcomm} is summed
559 +over the eight areas with $e_{\alpha\alpha}$ the within-area share, which is
560 +one minus the cross-area share $X_{\alpha,t}$ of Part~IV weighted by the
561 +area's out-strength; $Q_{\mathrm{area}}$ is therefore a strength-weighted,
562 +null-corrected average of the within-area shares, and a fall in
563 +$Q_{\mathrm{area}}$ can arise from a rise in boundary crossing or from a
564 +shift of out-strength toward areas whose $a^{\mathrm{out}}_\alpha
565 +a^{\mathrm{in}}_\alpha$ is large. Because the partition is fixed rather than
566 +optimised, none of the resolution-limit results for maximised modularity
567 +\citep{fortunato2007resolution} applies; $Q$ is here a descriptive index and
568 +its comparison across years is meaningful only because the partition and
569 +the category definitions are the same in every year.
570 +
571 +\subsection{Krippendorff's \texorpdfstring{$\alpha$}{alpha} with the MASI distance}
572 +\label{sec:appC-alpha}
573 +
574 +\paragraph{General form.}
575 +Krippendorff's $\alpha$ \citep{hayes2007krippendorff, artstein2008agreement}
576 +is defined for any difference function $d(v, v') \ge 0$ on the values that
577 +coders may assign, with $d(v, v) = 0$, as
578 +\begin{equation}
579 + \alpha \;=\; 1 - \frac{D_o}{D_e},
580 + \label{eq:appC-alpha}
581 +\end{equation}
582 +where $D_o$ is the mean difference between the values assigned to the same
583 +unit by different coders and $D_e$ the mean difference between all pairs of
584 +values in the pooled data, irrespective of unit. With two coders $A$ and $B$
585 +rating each of $n$ units, the pooled set contains $N = 2n$ values and
586 +\begin{equation}
587 + D_o \;=\; \frac{1}{n}\sum_{u=1}^{n} d\bigl(a_u, b_u\bigr), \qquad
588 + D_e \;=\; \frac{1}{N(N-1)}\sum_{c \ne c'} d\bigl(v_c, v_{c'}\bigr)
589 + \;=\; \frac{1}{\binom{N}{2}}\sum_{c < c'} d\bigl(v_c, v_{c'}\bigr),
590 + \label{eq:appC-DoDe}
591 +\end{equation}
592 +the second equality using the symmetry of $d$. The coefficient is one when
593 +the coders agree on every unit ($D_o = 0$), zero when the within-unit
594 +differences are what chance pairing of the pooled values would produce
595 +($D_o = D_e$), and negative when disagreement is systematic. Unlike Cohen's
596 +$\kappa$, which compares observed agreement with the product of the two
597 +coders' marginals, $\alpha$ pools the two coders' values into one
598 +distribution for its chance term, so it does not reward coders for having
599 +different marginal distributions; this and its accommodation of arbitrary
600 +difference functions are the reasons it is the recommended coefficient for
601 +set-valued annotation \citep{artstein2008agreement}.
602 +
603 +\paragraph{The MASI distance.}
604 +For set-valued labels $x, y \subseteq \mathcal{K}$, \citet{passonneau2006masi}
605 +defines the Measuring Agreement on Set-valued Items distance as
606 +\begin{gather}
607 + d_{\mathrm{MASI}}(x, y) \;=\; 1 - J(x, y)\, M(x, y), \qquad
608 + J(x, y) = \frac{|x \cap y|}{|x \cup y|}, \nonumber\\
609 + M(x, y) =
610 + \begin{cases}
611 + 1 & x = y,\\
612 + 2/3 & x \subsetneq y \text{ or } y \subsetneq x,\\
613 + 1/3 & x \cap y \ne \emptyset \text{ and neither contains the other},\\
614 + 0 & x \cap y = \emptyset ,
615 + \end{cases}
616 + \label{eq:appC-masi}
617 +\end{gather}
618 +the Jaccard similarity attenuated by a monotonicity factor that
619 +distinguishes nesting from mere overlap. The distance is zero only for
620 +identical non-empty sets, equals one for disjoint sets, and treats the pair
621 +(empty, empty) as identical ($d = 0$) by the convention of the
622 +implementation, which returns zero before computing $J$ for two empty sets;
623 +the pair (empty, non-empty) has $J = 0$ and $d = 1$.
624 +
625 +\paragraph{What the code computes.}
626 +\texttt{taxonomy/validate\_sample.py} forms, for the two raters, the
627 +observed term as the mean of $d_{\mathrm{MASI}}^2$ over the $n$ rated works
628 +and the expected term as the mean of $d_{\mathrm{MASI}}^2$ over all
629 +unordered pairs of the $2n$ pooled label sets (exhaustively when
630 +$2n \le 1200$, otherwise over 200{,}000 random ordered pairs with $i \ne j$,
631 +seed 44), and reports $1 - D_o/D_e$. Two remarks make this precise. The code
632 +uses the constants $0.67$ and $0.33$ for the monotonicity factor rather than
633 +$2/3$ and $1/3$, a rounding of the published definition that changes
634 +distances by at most $0.0034$. More consequentially, it \emph{squares} the
635 +MASI distance before averaging, that is, it applies
636 +\eqref{eq:appC-alpha}--\eqref{eq:appC-DoDe} with $d = d_{\mathrm{MASI}}^2$.
637 +Krippendorff's interval metric is the squared difference, and the code's
638 +comment describes the computation as the ``interval form on the MASI
639 +distance''; \citeauthor{passonneau2006masi}, in contrast, plugs
640 +$d_{\mathrm{MASI}}$ itself into the $\alpha$ formula, and the agreement
641 +packages that implement MASI follow her. The two conventions yield different
642 +numbers from the same ratings---squaring compresses small disagreements and
643 +so, as a rule, raises $\alpha$ when most disagreements are partial---and the
644 +value reported in Part~IX is the squared-distance version, labelled as such.
645 +Both are legitimate instances of \eqref{eq:appC-alpha}; what is not
646 +legitimate is to compare the reported value with published MASI-$\alpha$
647 +figures without this caveat. The mean Jaccard index reported next to it is
648 +$n^{-1}\sum_u J(a_u, b_u)$ with $0/0 = 0$ and is a raw agreement rate with
649 +no chance correction. Both statistics are computed on the full rated sample
650 +and not on the 200-work subsample reserved for the principal investigator,
651 +whose verdicts will add a third coder to \eqref{eq:appC-DoDe} once
652 +checkpoint H-2 is signed.
653 +
654 +\subsection{The multi-label score rule and the tie-break as a total order}
655 +\label{sec:appC-score}
656 +
657 +\paragraph{Score.}
658 +For a work $w$ and a category $k$ the implementation
659 +(\texttt{taxonomy/classify.py}, \texttt{score\_row}) computes five
660 +components, one per signal type $\sigma \in \{\mathrm{T}, \mathrm{F},
661 +\mathrm{X}, \mathrm{D}, \mathrm{kw}\}$,
662 +\begin{align}
663 + s^{\sigma}_k(w) &\;=\; \min\Bigl\{ 1,\ \sum_{x \in \sigma(w)} \omega^{\sigma}_k(x) \Bigr\}
664 + \qquad (\sigma \ne \mathrm{kw}), \\
665 + s^{\mathrm{kw}}_k(w) &\;=\; \min\Bigl\{ 1,\ \sum_{(r, \omega, \phi) \in R_k} \omega\, \mathbf{1}[r \text{ matches } \phi(w)] \Bigr\},
666 +\end{align}
667 +where $\sigma(w)$ is the \emph{set} of the work's topic, subfield, arXiv
668 +category or DBLP stream identifiers (Python \texttt{set()}, so a repeated
669 +identifier contributes once), and the keyword loop stops at the first rule
670 +that brings the running sum to one, which is equivalent to the capped sum.
671 +The score is $s_k(w) = \sum_\sigma s^{\sigma}_k(w) \in [0, 5]$; a category
672 +with $s_k(w) \ge \theta = 1$ is then vetoed if any exclusion pattern of
673 +$Z_k$ matches the concatenation of title and abstract, in which case its
674 +score is set to zero and it is not assigned. The set of assigned categories
675 +is $C(w) = \{k : s_k(w) \ge \theta,\ \text{not vetoed}\}$, and the stored
676 +score of an assigned category is $s_k(w)$ rounded to three decimals. Two
677 +elementary properties justify the reading given in Part~IV\@. The cap makes
678 +each component a bounded, monotone, subadditive function of the matched
679 +weights: adding a signal never lowers a component, and no number of signals
680 +of one type can contribute more than one. And because the threshold equals
681 +the cap, a single weight-one signal of any type suffices for assignment
682 +while signals of weight below one require corroboration from a different
683 +type; formally, $s_k(w) \ge 1$ holds if and only if either some component
684 +reaches one or the sum of the (uncapped) components across at least two
685 +types reaches one.
686 +
687 +\paragraph{Primary category as the minimum of a total order.}
688 +Let $\mathcal{P}(w) = \bigcup_{k \in C(w)} \mathrm{parents}(k)$ be the set
689 +of categories declared parents of at least one assigned category (the
690 +\texttt{child\_of} relation of the ontology). The implementation sorts the
691 +assigned categories by the key
692 +\begin{equation}
693 + \phi(k) \;=\; \bigl( -s_k(w),\ \mathbf{1}[k \in \mathcal{P}(w)],\ \mathrm{number}(k) \bigr) \in \R \times \{0,1\} \times \mathbb{N}
694 + \label{eq:appC-key}
695 +\end{equation}
696 +in lexicographic order and takes the first element; this is
697 +$\kappa^{\ast}(w) = \arg\min_{k \in C(w)} \phi(k)$ and coincides with the
698 +lexicographic arg-max of Part~IV (the sign of the first component reversed).
699 +The lexicographic order on $\R \times \{0,1\} \times \mathbb{N}$ is a total
700 +order, and $\phi$ is injective on $\mathcal{K}$ because the ontology numbers
701 +are distinct, so the restriction of $\phi$ to $C(w)$ has a unique minimum
702 +whenever $C(w) \ne \emptyset$: the primary category is well defined and does
703 +not depend on the order in which categories are scanned. The second
704 +component implements ``child before parent'': if $k$ and $k'$ are both
705 +assigned with equal scores and $k'$ is a declared parent of $k$, then
706 +$k' \in \mathcal{P}(w)$ while $k$ may not be, and $k$ precedes $k'$. The rule
707 +is not transitive in the sense of a hierarchy, however. Membership in
708 +$\mathcal{P}(w)$ depends only on whether $k$ is the parent of \emph{some}
709 +assigned category, not of the specific competitor; a category that is the
710 +parent of a low-scoring assigned child is demoted in the tie against an
711 +unrelated category of equal score. This is a property of the key as
712 +implemented, stated here so that the primary counts of Part~IX are read with
713 +it; it affects only exact ties in a score rounded to three decimals, which
714 +are frequent precisely among the categories whose signals are weight-one
715 +keywords. The third component, the ontology number, is arbitrary and makes
716 +the order total; no claim is attached to it.
717 +
718 +\subsection{The emerging-topic label and the absence of look-ahead}
719 +\label{sec:appC-lookahead}
720 +
721 +\paragraph{Filtrations.}
722 +Index months by integers $t = 0, 1, \dots, M$ (January 2018 to the last
723 +complete month) and let the panel of \texttt{experiments/emerging\_detection.py}
724 +be the pair of arrays $n_{k,t}$ (eligible month-precision works of topic $k$
725 +with first month $t$) and $c_{k,t}$ (internal citations received by works of
726 +topic $k$ from works with first month $t$). Define the filtration
727 +\begin{equation}
728 + \mathcal{F}_T \;=\; \sigma\bigl( n_{k,t},\ c_{k,t} :\ k \in \mathcal{K}_{\mathrm{top}},\ t \le T \bigr),
729 + \label{eq:appC-filtration}
730 +\end{equation}
731 +the information contained in the panel columns up to and including month
732 +$T$. A statistic is \emph{available at} $T$ if it is
733 +$\mathcal{F}_T$-measurable. Each of the six features of Part~IV is a
734 +function of sums of panel entries over windows $(a, b]$ with $b \le T$:
735 +$g^{12}_{k,T}$ uses $(T-24, T]$, $\mathrm{acc}_{k,T}$ uses $(T-36, T]$,
736 +$z_{k,T}$ uses $[T-27, T]$, $\mathrm{cit}_{k,T}$ uses $(T-24, T]$ of $c$,
737 +$\mathrm{share}_{k,T}$ uses $(T-12, T]$ of every topic, and
738 +$\mathrm{age}_{k,T}$ uses the cumulative sum up to $T$. All are
739 +$\mathcal{F}_T$-measurable by construction. The implementation enforces this
740 +by index arithmetic (\texttt{win(a, lo, hi)} slices columns \texttt{lo+1}
741 +to \texttt{hi} inclusive with \texttt{hi = T\_idx}), not by convention.
742 +
743 +\paragraph{Label.}
744 +The label $\ell_{k,T,h}$ of equation~\eqref{eq:label} is a function of
745 +$V_k(T-h, T]$, $V_k(T, T+h]$, $V_k(T-12, T]$ and of the within-cutoff decile
746 +of $g^{\mathrm{fut}}$ over eligible topics; it is therefore
747 +$\mathcal{F}_{T+h}$-measurable and, because it depends on columns strictly
748 +after $T$, not $\mathcal{F}_T$-measurable. The feature--label pair at cutoff
749 +$T$ thus has the structure of a prediction problem: predict an
750 +$\mathcal{F}_{T+h}$-measurable outcome from an $\mathcal{F}_T$-measurable
751 +input. The eligibility condition $V_k(T-12, T] \ge 20$ is
752 +$\mathcal{F}_T$-measurable, so conditioning on it does not leak the outcome.
753 +
754 +\paragraph{Separation of training and test.}
755 +Let $\mathcal{T}_{\mathrm{tr}}$ and $\mathcal{T}_{\mathrm{te}}$ be the
756 +training and test cutoffs. Every quantity used to fit a model---features,
757 +labels and the standardisation constants of the scaler, which is fitted on
758 +training rows only---is $\mathcal{F}_{T^{\mathrm{tr}}_{\max} + h}$-measurable
759 +with $T^{\mathrm{tr}}_{\max} = \max \mathcal{T}_{\mathrm{tr}}$. The
760 +implementation sets $T^{\mathrm{tr}}_{\max}$ to December 2021 for $h = 12$
761 +and to December 2020 for $h = 24$, so that $T^{\mathrm{tr}}_{\max} + h$ is
762 +December 2022 in both cases, and the first test cutoff is January 2023.
763 +Hence
764 +\begin{equation}
765 + T^{\mathrm{tr}}_{\max} + h \;<\; \min \mathcal{T}_{\mathrm{te}},
766 + \label{eq:appC-gap}
767 +\end{equation}
768 +and the fitted predictor is measurable with respect to a $\sigma$-field
769 +that precedes every test feature, let alone every test label, which closes
770 +at $\max \mathcal{T}_{\mathrm{te}} + h \le M$. Condition \eqref{eq:appC-gap}
771 +is the formal content of ``out of time'' in the sense of
772 +\citet{bergmeir2012crossval}; it is stricter than the plan's wording, which
773 +allowed training cutoffs through 2022, and stricter for $h = 24$ than the
774 +description of Part~IV, which gives December 2021 as the last training
775 +cutoff for both horizons---the code's rule is the one that guarantees
776 +\eqref{eq:appC-gap}, and the manuscript follows the code. The test cutoffs
777 +are further restricted to those with $T + h \le M$, so that no test label is
778 +right-censored.
779 +
780 +\paragraph{What measurability does not cover.}
781 +The filtration \eqref{eq:appC-filtration} is generated by the panel, and the
782 +panel is built once, in 2026, from a corpus whose topic assignments,
783 +eligibility flags, linkage and month-precision filter were all fixed with
784 +knowledge of the whole period. Formally, the random objects $n_{k,t}$
785 +themselves are not $\mathcal{F}_t$-measurable functionals of the literature
786 +as it stood at $t$: they are functionals of the literature as OpenAlex
787 +indexed and classified it by October 2026. The statement proved above is
788 +therefore conditional: \emph{given} the 2026 panel, no feature at $T$ uses a
789 +column after $T$ and no training quantity uses a column at or after the
790 +first test cutoff. It is not the statement that an observer in 2021 could
791 +have computed the training set, which would require a topic vocabulary and a
792 +corpus frozen in 2021. Part~IV draws the distinction and names the
793 +cluster-based extension that would narrow it; the derivation here makes
794 +precise which half of the claim is proved and which is assumed.
modified manuscript/references_appBC.bib +1 −1
@@ -4,7 +4,7 @@
4 4 % are reused and never redefined here.
5 5
6 6 @article{jackson2005optimal,
7 − author = {Jackson, Brad and Scargle, Jeffrey D. and Barnes, David and Arabhi, Sundararajan and Alt, Alina and Gioumousis, Peter and Gwin, Elyus and Sangtrakulcharoen, Paungkaew and Tan, Linda and Tsai, Tun Tao},
7 + author = {Jackson, B. and Scargle, J. D. and Barnes, D. and Arabhi, S. and Alt, A. and Gioumousis, P. and Gwin, E. and others},
8 8 title = {An algorithm for optimal partitioning of data on an interval},
9 9 journal = {IEEE Signal Processing Letters},
10 10 year = {2005},
modified manuscript/references_verification_appBC.csv +1 −1
@@ -1,5 +1,5 @@
1 1 key,doi_or_arxiv,verified_via,verified_title,match
2 −jackson2005optimal,10.1109/LSP.2001.838216,crossref,An algorithm for optimal partitioning of data on an interval,yes
2 +jackson2005optimal,10.1109/LSP.2001.838216,crossref+openalex W2097880821,An algorithm for optimal partitioning of data on an interval,yes (authors 8-10 given as 'P. San; L. Tan; Tun Tao Tsai' in both records; entry lists the first seven verified names and 'others')
3 3 lorenz1905concentration,10.1080/15225437.1905.10503443,crossref,Methods of Measuring the Concentration of Wealth,yes
4 4 passonneau2006masi,10.63317/4nuo6thi27ax,crossref+openalex W1747645360,Measuring Agreement on Set-valued Items (MASI) for Semantic and Pragmatic Annotation,yes
5 5 artstein2008agreement,10.1162/coli.07-034-R2,crossref,Inter-Coder Agreement for Computational Linguistics,yes
modified manuscript/sections/part04_methodology.tex +17 −8
@@ -521,10 +521,11 @@ the works to which rater $r$ assigned primary $k$; $\kappa$ is computed between
521 521 the two raters and between the rules and each rater. Agreement on the label
522 522 sets is measured by the mean Jaccard index
523 523 $\bar J = n^{-1}\sum_w |C^{A}(w) \cap C^{B}(w)| / |C^{A}(w) \cup C^{B}(w)|$
524 −(with the convention $0/0 = 0$). The validation note announces Krippendorff's
525 −$\alpha$ with the MASI distance for the multi-label agreement; the metrics
526 −script computes the mean Jaccard index instead, and the manuscript reports
527 −what is computed. A work is exported as a disagreement for human review when
524 +(with the convention $0/0 = 0$), and by Krippendorff's $\alpha$ with the
525 +MASI distance of \citet{passonneau2006masi} between the two raters' label
526 +sets, in its interval form ($\alpha = 1 - D_o/D_e$ with squared MASI
527 +distances, $D_o$ the mean observed distance over works and $D_e$ the mean
528 +distance over all pairs of label sets); the derivation is in Appendix~C. A work is exported as a disagreement for human review when
528 529 the rules, rater~A and rater~B have no category in common although at least
529 530 one of them assigned one.
530 531
@@ -767,7 +768,12 @@ pipeline computes the category flow matrices from which $p$ is formed
767 768 (Section~\ref{sec:m-networks}) and the centroid similarities, but the two
768 769 diversity indices are not yet produced by a script; they are defined here
769 770 because the protocol commits to them, and their values in Part IX are
770 −\pending{Rao--Stirling and Leinster--Cobbold indices per category and period, not yet computed}
771 +The yearly Rao--Stirling and Leinster--Cobbold indices of the category mix,
772 +with bootstrap intervals from multinomial resampling of works over categories
773 +($B = 500$, seed 44), are computed by \texttt{bibliometrics/04\_diversity\_cagr.py}
774 +and reported in Part~IX; the dissimilarity $d_{ij}$ is one minus the cosine
775 +similarity of category centroids when embeddings are available and one minus
776 +the co-classification Jaccard similarity otherwise.
771 777 until the computation is added and audited.
772 778
773 779 \section{Citation and collaboration networks}
@@ -1370,7 +1376,9 @@ positives separately.
1370 1376
1371 1377 \subsection{Cutoffs, models and metrics}
1372 1378
1373 −Training cutoffs are every third month from December 2019 to December 2021;
1379 +Training cutoffs are every third month from December 2019 to December 2021
1380 +for the 12-month horizon and to December 2020 for the 24-month horizon, so
1381 +that every training label is observable before the first test cutoff;
1374 1382 test cutoffs are every third month from January 2023 to October 2024 for
1375 1383 which $T + h$ lies within the panel. With $h = 24$ the last training label
1376 1384 uses data to December 2023, which is after the reference date but more than a
@@ -1385,8 +1393,9 @@ above with non-finite values replaced by zero.
1385 1393
1386 1394 Three predictors are compared: the $z$-score baseline, which ranks topics by
1387 1395 $z_{k,T}$ alone and involves no fitting; an $\ell_2$-regularised logistic
1388 −regression (regularisation strength $C = 1$, on unstandardised features, so
1389 −the penalty is not scale-invariant and acts most on the small-range features);
1396 +regression (regularisation strength $C = 1$, on features standardised with a
1397 +scaler fitted on the training cutoffs only, so that the penalty is
1398 +scale-invariant and no test-period statistic enters the fit);
1390 1399 and a gradient boosting classifier \citep{friedman2001gbm} with 300 trees of
1391 1400 depth three and learning rate 0.05, seed 44, as implemented in scikit-learn
1392 1401 \citep{pedregosa2011sklearn}. The metrics on the pooled test rows are the area
modified manuscript/tables/numbers.tex +15 −0
@@ -106,3 +106,18 @@
106 106 \newcommand{\LinkSlimTotal}{464{,}765{,}485}
107 107 \newcommand{\LinkSlimCsAnyTwoZeroOneEightTwoZeroTwoSix}{15{,}490{,}159}
108 108 \newcommand{\LinkSeconds}{10}
109 +\newcommand{\DblpParsedRecords}{8{,}840{,}866}
110 +\newcommand{\DblpTypeIncollection}{71{,}247}
111 +\newcommand{\DblpTypeBook}{21{,}648}
112 +\newcommand{\DblpTypeProceedings}{65{,}792}
113 +\newcommand{\DblpTypeMastersthesis}{27}
114 +\newcommand{\DblpTypeData}{30{,}631}
115 +\newcommand{\DblpTypeArticle}{4{,}500{,}501}
116 +\newcommand{\DblpTypeInproceedings}{3{,}995{,}530}
117 +\newcommand{\DblpTypePhdthesis}{158{,}398}
118 +\newcommand{\AclParsedEntries}{138{,}796}
119 +\newcommand{\IncrementApiCalls}{1{,}002}
120 +\newcommand{\IncrementRecordsRetrieved}{193{,}369}
121 +\newcommand{\IncrementTruncatedSlices}{1}
122 +\newcommand{\IncrementSlicesDone}{64}
123 +\newcommand{\IncrementCostUsd}{0.100}
modified tables/make_numbers.py +13 −0
@@ -43,5 +43,18 @@ for f, key in [("results/econometrics/its_results.json", "its"), ("taxonomy/vali
43 43 if os.path.exists(p):
44 44 d = json.load(open(p))
45 45 walk(key, {k: v for k, v in d.items() if not isinstance(v, (list,))})
46 +for f, key in [("data/metadata/dblp_parse_report.json", "dblp"), ("data/metadata/acl_parse_report.json", "acl"), ("data/metadata/api_increment_ledger.json", "increment"), ("data/metadata/increment_report.json", "incrementIngest")]:
47 + p = os.path.join(R, f)
48 + if os.path.exists(p):
49 + d = json.load(open(p))
50 + if key == "increment":
51 + sl = d.get("slices", {}); emit("increment api calls", d.get("calls", 0)); emit("increment records retrieved", sum(v.get("records", 0) for v in sl.values()))
52 + emit("increment truncated slices", sum(1 for v in sl.values() if v.get("truncated"))); emit("increment slices done", sum(1 for v in sl.values() if v.get("done"))); emit("increment cost usd", round(d.get("cost_usd_total", 0), 4))
53 + elif key == "incrementIngest":
54 + emit("increment new works", d.get("new_works", 0)); emit("increment already in snapshot", d.get("already_in_snapshot", 0))
55 + elif key == "dblp":
56 + emit("dblp parsed records", d.get("rows_written", 0)); [emit(f"dblp type {k}", v) for k, v in d.get("counts_by_type", {}).items()]
57 + elif key == "acl":
58 + emit("acl parsed entries", d.get("entries", 0))
46 59 open(os.path.join(R, "manuscript/tables/numbers.tex"), "w").write("% machine-generated by tables/make_numbers.py — do not edit\n" + "\n".join(out) + "\n")
47 60 print(len(out), "macros")
48 61
Menu

Theme