How A Civic Forecast Finding Is Calculated.
A Finding is a figure we compute from two or more datasets — a number neither publisher reports on its own. Here is the arithmetic behind each one.
Every Finding holds to four rules
- Inputs are named on the card — The source chip reads “Civic Forecast” either way, so the body is the only place a reader can tell computed from relayed.
- Periods are aligned first — The newest month both series share — never the newest of each, which silently compares different months.
- A missing input withholds it — It never defaults. An absent rent would publish “rent takes 0% of a paycheck.”
- History is recomputed — Publishers restate, so the whole window is rebuilt each run rather than appending one point.
The formula behind each Finding
Worked at the date shown. The number moves as its inputs are revised; the method does not.
Rent as a share of a paycheck
≈28% — of a full-time month's gross pay · 2026-08-26
Computed from HUD Fair Market Rents · BLS average hourly earnings
monthly rent ÷ (hourly wage × 2,080 ⁄ 12) × 100
A $37.62 hourly wage makes a $6,520.80 gross month, putting the national median two-bedroom just under HUD's own 30% affordability line.
Why gross pay, not take-home Payroll and income tax vary by household in ways this cannot know, and every published housing-wage figure uses gross for the same reason. The card says so rather than leaving a reader to assume.
Real wages after inflation
−0.2% — pay up 3.15%, prices up 3.36% · 2026-07
Computed from BLS average hourly earnings · BLS Consumer Price Index
((1 + pay growth) ÷ (1 + price growth) − 1) × 100
Nominal pay rose and still bought slightly less.
Why a ratio, not a subtraction Growth compounds, so real pay is the ratio of the two growth factors. Subtracting the percentages is the common shortcut and it is wrong: it gives −0.21 here rather than −0.20. The gap is small at these rates and grows as they rise, reaching a full percentage point at 1970s inflation.
Job seekers per opening
104 — openings per 100 job seekers · 2026-06
Computed from BLS Job Openings and Labor Turnover Survey · BLS unemployment (Current Population Survey)
round(openings ÷ people looking for work × 100)
7,359,000 openings against 7,094,000 people looking. Both series are published in thousands, so the units cancel.
Why per hundred, not a bare ratio Rounding a ratio to one decimal rounds away the entire signal — 1.04 and 0.96 are opposite labour markets and both render as “1.0”. Openings and unemployment also release on different schedules, so the figure uses the newest month both share.
Facilities in violation
Per state — a share, not a count
Computed from EPA ECHO violations by state · EPA ECHO regulated facilities by state
facilities in significant violation ÷ regulated facilities
Vermont's 93 violations against California's ~1,200 reads as damning until you account for California having about twenty times as many regulated facilities.
Why a missing state is omitted A state appears only when both halves are present and the denominator is above zero. Filling a gap with the national rate would colour that state with a statement about the country, and a rendered map cannot show the difference.