← Back to story

Subgroup gapsMethodology recipe

NYC's English Language Learners are 32 points behind on math — within the same schools

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 English Language Learner (ELL) representation at the eight Specialized High Schools (admissions via SHSAT only) and compared with citywide ELL share at the high-school level.

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 datasetNYC DOE — Specialized High Schools admissions information

Steps

  1. For each of the eight Specialized HS DBNs (10X445, 14K449, 02M475, 31R605, 13K430, 02M376, 05M692, 03M413), pull pct_ell most recent year.

  2. Pull citywide HS ELL share (denominator: HS-band schools only).

Caveats

Many Specialized HS report 0.0% ELL by suppression rule, not by being measured at zero — but the floor is so close to zero that the underlying number is unambiguous. ELL is a transitional status; students reclassify out, so a low ELL share at a school could partly reflect students who entered as ELL and exited the classification before 9th grade. The 8-school comparison set is small; the SHSAT mechanism explains the pattern without needing more nuance.

References

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.