Every number in this tool is sourced, documented, and open. This page explains how we calculate affordability, where the data comes from, and what the limitations are.
This is an economic diagnostic tool, not a budget app.
The distinction matters: a budget app says “here’s what you spend.” This tool says “here’s what it costs to live adequately, and here’s whether incomes cover it.”
The core metric is the dollar shortfall: Annual Income minus Annual Budget. A $0 shortfall means income covers basic needs. A negative number means income falls short. We also track income as a percentage of budget for trend analysis:
| Shortfall | Income as % of Budget | Meaning |
|---|---|---|
| $0 (Adequate) | 100+ | Affordable: income covers all basic costs |
| $1–$8,000/yr | 80-99 | Tight: income nearly covers costs, minor strain |
| $8,000–$16,000/yr | 60-79 | Strained: significant gap between income and costs |
| $16,000–$24,000/yr | 40-59 | Crisis: income covers less than 60% of basic costs |
| $24,000+/yr | <40 | Severe crisis: income covers less than 40% |
The v3 model uses eight household-type-specific budgets instead of a single one-size-fits-all budget. Each type has its own expenses matched to the appropriate income metric.
| Household Type | Income | Owner | Renter |
|---|---|---|---|
| Single adult, no kids | $34,049 (individual) | $14K/yr short (71) | $6K/yr short (85) |
| Single parent, 1 child | $34,049 (individual) | $30K/yr short (53) | $24K/yr short (59) |
| Single parent, 2 children | $34,049 (individual) | $45K/yr short (43) | $40K/yr short (46) |
| Two adults, no kids | $50,747 (household) | $18K/yr short (74) | $10K/yr short (83) |
| Two adults, 1 child | $50,747 (household) | $35K/yr short (59) | $30K/yr short (63) |
| Two adults, 2 children | $50,747 (household) | $49K/yr short (51) | $47K/yr short (53) |
| Retiree (single) | $22,884 (Soc. Security) | $11K/yr short (67) | $3K/yr short (88) |
| College student | $18,000 (part-time) | N/A | $4K/yr short (83) |
Every household with children is in crisis (D) as owners. Childcare is the budget killer.Single parents with 2 children face the worst affordability: D (43) owner, D (46) renter.
The old model showed F (38) for all single workers because it charged a single person’s income against a family’s expenses (2 cars, childcare, family food). This was normalizing deprivation in reverse, making things look worse for singles by mismatching budget to household type.
The v3 model matches income metric to household type:
This replaces the old approach of using a single income against a single budget.
We call metric mismatches “normalizing deprivation.”Whenever a metric makes conditions look better or worse by mismatching the unit of analysis, it hides the real picture. This works in both directions:
| Metric | Annual | Census Table | Used For |
|---|---|---|---|
| Individual median earnings | $34,049 | B20017_001E | 1-earner households (FT year-round workers only) |
| Full-time year-round male | $48,125 | B20017_002E | Scenario analysis |
| Full-time year-round female | $45,033 | B20017_005E | Scenario analysis, gender gap |
| Household median income | $50,747 | B19013_001E | 2-earner households |
| Per capita income | $28,483 | B19301_001E | Context only |
| MSA household median | $58,000 | MHIMI26065 | Context only |
The $6K/yr shortfall shown for “median FT worker” at $34,049 represents only full-time year-round workers, a subset. The median of ALL workers (including part-time) is ~$23,750. Half of all workers face larger shortfalls than what we show:
| Income Level | Annual | Shortfall (Single Adult Renter) |
|---|---|---|
| 25th percentile worker | $11,250 | $26K/yr short (32) |
| MI minimum wage (full-time) | $21,486 | $16K/yr short (58) |
| Median ALL workers | $23,750 | $14K/yr short (64) |
| ALICE survival threshold | $28,740 | $9K/yr short (76) |
| Median FT year-round | $34,049 | $6K/yr short (85) |
| Median FT year-round male | $48,125 | Covers needs (114) |
Source: Census ACS B20001 (earnings distribution), B20017 (median earnings by sex/work experience), Lansing city. Among workers with earnings, 49% earn under $25,000/yr. 40% earn under $20,000/yr.
B20001 “no earnings” vs. B23025 employment
Census B20001 shows 49% of its universe with “no earnings.” This does NOT mean 49% are unemployed. “No earnings” means no WORK income. It includes retirees on Social Security, SSDI recipients, stay-at-home parents, and students not working. These people have income but no wage earnings. The actual employment rate comes from Census B23025: 62% of Lansing adults (16+) are employed (55,744 of 90,023 pop 16+).
Full-time year-round male workers in Lansing earn $48,125. Female workers earn $45,033, a gap of $3,092 per year ($258/month).
The v3 model uses eight household-type budgets instead of a single one-size-fits-all budget. Each household type has expenses calibrated to its actual needs: number of cars, food portions, childcare (only for households with children), and healthcare plan type.
| Budget Item | Single Adult | Single Parent (1) | Two Adults | Two Adults + Child |
|---|---|---|---|---|
| Cars | 1 | 1 | 2 | 2 |
| Food | $450 | $700 | $750 | $1,050 |
| Childcare | -- | $1,000 | -- | $1,000 |
| Healthcare | $400 (ACA) | $550 (ACA) | $600 | $750 (family) |
| Phone | 1 line | 1 line | 2 lines | 2 lines |
| Tax rate | 18% | 15% | 20% | 19% |
Budget category costs are never allowed to drop below the ALICE (Asset Limited, Income Constrained, Employed) survival threshold from the United Way of South Central Michigan. This prevents the model from normalizing deprivation. If CPI says food got cheaper but people are eating inadequately, the model doesn’t call that “affordable.”
ALICE threshold for Ingham County: 41% of households fall below it. Single adult: $28,740/yr. Family of four: $74,556/yr.
The model computes separate indices for homeowners and renters, then combines them with a population-weighted average (53% owner / 47% renter in Lansing city). The owner model represents new buyers only. Existing homeowners with locked-in low rates have lower actual costs.
All data is pulled at the most local level available:
| Level | What uses it | Why |
|---|---|---|
| Lansing City | Individual earnings (B20017, primary), household income, home value, tenure, rent, rent burden | Census ACS place-level query (FIPS 2646000) |
| Lansing Tracts | SVI, CEJST, food access, map choropleth | 38 tracts from redlining study, filtered from county |
| Lansing MSA | Unemployment, HPI, listings, days on market, ZORI | Smallest geography FRED/Zillow publish |
| Detroit CPI | Food, medical, transportation, apparel price trends | Closest metro with CPI (90mi). Adjusted by Lansing RPP. |
| National | Mortgage rates, PPI builder costs | Inherently national markets |
No county-level data is used.County data masks Lansing’s reality:
Lansing has no city-level CPI. Instead of using the overly broad Midwest Region CPI, we built a Lansing-adjusted price proxy:
The original tracker used an opaque “crash score” (0-135) that combined 15+ indicators with arbitrary thresholds and equal weighting. We replaced it with a named risk indicator panel showing each factor individually.
Thresholds are based on the MSA’s own historical distribution, not arbitrary national cutoffs.
Mortgage and credit card delinquency rates are national only. No Lansing-specific delinquency data is available on FRED. These are shown for context but do not reflect local conditions.
| Source | What | Geography |
|---|---|---|
| Census ACS | Income, home value, tenure, rent, rent burden | Lansing city |
| FRED | Unemployment, HPI, listings, rates, delinquency | MSA / National |
| Zillow | ZHVI home values, ZORI rent index | MSA + ZIP |
| BLS Detroit CPI | Food, medical, transport, apparel price trends | Detroit MSA |
| BWL | Electric and water utility rates | Lansing city |
| HUD | Fair market rents, income limits, CHAS | MSA |
| HMDA | Mortgage denial rates by race | Ingham County |
| Eviction Lab | Eviction filing rates | Ingham County |
| CDC SVI | Social vulnerability by tract | Lansing tracts |
| USDA | Food access / food deserts | Lansing tracts |
| CEJST | Environmental justice screening | Lansing tracts |
| ALICE | Survival budget thresholds | Ingham County |
| MIT | Living wage calculator | Lansing MSA |
All data, methodology, and code are open. The build pipeline fetches from public APIs and writes static JSON files. No proprietary data, no paywalled sources, no black boxes.
Individual charts and metrics can be embedded in external sites via iframe using the /embed route. Embeds render without the navigation bar, with a dark background matching the main app theme and a small attribution link.
| Embed Type | URL | Description |
|---|---|---|
| Gauge | /embed?type=gauge&household=single_adult&tenure=owner | Affordability gauge with shortfall for a household type and tenure |
| Chart | /embed?type=chart&series=afford_history | Affordability trend chart (owner, renter, combined) |
| Shortfall | /embed?type=shortfall&household=single_adult&tenure=renter | Large shortfall display with score and label |
| Distribution | /embed?type=distribution | Income distribution bar chart (single adult renter) |
| Parameter | Values | Default |
|---|---|---|
type | gauge, chart, shortfall, distribution | (required) |
household | single_adult, single_parent_1, single_parent_2, two_adults, two_adults_1_child, two_adults_2_children, retiree, college_student | single_adult |
tenure | owner, renter | renter |
series | afford_history | afford_history |
<iframe
src="https://your-domain.com/embed?type=gauge&household=single_adult&tenure=renter"
width="400"
height="320"
frameBorder="0"
style="border: none; border-radius: 8px;"
></iframe>