Calculate SPM (Supplemental Poverty Measure) thresholds for any US geography and year
Project description
spm-calculator
Calculate Supplemental Poverty Measure (SPM) thresholds for any US geography and year.
Interactive Calculator
Try the SPM Threshold Calculator - A browser-based calculator for metros, states, counties, and congressional districts, with a direct handoff to the Python package for tract-level and batch work.
The calculator runs entirely in your browser with no server required. National thresholds and official metro data are bundled; state, county, and district rent adjustments are fetched directly from the Census ACS API.
Run Locally
Next.js app (recommended):
cd web
npm install
npm run dev
Streamlit App (alternative):
pip install spm-calculator[app]
streamlit run app/streamlit_app.py
Overview
The SPM threshold is calculated as:
threshold = base_threshold[tenure] × equivalence_scale × geoadj[tenure]
Where:
- base_threshold varies by housing tenure (renter, owner with mortgage, owner without mortgage), calculated from 5-year rolling Consumer Expenditure Survey data
- equivalence_scale adjusts for family composition using the official Betson three-parameter SPM scale
- geoadj adjusts for local housing costs, using official Census metro thresholds where available and a tenure-specific ACS rent adjustment elsewhere
Installation
pip install spm-calculator
Quick Start
from spm_calculator import SPMCalculator
# Initialize calculator for a specific year
calc = SPMCalculator(year=2024)
# Get base thresholds by tenure (national, before geographic adjustment)
base = calc.get_base_thresholds()
# {'renter': 39430, 'owner_with_mortgage': 39068, 'owner_without_mortgage': 32586}
# Get GEOADJ for a specific location
geoadj = calc.get_geoadj("metro_area", "35620", tenure="renter") # New York metro
# 1.1599
# Calculate threshold for a specific family in a specific location
threshold = calc.calculate_threshold(
num_adults=2,
num_children=2,
tenure="renter",
geography_type="metro_area",
geography_id="35620"
)
# $45,736 (official 2024 Census metro threshold for NYC renters)
Official metro thresholds are bundled with the package. For custom ACS-based
geographies like states, counties, congressional districts, PUMAs, and tracts,
set CENSUS_API_KEY to fetch current median rents.
Supported Geographies
nation- National averagestate- 50 states + DCcounty- ~3,200 countiesmetro_area- Metropolitan statistical areascongressional_district- 435 congressional districtspuma- Public Use Microdata Areastract- Census tracts (limited availability)
Data Sources
- Base thresholds: BLS Consumer Expenditure Survey - 5-year rolling FCSUti (Food, Clothing, Shelter, Utilities, telephone, internet)
- Geographic adjustment: ACS 5-Year Estimates - Table B25031 (Median Gross Rent by Bedrooms)
- Methodology: Census SPM Technical Documentation
Methodology
Base Threshold Calculation
Following BLS methodology (updated September 2021):
- Download 5 years of CE Survey PUMD (Public Use Microdata)
- Filter to consumer units with children
- Calculate FCSUti expenditures
- Convert to reference family (2 adults, 2 children) using equivalence scale
- Calculate 83% of median (47th-53rd percentile average) by tenure type
Geographic Adjustment (GEOADJ)
For official public metro areas, the package uses the published Census metro table directly.
For custom geographies built from ACS rents, the adjustment is tenure-specific:
GEOADJ_t = (local_median_rent / national_median_rent) × housing_share_t + (1 - housing_share_t)
For 2024 thresholds, the tenure-specific housing shares are:
0.443for renters0.434for owners with a mortgage0.323for owners without a mortgage
Equivalence Scale
The SPM uses the official Betson three-parameter scale:
- Single adult with children:
(1 + 0.8 + 0.5 × (children - 1))^0.7 - Multiple adults with children:
(adults + 0.5 × children)^0.7 - One adult without children:
1.0 - Two adults without children:
1.41 - Three or more adults without children:
adults^0.7 - Normalized to the reference family
(2 adults, 2 children) = 3^0.7
Validation
Base thresholds are validated against BLS published values:
| Tenure | 2024 BLS | Calculator |
|---|---|---|
| Renter | $39,430 | $39,430 |
| Owner w/ mortgage | $39,068 | $39,068 |
| Owner w/o mortgage | $32,586 | $32,586 |
Official metro thresholds are validated against Census SPM Thresholds by Metro Area: 2024.
License
MIT License - see LICENSE for details.
Contributing
Contributions welcome! Please see CONTRIBUTING.md for guidelines.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file spm_calculator-0.2.2.tar.gz.
File metadata
- Download URL: spm_calculator-0.2.2.tar.gz
- Upload date:
- Size: 61.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4bafc1758e7435fc791a576b256ad24c09f2296881fdde7611f46a937142e87c
|
|
| MD5 |
697e559609e09c228070a0e79947a827
|
|
| BLAKE2b-256 |
ad24d000b831e3b427be292264238178fbf1ee8016fc4c1ffd2cbb890180a6ac
|
File details
Details for the file spm_calculator-0.2.2-py3-none-any.whl.
File metadata
- Download URL: spm_calculator-0.2.2-py3-none-any.whl
- Upload date:
- Size: 50.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d20ccc74e3d7177c46a24c53fbb9aa0c4a3b200f69c3d5ae96c43d9cf3eaaa44
|
|
| MD5 |
ddedced4c07e16d81cad6bb5aabc6b50
|
|
| BLAKE2b-256 |
351b2dfd2f3db66897270051b7aefbaff8f3192bb07e1aed3305b46155ae9a45
|