How to read a PRBI report

This explains every number in a generated report: what it means, what inputs feed it, and exactly how it's calculated. The scoring formula is v0.1 / alpha and uncalibrated - it reproduces the shape of the worked examples used to design PRBI, not a validated equation. See waco/specifications/prbi_specification_bundle_v0_4/specifications/PRBI-SPEC-006-Personal-Burden-Calculation.md for the authoritative design specification this is built from.

The two scores

Environmental PIR describes the outdoor environment itself - independent of any person. Personal PIR takes that same environment and adds your day-specific personal factors (sleep, alcohol, recent outdoor exposure, etc.). The same environment can produce a different Personal PIR for different people, or for the same person on a different day.

CalculationValue
Environmental PIRIntegrated measured pollution + Atmospheric dynamics adjustment + Local residual
Personal PIREnvironmental PIR + Personal modifier

Comparing locations

A report covers every location in js/config.js at once, scored against the same personal profile. The Environmental PIR, Personal PIR, and Source Details tables each have one column per location, so you can compare them side by side directly - a "—" in any cell means that location's Environmental or Personal PIR couldn't be calculated (usually a missing PM2.5 reading; see that location's Data Gaps). Source Details lists every variable across all locations in one table, then the Source/Evidence/Retrieved citation for each location's data underneath, prefixed with the location name - those three values are the same for every variable pulled from one source in one run, so they're not repeated per row.

Location Context

A live query against EPA's public SEMS (Superfund Enterprise Management System) database for any documented site within about 10 miles of each location's coordinates - see js/adapters/epaSems.js. This used to be a hand-curated note in js/config.js, but a hand-curated entry for Poulsbo turned out to be wrong (checked only at county resolution, then asserted for a specific town), so this now reflects only what an actual queryable federal source returns for the exact coordinates. It still isn't treated as a measurement - no retrieval timestamp, and it's not part of the Environmental or Personal PIR score - but it's live now, not a memory.

This checks one specific federal database (Superfund/CERCLIS-listed sites), not "has this location ever had any contamination of any kind." "No SEMS-listed site found nearby" means exactly that, not a clean bill of health - a documented issue that was never entered into SEMS as its own site record (a diffuse historical plume, for instance) won't show up here. If the query itself fails for a run, that's shown separately from "checked, found nothing" - the two mean different things.

Lead (EPA AQS)

The most recent available Lead reading from EPA's AQS (Air Quality System) within about 20 miles of each location, compared against the NAAQS 3-month rolling average limit of 0.15 µg/m³ - see js/adapters/epaAqs.js. This requires a free AQS email/key in Settings; without one, or if none is found nearby, nothing is shown for this location.

Unlike everything else in this report, AQS data is not real-time - EPA's own documentation states it can take 6 months or more from collection to availability, which is why this lives in Location Context rather than the live score. The reading shown could be up to a few years old (the query looks back 3 years to find one at all); the date is always shown alongside the value so that's never hidden.

Environmental PIR components

Integrated measured pollution

A single combined score from the three regulatory pollutants AirNow reports (PM2.5, PM10, and ozone AQI). PM2.5 is treated as the dominant "anchor" pollutant, with PM10 and ozone contributing only a modest additional amount - because their measured burden overlaps substantially with PM2.5, adding all three at full value would double-count the same pollution episode.

InputSourceWeight
PM2.5 AQIAirNow (Open-Meteo fallback)× 0.85
PM10 AQIAirNow (Open-Meteo fallback)× 0.10
Ozone AQIAirNow (Open-Meteo fallback)× 0.05

AirNow's reporting areas don't always cover all three pollutants - some only report PM2.5, for example. When a pollutant is missing from AirNow, Open-Meteo's modeled air quality is used as a fallback for that pollutant only, never to override a real AirNow measurement. Fallback values are clearly marked "Level 3 - Model estimate" in Source Details, distinct from AirNow/NOAA's "Level 1 - Direct measurement". If a pollutant is unavailable from both, it simply contributes zero rather than being guessed - noted under that report's Data Gaps. PM2.5 itself is required from one of the two sources: without it, Environmental PIR isn't calculated at all.

Atmospheric dynamics adjustment

A small point adjustment for weather conditions that affect how pollution is experienced, beyond what's already reflected in the measured concentrations: humid, still air holds pollutants closer to the ground and can worsen respiratory tolerability; wind ventilates and disperses it; heat adds physiological stress. Each factor is scored independently from threshold bands and added together.

InputSourceThresholdPoints
Dew pointNOAA/NWS≥ 73°F+3
65–72°F+2
55–64°F+1
Wind speedNOAA/NWS≤ 4 mph+2
5–8 mph+1
TemperatureNOAA/NWS≥ 90°F+1

Any condition outside these bands (or missing) contributes 0.

Local residual

A manual placeholder for property- or neighborhood-scale exposure that the regional AirNow/NOAA sources might miss (nearby construction, a monitor several miles away, etc.). There's no distance/representativeness formula yet, so this defaults to 0 for every run.

Personal PIR component

Personal modifier

The sum of whatever daily modifiers are set in js/config.js for this run - flat point additions for things like short sleep, alcohol, or recent outdoor exposure during a pollution episode. This is deliberately simple for now: a full personal profile (diagnoses, baseline susceptibility, medications) is future work, described in waco/specifications/prbi_specification_bundle_v0_4/specifications/PRBI-SPEC-001-Personal-Profile-Schema.md.

Interpretation bands

Both Environmental PIR and Personal PIR are read against the same scale. Higher is worse - these are PRBI's own developmental categories, not EPA AQI categories.

PIRInterpretation
0–20Excellent respiratory conditions
21–40Good
41–60Mild / noticeable burden
61–80Moderate burden
81–100Poor
101–130Personally unhealthy
131–160Very unhealthy
161+Extreme respiratory burden

Source Details evidence levels

LabelMeaning
Level 1 - Direct measurementA real instrument reading (NOAA/NWS weather station).
Level 1 - Direct measurement (preliminary)A real instrument reading (AirNow), not yet run through EPA's full quality-assurance process - it can occasionally be revised later.
Level 3 - Model estimateOpen-Meteo's modeled air quality, used only as a fallback when AirNow didn't report that pollutant for this location. Never a direct measurement.

Limitations