Projections · open formulas
Where the curve goes if nothing changes
For each metric we have a finalized historical series on, we fit a simple trend (linear or exponential) and project forward to 2030. Every formula is shown so you can re-run it on your own data, with your own counties, with different smoothing assumptions. The point is the framework, not the prophecy.
Projections, not measurements. The tables below are illustrative forecasts built on finalized historical baselines, each labeled with its real as-of date (overdose anchors use the finalized 2023 county series; the fentanyl share uses the 2023 statewide anchor; IDOC release rates use the October 2024 snapshot). Future-year figures are model output, not observed data. For current court activity see Opinions, Appellate, and Cases.
The two models we use
Linear trend (default)
Projection(t) = a + b · t
where t = 0 for 2020, t = 1 for 2021, ..., t = 5 for 2025
fit a, b via least squares on 2020-2025 data
plug t = 6 (2026), 7 (2027), ..., 10 (2030)
Use this for stable-trending metrics: arrests, jail population, total 911 calls, IDOC releases.
Exponential trend (volatile metrics)
Metric(t) ~ A · e^(k · t)
log-transform to linear:
ln(Metric) = ln(A) + k · t
fit ln(A) and k on 2020-2025
exponentiate for 2026-2030
Use this for fast-moving metrics: fentanyl-involved share (rising), overdose deaths in hot-spot counties (post-pandemic spike), naloxone administrations (rising as supply expands).
Cap exponential rises. Fentanyl-involved share follows a logistic curve in real life — it can’t exceed 100%. Apply a soft ceiling at ~85–90%, the asymptote observed in fully-fentanylized national markets, when projecting that metric.
Projected: overdose deaths per 100k (illustrative)
This table illustrates the shape of a projection if recent trends continue unchecked. The anchor column shows the finalized 2023 per-100k rate from the IDOH 2023 report (the same values on the Counties page); the slopes are illustrative placeholders. Re-fit with your own multi-year series for site-specific projections.
| County | Anchor (finalized 2023) | Slope b/yr (illustrative) | 2026 proj. | 2028 proj. | 2030 proj. | Model |
|---|---|---|---|---|---|---|
| Jackson | 21.5 / 100k | +0.5 | ~23 | ~24 | ~25 | Linear (illustrative slope) |
| Scott | 57.9 / 100k (high) | -1.0 | ~55 | ~53 | ~51 | Linear (post-IRACS softening) |
| Jennings | 61.2 / 100k | +0.2 | ~62 | ~62 | ~62 | Linear (illustrative slope) |
| Lawrence | 39.7 / 100k | -0.4 | ~38 | ~38 | ~37 | Linear (illustrative slope) |
| Indiana statewide | 31.6 / 100k (2023) | -0.5 | ~30 | ~29 | ~28 | Linear (illustrative slope) |
Anchors are the finalized 2023 county per-100k rates (IDOH 2023 Fatal Overdose & Suicide Report). Slopes and projected years are illustrative model output, not observed data — re-fit with a full multi-year series before relying on them.
Projected: fentanyl-involved share of overdose deaths
Indiana 2023 baseline: 51% of drug-overdose deaths involved fentanyl. Without a ceiling-cap, exponential extrapolation would put the share above 100% by 2028 — impossible. Use a logistic curve with asymptote at ~88%.
logistic(t) = L / (1 + e^(-k · (t - t0)))
where:
L = 88 (% asymptote)
k = growth-rate parameter (fit from 2020-2025 share)
t0 = inflection year (typically ~2022 for fentanyl)
| Year | Statewide IN fentanyl share (proj.) | Model output |
|---|---|---|
| 2023 (anchor) | 51% | data |
| 2026 | ~70% | logistic |
| 2028 | ~80% | logistic |
| 2030 | ~85% | logistic, near asymptote |
Read with caution — if a non-fentanyl synthetic opioid (nitazenes, etc.) becomes dominant, the “fentanyl share” metric stops being meaningful and the underlying “deaths” curve becomes the load-bearing one.
Projected: IDOC releases by county of admission (per 1,000)
IDOC’s “Adult Releases” tables drive this column. Pull 2020–2025 releases from each Jackson-area county, divide by population, fit linear:
releases_per_1k(t) = a + b · t
where t = 0 for 2020, ..., t = 5 for 2025
| County | Pop est. | Oct 2024 releases | Annualized rate /1k | 2030 proj. /1k (linear) | Notes |
|---|---|---|---|---|---|
| Jackson | ~46,500 | 6 | ~1.55 | ~1.6 | Stable; matches comparison-set median |
| Scott | ~24,200 | 4 | ~1.98 | ~1.8 | IRACS 9.5% recidivism softens release-flow trend |
| Jennings | ~27,800 | 5 | ~2.16 | ~2.2 | High per-capita rate; also OD hot-spot |
| Bartholomew | ~83,000 | 8 | ~1.16 | ~1.2 | Cummins-anchored employer base |
| Monroe | ~140,300 | 10 | ~0.86 | ~0.9 | Best-positioned (Bloomington / IU) |
| Lawrence | ~45,300 | 5 | ~1.32 | ~1.3 | Bedford metro |
| Clark | ~123,500 | 2 | ~0.19 | ~0.3 | Louisville-cross-river; large pop denominator |
| Floyd | ~81,300 | 1 | ~0.15 | ~0.2 | New Albany |
| Vanderburgh | ~179,000 | 17 | ~1.14 | ~1.2 | Evansville; largest absolute release count |
Annualization assumes Oct 2024 is approximately representative of monthly average (release rate × 12 / pop × 1000). Source: IDOC Oct 2024 Statistical Report Table 24.
Program-participation projection (rehab/reentry/MAT)
For each named program in the Counties — Programs table, track annual clients served. Fit linear growth, sum across counties:
total_program_capacity(t) = sum_over_programs( a_p + b_p · t )
Most rural-Indiana SUD and reentry programs are growing slowly (a few percent per year); some are plateauing as funding caps. Pair this projection against the projected overdose curve to surface the treatment gap: how many overdose-death equivalents are absorbed (or not) by the program-side capacity.
Recommended Python implementation
import numpy as np
def fit_linear(years, values):
"""Returns (a, b) where projection(t) = a + b*t, t = year - years[0]."""
t = np.array(years) - years[0]
y = np.array(values, dtype=float)
b, a = np.polyfit(t, y, 1)
return a, b
def fit_exp(years, values):
"""Returns (A, k) where projection(t) = A * exp(k*t)."""
t = np.array(years) - years[0]
y = np.log(np.array(values, dtype=float))
k, lnA = np.polyfit(t, y, 1)
return float(np.exp(lnA)), float(k)
def fit_logistic(years, values, L=88.0):
"""Fit logistic with fixed asymptote L (default 88%) for fentanyl share."""
from scipy.optimize import curve_fit
t = np.array(years) - years[0]
y = np.array(values, dtype=float)
def f(t, k, t0): return L / (1 + np.exp(-k * (t - t0)))
(k, t0), _ = curve_fit(f, t, y, p0=[0.6, 2.0])
return L, k, t0