docs/design/reference-scaffold/config/outcomes.yaml
Served verbatim from the project repository. Internal working document conventions apply: documents may reference file paths, branch names, and findings-ledger anchors from the repo.
# Per-outcome configuration. Adding an outcome = a new block here + a parser;
# no changes to the analysis engine. The pilot below is fully filled.
outcomes:
- id: ela_math_g3
label: "3rd Grade ELA + Math Proficiency"
grade_band: ES
sources: [test_results]
# --- response variable -------------------------------------------------
value:
type: composite # mean of the components below
components: [g3_ela_pct_l34, g3_math_pct_l34] # percentages, 0..100
denominator: g3_tested_n # used for weights and sampling SE
scale: percent # percent (0..100) | rate (0..1) | count
desirable_direction: high # high = good. (use "low" for absenteeism/bullying)
# --- model -------------------------------------------------------------
functional_form: identity # identity | empirical_logit
covariates: es_base # -> covariates.yaml
admission_handling: covariate # covariate | stratify | none
prior_achievement: null # set a field to get a growth-style residual
min_n: 15 # below this, ineligible to be flagged
# --- View 1: outliers --------------------------------------------------
outlier:
z_threshold: 2.0
persistence: {window: 3, min_flags: 2}
# --- View 2: trends ----------------------------------------------------
comparability: ela_math_regimes # -> comparability.yaml
trend:
min_years_within_regime: 3
slope_threshold_z_per_yr: 0.15 # min |slope| in z-units/yr (material size)
p_threshold: 0.05 # two-sided t-test significance (df = n-2)
# --- scope -------------------------------------------------------------
non_comparable_school_types: [D75, D79, transfer]
# --- correctness reconciliation (verify/reconcile.py) ------------------
reconciliation:
reference_metric_key: g3_composite_pct_l34
tolerance_abs: 1.0 # percentage points; nonzero allows for
# cross-publisher rounding differences
reference_sources: [manual_csv] # add socrata / cached_file once configured
sample:
size: 25
stratify_by: [borough, admission_bucket]
always_include_flagged: true # every flagged outlier is checked
seed: 12345
notes: >
2023 NextGen standards reset; trends within-regime only. Composite sampling SE is
approximated by treating the mean proficiency as a single proportion on g3_tested_n.