What the index measures
Healthcare access has three parts, and an index that covers only one of them will mislead. Supply is whether care exists within reach. Need is how much care the population requires. Barriers are what stops people reaching care that exists. A place can be underserved through any of them.
| Indicator | Direction |
|---|---|
| access_primary_care | higher is better |
| access_safety_net | higher is better |
| asmr_per_100k | higher is worse |
| diabetes_pct | higher is worse |
| chd_pct | higher is worse |
| copd_pct | higher is worse |
| uninsured_pct | higher is worse |
| no_vehicle_pct | higher is worse |
Construction
Every indicator is first sign-aligned so that a higher value always means worse access. Accessibility measures arrive as capacity per person, where more is better, so they are flipped.
Values are then winsorised at the 1st and 99th percentile, so one extreme area cannot dominate, and percentile-rank normalised into the open interval (0,1). Ranks are robust, unit-free, and assume nothing about the shape of the distribution.
Indicators correlating above 0.85 are pruned, because two measures of the same thing quietly double the weight of whatever they share. Survivors are chosen by a documented priority: measured before modelled, externally validated before not.
Why a geometric mean, and why the complement
Scores are combined with a complement geometric mean: adequacy (1 − p) is aggregated geometrically and the result subtracted from one. The reason is worth stating, because the obvious version is wrong here.
A plain geometric mean is pulled toward the minimum of its inputs. The Human Development Index exploits that: its dimensions are oriented higher-is-better, so pulling toward the minimum penalises being bad at anything. Our indicators run the other way. Under a higher-is-worse orientation the same formula would reward an area for being catastrophic on one dimension: two areas with identical arithmetic means of 0.5, one balanced and one at 0.9 and 0.1, would score 0.500 and 0.300, ranking the catastrophe as better off. The complement form gives 0.500 and 0.700 instead.
Weights, and why they barely matter
Three schemes are computed side by side: equal weights, the first principal component, and a documented expert scheme. All three are published, because “why 0.30?” is the first question any reviewer asks about a composite index.
Rank agreement between weighting schemes
Bars run 0 to 1. A perfectly reproduced ordering would fill the frame.
Agreement between +0.944 and +0.971 means the ranking is driven by the data rather than by the choice of weights. That is the answer to the question, and it is an empirical one.
Uncertainty
Every published rank carries an interval from a Monte Carlo that resamples the inputs.
Propagated
- Poisson sampling variation in death counts
- Suppression interval on imputed death cells (1-10 per cell)
- Catchment size for the accessibility layer (lognormal around a 25.5-minute drive)
- Weight-scheme choice (Dirichlet around the base scheme)
- PLACES model credible intervals on chronic-disease prevalence
- ACS margins of error on the uninsured and no-vehicle shares
- ACS margins of error on the age-standardisation denominators
Not propagated
- ZIP-to-tract allocation uncertainty
Intervals are a lower bound on total uncertainty. Straight-line distance used to head the second list and no longer appears on it: accessibility is now measured over road drive times, which removes that error rather than widening around it. A bias is not a variance, and resampling could never have fixed it.
Median interval width by population quartile
Widths are close to flat across population size. Small-area death counts are noisy, but once catchment size is also resampled that term dominates, and it applies to every area equally. The largest single source of rank uncertainty in this index is a parameter choice, not a measurement error.
How much the catchment choice matters
Accessibility decays with driving time over the road network, and the width of that catchment is a judgement rather than a measurement. So it gets the same treatment as the weights: run it at several widths and report how much the ranking moves.
Rank agreement against a 17 min catchment
Base catchment 25.5 minutes, Gaussian decay. Agreement falls as the catchment widens, which is why the simulation resamples it rather than fixing it.
Testing the clusters
A map makes patterns whether or not there are any — the eye finds clusters in random noise reliably. So every area is tested against the null hypothesis that the same scores were scattered across the state at random, using the Getis-Ord Gi* statistic with Benjamini-Hochberg correction for testing 1,387 areas at once.
The test needs a definition of “neighbourhood”, and the answer moves with it. Rather than pick one and present the result as settled, the test runs at 4, 6, 8, 12, 16 nearest neighbours and only areas classified the same way at every size are reported. That is a deliberately conservative rule: it discards areas whose clustering depends on the parameter, which is most of them.
Gi* tests against complete spatial randomness, and nearly every geographic variable is spatially autocorrelated. The result establishes where clustering is and how intense, not that clustering exists.
The full result, including where the clusters are and which areas a ranking alone would miss, is on the analysis page.
Validation
Mortality against chronic disease prevalence
Correlation with the mortality surface
Different agencies, different source data. Agreement is evidence the mortality surface is signal. The ordering is epidemiologically right: COPD and heart disease track mortality harder than diabetes, which is more survivable with management.
The composite against social vulnerability
SVI is held out of the index entirely, so it can check the result without circularity — but two of its sixteen variables are also two of our barrier indicators. Only the themes marked independent are clean tests, and those are the ones to read.
| SVI theme | Spearman | Independence |
|---|---|---|
| overall SVI | +0.533 | PARTIAL (uninsured + no-vehicle) |
| socioeconomic | +0.668 | PARTIAL (contains uninsured) |
| household composition | +0.475 | INDEPENDENT |
| minority status | +0.106 | INDEPENDENT |
| housing & transport | +0.209 | PARTIAL (contains no-vehicle) |
SVI includes uninsured and no-vehicle among its sixteen variables, which are also two of our barrier indicators. Only the themes marked INDEPENDENT are clean tests.
The composite against federal shortage designations
HRSA decides independently where care is short, from provider-to-population ratios this index never touches. The comparison runs at county grain, because that is the finest the published file allows.
Counties with and without an area shortage designation
Median county composite. Mann-Whitney p = 9.61e-05.
Counties HRSA designates score 0.68 against 0.56 for the rest, at p = 9.61e-05. Two agencies, two methods, the same counties.
This test used to report inconclusive, and the reason was the question rather than the answer. Every one of California's 58 counties carries a designated primary care HPSA, so asking whether a county has one could not discriminate. But HRSA designates three different things and only Geographic Area is a claim about a place: the other two mark a subgroup or a single site, so a wealthy county with a correctional-facility HPSA scored high while saying nothing about whether the county is underserved. Restricted to area designations the variable splits 26 counties from 32 and discriminates cleanly.
The second question — whether we agree on how short — comes back null. Across the 26 designated counties the correlation with HRSA’s own severity score is +0.086 at p = 6.75e-01.
The severity test is a genuine null: among designated counties our composite does not track HRSA's score. We agree with the federal government about WHICH counties are short of care and not about HOW short. That is unsurprising at 26 points with a score capped at 25, and it is reported rather than dropped.
The rural finding
Small areas reach the worst decile at 26.7% against 1.6% for larger ones, an enrichment of 16.5×. That is after propagating death-count noise, suppression intervals and catchment size, so it is not an artefact of thin denominators.
Known limitations
- Travel is free-flow driving time, not lived travel time. Routing over the road network removed the largest systematic error in the index, but OSRM routes at speed limits: it knows no rush hour, no mountain weather and no bus timetable. For the roughly 5% of households with no vehicle it is the wrong measure entirely, which is why no-vehicle share is carried as a separate barrier indicator rather than folded into supply.
- Provider counts come from a registry of enumerated providers, not of practising ones. Addresses go stale and there is no measure of hours or panel size, so this is provider density rather than delivered care.
- The index measures potential spatial access. An area surrounded by clinics scores well on supply even where residents are excluded from them in practice.
- Around a quarter of the death records are suppressed for small counts and are imputed within their published bounds.
Indicator definitions
These are the layers the map offers, described exactly as the map draws them — both read the same definition file, so a description here cannot drift from the thing on screen.
| Layer | What it means |
|---|---|
| Chance of being among the worst 10% | The share of simulations placing this area in the bottom decile. The default, because it is the claim the analysis can actually support. |
| Composite rank (single estimate) | One number per area, no uncertainty. Included so you can see how much more confident this looks than the evidence warrants. |
| Deaths per 100,000, age-adjusted | All causes, 2019–24, adjusted so an older population does not by itself look unhealthy. |
| Primary care within reach | Providers per 100,000 people, weighted by distance and by competition from everyone else nearby. |
| Residents without health cover | Share of people with no health insurance. |
| Households with no vehicle | Where care exists but getting to it is the obstacle. |
| Tested clusters | Areas whose neighbourhood scores are more extreme than chance allows, at every neighbourhood size tested. Rust marks clusters of poor service, blue clusters of good service. |
Figures on this page are generated from the pipeline output of 2026-07-27. Rerunning the pipeline updates them.