The problem with the usual approach
A composite index is easy to build badly. Pick some indicators, assign weights that feel about right, add them up, colour a map. The result looks authoritative and is close to unfalsifiable: nobody can tell which of the weights drove the answer, whether the indicators were measuring the same thing twice, or how much the ranking would move under a slightly different choice.
This project began as a rebuild of an earlier San Diego County student piece that did exactly that. Four things were wrong with it, and fixing them is most of what the repository now is.
What is different here
Age-standardised mortality
Crude death rates
A map of crude rates is substantially a map of age structure. Standardising means an older population does not by itself register as underserved.
A floating catchment with distance decay
Facilities counted inside a boundary
People cross ZIP lines for care, and clinics are shared between the areas around them. Counting inside a line misses both.
Three schemes, published with their agreement
Weights that felt about right
If the ranking depended on the weights, that would now be visible rather than hidden. It largely does not, and the number saying so is on the methodology page.
A rank interval from resampling
One rank per area
A single number implies a precision nobody has. The map shades the areas whose interval is too wide to place at all.
Two further datasets — the CDC’s Social Vulnerability Index and the federal shortage designations — are held out of the index entirely, so they can check the result without circularity.
What it is not
This measures potential access: whether care exists within reach of where people live. It cannot see whether people are actually able to use it. An area surrounded by clinics scores well on supply even where residents are excluded from them by cost, language, documentation status or discrimination. The barrier layer catches some of that, not all of it.
It is also not a clinical or policy instrument. It is a research tool for finding places worth looking at more closely.
Reproducing it
Every figure on this site is generated by the pipeline rather than typed in, so rerunning the pipeline updates the site. The analysis runs on open data with a tested Python codebase, and the map is a single vector tile archive served as a static file — no server, no database, no API.
A number that is missing from a page is missing because the pipeline could not compute it. Nothing here falls back to a guess.