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.
| Calculation | Value |
|---|---|
| Environmental PIR | Integrated measured pollution + Atmospheric dynamics adjustment + Local residual |
| Personal PIR | Environmental 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.
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.
| Input | Source | Weight |
|---|---|---|
| PM2.5 AQI | AirNow (Open-Meteo fallback) | × 0.85 |
| PM10 AQI | AirNow (Open-Meteo fallback) | × 0.10 |
| Ozone AQI | AirNow (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.
| Input | Source | Threshold | Points |
|---|---|---|---|
| Dew point | NOAA/NWS | ≥ 73°F | +3 |
| 65–72°F | +2 | ||
| 55–64°F | +1 | ||
| Wind speed | NOAA/NWS | ≤ 4 mph | +2 |
| 5–8 mph | +1 | ||
| Temperature | NOAA/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.
| PIR | Interpretation |
|---|---|
| 0–20 | Excellent respiratory conditions |
| 21–40 | Good |
| 41–60 | Mild / noticeable burden |
| 61–80 | Moderate burden |
| 81–100 | Poor |
| 101–130 | Personally unhealthy |
| 131–160 | Very unhealthy |
| 161+ | Extreme respiratory burden |
Source Details evidence levels
| Label | Meaning |
|---|---|
| Level 1 - Direct measurement | A 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 estimate | Open-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
- The weights and thresholds above are a first-pass heuristic reproducing two hand-worked example calculations, not an empirically calibrated model.
- Only PM2.5, PM10, ozone, temperature, dew point, and wind are currently used - not smoke, dust, pollen, or indoor conditions.
- Locations and personal modifiers are constants edited by hand in
js/config.js(Stage 1) - not yet user-editable in the app itself. - Every location is scored against the same personal modifiers, since it's the same person on the same day - only the environmental inputs differ by location.