The package asserts a retraction from an exact identifier (DOI or PMID) with high confidence. For a reference that carries no identifier it falls back to title matching, and two thresholds govern that fallback:
getOption("retraction.fuzzy_threshold"), default
0.90): a title similarity below this is not even
surfaced as a possible match;title_exact gate (similarity
0.985 plus an exact publication year and a matching
first author): only a match clearing this gate is asserted as
retracted; everything else is reported as “possible” for the user to
verify.This article reports a calibration of those two numbers against a
labeled corpus, so they are evidence-based rather than guessed. The
labeled corpus ships with the package in
inst/extdata/calibration_corpus.csv, and the two scripts
that build and analyze it (calibration_corpus.R,
calibration_analysis.R) live in the data-raw/
directory of the source
repository, so the study is reproducible from a repository
checkout.
599 references in three groups:
Every reference is matched by title, year, and author only (the DOI is withheld), which is exactly the hard case the thresholds govern.
At the title_exact gate (0.985 + year + first
author):
| Metric | Value |
|---|---|
| Precision | 1.000 |
| Recall | 0.532 |
| Clean references false-flagged | 0 / 199 (0.000) |
Flag rate by group: exact-title retracted 1.000, perturbed retracted 0.065, clean 0.000.
Reading: no clean reference was ever asserted as retracted (zero false accusations), and every exact-title retracted reference was recovered. The perturbed titles almost never clear the gate (0.065) — by design they fall to “possible” rather than being asserted, which is the conservative behavior we want. The overall recall of 0.532 is dominated by the perturbed group; on citations that reproduce the title faithfully, recall is 1.0.
Sweeping the fuzzy threshold and measuring how often a retracted reference is surfaced (as flagged or possible) versus how often a clean reference is wrongly surfaced:
| Threshold | Retracted surfaced | Clean surfaced | Precision |
|---|---|---|---|
| 0.84 | 0.980 | 0.774 | 0.718 |
| 0.86 | 0.958 | 0.437 | 0.815 |
| 0.88 | 0.945 | 0.035 | 0.982 |
| 0.90 | 0.885 | 0.000 | 1.000 |
| 0.92 | 0.790 | 0.000 | 1.000 |
| 0.94 | 0.688 | 0.000 | 1.000 |
0.90 is the lowest threshold at which no clean reference is surfaced while still recovering 88.5% of retracted references. Below 0.88 the clean-surfacing rate climbs steeply (43.7% at 0.86), which would bury real hits in false positives. Above 0.90 precision stays perfect but recall falls with no benefit.
The defaults are validated by this corpus:
title_exact gate: perfect
precision, zero false accusations — the right posture for a tool that
could otherwise mislabel a clean paper.These are heuristics, not calibrated probabilities, and the corpus is modest (599 references); the numbers should be revisited as the corpus grows and across non-English titles. But they show the current thresholds are conservative in the direction that matters: the package prefers “possible, please verify” over a false assertion.
The two scripts below are in the data-raw/ directory of
the source repository
(they are not part of the installed package). Run them from a repository
checkout: