Skip to content
CancerIndex

Methodology

Clinical trial map

Registered study sites per country, for all oncology trials or one top-level cancer, by phase and recruiting status. Every number is recomputed deterministically from canonical tables; nothing is estimated.

Computed formula ci-trial-sites-v1 · table trial_site_country_counts · source clinicaltrials · Open the map

§11

Definitions

Site
One trial_locations row: a facility entered by the registrant for a study. A study listing 40 US facilities contributes 40 sites to the United States. Locations with an empty country are excluded.
Trial
A distinct study with at least one site in the country. A multinational study counts once per country, so the trials column summed over countries exceeds the number of distinct studies; the page headline "Trials" is the distinct count over the whole scope, computed live.
Recruiting
The location's own status is RECRUITING; when the registrant gave no location status (about 82 % of rows) the study's overall status RECRUITING is used instead. "All statuses" includes completed and withdrawn studies.
Study type
Interventional and observational studies are both included; there is no study_type filter.
Country name
The registrant's spelling as exported by ClinicalTrials.gov, kept verbatim so the "View trials" link filters the list exactly; ISO 3166-1 alpha-3 is added for drawing.

§11

Scopes and aggregation

One row per (cancer, phase, recruiting_only, country). Cancer: all oncology trials, or one of the active top-level cancers; a trial belongs to a top-level cancer when any of its mapped conditions is the cancer or one of its descendants in the NCIt hierarchy (recursive traversal, depth ≤ 12 — the same traversal as the entity counters). A study mapped to several top-level cancers counts in each; the all-trials scope counts it once. Phase: any, or Phase 1–4; a PHASE2|PHASE3 study counts under both, EARLY_PHASE1 counts under Phase 1, studies with phase N/A count only under "any". Recruiting: as defined above.

Counts: sites = count(*), trials = count(DISTINCT trial_id). Rebuilt in one transaction by pnpm cix intel (≈ 11 800 rows, 178 country names, about 30 s). The freshness line shows the rebuild time.

ISO 3166-1

Country mapping and unmapped names

Current short names and legacy long forms ("Korea, Republic of", "Russian Federation", "Viet Nam", "Réunion", "Palestinian Territory, occupied") are mapped to alpha-3, case-, whitespace- and apostrophe-insensitively. Territories keep their own code (Puerto Rico PRI, Hong Kong HKG, Réunion REU, Guam GUM…) because that is how the registrant counted the site; Kosovo uses the user-assigned XKX; "Virgin Islands" is read as the U.S. Virgin Islands.

Names without a current ISO code stay unmapped, appear in the table by name and are never painted: “Serbia and Montenegro”, “Former Serbia and Montenegro”, “Federal Republic of Yugoslavia”, “Former Yugoslavia”, “Yugoslavia”, “Netherlands Antilles”, “Czechoslovakia”, “Union of Soviet Socialist Republics”, “USSR”. A unit test checks that every distinct country name in the database either resolves or is on this explicit list, so a new spelling cannot silently vanish from the map.

Cartography

Projection, classes and colour

  • Geometry: Natural Earth 1:110m (world-atlas, public domain); numeric ISO ids converted to alpha-3; Antarctica dropped; Northern Cyprus and Somaliland have no code and render as "no site".
  • Projection: Equal Earth (d3-geo), fitted to the sphere in a 960×480 viewBox — equal-area, so high-latitude countries are not visually inflated.
  • Class breaks: quantiles (equal number of countries per class), at most 5 classes, computed on the displayed metric over countries with ≥ 1 site for the current filter. Site counts are extremely skewed (the United States hosts about half of all sites; the median country has a few dozen): equal intervals would put every country but one in the first class and a logarithmic scale would hide the difference between 1 and 30 sites. Thresholds are the observed class maxima, so the legend shows the exact range and country count of each class. Colours are comparable within one view only.
  • Colour: sequential teal ramp #e2eeee #b5d3d4 #7fb1b3 #3f8286 #0b4a4d; "no site" is the paper-3 tone. Colour is never the only carrier: each country is a link with a text title, the legend is textual and the full table is always rendered.
  • City layer: only when a cancer is selected — live aggregate of locations by (country, city, state) with the mean geocoded position, top 300 by sites, dot area ∝ sites. The registry-wide, all-status city aggregate (≈ 3 s) is not served per request.

Caveats

Limitations

  • Sites reflect registration practice, not research capacity: US sponsors list every facility, other sponsors often list one coordinating site per country; only ClinicalTrials.gov is ingested.
  • Location status is missing for ~82 % of rows; falling back to the study status over-counts recruiting sites at facilities that have closed.
  • Basket trials mapped to several top-level cancers count in each cancer scope.
  • Coordinates come from the upstream registry; cities without coordinates are absent from the dot layer only.
  • Counts are not normalised by population or burden; such views belong to the rankings layer with their own formula version.

Reference text: docs/methodology/trial-map.md. General methodology: How the index is built.