← Back to story

Specific schoolsMethodology recipe

Universal Pre-K kids are now in grade 5. Did the investment hold?

A reproducibility log: the data this analysis touched, the queries it ran, the outside sources it leaned on, and the steps a third party would follow to re-run it.

Summary

Pulled grade-5 ELA/math trajectories at schools serving neighborhoods that had earliest Universal Pre-K rollout (2014). The story is necessarily inferential since we can't follow individual children.

Data sources

  • Database tableschools

    One row per New York City public school (DBN, name, district, borough, school_type, grade_band, latest_enrollment, proclivity_decile, proclivity_score, closed_at, admission_category).

  • Database tableschool_year_metrics

    Long-format per-school per-year metric facts (school_dbn, year, metric_key, subgroup, value, suppressed). Loaded from DOE/NYSED public files via scripts/loaders/*.

  • External datasetMDRC — UPK evaluation (Weiland, Yoshikawa)

Steps

  1. Identify earliest-rollout neighborhoods (per NYC public list); pull their zoned ES grade-5 outcomes 2018-19 to 2024-25 as kids who'd have had UPK reached 5th grade.

Caveats

Without individual-student data we can't isolate UPK's effect; the comparison is at the zoned-school level and confounded by everything else that changed in those neighborhoods.

Reproduce

Clone the repo, set DATABASE_URL to a Postgres with the project schema loaded, run `npx tsx scripts/loaders/<source>.ts` for any not-yet-loaded data, then issue the queries in the Steps section. The story page also lists the exact `metric_key`/`subgroup`/`year` filters used. Searchable by the answer's headline number — every figure is recomputable from the queries shown.

The recipe lives at data/stories/recipes.ts in the repo. Corrections welcome.