← Back to story

Miami-DadeSmall schools and costMethodology recipe

Miami-Dade's small elementary schools spend more per student; a median-based benchmark gap totals $20 million

A reproducibility log: the data this analysis touched, the queries it ran, and how a third party would re-run it.

Summary

Joined 2024-25 per-pupil expenditure to October enrollment for district-run schools, grouped by level and size band, and computed the excess of small elementary schools over the 500–749 median.

Data sources

Steps

  1. PPE and enrollment for district-run regular schools (the packet's universe).

    SELECT a.school_number, s.school_level, a.value AS ppe, b.value AS enrollment
    FROM miami_school_year_metrics a JOIN miami_school_year_metrics b USING (school_number, year) JOIN miami_schools s ON s.school_number = a.school_number
    WHERE a.metric_key = 'per_pupil_expenditure_school' AND b.metric_key = 'enrollment_oct' AND a.year = '2024-25' AND a.subgroup = 'ALL' AND b.subgroup = 'ALL'
      AND NOT a.suppressed AND NOT b.suppressed AND NOT s.is_charter AND s.school_type = 'REGULAR';
  2. Medians by level and size band; the excess = Σ over elementary schools under 300 of (school PPE − 500–749 median) × school enrollment (packet ppe_vs_size.excess_cost_small_es.excess_usd); the median-gap × students reading is median_gap_times_students_usd.

Caveats

The series used is the state's school-level per-pupil expenditure, which excludes allocated district indirect costs (the 'total' series that adds them back is served separately); charter figures are self-reported and excluded here. The $20.5M is a per-school sum, not a difference of medians times students (that is $17.3M), and neither is a savings estimate.

Reproduce

Follow docs/cities/miami/07_runbook.md: `make miami-discover-all`, parse the PDFs, run the loaders in order, `make miami-verify`, then the analysis scripts. The queries below run directly against the local Postgres.

The recipe lives at data/cities/miami/stories/recipes.ts in the repo.