← Back to story

Miami-DadeThe 2026 closure listsMethodology recipe

31 of the district's 54 emptiest schools are on no closure list, and 12 listed schools are at least half full

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 utilization (headcount ÷ permanent FISH capacity) to the board's 2026 lists for district-run elementary, K-8 and middle schools and cross-tabulated flagged status at utilization cuts, with Fisher's exact test.

Data sources

  • Database tablemiami_schools

    One row per school number (MSID directory + CCD + GIS); sector, level, magnet status, activity code, region.

  • Database tablemiami_school_year_metrics

    Long-format facts: (school_number, year, metric_key, subgroup) with value, suppressed, denominator, peer and district percentiles, and the residual-z columns.

  • Database tablemiami_school_events

    Board actions per school and year (closed, consolidated, under review, reassessed) with the PDF page each cites.

  • Cached outputdata/analysis/miami-enrollment.json

    The enrollment analysis packet: trend, school change, utilization, lift table, spending versus size.

  • External datasetFLDOE Membership by District and School by Grade (Survey 2)
  • External datasetFLDOE FISH Level of Service report (Dade)
  • PublicationM-DCPS Attendance Zone Recommendations 2026-27 (board book)

Steps

  1. Universe and utilization (the packet also requires a 2024-25 October headcount, which the derived utilization cell already implies).

    SELECT m.school_number, m.value AS utilization
    FROM miami_school_year_metrics m JOIN miami_schools s USING (school_number)
    WHERE m.metric_key = 'utilization_permanent_pct' AND m.year = '2024-25' AND m.subgroup = 'ALL' AND NOT m.suppressed
      AND NOT s.is_charter AND s.school_type = 'REGULAR' AND s.school_level IN ('Elementary','K-8','Middle');
  2. Flagged = on any of the four 2026 lists (closure and consolidation actions are filed under 2026-27, reassessment and review under 2027-28, so pair each action with its listed school year).

    SELECT DISTINCT school_number FROM miami_school_events
    WHERE (school_year = '2026-27' AND action IN ('CLOSED','CONSOLIDATED_INTO'))
       OR (school_year = '2027-28' AND action IN ('REASSESSED','UNDER_REVIEW'));
  3. Cross-tab at 50% and Fisher exact (the packet's lift_table.cuts).

Caveats

Utilization uses permanent capacity; the state's own measure (COFTE ÷ school capacity incl. relocatables) is served separately and gives similar counts. June actions cite the board book and page; the August lists cite contemporaneous reporting. Carol City Middle is school 6051.

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.