Redistricting Analysis with the redistverse
A comprehensive reference for redistricting analysis in R using the redistverse ecosystem (library(redistverse) loads redist, redistmetrics, ggredist, geomander, sf, and adj).
Standard Analysis Pipeline
- Load data — Download pre-built precinct map + demographics + elections via
alarmdata, or assemble your ownsfobject and build aredist_map. → 12-alarmdata.md - Prepare adjacency — Verify and edit the adjacency graph (remove water-body edges, fix topological errors). → 08-adj.md, 09-geomander-adjacency.md
- Set constraints — Define population tolerance, county-split penalties, VRA hinge constraints, compactness. → 02-redist-constraints.md
- Simulate — Run
redist_smc()(recommended) or MCMC to generate an ensemble of valid plans. → 01-redist-simulation.md - Validate — Check convergence (
summary()), R-hat, effective sample size, and plan diversity. → 01-redist-simulation.md - Score — Compute compactness, partisan fairness, splits, and other metrics across the ensemble. → 04–06 redistmetrics references
- Visualize & compare — Map plans, plot metric distributions, compare enacted plan to the baseline. → 07-ggredist.md
Quick Navigation
| Package / Topic | Reference |
|---|---|
redist_map, redist_smc, redist_mergesplit, redist_flip, redist_plans, diagnostics |
01-redist-simulation.md |
redist_constr, add_constr_splits, add_constr_grp_hinge, all soft constraints |
02-redist-constraints.md |
redist_enumpart, redist_shortburst, redist_cyclewalk, init_particles |
03-redist-advanced.md |
redistmetrics — Polsby-Popper, Reock, spanning tree, prep_perims, comp_* functions |
04-redistmetrics-compactness.md |
redistmetrics — efficiency gap, mean-median, bias, declination, part_* functions |
05-redistmetrics-partisan.md |
redistmetrics — county splits, segregation, competitiveness, incumbents, plan_parity, group_frac |
06-redistmetrics-other.md |
ggredist — geom_district, party color scales, cartographic palettes, theme_map |
07-ggredist.md |
adj — adjacency graph construction, edge operations, coloring, Laplacian |
08-adj.md |
geomander — adjacency construction, contiguity checks, seam_rip, edge editing |
09-geomander-adjacency.md |
geomander — geo_match, estimate_down/up, block2prec, spatial estimation |
10-geomander-spatial.md |
geomander — downloading VEST, ALARM, DRA, HEDA, get_lewis election data |
11-geomander-data.md |
alarmdata — alarm_50state_map, pre-built datasets, caching, alarm_add_plan |
12-alarmdata.md |
PL94171 — Census P.L. 94-171 decennial data ingestion |
13-pl94171.md |
censable (data + state IDs), easycensus (ACS), tinytiger (TIGER shapefiles) |
14-census-utilities.md |
baf — download official Census Bureau block assignment files |
15-baf.md |
rict — gt summary tables: population, demographics, elections, compactness, splits |
16-rict.md |
redistio — interactive Shiny plan drawing (draw()) and adjacency editor (adj_editor()) |
17-redistio.md |
Key Data Structures
redist_map — an sf tibble with one row per precinct. Stores the adjacency graph, population column, number of districts, and population tolerance. Created by redist_map() or downloaded via alarm_50state_map(). Standard columns include pop, pop_black, pop_hisp, pop_asian, pop_white, pop_vap, pop_bvap, ndv (Democratic votes), nrv (Republican votes), and geometry.
redist_plans — a tibble with one row per district per plan (so nsims × ndists rows, plus reference plans). Stores district assignments in a hidden integer matrix; metrics are added as columns via mutate(). Access the plan matrix with get_plans_matrix().
adj — an S3 vector class representing an adjacency list. Each element is a zero-indexed integer vector of neighbors. Stored as the adj column in redist_map.
Population Tolerance Guidelines
| Map type | Typical pop_tol |
Legal basis |
|---|---|---|
| Congressional | 0.005 (±0.5%) |
Wesberry v. Sanders |
| State legislative | 0.05 (±10%) |
Reynolds v. Sims |
| Local | Varies by state | State law |