From 31744a8c6e0f3cbed4dee53578e4873131251880 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 1 Nov 2026 18:09:48 -0500 Subject: [PATCH 1/9] Start the state child SPM diagnosis evidence Scripts and a draft note on why Populace US state child SPM poverty rates miss Census P60-290 Table 18. Figures still running carry slots in the README. Co-Authored-By: Claude Opus 5.5 --- .../us-state-child-spm-2026-11/README.md | 141 +++++++++ .../scripts/ablate_eval.py | 86 ++++++ .../scripts/ablate_noise.py | 153 ++++++++++ .../scripts/acs_eval.py | 243 +++++++++++++++ .../scripts/acs_hh.py | 27 ++ .../scripts/acs_more.sh | 15 + .../scripts/acs_one.py | 70 +++++ .../scripts/acs_rent.sh | 6 + .../scripts/acs_rent_cut.py | 66 ++++ .../scripts/acs_stored.py | 89 ++++++ .../scripts/acs_w.py | 32 ++ .../scripts/acsrent.py | 94 ++++++ .../scripts/asec_extract.py | 103 +++++++ .../scripts/assemble.py | 143 +++++++++ .../scripts/assemble_dense.py | 29 ++ .../scripts/cf_eval.py | 142 +++++++++ .../scripts/chi_eval.py | 81 +++++ .../scripts/chi_solve.py | 92 ++++++ .../scripts/cols.py | 78 +++++ .../scripts/ctc_ssn.py | 78 +++++ .../scripts/cutrun.py | 106 +++++++ .../scripts/decomp.py | 152 ++++++++++ .../scripts/decomp2.py | 133 ++++++++ .../scripts/dense_fit.py | 185 ++++++++++++ .../scripts/dense_rent.py | 60 ++++ .../us-state-child-spm-2026-11/scripts/dl.py | 23 ++ .../scripts/dmiss.py | 46 +++ .../scripts/extract_state.py | 130 ++++++++ .../us-state-child-spm-2026-11/scripts/fam.py | 51 ++++ .../scripts/flip.py | 74 +++++ .../scripts/house.py | 83 +++++ .../scripts/house_sim.py | 102 +++++++ .../scripts/idcheck.py | 54 ++++ .../scripts/national_cf.py | 108 +++++++ .../scripts/noise.py | 70 +++++ .../scripts/paired.py | 113 +++++++ .../scripts/part.py | 75 +++++ .../scripts/puf_house.py | 62 ++++ .../scripts/rent2.py | 75 +++++ .../scripts/rent3.py | 51 ++++ .../scripts/rent4.py | 74 +++++ .../scripts/rent5.py | 73 +++++ .../scripts/rent_eval.py | 205 +++++++++++++ .../scripts/rentfix.py | 84 ++++++ .../scripts/rep_boot.py | 52 ++++ .../scripts/rep_eval.py | 285 ++++++++++++++++++ .../scripts/runcuts.py | 21 ++ .../scripts/sparse_rent.py | 77 +++++ .../scripts/steps.py | 70 +++++ .../us-state-child-spm-2026-11/scripts/thr.py | 24 ++ .../scripts/vardec.py | 241 +++++++++++++++ .../scripts/year.py | 157 ++++++++++ 52 files changed, 4884 insertions(+) create mode 100644 docs/evidence/us-state-child-spm-2026-11/README.md create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/ablate_eval.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/ablate_noise.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_hh.py create mode 100755 docs/evidence/us-state-child-spm-2026-11/scripts/acs_more.sh create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_one.py create mode 100755 docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent.sh create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_cut.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_stored.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_w.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acsrent.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/asec_extract.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/assemble.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/assemble_dense.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/cf_eval.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/chi_eval.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/chi_solve.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/cols.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/ctc_ssn.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/cutrun.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/decomp.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/decomp2.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/dense_fit.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/dense_rent.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/dl.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/dmiss.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/extract_state.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/fam.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/flip.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/house.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/house_sim.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/idcheck.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/national_cf.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/noise.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/paired.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/part.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/puf_house.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/rent2.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/rent3.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/rent4.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/rent5.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/rent_eval.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/rentfix.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/rep_boot.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/rep_eval.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/runcuts.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/sparse_rent.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/steps.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/thr.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/vardec.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/year.py diff --git a/docs/evidence/us-state-child-spm-2026-11/README.md b/docs/evidence/us-state-child-spm-2026-11/README.md new file mode 100644 index 0000000000..49c45d581f --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/README.md @@ -0,0 +1,141 @@ +# Why Populace US state child SPM poverty rates miss Census + +State child SPM poverty on the default Populace US file misses Census P60-290 Table 18 by 4.8 points on average, and 38 of 51 jurisdictions fall outside Census's margin. This note splits that miss into sampling noise, weight concentration and systematic error, decomposes the largest gaps, and lists what would close them. + +Model figures come from real PolicyEngine US simulations at 2.90.2 (`469ad12cb957`), one state cut at a time as `slideshows/appam-2026/analysis/state_baseline.py` on PolicyEngine/policyengine-slides#95 does. Lines marked arithmetic are not re-simulations. No poverty rate entered a calibration target: these comparisons are holdouts. + +## What we found + +1. **Noise drives most of the state-to-state scatter on the default file.** A state rate carries a replicate standard error of about 3.6 points, so a 90% interval runs about ±6 points. Child-weighted effective samples run from 26 units in Maine to 310 in California. Noise accounts for about 60% of the cross-state variance in the gaps. +2. **A common upward shift of about 3 points sits underneath it.** On the dense file, which halves the noise, the mean gap stays at +3.6. +3. **State-specific error with a standard deviation of about 3 points survives more data.** Delaware, Florida, Maryland, Massachusetts, Louisiana, Mississippi and Hawaii keep their gaps on the dense file. Tennessee, Rhode Island, Vermont, Missouri, DC and Montana lose most or all of theirs. +4. **The rent imputation puts rent on the wrong households.** About 91% of base households carry another household's rent, in every Populace US file we checked, including the local-area file. PolicyEngine/microcosm#1444 fixes it. {{RENT_SUMMARY}} +5. **The default file is not the state path.** `policyengine.py` routes state regions to the ACS-local file. {{ACS_SUMMARY}} + +## What the comparison measures + +Table 18 averages income years 2023 to 2025 and carries a margin of 1.0 to 3.7 points. The model column is PolicyEngine's 2025 rate. + +| Measure | Default (Build P) | Dense (`b5db384`) | ACS-local (Build O 10/17) | +| --- | --- | --- | --- | +| Household records | 57,240 | 352,932 | 1,586,908 | +| Mean gap | +3.24 | +3.62 | {{ACS_MEAN}} | +| Standard deviation of gaps | 5.11 | 4.02 | {{ACS_SD}} | +| Mean absolute gap | 4.80 | 4.33 | {{ACS_MAD}} | +| Correlation with Census | .52 | .65 | {{ACS_CORR}} | +| Outside Census's margin, of 51 | 38 | 38 | {{ACS_BEYOND}} | +| Median state standard error | 3.57 | 1.86 | {{ACS_SE}} | +| Median child Kish sample, source households | 59 | 305 | 100 | +| State-specific standard deviation τ | 3.25 | 3.07 | not fitted | + +The default file's standard error comes from 80 replicate calibrations: a Poisson bootstrap of source households, then a full re-solve. The linearized standard error, 4.04, runs a little higher. The dense and ACS-local standard errors linearize the ratio and cluster on source household. Census's own root-mean-square standard error is 1.35. + +## Noise and weight concentration + +Calibration nearly doubles the default file's noise. Initial weights give a median state standard error of 2.20 and a Kish sample of 42,355; published weights give 4.04 and 9,174. In Massachusetts, 1,279 of 1,684 SPM units carry weights below 1, so a few records set the state's rate. + +We tested whether noise alone could produce the pattern. A null with a common shift plus replicate noise gives a mean absolute gap of 4.25 (95% range 3.56 to 4.98) and a gap standard deviation of 4.12 (3.40 to 4.95). The observed 5.11 falls outside that range. Adding a state-specific τ of 3.25 reproduces the observed 4.94 and 5.23. A DerSimonian-Laird fit on the replicate standard errors gives Q = 88.4 on 50 degrees of freedom. So noise is necessary to explain the table, and it is not sufficient. + +The dense file confirms the split. It halves the standard error and leaves τ at 3.07, and its gaps correlate .65 with the default file's. + +## Decomposition of the largest gaps + +Each row adds up to the gap on the dense file, at its own weights and records: + +| Step | DC | DE | TN | MD | FL | LA | MT | State mean | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | +| ASEC period and sample | -2.9 | 1.6 | -2.0 | 1.4 | -0.8 | -2.1 | -1.7 | -0.34 | +| Calibration | 8.8 | 4.8 | 6.1 | 3.7 | 6.5 | 2.3 | 3.7 | 2.74 | +| Thresholds | 2.7 | 3.2 | 2.4 | 2.2 | 5.9 | 2.4 | 1.9 | 2.89 | +| Cash income | -1.8 | 1.0 | -0.6 | 0.6 | 0.2 | -4.7 | -0.3 | -0.79 | +| SNAP, housing and other in-kind | -1.1 | 0.3 | -1.6 | -2.1 | -3.8 | -5.0 | -2.3 | -2.16 | +| Taxes and expenses | -1.2 | -0.9 | -1.1 | 1.2 | 0.3 | 0.0 | -1.5 | -0.01 | +| 2024 to 2025 | 1.2 | 3.0 | 2.0 | 1.5 | 3.3 | 0.1 | 1.3 | 1.28 | +| **Gap** | **5.8** | **13.0** | **5.3** | **8.5** | **11.6** | **-7.0** | **1.0** | **3.62** | + +The steps run in order. The first compares Table 18 with the ASEC 2022 to 2024 pool at survey weights. Calibration compares Census's own poverty flag at initial and final weights. An exact Shapley over nine swapped components then moves from Census's resources and thresholds to PolicyEngine's for 2024, and the last step moves the model to 2025. `outputs/dense_steps.csv` and `outputs/default_steps.csv` hold all 51 states and the nine components. + +Three readings follow from the state table: + +| State | Census | Default gap (SE) | Dense gap (SE) | ACS-local gap (SE) | Reading | +| --- | --- | --- | --- | --- | --- | +| DC | 20.3 | +14.1 (6.1) | +5.8 (3.4) | {{DC}} | Mostly noise | +| DE | 8.7 | +13.7 (4.4) | +13.0 (3.2) | {{DE}} | Persists; donors hold 25.4, ACS rows 15.0 | +| TN | 10.0 | +13.2 (3.9) | +5.3 (1.8) | {{TN}} | Half noise, half systematic | +| MD | 10.7 | +12.5 (4.7) | +8.5 (2.8) | {{MD}} | Persists at a lower level | +| FL | 18.4 | +9.8 (2.8) | +11.6 (1.7) | {{FL}} | Persists on the donors; ACS rows sit at 13.3 | +| LA | 20.7 | -8.6 (3.3) | -7.0 (1.7) | {{LA}} | Persists; cash and SNAP run high | +| MT | 9.3 | -6.8 (3.4) | +1.0 (1.5) | {{MT}} | Noise on the default file | + +## The common shift + +**Calibration moves weight toward poorer households.** Census's flag reads 13.03 at dense initial weights and 16.31 at final weights. On the default file, re-solves that drop one target family at a time show the balance: + +| Targets kept | Census-flag rate | PE 2025 rate | +| --- | --- | --- | +| Population only | 15.01 | 16.43 | +| Population plus SNAP, SSI and ACA | 19.06 | 20.97 | +| Population plus Medicaid | 18.65 | 20.65 | +| Population plus all SOI tax targets | 6.87 | 6.69 | +| Population plus CTC only | 11.88 | 12.57 | +| All, as published | 16.50 | 17.17 | + +Benefit administrative targets pull poverty up, tax targets pull it down, and no target anchors a state, child and income cell. On the dense file, income targets start within 10% (AGI -4.2%) while benefit receipt starts far below target (SNAP -37.8%, Medicaid -26.2%, EITC -50.8%, ACA -43.9%). Those misses line up with the +3.3 point rise, though we ran the ablations on the default file only. A chi-square anchor to design weights lowers noise and leaves the shift alone: at λ = .03 the median standard error falls to 2.78, and the mean gap rises to 4.77. + +**Pooled records keep nominal income from their source year.** PolicyEngine holds every record to a 2024 threshold, while a 2022 record's market income keeps its nominal 2022 value. That accounts for 2.3 to 2.9 points of the thresholds step. Aging 2022 and 2023 ASEC records by Census's growth in 20th-percentile child resources (a real national simulation on the default file) lowers the national 2025 rate from 17.17 to 16.29, the mean gap from 3.24 to 2.45, and the mean absolute gap from 4.80 to 4.05, with 33 states outside the margin rather than 38. `outputs/cf_state.csv` holds each state. + +**The model overshoots from 2024 to 2025.** PolicyEngine rises 1.48 points while Census holds at 13.4. Reference thresholds match Census exactly for 2025, so the difference sits in resources. Census's child resources grew 4.2% to 6.1% across the 10th to 50th percentiles, and PolicyEngine's employment income grew 3.97%. The adult SSN requirement in `gov.irs.credits.ctc.adult_ssn_requirement_applies` starts in 2025 and removes refundable CTC from units holding 2.48% of child weight; 83% of that weight has no adult with an eligible SSN card. It explains only 11% of the movement into poverty. + +**Partnership and S-corp income stays out of SPM resources** (PolicyEngine/policyengine-us#9919). Adding it before tax lowers the 2024 rate from 16.62 to 15.29 on the dense file, all of it on PUF records. This line is arithmetic on simulation output. + +**Offsets hide part of the shift.** PolicyEngine's SNAP matches USDA totals after calibration and runs about twice Census's recorded value on low-income child units, which pulls poverty down 2.7 to 3.4 points. + +## The rent bug + +`impute_us_pre_subsidy_rent` draws rent for households in table order, and `person_rent[head_mask] = predicted` writes those draws to heads in person order. The two orders agree for 9.15% of households. + +| Pairing, 168,852 base households | Rented | Owned with mortgage | None | +| --- | --- | --- | --- | +| Rent on the household's own head, as published | 40.8% | 27.1% | 25.1% | +| The n-th head's rent with the n-th household's tenure | 100% | 0% | 0% | + +The second row is the test: it restores the link exactly, so the draws are right and only their destination is wrong. The default, dense and ACS-local files all carry the same draws. ACS rows inherit the problem through the gap fill: 39.6% of ACS renters carry rent, and so do 30% of ACS owners, even though the file stores native `RNTP` for every renter. The build's `positive_rent_nonrenter` receipt recorded 30,838 such heads, and `test_signal_gate_preserves_archived_qrf_rent_outside_renter_household` allowed them. + +The harm reaches poverty through `hud_gross_rent`. `hud_hap` takes the lesser of the maximum subsidy and gross rent less tenant payment, so a Census recipient with no rent gets nothing. On the default file, 74% of Census housing recipients among child units on ASEC rows get no model subsidy. {{RENT_TABLE}} + +A second cause sits on the PUF half. `impute_us_housing_assistance_to_puf_support` thresholds a person-level QRF at 0.5, which leaves 2.05% of PUF-half units as recipients against 3.73% on the ASEC half (2.82% against 7.75% on low-income child units), and only 9.6% of ASEC recipients keep the flag on their PUF clone. + +## What this means for the Child Poverty Impact Dashboard + +The dashboard reads ACS-local slices, not the default file. Master serves Build P's August 19 slices under policyengine-us 1.825.2. PolicyEngine/child-poverty-impact-dashboard#127, still a draft, moves it to Build O 10/17 through `policyengine.py` 6.11.1. + +{{DASHBOARD}} + +Its stored audits give a sense of the instability. The 2021 CTC reform's 2024 state effect swings between builds: Arizona from -10.3 to -3.8 points, DC from -1.3 to -8.1, North Carolina from -2.9 to -6.3. + +So state baselines and state reform effects on the dashboard both need a stated uncertainty, and neither should read as a point estimate to the tenth. The legacy `backend/` and `cpid_calc/` paths read `enhanced_cps_2024`, and PR #127 says the frontend no longer calls them. + +## What would fix it + +{{FIXES}} + +## Limits + +- Corrected-rent runs keep the published weights. Calibration fit those weights to outcomes that used misplaced rent, so a rebuild can move results further. +- The #1078 solves come from the 2026-09-23 Build O checkpoint. We applied them to outcomes from the 10/17 file, which shares its household ids. +- The aged run scales 42 income columns on 2022 and 2023 ASEC records by a single child-resource factor. PUF records stay as they are, and a real fix would age each income source separately. +- ACS-local cuts add `spm_unit_spm_universe_status` as `INCLUDED` everywhere, because the release predates that input. The dashboard's audit found masking moves child rates by a negligible amount. +- The ablations ran on Build P, not the dense file. +- We did not verify why Census records less SNAP than administrative totals imply. + +## Reproduction + +Scripts sit in `scripts/` and write beside themselves under `run/` and `asec/`. `outputs/` holds the tables behind this note, and `receipts.json` pins the inputs. + +1. `extract_state.py`, `assemble.py`, `cutrun.py`, `assemble_dense.py`: state cuts of each file. +2. `noise.py`, `vardec.py`, `rep_boot.py`, `rep_eval.py`, `dl.py`, `dense_fit.py`: noise. +3. `decomp.py`, `decomp2.py`, `steps.py`, `year.py`, `paired.py`, `thr.py`: decomposition. +4. `ablate_eval.py`, `ablate_noise.py`, `fam.py`, `chi_solve.py`, `chi_eval.py`, `dmiss.py`: calibration. +5. `national_cf.py`, `cf_eval.py`, `ctc_ssn.py`, `part.py`: aged incomes, the CTC reform and partnership income. +6. `rent2.py` to `rent5.py`, `rentfix.py`, `dense_rent.py`, `sparse_rent.py`, `runcuts.py`, `rent_eval.py`, `house.py`, `house_sim.py`, `puf_house.py`: rent and housing. +7. `acs_hh.py`, `acs_more.sh`, `acs_one.py`, `acs_eval.py`, `acs_rent_cut.py`, `acs_rent.sh`, `acs_stored.py`: the ACS-local path. diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/ablate_eval.py b/docs/evidence/us-state-child-spm-2026-11/scripts/ablate_eval.py new file mode 100644 index 0000000000..1be6244905 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/ablate_eval.py @@ -0,0 +1,86 @@ +"""State and national child SPM rates under each stored calibration re-solve (weights only; record flags unchanged).""" + +import glob +import json +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +D = os.path.expanduser("~/reviews/pe30-population-2026-09-27/out/calib_resolve") +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +h = pd.read_hdf( + S + "9a814a3b3b53c0ecd6e1737b6ec862c31300ef6f/populace_us_2024.h5", "household" +)[["household_id"]] +pos = pd.Series(np.arange(len(h)), index=h.household_id.values) +u = pd.read_parquet(f"{SP}/run/default_units.parquet") +u = u[u.kids > 0].copy() +ix = pos.reindex(u.household_id.values).values +assert not np.isnan(ix).any() +ix = ix.astype(int) +sr = pd.read_csv(f"{SP}/asec/state_raw.csv", index_col=0) +c = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +E = (u.SPM_RESOURCES.fillna(0) < u.SPM_POVTHRESHOLD.fillna(0)).values.astype(float) +P25 = u["spm_unit_is_in_spm_poverty__2025"].values.astype(float) +P24 = u["spm_unit_is_in_spm_poverty__2024"].values.astype(float) +st = u.state.values +k = u.kids.values +z = np.load( + S + "8ab57ffc2ca41d8af631ff62ebbce95e966299f3/populace_us_2024_calibration.npz", + allow_pickle=True, +) + + +def ev(w): + W = w[ix] * k + den = pd.Series(W).groupby(st).sum() + out = {} + for n, f in (("E", E), ("P24", P24), ("P25", P25)): + r = 100 * pd.Series(W * f).groupby(st).sum() / den + out[n] = r + out["nat" + n] = 100 * (W * f).sum() / W.sum() + out["kids"] = W.sum() + wh = np.bincount(ix, weights=None) # unused # noqa: F841 + return out + + +rows = [] +base = {"initial": z["initial_household_weight"], "published": z["household_weight"]} +for n, w in base.items(): + rows.append((n, ev(np.asarray(w, float)))) +for f in sorted(glob.glob(D + "/*.npz")): + n = os.path.basename(f)[:-4] + rows.append((n, ev(np.load(f)["weights"]))) +pool = sr["avg_22_24"] +cen = c.rate +T = [] +for n, o in rows: + T.append( + dict( + run=n, + natE=o["natE"], + natP24=o["natP24"], + natP25=o["natP25"], + kids_m=o["kids"] / 1e6, + E_pool_mean=(o["E"] - pool).mean(), + E_pool_mad=(o["E"] - pool).abs().mean(), + E_pool_corr=np.corrcoef(o["E"], pool)[0, 1], + P25_cen_mean=(o["P25"] - cen).mean(), + P25_cen_mad=(o["P25"] - cen).abs().mean(), + P25_cen_corr=np.corrcoef(o["P25"], cen)[0, 1], + ) + ) +T = pd.DataFrame(T).set_index("run") +T.to_csv(f"{SP}/run/ablate_eval.csv") +pd.set_option("display.width", 220) +print(T.round(2).sort_values("natE").to_string()) +pickle_path = f"{SP}/run/ablate_states.pkl" +pd.to_pickle( + {n: {k_: v for k_, v in o.items() if k_ in ("E", "P24", "P25")} for n, o in rows}, + pickle_path, +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/ablate_noise.py b/docs/evidence/us-state-child-spm-2026-11/scripts/ablate_noise.py new file mode 100644 index 0000000000..5bf290f799 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/ablate_noise.py @@ -0,0 +1,153 @@ +"""Weight concentration, clustered SE and gap structure under stored re-solves; initial target misses by family.""" + +import json +import os +import sys + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +D = os.path.expanduser("~/reviews/pe30-population-2026-09-27/") +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +h = pd.read_hdf( + S + "9a814a3b3b53c0ecd6e1737b6ec862c31300ef6f/populace_us_2024.h5", "household" +)[["household_id", "state_fips"]] +pos = pd.Series(np.arange(len(h)), index=h.household_id.values) +u = pd.read_parquet(f"{SP}/run/default_units.parquet") +u = u[u.kids > 0].copy() +ix = pos.reindex(u.household_id.values).values.astype(int) +P = u["spm_unit_is_in_spm_poverty__2025"].values.astype(float) +k = u.kids.values +st = u.state.values +clu = pd.factorize(u.source_year.astype(str) + ":" + u.source_household_id.astype(str))[ + 0 +] +c = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +cse = c.moe / 1.645 +z = np.load( + S + "8ab57ffc2ca41d8af631ff62ebbce95e966299f3/populace_us_2024_calibration.npz", + allow_pickle=True, +) + + +def dl(y, v): + w = 1 / v + mu = (w * y).sum() / w.sum() + Q = (w * (y - mu) ** 2).sum() + kk = len(y) + t2 = max(0.0, (Q - (kk - 1)) / (w.sum() - (w**2).sum() / w.sum())) + return t2, Q + + +def stats(w): + W = w[ix] * k + rows = [] # noqa: F841 + states = np.unique(st) + r = np.empty(51) + se = np.empty(51) + for i, s in enumerate(states): + m = st == s + Wm = W[m] + pm = P[m] + T = Wm.sum() + rr = (Wm * pm).sum() / T + zz = Wm * (pm - rr) / T + cc = np.bincount(pd.factorize(clu[m])[0], weights=zz) + n = len(cc) + r[i] = 100 * rr + se[i] = 100 * np.sqrt(n / (n - 1) * (cc**2).sum()) + return ( + pd.Series(r, index=states), + pd.Series(se, index=states), + w.sum() ** 2 / (w**2).sum(), + ) + + +runs = {"initial": z["initial_household_weight"], "published": z["household_weight"]} +for n in [ + "R0_full", + "keep_pep", + "keep_pep_ctc_only", + "keep_pep_ctc_actc_count", + "keep_pep_all_soi", + "keep_pep_snap_ssi_aca", + "keep_pep_medicaid", + "drop_snap", + "drop_medicaid_chip", + "drop_soi_return_count", + "drop_ctc_actc", + "drop_soi_other", +]: + runs[n] = np.load(f"{D}out/calib_resolve/{n}.npz")["weights"] +out = [] +for n, w in runs.items(): + r, se, kish = stats(np.asarray(w, float)) + g = r - c.rate + v = se**2 + cse**2 + t2, Q = dl(g, v) + out.append( + dict( + run=n, + kish=kish, + med_se=se.median(), + mean_gap=g.mean(), + sd_gap=g.std(), + mad=g.abs().mean(), + corr=np.corrcoef(r, c.rate)[0, 1], + tau=np.sqrt(t2), + Q=Q, + ) + ) +print(pd.DataFrame(out).set_index("run").round(2).to_string()) +# Initial misses by family on Build P and dense +sys.path.insert(0, D + "scripts") +diag = json.load(open(D + "rel/calibration_diagnostics.json")) +T = diag["targets"] + + +def fam(t): + m = t["metadata"] + rg = t["registry"]["family"] + src = m.get("source_variable") + role = m.get("target_role") + return f"{rg}:{role or src}" + + +d = pd.DataFrame( + { + "fam": [fam(t) for t in T], + "t": [t["target"] for t in T], + "i": [t["initial_estimate"] for t in T], + "f": [t["final_estimate"] for t in T], + "geo": [t["metadata"].get("geography_scope") for t in T], + } +) +d["ri"] = d.i / d.t - 1 +d["rf"] = d.f / d.t - 1 +g = ( + d[d.t != 0] + .groupby(["fam", "geo"]) + .agg( + n=("t", "size"), + t=("t", "sum"), + i=("i", "sum"), + f=("f", "sum"), + med_ri=("ri", "median"), + med_rf=("rf", "median"), + ) +) +g["agg_ri"] = g.i / g.t - 1 +g["agg_rf"] = g.f / g.t - 1 +pd.set_option("display.width", 200) +pd.set_option("display.max_rows", 200) +print( + g[g.n >= 1] + .sort_values("agg_ri") + .round(3)[["n", "agg_ri", "agg_rf", "med_ri", "med_rf"]] + .to_string() +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py new file mode 100644 index 0000000000..b6855efd5f --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py @@ -0,0 +1,243 @@ +"""ACS-local state rates at current policyengine-us: clustered SE, channel split, reform delta, and alternative #1078 solves.""" + +import glob +import json +import os +import sys + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +TAG = sys.argv[1] if len(sys.argv) > 1 else "acs" +B = os.path.expanduser( + "~/PolicyEngine/_build_artifacts/acs-local-l2-basis-20260928/runs/" +) +FIPS = { + "AL": 1, + "AK": 2, + "AZ": 4, + "AR": 5, + "CA": 6, + "CO": 8, + "CT": 9, + "DE": 10, + "DC": 11, + "FL": 12, + "GA": 13, + "HI": 15, + "ID": 16, + "IL": 17, + "IN": 18, + "IA": 19, + "KS": 20, + "KY": 21, + "LA": 22, + "ME": 23, + "MD": 24, + "MA": 25, + "MI": 26, + "MN": 27, + "MS": 28, + "MO": 29, + "MT": 30, + "NE": 31, + "NV": 32, + "NH": 33, + "NJ": 34, + "NM": 35, + "NY": 36, + "NC": 37, + "ND": 38, + "OH": 39, + "OK": 40, + "OR": 41, + "PA": 42, + "RI": 44, + "SC": 45, + "SD": 46, + "TN": 47, + "TX": 48, + "UT": 49, + "VT": 50, + "VA": 51, + "WA": 53, + "WV": 54, + "WI": 55, + "WY": 56, +} +INV = {v: k for k, v in FIPS.items()} +h = pd.read_parquet(f"{SP}/run/acs_hh.parquet") +uh = pd.read_parquet(f"{SP}/run/acs_unit_hh.parquet").drop_duplicates( + "person_spm_unit_id" +) +c = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +stored = pd.read_csv(f"{SP}/run/acs_stored.csv", index_col=0) +fs = sorted(glob.glob(f"{SP}/run/{TAG}/*.parquet")) +u = pd.concat([pd.read_parquet(f) for f in fs], ignore_index=True) +u = ( + u[u.kids > 0] + .merge(uh, left_on="spm_unit_id", right_on="person_spm_unit_id") + .merge(h, left_on="person_household_id", right_on="household_id") +) +u["state"] = u.state_fips.map(INV) +u["src"] = ( + u.household_support_channel.astype(str).str[:4] + + ":" + + u.household_source_id.astype(str) +) + + +def lin(g, w, f): + W = g[w] * g.kids + T = W.sum() + r = (W * f).sum() / T + z = W * (f - r) / T + cc = z.groupby(g.src).sum().values + n = len(cc) + return 100 * r, 100 * np.sqrt(n / (n - 1) * (cc**2).sum()) + + +rows = [] +for st, g in u.groupby("state"): + r, se = lin(g, "household_weight", g.poor) + d = g.poor_r - g.poor + dr, dse = lin(g, "household_weight", d) + W = g.household_weight * g.kids + kish = W.groupby(g.src).sum() + kish = kish.sum() ** 2 / (kish**2).sum() + ac = g[g.household_support_channel == "acs_2024_1yr"] + dn = g[g.household_support_channel != "acs_2024_1yr"] + ra, sa = lin(ac, "household_weight", ac.poor) + rd, sd = lin(dn, "household_weight", dn.poor) + rows.append( + dict( + state=st, + census=c.rate[st], + moe=c.moe[st], + acs_local=r, + se=se, + kish_src=kish, + acs_share=W[g.household_support_channel == "acs_2024_1yr"].sum() / W.sum(), + acs_only=ra, + acs_only_se=sa, + donor_only=rd, + donor_only_se=sd, + delta=dr, + delta_se=dse, + stored_2301=stored["o1017@2.30.1 2025"][st], + ) + ) +d = pd.DataFrame(rows).set_index("state") +d["gap"] = d.acs_local - d.census +print(d.round(2).to_string()) +print( + "median se", + d.se.median().round(2), + "median delta se", + d.delta_se.median().round(2), + "current vs stored 2.30.1 mean abs", + (d.acs_local - d.stored_2301).abs().mean().round(2), +) +d.to_csv(f"{SP}/run/{TAG}_eval.csv") +for lab, col in ( + ("all rows", "acs_local"), + ("ACS rows", "acs_only"), + ("donor rows", "donor_only"), +): + e = d[col] - d.census + print( + lab, + "states", + len(d), + "mean gap", + round(e.mean(), 2), + "sd", + round(e.std(), 2), + "MAD", + round(e.abs().mean(), 2), + "corr", + round(np.corrcoef(d[col], d.census)[0, 1], 3), + "beyond", + int((e.abs() > d.moe).sum()), + "median se", + round( + d[ + { + "acs_local": "se", + "acs_only": "acs_only_se", + "donor_only": "donor_only_se", + }[col] + ].median(), + 2, + ), + ) +print( + "reform delta median", + round(d.delta.median(), 2), + "min", + round(d.delta.min(), 2), + "max", + round(d.delta.max(), 2), + "median se", + round(d.delta_se.median(), 2), +) +# Alternative solves. Stored solves used an earlier frame with the same household ids. +key = pd.read_hdf( + os.path.dirname(B[:-1]) + "/checkpoint/target_frame_lean.h5", "household" +)[["household_id"]] +pos = pd.Series(np.arange(len(key)), index=key.household_id.values) +ix = pos.reindex(u.household_id.values).values.astype(int) +out = [] +names = [ + "dup_release_repro", + "proj_chi_s050_0.03", + "soft_chi_s050_0.1", + "soft_chi_s700_0", + "soft_chi_s700_0.03", + "soft_chi_s700_0.1", + "soft_chi_s900_0", + "soft_chi_s900_0.03", + "soft_chi_s900_0.1", + "soft_chi_s964_0", + "soft_chi_s964_0.03", +] +st = u.state.values +for n in names: + p = B + n + "/weights.npz" + if not os.path.exists(p): + continue + w = np.load(p)["weights"] + u["w"] = w[ix] + R = [] + for s, g in u.groupby("state"): + r, se = lin(g, "w", g.poor) + W = g.w * g.kids + a = W[g.household_support_channel == "acs_2024_1yr"].sum() / W.sum() + R.append(dict(state=s, r=r, se=se, a=a)) + R = pd.DataFrame(R).set_index("state") + g_ = R.r - c.rate.reindex(R.index) + out.append( + dict( + run=n, + mean_gap=g_.mean(), + mad=g_.abs().mean(), + beyond=int((g_.abs() > c.moe.reindex(R.index)).sum()), + corr=np.corrcoef(R.r, c.rate.reindex(R.index))[0, 1], + med_se=R.se.median(), + acs_share=R.a.mean(), + DE=R.r["DE"], + DC=R.r["DC"], + TN=R.r["TN"], + MD=R.r["MD"], + LA=R.r["LA"], + MT=R.r["MT"], + HI=R.r["HI"], + MA=R.r["MA"], + ) + ) +o = pd.DataFrame(out).set_index("run") +o.to_csv(f"{SP}/run/{TAG}_solves.csv") +print(o.round(2).to_string()) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_hh.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_hh.py new file mode 100644 index 0000000000..4e7bb7c462 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_hh.py @@ -0,0 +1,27 @@ +import os + +SP = os.path.dirname(os.path.abspath(__file__)) +import os + +import pandas as pd + +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +f = S + "725d89993f6b2dc4821fd5c3620f0f3d4d630102/populace_us_2024_acs_local.h5" +h = pd.read_hdf(f, "household")[ + [ + "household_id", + "state_fips", + "household_support_channel", + "household_source_id", + "household_weight", + "TYPEHUGQ", + ] +] +h.to_parquet(f"{SP}/run/acs_hh.parquet") +p = pd.read_hdf(f, "person")[ + ["person_household_id", "person_spm_unit_id"] +].drop_duplicates() +p.to_parquet(f"{SP}/run/acs_unit_hh.parquet") +print(h.shape, p.shape) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_more.sh b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_more.sh new file mode 100755 index 0000000000..e708c61234 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_more.sh @@ -0,0 +1,15 @@ +#!/bin/zsh +# Cut the remaining 36 ACS-local states, then simulate them two at a time, smallest first, and drop each cut when its state finishes. +SP=${0:a:h}; cd $SP +S=~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots +ALL=(1 2 4 5 6 8 9 10 11 12 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 49 50 51 53 54 55 56) +REST=() +for f in $ALL; do n=$(printf %02d $f); [ -f run/acs/$n.parquet ] || REST+=$f; done +ONLY_FIPS=${(j:,:)REST} OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 env/.venv/bin/python - <&1 | tail -2 | cut -c1-200 +import sys; sys.path.insert(0,"$SP"); sys.argv=["x"] +import cutrun, pathlib +d=pathlib.Path("$SP/run/acs_cuts"); d.mkdir(exist_ok=True,parents=True) +print(cutrun.cut("$S/725d89993f6b2dc4821fd5c3620f0f3d4d630102/populace_us_2024_acs_local.h5", d)) +PY +ls -Sr run/acs_cuts | sed 's/.pkl//' | OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=2 xargs -P 2 -I{} sh -c 'env/.venv/bin/python acs_one.py {} >> run/acs.log 2>&1 && [ -f run/acs/{}.parquet ] && rm -f run/acs_cuts/{}.pkl' +echo done $(ls run/acs | wc -l) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_one.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_one.py new file mode 100644 index 0000000000..0e1bb37fc7 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_one.py @@ -0,0 +1,70 @@ +"""One ACS-local state at current policyengine-us: unit results for 2025, with the 2021 CTC reform, keyed for clustering. +Usage: acs_one.py """ + +import os +import sys +import time +import warnings + +import numpy as np +import pandas as pd + +warnings.filterwarnings("ignore") +SP = os.path.dirname(os.path.abspath(__file__)) +from policyengine_core.data import Dataset +from policyengine_core.reforms import Reform +from policyengine_us import Microsimulation + +fips = int(sys.argv[1]) +TAG = os.environ.get("ACS_TAG", "acs") +Y = 2025 +f = f"{SP}/run/{TAG}/{fips:02d}.parquet" +if os.path.exists(f): + sys.exit(0) +t0 = time.time() +frame = pd.read_pickle(f"{SP}/run/{TAG}_cuts/{fips:02d}.pkl") +for c in frame.columns: + if c.startswith("parent_") and c.endswith("_id__2024"): + frame[c] = frame[c].fillna(-1).astype(np.int64) +if "spm_unit_spm_universe_status__2024" not in frame: + # Declared per docs/us-spm-measurement-universe.md: ACS group quarters OUTSIDE, everything else INCLUDED. + gq = frame.get("TYPEHUGQ__2024") + frame["spm_unit_spm_universe_status__2024"] = "INCLUDED" +d = "2025-01-01.2025-12-31" +ref = Reform.from_dict( + { + "gov.irs.credits.ctc.amount.arpa[0].amount": {d: 3600}, + "gov.irs.credits.ctc.amount.arpa[1].amount": {d: 3000}, + "gov.irs.credits.ctc.refundable.fully_refundable": {d: True}, + "gov.irs.credits.ctc.phase_out.arpa.in_effect": {d: True}, + }, + country_id="us", +) +base = Microsimulation(dataset=Dataset.from_dataframe(frame, 2024)) +ids = base.calculate("spm_unit_id", 2024).values +age = base.calculate("age", 2024).values +pu = base.calculate("person_spm_unit_id", 2024).values +res = { + "spm_unit_id": ids, + "kids": pd.Series(age < 18).groupby(pu).sum().reindex(ids).values, +} +res["poor"] = np.asarray( + base.calculate("spm_unit_is_in_spm_poverty", Y, map_to="spm_unit").values, float +) +res["net"] = np.asarray( + base.calculate("spm_unit_net_income", Y, map_to="spm_unit").values, float +) +res["thr"] = np.asarray( + base.calculate("spm_unit_spm_threshold", Y, map_to="spm_unit").values, float +) +res["hh"] = ( + base.calculate("household_id", 2024, map_to="spm_unit").values if False else None +) +res.pop("hh") +del base +sim = Microsimulation(dataset=Dataset.from_dataframe(frame, 2024), reform=ref) +res["poor_r"] = np.asarray( + sim.calculate("spm_unit_is_in_spm_poverty", Y, map_to="spm_unit").values, float +) +pd.DataFrame(res).to_parquet(f) +print(fips, round(time.time() - t0), flush=True) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent.sh b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent.sh new file mode 100755 index 0000000000..93e232fc46 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent.sh @@ -0,0 +1,6 @@ +#!/bin/zsh +SP=${0:a:h}; cd $SP +while [ $(ls run/acs | wc -l) -lt 51 ]; do /bin/sleep 30; done +OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 env/.venv/bin/python acs_rent_cut.py 2>&1 | tail -3 | cut -c1-200 +ls -Sr run/acsrent_cuts | sed 's/.pkl//' | ACS_TAG=acsrent OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=2 xargs -P 3 -I{} sh -c 'env/.venv/bin/python acs_one.py {} >> run/acsrent.log 2>&1 && [ -f run/acsrent/{}.parquet ] && rm -f run/acsrent_cuts/{}.pkl' +echo done $(ls run/acsrent | wc -l) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_cut.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_cut.py new file mode 100644 index 0000000000..c90f795f75 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_cut.py @@ -0,0 +1,66 @@ +"""ACS-local file with rent on the right households: donors take the base record's right rent, ACS renter heads take twelve times native monthly contract rent. Weights unchanged.""" + +import glob +import os +import sys + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, SP) +from pathlib import Path + +import extract_state as ex + +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +ex.load(S + "725d89993f6b2dc4821fd5c3620f0f3d4d630102/populace_us_2024_acs_local.h5") +d = Path(SP) / "run/acsrent_cuts" +d.mkdir(parents=True, exist_ok=True) +(Path(SP) / "run/acsrent").mkdir(exist_ok=True) +de = pd.read_hdf( + [x for x in glob.glob(S + "15cefac4*/*.h5") if "calib" not in x][0], "household" +)[["household_id", "household_source_id"]] +right = ( + pd.read_parquet(f"{SP}/run/rentfix_dense.parquet") + .merge(de, on="household_id") + .drop_duplicates("household_source_id") + .set_index("household_source_id") + .rent_right +) +h = ex.tables["household"] +p = ex.tables["person"] +acs = h.household_support_channel.astype(str).str.startswith("acs").values +hr = np.where( + acs, + 12 * pd.to_numeric(h.acs_monthly_contract_rent, errors="coerce").fillna(0).values, + h.household_source_id.map(right).values, +) +hr = pd.Series(hr, index=h.household_id.values) +assert hr.notna().all() +head = p.is_household_head.astype(bool).values +rent = np.zeros(len(p)) +rent[head] = p.person_household_id[head].map(hr).values +print( + "acs renters with no head", + int( + ( + (hr.values > 0) + & ~pd.Series(hr.index).isin(p.person_household_id[head]).values + ).sum() + ), + "rent was", + round(p.pre_subsidy_rent.sum() / 1e9, 2), + "now", + round(rent.sum() / 1e9, 2), + flush=True, +) +p["pre_subsidy_rent"] = rent +ex.tables["person"] = p +for f in sorted(int(v) for v in h["state_fips"].unique()): + q = d / f"{f:02d}.pkl" + if not q.exists(): + ex.state_file(f).to_pickle(q) +print("cut", flush=True) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_stored.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_stored.py new file mode 100644 index 0000000000..f5e7c571d2 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_stored.py @@ -0,0 +1,89 @@ +"""Stored dashboard audits (real Modal microsim runs, pe-us 2.30.1 and 1.825.2) against Table 18, and against the deck's default cut.""" + +import json +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +c = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +n = pd.read_csv(f"{SP}/run/default_noise.csv", index_col=0) + + +def load(f): + d = pd.DataFrame(json.load(open(f"{SP}/dash/{f}.json"))).set_index("state") + return d + + +F = { + "o1017@2.30.1 2025": "state_audit_o1017_2301_y25_2025_raw", + "buildp@1.825.2 2025": "state_audit_buildp_v2_y25_2025_raw", + "o1017@1.825.2 2025": "state_audit_o1017_18252_2025_raw", + "o1017@2.30.1 2024": "state_audit_o1017_2301_2024_raw", + "buildp@1.825.2 2024": "state_audit_buildp_v2_2024_raw", + "o1017@2.2.1 2024": "state_audit_o1017_221_2024_raw", +} +res = {} +for k, f in F.items(): + d = load(f) + col = "poverty_child_measured" if "poverty_child_measured" in d else "poverty_child" + print( + f, + {x: d[x].iloc[0] for x in ("pe_us", "slice_tag", "year")}, + "hh median", + d.n_households.median(), + "hh min", + d.n_households.min(), + d.status.value_counts().to_dict(), + ) + r = d[col] + g = r - c.rate + nat = (r * d.pop_under_18).sum() / d.pop_under_18.sum() + res[k] = r + print( + f"{k:24s} mean {g.mean():+.2f} MAD {g.abs().mean():.2f} sd {g.std():.2f} corr {np.corrcoef(r, c.rate)[0, 1]:.3f} beyond MOE {(g.abs() > c.moe).sum()} national {nat:.2f} corr(gap,defaultgap) {np.corrcoef(g, n.gap)[0, 1]:.2f}" + ) +R = pd.DataFrame(res) +R["census"] = c.rate +R["moe"] = c.moe +R["default"] = n.model +R["default_se"] = n.se +R["gap_acs"] = R["o1017@2.30.1 2025"] - R.census +R.to_csv(f"{SP}/run/acs_stored.csv") +print( + R[ + [ + "census", + "moe", + "default", + "default_se", + "o1017@2.30.1 2025", + "buildp@1.825.2 2025", + "gap_acs", + ] + ] + .sort_values("gap_acs") + .round(1) + .to_string() +) +# Noise-only check for ACS-local: what MAD would Census's sampling error alone produce? +rng = np.random.default_rng(1) +cse = c.moe / 1.645 +print( + "MAD from Census error alone", + np.abs(rng.standard_normal((20000, 51)) * cse.values).mean(1).mean(), + "with common shift of", + R.gap_acs.mean(), +) +sh = R.gap_acs.mean() +print( + "MAD Census error + shift", + np.abs(sh + rng.standard_normal((20000, 51)) * cse.values).mean(1).mean(), + "beyond", + (np.abs(sh + rng.standard_normal((20000, 51)) * cse.values) > c.moe.values) + .sum(1) + .mean(), +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_w.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_w.py new file mode 100644 index 0000000000..916f342c87 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_w.py @@ -0,0 +1,32 @@ +import os + +SP = os.path.dirname(os.path.abspath(__file__)) +import glob +import json +import os + +import h5py +import numpy as np +import pandas as pd + +B = os.path.expanduser( + os.path.expanduser("~/PolicyEngine/_build_artifacts/acs-local-l2-basis-20260928") +) +ns = sorted(os.listdir(B + "/runs")) +print(len(ns), [n for n in ns if not n.startswith("hold")][:60]) +z = np.load(B + "/runs/dup_release_repro/weights.npz") +print({k: z[k].shape for k in z.files}) +m = json.load(open(B + "/runs/dup_release_repro/metrics.json")) +print(list(m)[:30]) +f = glob.glob(B + "/checkpoint/*.h5") +print(f) +with h5py.File(f[0], "r") as h: + print(list(h.keys())[:20]) + print(list(h["household"].keys()) if "household" in h else "") +c = pd.read_hdf(f[0], "household") +print(c.shape, list(c.columns)[:20]) +print(c.head(3).to_string()[:600]) +a = pd.read_parquet(f"{SP}/run/acs_hh.parquet") +print(a.head(3).to_string()[:500]) +s = set(c.household_id) +print("overlap ids", len(s & set(a.household_id)), len(a)) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acsrent.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acsrent.py new file mode 100644 index 0000000000..8e4be80ccd --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acsrent.py @@ -0,0 +1,94 @@ +"""ACS-local file: corrected rent per household. Donors take the base record's right rent; ACS rows take twelve times native monthly contract rent.""" + +import glob +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +f = S + "725d89993f6b2dc4821fd5c3620f0f3d4d630102/populace_us_2024_acs_local.h5" +h = pd.read_hdf(f, "household") +p = ( + pd.read_hdf(f, "person")[ + [ + "person_household_id", + "is_household_head", + "pre_subsidy_rent", + "person_support_channel" if False else "person_household_id", + ] + ] + if False + else pd.read_hdf(f, "person") +) +p = p[["person_household_id", "is_household_head", "pre_subsidy_rent"]] +ch = h.household_support_channel.astype(str) +print(ch.value_counts().to_dict()) +de = pd.read_hdf( + [x for x in glob.glob(S + "15cefac4*/*.h5") if "calib" not in x][0], "household" +)[["household_id", "household_source_id"]] +fx = ( + pd.read_parquet(f"{SP}/run/rentfix_dense.parquet") + .merge(de, on="household_id") + .drop_duplicates("household_source_id") + .set_index("household_source_id") +) +print( + "ACS rows", + h[ch.str.startswith("acs")][ + ["TEN", "RNTP", "GRNTP", "acs_monthly_contract_rent", "acs_monthly_gross_rent"] + ] + .describe() + .loc[["count", "mean", "50%", "max"]] + .round(1) + .to_string(), +) +print( + h[ch.str.startswith("acs")] + .groupby(h.TEN.astype(str)) + .agg( + n=("RNTP", "size"), + rntp_pos=( + "RNTP", + lambda s: (pd.to_numeric(s, errors="coerce").fillna(0) > 0).mean(), + ), + cr_pos=( + "acs_monthly_contract_rent", + lambda s: (pd.to_numeric(s, errors="coerce").fillna(0) > 0).mean(), + ), + ) + .round(3) + .to_string() +) +print( + pd.crosstab( + h.TEN[ch.str.startswith("acs")].astype(str), + h.tenure_type[ch.str.startswith("acs")].astype(str), + ).to_string() +) +hd = ( + p[p.is_household_head.astype(bool)] + .set_index("person_household_id") + .pre_subsidy_rent +) +h["was"] = h.household_id.map(hd) +print( + "heads per household: households with no head", + int(h.was.isna().sum()), + "by channel", + h.was.isna().groupby(ch).sum().to_dict(), +) +don = ~ch.str.startswith("acs") +m = h.household_source_id[don].map(fx.rent_was) +print( + "donor source found", + round(m.notna().mean(), 4), + "donor rent equal", + round( + float(np.isclose(m.dropna(), h.was[don][m.notna()], rtol=1e-3, atol=1).mean()), + 4, + ), +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/asec_extract.py b/docs/evidence/us-state-child-spm-2026-11/scripts/asec_extract.py new file mode 100644 index 0000000000..8450f3ce2d --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/asec_extract.py @@ -0,0 +1,103 @@ +import os +import zipfile + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +ROOT = os.path.expanduser("~/PolicyEngine/_buildm-runtime/inputs/asec_education") +SPMC = [ + "SPM_ACTC", + "SPM_BBSUBVAL", + "SPM_CAPHOUSESUB", + "SPM_CAPWKCCXPNS", + "SPM_CHILDCAREXPNS", + "SPM_CHILDSUPPD", + "SPM_EITC", + "SPM_ENGVAL", + "SPM_EQUIVSCALE", + "SPM_FAMTYPE", + "SPM_FEDTAX", + "SPM_FEDTAXBC", + "SPM_FICA", + "SPM_GEOADJ", + "SPM_ID", + "SPM_MEDXPNS", + "SPM_NUMADULTS", + "SPM_NUMKIDS", + "SPM_NUMPER", + "SPM_POOR", + "SPM_POVTHRESHOLD", + "SPM_RESOURCES", + "SPM_SCHLUNCH", + "SPM_SNAPSUB", + "SPM_STTAX", + "SPM_TENMORTSTATUS", + "SPM_TOTVAL", + "SPM_WEIGHT", + "SPM_WICVAL", + "SPM_WKXPNS", +] +out = [] +for sy in (23, 24, 25, 26): + z = zipfile.ZipFile(f"{ROOT}/asecpub{sy}csv.zip") + names = z.namelist() + pn = [n for n in names if n.lower().endswith(f"pppub{sy}.csv")][0] + hn = [n for n in names if n.lower().endswith(f"hhpub{sy}.csv")][0] + with z.open(pn) as f: + hdr = pd.read_csv(f, nrows=0).columns.tolist() + cols = [ + c + for c in hdr + if c + in set( + ["PERIDNUM", "PH_SEQ", "A_AGE", "A_FNLWGT", "MARSUPWT", "A_LINENO", "P_SEQ"] + + SPMC + ) + or c in ("SPM_Poor",) + ] + # case-insensitive map + u = {c.upper(): c for c in hdr} + want = [ + "PERIDNUM", + "PH_SEQ", + "A_AGE", + "A_FNLWGT", + "MARSUPWT", + "P_SEQ", + "A_LINENO", + ] + SPMC + cols = [u[c] for c in want if c in u] + miss = [c for c in want if c not in u] + print(sy, "missing", miss) + with z.open(pn) as f: + p = pd.read_csv(f, usecols=cols, dtype={u["PERIDNUM"]: str}) + p.columns = [c.upper() for c in p.columns] + with z.open(hn) as f: + h0 = pd.read_csv(f, nrows=0).columns.tolist() + uh = {c.upper(): c for c in h0} + with z.open(hn) as f: + h = pd.read_csv(f, usecols=[uh["H_SEQ"], uh["GESTFIPS"], uh["HSUP_WGT"]]) + h.columns = ( + ["H_SEQ", "GESTFIPS", "HSUP_WGT"] + if list(h.columns)[0].upper() == "H_SEQ" + else [c.upper() for c in h.columns] + ) + h.columns = [c.upper() for c in h.columns] + p = p.merge(h, left_on="PH_SEQ", right_on="H_SEQ", how="left") + p["income_year"] = 2000 + sy - 1 + print(sy, p.shape, p.GESTFIPS.isna().sum()) + ch = p[p.A_AGE < 18] + print( + " child SPM rate MARSUPWT", + np.average(ch.SPM_POOR, weights=ch.MARSUPWT), + " A_FNLWGT", + np.average(ch.SPM_POOR, weights=ch.A_FNLWGT), + " SPM_WEIGHT", + np.average(ch.SPM_POOR, weights=ch.SPM_WEIGHT), + ) + print(" all SPM rate MARSUPWT", np.average(p.SPM_POOR, weights=p.MARSUPWT)) + out.append(p) +a = pd.concat(out, ignore_index=True) +a.to_parquet(SP + "/asec/raw_asec_2022_2025.parquet") +print(a.shape) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/assemble.py b/docs/evidence/us-state-child-spm-2026-11/scripts/assemble.py new file mode 100644 index 0000000000..e264064fc1 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/assemble.py @@ -0,0 +1,143 @@ +"""Join each state's microsimulation output to Census's fields on the same units.""" + +import glob +import json +import os +import sys + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +B = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +FIPS = { + "AL": 1, + "AK": 2, + "AZ": 4, + "AR": 5, + "CA": 6, + "CO": 8, + "CT": 9, + "DE": 10, + "DC": 11, + "FL": 12, + "GA": 13, + "HI": 15, + "ID": 16, + "IL": 17, + "IN": 18, + "IA": 19, + "KS": 20, + "KY": 21, + "LA": 22, + "ME": 23, + "MD": 24, + "MA": 25, + "MI": 26, + "MN": 27, + "MS": 28, + "MO": 29, + "MT": 30, + "NE": 31, + "NV": 32, + "NH": 33, + "NJ": 34, + "NM": 35, + "NY": 36, + "NC": 37, + "ND": 38, + "OH": 39, + "OK": 40, + "OR": 41, + "PA": 42, + "RI": 44, + "SC": 45, + "SD": 46, + "TN": 47, + "TX": 48, + "UT": 49, + "VT": 50, + "VA": 51, + "WA": 53, + "WV": 54, + "WI": 55, + "WY": 56, +} +INV = {v: k for k, v in FIPS.items()} +CENSUS = """SPM_POOR SPM_RESOURCES SPM_POVTHRESHOLD SPM_TOTVAL SPM_SNAPSUB SPM_CAPHOUSESUB SPM_SCHLUNCH SPM_ENGVAL SPM_WICVAL SPM_BBSUBVAL +SPM_FICA SPM_FEDTAXBC SPM_EITC SPM_ACTC SPM_STTAX SPM_CAPWKCCXPNS SPM_MEDXPNS SPM_CHILDSUPPD SPM_GEOADJ SPM_EQUIVSCALE SPM_TENMORTSTATUS SPM_WEIGHT SPM_NUMPER""".split() + + +def people_table(h5, npz=None): + with pd.HDFStore(h5, "r") as s: + h = s.select("/household") + keep = [ + "person_household_id", + "person_spm_unit_id", + "age", + "source_year", + "source_household_id", + ] + [c for c in CENSUS] + pp = s.select("/person") + pp = pp[[c for c in keep if c in pp.columns]] + if npz: + z = np.load(npz, allow_pickle=True) + assert np.allclose(h.household_weight.values, z["household_weight"]) + h["w0"] = z["initial_household_weight"] + h["w1"] = h.household_weight + h["state"] = h.state_fips.map(INV) + return h, pp + + +def units(h, pp): + """One row per SPM unit, with its Census fields from the first member.""" + pp = pp.merge( + h[ + ["household_id", "state", "household_support_channel"] + + (["w0"] if "w0" in h else []) + + ["w1"] + ], + left_on="person_household_id", + right_on="household_id", + ) + g = pp.groupby("person_spm_unit_id", sort=False) + u = g.first().reset_index().rename(columns={"person_spm_unit_id": "spm_unit_id"}) + u["kids"] = g.age.apply(lambda a: (a < 18).sum()).values + u["people"] = g.size().values + return u + + +if __name__ == "__main__": + tag = sys.argv[1] + h5 = sys.argv[2] + npz = sys.argv[3] if len(sys.argv) > 3 and sys.argv[3] else None + h, pp = people_table(h5, npz) + u = units(h, pp) + files = sorted(glob.glob(f"{SP}/run/{tag}/*.parquet")) + pe = pd.concat([pd.read_parquet(f) for f in files], ignore_index=True) + print(len(files), "states", len(pe), "units", len(u)) + m = u.merge(pe, on="spm_unit_id", how="inner", validate="one_to_one") + assert (m.kids == m.n_children).all() + m.to_parquet(f"{SP}/run/{tag}_units.parquet") + # Reproduce the published run. + base = pd.DataFrame(json.load(open(SP + "/state_baseline.json"))["rows"]).set_index( + "state" + ) + k = m[m.kids > 0] + r = k.groupby("state").apply( + lambda d: ( + 100 + * np.average(d["spm_unit_is_in_spm_poverty__2025"], weights=d.w1 * d.kids) + ), + include_groups=False, + ) + cmp = pd.DataFrame({"mine": r, "slides": base.child_spm_percent}).dropna() + cmp["d"] = cmp.mine - cmp.slides + print( + "reproduction of state_baseline.json: max abs diff", + cmp.d.abs().max(), + "n", + len(cmp), + ) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/assemble_dense.py b/docs/evidence/us-state-child-spm-2026-11/scripts/assemble_dense.py new file mode 100644 index 0000000000..2f489ac24b --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/assemble_dense.py @@ -0,0 +1,29 @@ +import os + +SP = os.path.dirname(os.path.abspath(__file__)) +import sys + +sys.argv = ["x"] +import glob + +import assemble as a +import pandas as pd + +h, pp = a.people_table( + os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/15cefac484174ae0ee11a82b164f58023ad05c84/populace_us_2024.h5" + ), + os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/15cefac484174ae0ee11a82b164f58023ad05c84/populace_us_2024_calibration.npz" + ), +) +u = a.units(h, pp) +print(len(u)) +pe = pd.concat( + [pd.read_parquet(f) for f in sorted(glob.glob(f"{SP}/run/dense/*.parquet"))], + ignore_index=True, +) +m = u.merge(pe, on="spm_unit_id", how="inner", validate="one_to_one") +assert (m.kids == m.n_children).all() +print(len(m), len(pe)) +m.to_parquet(f"{SP}/run/dense_units.parquet") diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/cf_eval.py b/docs/evidence/us-state-child-spm-2026-11/scripts/cf_eval.py new file mode 100644 index 0000000000..2e3988ae94 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/cf_eval.py @@ -0,0 +1,142 @@ +"""Aged pooled incomes and the 2021 CTC reform on the default file, from national simulations, against the state cuts.""" + +import json +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +c = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +u = pd.read_parquet( + f"{SP}/run/default_units.parquet", + columns=[ + "spm_unit_id", + "kids", + "w1", + "state", + "household_support_channel", + "source_household_id", + "spm_unit_is_in_spm_poverty__2025", + "spm_unit_is_in_spm_poverty__2024", + ], +) +Y = 2025 +b = pd.read_parquet(f"{SP}/run/cf_base.parquet") +a = pd.read_parquet(f"{SP}/run/cf_aged.parquet") +r = pd.read_parquet(f"{SP}/run/cf_reform.parquet") +print(list(b.columns)[:8], len(b), len(a), len(r)) +d = u[u.kids > 0].copy() +for tag, t in (("base", b), ("aged", a), ("reform", r)): + d = d.merge( + t[["spm_unit_id", f"spm_unit_is_in_spm_poverty__{Y}"]].rename( + columns={f"spm_unit_is_in_spm_poverty__{Y}": f"p_{tag}"} + ), + on="spm_unit_id", + ) +d["W"] = d.w1 * d.kids +d["cluster"] = ( + d.household_support_channel.astype(str).str[:4] + + ":" + + d.source_household_id.astype(str) +) +print( + "state cuts vs national base: units differing", + int((d.p_base != d[f"spm_unit_is_in_spm_poverty__{Y}"]).sum()), + "of", + len(d), +) +nat = lambda v: 100 * np.average(d[v], weights=d.W) +print( + "national base", + round(nat("p_base"), 2), + "aged", + round(nat("p_aged"), 2), + "reform", + round(nat("p_reform"), 2), +) +rows = [] +for st, g in d.groupby("state"): + W = g.W + T = W.sum() + rate = lambda v: 100 * (W * g[v]).sum() / T + + def se(f): + rr = (W * f).sum() / T + z = W * (f - rr) / T + cc = z.groupby(g.cluster).sum().values + n = len(cc) + return 100 * np.sqrt(n / (n - 1) * (cc**2).sum()) + + rows.append( + dict( + state=st, + census=c.rate[st], + base=rate("p_base"), + aged=rate("p_aged"), + reform=rate("p_reform"), + aged_d=rate("p_aged") - rate("p_base"), + aged_se=se(g.p_aged - g.p_base), + ref_d=rate("p_reform") - rate("p_base"), + ref_se=se(g.p_reform - g.p_base), + ) + ) +t = pd.DataFrame(rows).set_index("state") +t.to_csv(f"{SP}/run/cf_state.csv") +for v in ("base", "aged"): + e = t[v] - t.census + print( + v, + "mean gap", + round(e.mean(), 2), + "MAD", + round(e.abs().mean(), 2), + "sd", + round(e.std(), 2), + "corr", + round(np.corrcoef(t[v], t.census)[0, 1], 3), + "beyond", + int((e.abs() > c.moe.reindex(t.index)).sum()), + ) +print( + "aged step mean", + round(t.aged_d.mean(), 2), + "min", + round(t.aged_d.min(), 2), + "max", + round(t.aged_d.max(), 2), + "median se", + round(t.aged_se.median(), 2), +) +print( + t.loc[ + ["DC", "DE", "TN", "MD", "FL", "LA", "MT", "MA", "HI"], + ["base", "aged", "aged_d", "aged_se"], + ] + .round(2) + .to_string() +) +print( + "reform delta: national", + round(nat("p_reform") - nat("p_base"), 2), + "state median", + round(t.ref_d.median(), 2), + "min", + round(t.ref_d.min(), 2), + "max", + round(t.ref_d.max(), 2), + "median se", + round(t.ref_se.median(), 2), + "p90 se", + round(t.ref_se.quantile(0.9), 2), +) +print( + t.loc[ + ["DC", "DE", "TN", "MD", "FL", "LA", "MT", "MA", "HI", "CA", "TX", "NY"], + ["ref_d", "ref_se"], + ] + .round(2) + .T.to_string() +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/chi_eval.py b/docs/evidence/us-state-child-spm-2026-11/scripts/chi_eval.py new file mode 100644 index 0000000000..d4ec905d15 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/chi_eval.py @@ -0,0 +1,81 @@ +"""State fit and noise under the chi-square re-solves of the Build P support.""" + +import glob +import json +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +h = pd.read_hdf( + S + "9a814a3b3b53c0ecd6e1737b6ec862c31300ef6f/populace_us_2024.h5", "household" +)[["household_id"]] +pos = pd.Series(np.arange(len(h)), index=h.household_id.values) +u = pd.read_parquet(f"{SP}/run/default_units.parquet") +u = u[u.kids > 0].copy() +ix = pos.reindex(u.household_id.values).values.astype(int) +P = u["spm_unit_is_in_spm_poverty__2025"].values.astype(float) +E = (u.SPM_RESOURCES.fillna(0) < u.SPM_POVTHRESHOLD.fillna(0)).values.astype(float) +k = u.kids.values +st = u.state.values +clu = pd.factorize(u.source_year.astype(str) + ":" + u.source_household_id.astype(str))[ + 0 +] +c = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +cse = c.moe / 1.645 +z = np.load( + S + "8ab57ffc2ca41d8af631ff62ebbce95e966299f3/populace_us_2024_calibration.npz", + allow_pickle=True, +) +states = np.unique(st) + + +def stats(w): + W = w[ix] * k + r = [] + se = [] + for s in states: + m = st == s + Wm = W[m] + pm = P[m] + T = Wm.sum() + rr = (Wm * pm).sum() / T + zz = Wm * (pm - rr) / T + cc = np.bincount(pd.factorize(clu[m])[0], weights=zz) + n = len(cc) + r.append(100 * rr) + se.append(100 * np.sqrt(n / (n - 1) * (cc**2).sum())) + r = pd.Series(r, index=states) + se = pd.Series(se, index=states) + g = r - c.rate + v = se**2 + cse**2 + wt = 1 / v + mu = (wt * g).sum() / wt.sum() + Q = (wt * (g - mu) ** 2).sum() + t2 = max(0, (Q - 50) / (wt.sum() - (wt**2).sum() / wt.sum())) + return dict( + kish=w.sum() ** 2 / (w**2).sum(), + natE=100 * (W * E).sum() / W.sum(), + natP25=100 * (W * P).sum() / W.sum(), + kids_m=W.sum() / 1e6, + med_se=se.median(), + mean_gap=g.mean(), + sd_gap=g.std(), + mad=g.abs().mean(), + corr=np.corrcoef(r, c.rate)[0, 1], + tau=np.sqrt(t2), + ) + + +runs = {"published": z["household_weight"], "initial": z["initial_household_weight"]} +for f in sorted(glob.glob(f"{SP}/run/chi/*.npz")): + runs[os.path.basename(f)[:-4]] = np.load(f)["weights"] +T = pd.DataFrame({n: stats(np.asarray(w, float)) for n, w in runs.items()}).T +print(T.round(2).to_string()) +T.to_csv(f"{SP}/run/chi_eval.csv") diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/chi_solve.py b/docs/evidence/us-state-child-spm-2026-11/scripts/chi_solve.py new file mode 100644 index 0000000000..0a1320461b --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/chi_solve.py @@ -0,0 +1,92 @@ +"""Build P support: the published solver plus microcosm's chi-square design-weight penalty. Usage: chi_solve.py """ + +import os +import sys +import time + +import numpy as np + +sys.path.insert(0, os.path.expanduser("~/reviews/pe30-population-2026-09-27/scripts")) +import calib_resolve as cr + +OUT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "run", "chi") +os.makedirs(OUT, exist_ok=True) +lam = float(sys.argv[1]) + + +def solve( + A, # noqa: N803 + b, + lw, + w0, + lam, + epochs=6000, + lr=0.02, + ratio=5.0, + cap=1.0, + beta1=0.9, + beta2=0.999, + eps=1e-8, +): + keep = lw > 0 + A = A[keep].astype(np.float32).tocsr() + AT = A.T.tocsr() + b = b[keep].astype(np.float32) + s = np.maximum(np.abs(b), 1.0).astype(np.float32) + lwn = (lw[keep] / lw[keep].sum()).astype(np.float32) + log_w = np.log(w0).astype(np.float32) + upper = np.log(ratio * w0).astype(np.float32) + total0 = float(w0.sum()) + dsum = float(w0.sum()) + m = np.zeros_like(log_w) + v = np.zeros_like(log_w) + d = w0.astype(np.float32) + for ep in range(epochs): + w = np.exp(log_w) + est = A @ w + z = (est - b) / s + az = np.abs(z) + ge = (lwn * np.sign(z) * (az < cap) / s).astype(np.float32) + g = (AT @ ge) * w + # d/dlog w of lambda*sum(d*(w/d-1)^2)/sum(d) = lambda*2*(w/d-1)*w/sum(d) + g = g + lam * 2 * (w / d - 1) * w / dsum + t = ep + 1 + m = beta1 * m + (1 - beta1) * g + v = beta2 * v + (1 - beta2) * g * g + bc1 = 1 - beta1**t + bc2 = 1 - beta2**t + log_w = (log_w - (lr / bc1) * m / (np.sqrt(v) / np.sqrt(bc2) + eps)).astype( + np.float32 + ) + log_w = np.minimum(log_w, upper) + cur = float(np.exp(log_w).sum(dtype=np.float64)) + if cur > 0: + log_w = (log_w + np.float32(np.log(total0 / cur))).astype(np.float32) + log_w = np.minimum(log_w, upper) + final = np.exp(log_w.astype(np.float64)) + final = np.minimum(final, ratio * w0) + return cr.project_to_total(final, total0, ratio, w0) + + +diag, T, A, z, lw, fam, b = cr.load() +lw = lw.copy() +lw[fam == "jct"] = 0.0 +w0 = z["initial_household_weight"].astype(np.float64) +t = time.time() +w = solve(A, b, lw, w0, lam) +keep = lw > 0 +est = A @ w +e = np.abs(est - b) / np.maximum(np.abs(b), 1.0) +print( + lam, + "seconds", + round(time.time() - t), + "loss", + round(float((np.minimum(e[keep], 1) * lw[keep]).sum() / lw[keep].sum()), 4), + "within10", + round(float((e[keep] < 0.1).mean()), 3), + "kish", + round(w.sum() ** 2 / (w**2).sum()), + flush=True, +) +np.savez_compressed(f"{OUT}/l{lam}.npz", weights=w) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/cols.py b/docs/evidence/us-state-child-spm-2026-11/scripts/cols.py new file mode 100644 index 0000000000..6b805da673 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/cols.py @@ -0,0 +1,78 @@ +import os + +SP = os.path.dirname(os.path.abspath(__file__)) +import os + +import numpy as np +import pandas as pd + +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +f = S + "9a814a3b3b53c0ecd6e1737b6ec862c31300ef6f/populace_us_2024.h5" +for t in ("person", "tax_unit", "spm_unit", "household", "family"): + d = pd.read_hdf(f, t) + x = [] + for c in d.columns: + s = d[c] + if ( + s.dtype.kind == "f" + and s.abs().max() > 1000 + and not c.endswith("_id") + and "weight" not in c + and not c.startswith("SPM_") + and "id" not in c + ): + x.append(f"{c}:{s.abs().sum() / 1e9:.1f}") + print(t, d.shape, len(x)) + print(" ".join(x)) +u = pd.read_parquet(f"{SP}/run/default_units.parquet") +u = u[u.kids > 0] +print( + u.groupby("SPM_TENMORTSTATUS")[ + [ + "spm_unit_reference_spm_threshold__2025", + "spm_unit_reference_spm_threshold__2024", + "spm_unit_unadjusted_spm_threshold__2025", + ] + ] + .median() + .round(0) + .to_string() +) +print( + (u.spm_unit_spm_threshold__2025 / (u.spm_unit_reference_spm_threshold__2025)) + .describe() + .round(3) + .to_dict() +) +a = pd.read_parquet(f"{SP}/asec/raw_asec_2022_2025.parquet") +k = a[a.A_AGE < 18] + + +def wq(d, q, col="SPM_TOTVAL"): + d = d.sort_values(col) + c = d.MARSUPWT.cumsum() / d.MARSUPWT.sum() + return d[col].values[np.searchsorted(c.values, q)] + + +print( + { + y: [round(wq(d, q)) for q in (0.1, 0.2, 0.3, 0.5)] + for y, d in k.groupby("income_year") + } +) +print( + "mean TOTVAL", + k.groupby("income_year") + .apply(lambda d: np.average(d.SPM_TOTVAL, weights=d.MARSUPWT), include_groups=False) + .round(0) + .to_dict(), +) +print( + "mean RESOURCES q", + { + y: [round(wq(d, q, "SPM_RESOURCES")) for q in (0.1, 0.2, 0.3, 0.5)] + for y, d in k.groupby("income_year") + }, +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/ctc_ssn.py b/docs/evidence/us-state-child-spm-2026-11/scripts/ctc_ssn.py new file mode 100644 index 0000000000..85b2e80b44 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/ctc_ssn.py @@ -0,0 +1,78 @@ +"""Do units that lose the refundable child tax credit between 2024 and 2025 lack an adult with a valid SSN card? +pe-us: gov.irs.credits.ctc.adult_ssn_requirement_applies turns true on 2025-01-01; eligible cards are CITIZEN and NON_CITIZEN_VALID_EAD.""" + +import glob +import os + +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +f = glob.glob(S + "9a814a3b*/populace_us_2024.h5")[0] +p = pd.read_hdf(f, "person") +print([c for c in p.columns if "ssn" in c.lower() or "immigration" in c.lower()][:8]) +col = [c for c in p.columns if c.startswith("ssn_card_type")][0] +print(p[col].astype(str).value_counts(normalize=True).round(4).to_dict()) +p["valid"] = ( + p[col].astype(str).isin(["CITIZEN", "NON_CITIZEN_VALID_EAD"]) + if p[col].dtype == object or str(p[col].dtype) in ("str", "string", "category") + else False +) +agecol = [c for c in p.columns if c == "age" or c.startswith("age__")][0] +a = p[p[agecol] >= 18] +unitcol = [c for c in p.columns if c.startswith("person_spm_unit_id")][0] +ok = a.groupby(unitcol).valid.any() +pk = p[p[agecol] < 18].groupby(unitcol).size() +u = pd.read_parquet( + f"{SP}/run/default_units.parquet", + columns=[ + "spm_unit_id", + "kids", + "w1", + "state", + "refundable_ctc__2024", + "refundable_ctc__2025", + "spm_unit_is_in_spm_poverty__2024", + "spm_unit_is_in_spm_poverty__2025", + "household_support_channel", + ], +) +u = u[u.kids > 0].copy() +u["W"] = u.w1 * u.kids +u["adult_ok"] = u.spm_unit_id.map(ok).fillna(False).astype(bool) +lost = (u.refundable_ctc__2024 > 0) & (u.refundable_ctc__2025 <= 0) +print( + "lost share of child weight", + round(u.W[lost].sum() / u.W.sum() * 100, 2), + "units", + int(lost.sum()), +) +print( + "lost units with no adult holding a valid card, share of lost child weight", + round(u.W[lost & ~u.adult_ok].sum() / u.W[lost].sum(), 3), +) +print( + "all child units with no valid-card adult, share of child weight", + round(u.W[~u.adult_ok].sum() / u.W.sum() * 100, 2), +) +print( + u[~u.adult_ok] + .groupby("household_support_channel") + .W.sum() + .div(u.W[~u.adult_ok].sum()) + .round(3) + .to_dict() +) +fl = (u.spm_unit_is_in_spm_poverty__2024 == 0) & ( + u.spm_unit_is_in_spm_poverty__2025 == 1 +) +print( + "flips into poverty, child weight share", + round(u.W[fl].sum() / u.W.sum() * 100, 2), + "of which lost CTC", + round(u.W[fl & lost].sum() / u.W[fl].sum(), 3), + "of which lost and no valid adult", + round(u.W[fl & lost & ~u.adult_ok].sum() / u.W[fl].sum(), 3), +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/cutrun.py b/docs/evidence/us-state-child-spm-2026-11/scripts/cutrun.py new file mode 100644 index 0000000000..cca48fc264 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/cutrun.py @@ -0,0 +1,106 @@ +"""Cut a Populace file into one flat frame per state in one process, then simulate each state in workers. + +The flat frame matches state_baseline.py's state_file. Workers load only their state's frame, so a large file needs +no whole-table load in each worker. Usage: cutrun.py
[years] [order] +""" + +import os +import sys +import time +import warnings +from importlib.metadata import version +from multiprocessing import Pool +from pathlib import Path + +import numpy as np +import pandas as pd + +warnings.filterwarnings("ignore") +SP = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, SP) +import extract_state as ex +from policyengine_core.data import Dataset +from policyengine_us import Microsimulation + +DATA_YEAR = 2024 + + +def cut(h5, d): + ex.load(h5) + t = ex.tables + print({k: v.shape for k, v in t.items()}, flush=True) + fips = sorted(int(v) for v in t["household"]["state_fips"].unique()) + only = os.environ.get("ONLY_FIPS") + if only: + fips = [f for f in fips if f in {int(v) for v in only.split(",")}] + for f in fips: + p = d / f"{f:02d}.pkl" + if p.exists(): + continue + frame = ex.state_file(f) + frame.to_pickle(p) + return fips + + +def fix(frame): + """Blank parent links stored in the ACS-local file fail integer casts from pe-us 2.30.2; -1 means no parent.""" + for c in frame.columns: + if c.startswith("parent_") and c.endswith("_id__2024"): + frame[c] = frame[c].fillna(-1).astype(np.int64) + return frame + + +def run(a): + fips, d, out, years = a + target = Path(out) / f"{fips:02d}.parquet" + if target.exists(): + return fips, "cached" + started = time.time() + frame = pd.read_pickle(Path(d) / f"{fips:02d}.pkl") + frame = fix(frame) + sim = Microsimulation(dataset=Dataset.from_dataframe(frame, DATA_YEAR)) + ids = sim.calculate("spm_unit_id", DATA_YEAR).values + res = {"spm_unit_id": ids} + age = sim.calculate("age", DATA_YEAR).values + pu = sim.calculate("person_spm_unit_id", DATA_YEAR).values + res["n_children"] = pd.Series(age < 18).groupby(pu).sum().reindex(ids).values + res["n_people"] = pd.Series(age).groupby(pu).size().reindex(ids).values + extra = os.environ.get("REFORM_YEAR") # noqa: F841 + for y in years: + for n in ex.SPM_VARS + ex.UP_VARS: + res[f"{n}__{y}"] = np.asarray( + sim.calculate(n, y, map_to="spm_unit").values, dtype=float + ) + res = pd.DataFrame(res) + res["state_fips"] = fips + res.to_parquet(target) + return fips, round(time.time() - started) + + +if __name__ == "__main__": + tag, h5, workers = sys.argv[1], sys.argv[2], int(sys.argv[3]) + years = tuple( + int(y) for y in (sys.argv[4] if len(sys.argv) > 4 else "2024,2025").split(",") + ) + d = Path(SP) / "run" / f"{tag}_cuts" + d.mkdir(parents=True, exist_ok=True) + out = Path(SP) / "run" / tag + out.mkdir(parents=True, exist_ok=True) + fips = cut(h5, d) + ex.tables = None + sizes = {f: (d / f"{f:02d}.pkl").stat().st_size for f in fips} + order = sorted(fips, key=sizes.get) + print( + "policyengine-us", + version("policyengine-us"), + "states", + len(order), + "cut GB", + round(sum(sizes.values()) / 1e9, 2), + flush=True, + ) + with Pool(workers, maxtasksperchild=1) as pool: + for done, sec in pool.imap_unordered( + run, [(f, str(d), str(out), years) for f in order] + ): + print(done, sec, flush=True) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/decomp.py b/docs/evidence/us-state-child-spm-2026-11/scripts/decomp.py new file mode 100644 index 0000000000..65265b1c61 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/decomp.py @@ -0,0 +1,152 @@ +"""Waterfall and exact Shapley decomposition of the state child SPM gap.""" + +import itertools +import math +import os +import sys + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +TAG = sys.argv[1] if len(sys.argv) > 1 else "default" +u = pd.read_parquet(f"{SP}/run/{TAG}_units.parquet") +u = u[u.kids > 0].copy() +Y0, Y1 = 2024, 2025 +c = lambda n: u[n].fillna(0).values.astype(float) +p = lambda n, y=Y0: u[f"{n}__{y}"].values.astype(float) +# Census's identity, verified to the dollar on all four ASEC files. +census_cash = c("SPM_TOTVAL") +census_inkind = ( + c("SPM_SNAPSUB") + + c("SPM_CAPHOUSESUB") + + c("SPM_SCHLUNCH") + + c("SPM_ENGVAL") + + c("SPM_WICVAL") + + c("SPM_BBSUBVAL") +) +census_fed = c("SPM_FEDTAXBC") - c("SPM_EITC") - c("SPM_ACTC") +census_payst = c("SPM_FICA") + c("SPM_STTAX") +census_exp = c("SPM_CAPWKCCXPNS") + c("SPM_MEDXPNS") + c("SPM_CHILDSUPPD") +check = census_cash + census_inkind - census_fed - census_payst - census_exp +print("identity max abs", np.abs(check - c("SPM_RESOURCES")).max()) +INKIND = [ + "snap", + "wic", + "free_school_meals", + "reduced_price_school_meals", + "spm_unit_capped_housing_subsidy", + "spm_unit_energy_subsidy", + "acp", + "ebb", +] + + +def pe_parts(y): + inkind = sum(p(n, y) for n in INKIND) + # spm_unit_benefits holds cash and in-kind together. + cash = ( + p("spm_unit_market_income", y) + + p("spm_unit_benefits", y) + + p("acp", y) + + p("ebb", y) + - inkind + ) + fed = p("spm_unit_federal_tax", y) + payst = ( + p("spm_unit_payroll_tax", y) + + p("spm_unit_self_employment_tax", y) + + p("spm_unit_state_tax", y) + + p("spm_unit_local_tax", y) + ) + exp = p("spm_unit_spm_expenses", y) + return dict(cash=cash, inkind=inkind, fed=fed, payst=payst, exp=exp) + + +pe24, pe25 = pe_parts(Y0), pe_parts(Y1) +net = pe24["cash"] + pe24["inkind"] - pe24["fed"] - pe24["payst"] - pe24["exp"] +print( + "PE identity: max abs diff to spm_unit_net_income 2024", + np.abs(net - p("spm_unit_net_income")).max(), + "taxes parts vs spm_unit_taxes", + np.abs(pe24["fed"] + pe24["payst"] - p("spm_unit_taxes")).max(), +) +census = dict( + cash=census_cash, + inkind=census_inkind, + fed=census_fed, + payst=census_payst, + exp=census_exp, +) +T_c, T_p = c("SPM_POVTHRESHOLD"), p("spm_unit_spm_threshold") +# National source-year price factor from Census thresholds to PE's 2024 thresholds. +ratio = T_p / T_c +priceyear = pd.Series(ratio).groupby(u.source_year.values).transform("median").values +print( + "median T_PE/T_Census by source year", + pd.Series(ratio).groupby(u.source_year.values).median().round(4).to_dict(), +) +T_c_y = T_c * priceyear +FACT = ["priceyear", "threshold_rest", "cash", "inkind", "fed", "payst", "exp"] + + +def poor(sw): + T = T_c if not sw["priceyear"] else T_c_y + if sw["threshold_rest"]: + T = T_p if sw["priceyear"] else T_p / priceyear + R = 0.0 + for k in ("cash", "inkind"): + R = R + (pe24[k] if sw[k] else census[k]) + for k in ("fed", "payst", "exp"): + R = R - (pe24[k] if sw[k] else census[k]) + return R < T + + +st = u.state.values +states = sorted(set(st)) +W = (u.w1 * u.kids).values + + +def bystate(flag): + num = pd.Series(flag * W).groupby(st).sum() + den = pd.Series(W).groupby(st).sum() + return 100 * num / den + + +n = len(FACT) +vals = {} +for bits in itertools.product([0, 1], repeat=n): + vals[bits] = bystate(poor(dict(zip(FACT, bits)))) +out = pd.DataFrame(index=states) +for i, f in enumerate(FACT): + tot = 0 + for bits in itertools.product([0, 1], repeat=n - 1): + s = sum(bits) + w = math.factorial(s) * math.factorial(n - s - 1) / math.factorial(n) + a = bits[:i] + (1,) + bits[i:] + b = bits[:i] + (0,) + bits[i:] + tot = tot + w * (vals[a] - vals[b]) + out[f] = tot +out["E_census_flag"] = vals[(0,) * n] +out["pe_2024"] = bystate(p("spm_unit_is_in_spm_poverty")) +out["pe_all_swapped"] = vals[(1,) * n] +out["pe_2025"] = bystate(p("spm_unit_is_in_spm_poverty", Y1)) +out["year"] = out.pe_2025 - out.pe_2024 +print( + "swap reproduces PE 2024: max diff", (out.pe_2024 - out.pe_all_swapped).abs().max() +) +print( + "census flag check", + (bystate(c("SPM_RESOURCES") < c("SPM_POVTHRESHOLD")) - out.E_census_flag) + .abs() + .max(), +) +out.to_csv(f"{SP}/run/{TAG}_shapley.csv") +print(out.round(1).to_string()) +print(out.drop(columns=["pe_all_swapped"]).mean().round(2).to_string()) +nat = {} +Wt = W.sum() +for k, v in {"E": vals[(0,) * n], "pe24": out.pe_2024, "pe25": out.pe_2025}.items(): + wst = pd.Series(W).groupby(st).sum() + nat[k] = float((v * wst).sum() / wst.sum()) +print("national", nat) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/decomp2.py b/docs/evidence/us-state-child-spm-2026-11/scripts/decomp2.py new file mode 100644 index 0000000000..c683f1939b --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/decomp2.py @@ -0,0 +1,133 @@ +"""Exact Shapley of Census-flag to PE-2024 by resource component, by state and by support channel, on final weights.""" + +import itertools +import math +import os +import sys + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +TAG = sys.argv[1] if len(sys.argv) > 1 else "default" +CH = sys.argv[2] if len(sys.argv) > 2 else "all" +u = pd.read_parquet(f"{SP}/run/{TAG}_units.parquet") +u = u[u.kids > 0].copy() +if CH != "all": + u = u[u.household_support_channel == CH].copy() +c = lambda n: u[n].fillna(0).values.astype(float) if n in u else np.zeros(len(u)) +p = lambda n, y=2024: u[f"{n}__{y}"].values.astype(float) +Cn = dict( + cash=c("SPM_TOTVAL"), + snap=c("SPM_SNAPSUB"), + housing=c("SPM_CAPHOUSESUB"), + otherkind=c("SPM_SCHLUNCH") + c("SPM_ENGVAL") + c("SPM_WICVAL") + c("SPM_BBSUBVAL"), + fed=-(c("SPM_FEDTAXBC") - c("SPM_EITC") - c("SPM_ACTC")), + payst=-(c("SPM_FICA") + c("SPM_STTAX")), + exp=-(c("SPM_CAPWKCCXPNS") + c("SPM_MEDXPNS") + c("SPM_CHILDSUPPD")), +) +snap = p("snap") +house = p("spm_unit_capped_housing_subsidy") +ok = ( + p("wic") + + p("free_school_meals") + + p("reduced_price_school_meals") + + p("spm_unit_energy_subsidy") + + p("acp") + + p("ebb") +) +Pe = dict( + cash=p("spm_unit_market_income") + + p("spm_unit_benefits") + + p("acp") + + p("ebb") + - snap + - house + - ok, + snap=snap, + housing=house, + otherkind=ok, + fed=-p("spm_unit_federal_tax"), + payst=-( + p("spm_unit_payroll_tax") + + p("spm_unit_self_employment_tax") + + p("spm_unit_state_tax") + + p("spm_unit_local_tax") + ), + exp=-p("spm_unit_spm_expenses"), +) +print( + "identity", + np.abs(sum(Cn.values()) - c("SPM_RESOURCES")).max(), + np.abs(sum(Pe.values()) - p("spm_unit_net_income")).max(), +) +Tc = c("SPM_POVTHRESHOLD") +Tp = p("spm_unit_spm_threshold") +pf = pd.Series(Tp / Tc).groupby(u.source_year.values).transform("median").values +FACT = ["priceyear", "threshold_rest"] + list(Cn) +W = (u.w1 * u.kids).values +states = sorted(set(u.state)) +si = pd.Categorical(u.state, categories=states).codes +den = np.bincount(si, W, minlength=len(states)) + + +def val(bits): + sw = dict(zip(FACT, bits)) + T = ( + (Tp if sw["threshold_rest"] else Tp / pf) + if sw["priceyear"] + else (Tp / pf if sw["threshold_rest"] else Tc) + ) + T = ( + Tp + if (sw["priceyear"] and sw["threshold_rest"]) + else (Tc * pf if sw["priceyear"] else (Tp / pf if sw["threshold_rest"] else Tc)) + ) + R = sum((Pe[k] if sw[k] else Cn[k]) for k in Cn) + f = (R < T).astype(float) * W + return np.append( + np.bincount(si, f, minlength=len(states)) / den * 100, f.sum() / W.sum() * 100 + ) + + +n = len(FACT) +V = {b: val(b) for b in itertools.product([0, 1], repeat=n)} +out = {} +for i, f in enumerate(FACT): + tot = 0 + for bits in itertools.product([0, 1], repeat=n - 1): + s = sum(bits) + w = math.factorial(s) * math.factorial(n - s - 1) / math.factorial(n) + tot = tot + w * (V[bits[:i] + (1,) + bits[i:]] - V[bits[:i] + (0,) + bits[i:]]) + out[f] = tot +o = pd.DataFrame(out, index=states + ["US"]) +o.insert(0, "E", V[(0,) * n]) +o["pe24"] = V[(1,) * n] +o["n"] = list(pd.Series(si).value_counts().sort_index().values) + [len(u)] +o.to_csv(f"{SP}/run/{TAG}_shapley9_{CH}.csv") +pd.set_option("display.width", 200) +print( + CH, + o.loc[ + [ + "US", + "LA", + "MS", + "AR", + "HI", + "MT", + "DE", + "MD", + "MA", + "MO", + "TN", + "IL", + "DC", + "FL", + "CA", + ] + ] + .round(1) + .to_string(), +) +print("mean", o.drop(index="US").mean().round(2).to_dict()) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/dense_fit.py b/docs/evidence/us-state-child-spm-2026-11/scripts/dense_fit.py new file mode 100644 index 0000000000..94f7920a9b --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/dense_fit.py @@ -0,0 +1,185 @@ +"""Dense b5db384 state fit, clustered noise, between-state variance, and the join to the sparse gaps.""" + +import json +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +u = pd.read_parquet(f"{SP}/run/dense_units.parquet") +u = u[u.kids > 0].copy() +c = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +cse = c.moe / 1.645 +u["W"] = u.w1 * u.kids +u["W0"] = u.w0 * u.kids +u["clu"] = pd.factorize( + u.source_year.astype(str) + ":" + u.source_household_id.astype(str) +)[0] +u["P25"] = u["spm_unit_is_in_spm_poverty__2025"].astype(float) +u["P24"] = u["spm_unit_is_in_spm_poverty__2024"].astype(float) +u["E"] = (u.SPM_RESOURCES.fillna(0) < u.SPM_POVTHRESHOLD.fillna(0)).astype(float) + + +def lin(g, W, f): # noqa: N803 + T = g[W].sum() + r = (g[W] * g[f]).sum() / T + z = (g[W] * (g[f] - r) / T).values + cc = np.bincount(pd.factorize(g.clu)[0], weights=z) + n = len(cc) + return 100 * r, 100 * np.sqrt(n / (n - 1) * (cc**2).sum()), n + + +rows = [] +for s, g in u.groupby("state"): + r, se, n = lin(g, "W", "P25") + r24, _, _ = lin(g, "W", "P24") + e, ese, _ = lin(g, "W", "E") + d, dse, _ = lin(g, "W0", "E") + k = g.W.sum() ** 2 / (g.W**2).sum() + kc = g.groupby("clu").W.sum() + kc = kc.sum() ** 2 / (kc**2).sum() + rows.append( + dict( + state=s, + model=r, + se=se, + pe24=r24, + E=e, + E_se=ese, + D=d, + D_se=dse, + clusters=n, + kish_units=k, + kish_src=kc, + ) + ) +d = pd.DataFrame(rows).set_index("state").join(c) +d["cse"] = cse +d["gap"] = d.model - d.rate +sp = pd.read_csv(f"{SP}/run/waterfall.csv", index_col=0) +acs = pd.read_csv(f"{SP}/run/acs_stored.csv", index_col=0) +d["sp57"] = sp.model +d["sp57_se"] = sp.se_model_rep +d["acs_stored"] = acs["o1017@2.30.1 2025"] +d.to_csv(f"{SP}/run/dense_fit.csv") +g = d.gap +print( + "gap mean", + g.mean().round(2), + "sd", + g.std().round(2), + "MAD", + g.abs().mean().round(2), + "corr", + np.corrcoef(d.model, d.rate)[0, 1].round(3), + "beyond", + (g.abs() > d.moe).sum(), +) +print( + "median se", + d.se.median().round(2), + "rms", + np.sqrt((d.se**2).mean()).round(2), + "median Kish source", + d.kish_src.median().round(0), + "units", + d.kish_units.median().round(0), + "min", + d.kish_src.min().round(0), + d.kish_src.idxmin(), +) +v = d.se**2 + d.cse**2 +w = 1 / v +mu = (w * g).sum() / w.sum() +Q = (w * (g - mu) ** 2).sum() +t2 = max(0, (Q - 50) / (w.sum() - (w**2).sum() / w.sum())) +ws = 1 / (v + t2) +print( + "DL Q", + Q.round(1), + "tau", + np.sqrt(t2).round(2), + "mu_re", + ((ws * g).sum() / ws.sum()).round(2), +) +mc = g - g.mean() +sg = d.sp57 - d.rate +ag = d.acs_stored - d.rate +print( + "corr of gaps: dense-sparse", + np.corrcoef(g, sg)[0, 1].round(2), + "dense-acs", + np.corrcoef(g, ag)[0, 1].round(2), + "sparse-acs", + np.corrcoef(sg, ag)[0, 1].round(2), +) +print( + "corr of rates: dense-sparse", + np.corrcoef(d.model, d.sp57)[0, 1].round(2), + "dense-acs", + np.corrcoef(d.model, d.acs_stored)[0, 1].round(2), +) +print( + "E vs pool", + np.corrcoef(d.E, pd.read_csv(f"{SP}/asec/state_raw.csv", index_col=0).avg_22_24)[ + 0, 1 + ].round(3), +) +nat = lambda f, W="W": 100 * (u[W] * u[f]).sum() / u[W].sum() # noqa: N803 +print( + "national D", + nat("E", "W0").round(2), + "E", + nat("E").round(2), + "P24", + nat("P24").round(2), + "P25", + nat("P25").round(2), + "kids m", + (u.W.sum() / 1e6).round(2), + "kids0", + (u.W0.sum() / 1e6).round(2), +) +pd.set_option("display.width", 200) +print( + d.loc[ + [ + "DC", + "DE", + "TN", + "MD", + "FL", + "RI", + "VT", + "MO", + "MA", + "LA", + "MT", + "MS", + "HI", + "AR", + "NM", + "MI", + "CA", + "TX", + ], + [ + "rate", + "moe", + "sp57", + "sp57_se", + "acs_stored", + "D", + "E", + "pe24", + "model", + "se", + "gap", + ], + ] + .round(1) + .to_string() +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/dense_rent.py b/docs/evidence/us-state-child-spm-2026-11/scripts/dense_rent.py new file mode 100644 index 0000000000..18af338a28 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/dense_rent.py @@ -0,0 +1,60 @@ +"""All 51 states of the dense file with rent back on the household it was drawn for. Same variables and years as the dense run. Weights unchanged. +Usage: dense_rent.py """ + +import glob +import os +import sys + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, SP) +from cutrun import Path, Pool, ex, run, version + +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +h5 = [x for x in glob.glob(S + "15cefac4*/*.h5") if "calib" not in x][0] +workers = int(sys.argv[1]) +tag = "denserent" +years = (2024, 2025) +d = Path(SP) / "run" / f"{tag}_cuts" +d.mkdir(parents=True, exist_ok=True) +out = Path(SP) / "run" / tag +out.mkdir(parents=True, exist_ok=True) +ex.load(h5) +right = ( + pd.read_parquet(f"{SP}/run/rentfix_dense.parquet") + .set_index("household_id") + .rent_right +) +p = ex.tables["person"] +head = p.is_household_head.astype(bool).values +rent = np.zeros(len(p)) +rent[head] = p.person_household_id[head].map(right).values +assert np.isfinite(rent).all() +p["pre_subsidy_rent"] = rent +ex.tables["person"] = p +fips = sorted(int(v) for v in ex.tables["household"]["state_fips"].unique()) +for f in fips: + q = d / f"{f:02d}.pkl" + if not q.exists(): + ex.state_file(f).to_pickle(q) +ex.tables = None +sizes = {f: (d / f"{f:02d}.pkl").stat().st_size for f in fips} +order = sorted(fips, key=sizes.get) +print( + "policyengine-us", + version("policyengine-us"), + "states", + len(order), + "cut GB", + round(sum(sizes.values()) / 1e9, 2), + flush=True, +) +with Pool(workers, maxtasksperchild=1) as pool: + for done, sec in pool.imap_unordered( + run, [(f, str(d), str(out), years) for f in order] + ): + print(done, sec, flush=True) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/dl.py b/docs/evidence/us-state-child-spm-2026-11/scripts/dl.py new file mode 100644 index 0000000000..3da86d7842 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/dl.py @@ -0,0 +1,23 @@ +import os + +from huggingface_hub import hf_hub_download + +for rev, f in [ + ("populace-us-2024-b5db384-8b0c1950b65f-20261024T083103Z", "populace_us_2024.h5"), + ( + "populace-us-2024-b5db384-8b0c1950b65f-20261024T083103Z", + "populace_us_2024_calibration.npz", + ), + ( + "populace-us-2024-0fb05b6-4b57d15a287c-20260930T150401Z", + "populace_us_2024_calibration.npz", + ), + ( + "populace-us-2024-buildo-acs-local-766b7c7-20261017T030317Z", + "populace_us_2024_acs_local.h5", + ), +]: + p = hf_hub_download( + "policyengine/populace-us", f, repo_type="dataset", revision=rev + ) + print(rev, f, p, round(os.path.getsize(p) / 1e9, 2), flush=True) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/dmiss.py b/docs/evidence/us-state-child-spm-2026-11/scripts/dmiss.py new file mode 100644 index 0000000000..8852d38ca3 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/dmiss.py @@ -0,0 +1,46 @@ +import os + +import numpy as np +import pandas as pd + +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +z = np.load( + S + "15cefac484174ae0ee11a82b164f58023ad05c84/populace_us_2024_calibration.npz", + allow_pickle=True, +) +print(z.files) +n = pd.Series(z["target_names"].astype(str)) +t = z["target_values"] +i = z["initial_estimates"] +f = z["final_estimates"] +print(n.sample(12, random_state=1).str[:90].to_string()) +d = pd.DataFrame({"n": n, "t": t, "i": i, "f": f}) +keys = { + "snap_spend": r"snap.*(total|cost|benefit)|snap$", + "snap": r"snap", + "medicaid": r"medicaid", + "chip": r"chip", + "eitc": r"eitc", + "aca": r"aca|ptc", + "ctc": r"[^a-z]ctc", + "wages": r"employment_income|wages", + "agi": r"adjusted_gross_income", + "income_tax": r"income_tax", + "pop": r"population|age", +} +for k, p in keys.items(): + m = d.n.str.contains(p, regex=True, case=False) + x = d[m] + if len(x): + print( + k, + len(x), + "agg init miss", + round(x.i.sum() / x.t.sum() - 1, 3), + "agg final", + round(x.f.sum() / x.t.sum() - 1, 3), + "median rel init", + round((x.i / x.t.replace(0, np.nan) - 1).median(), 3), + ) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/extract_state.py b/docs/evidence/us-state-child-spm-2026-11/scripts/extract_state.py new file mode 100644 index 0000000000..dfa4c0fbdb --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/extract_state.py @@ -0,0 +1,130 @@ +"""Run one state's cut of a Populace file and store SPM-unit results. + +Follows state_baseline.py on PolicyEngine/policyengine-slides#95: one state at a +time, as a flat file with group columns on each member's row. +""" + +import sys +import time +import warnings +from importlib.metadata import version +from multiprocessing import Pool +from pathlib import Path + +import numpy as np +import pandas as pd + +warnings.filterwarnings("ignore") +from policyengine_core.data import Dataset +from policyengine_us import CountryTaxBenefitSystem, Microsimulation + +DATA_YEAR = 2024 +YEARS = (2024, 2025) +GROUPS = ("tax_unit", "spm_unit", "family", "marital_unit") +SPM_VARS = """spm_unit_is_in_spm_poverty spm_unit_net_income spm_unit_spm_threshold +spm_unit_reference_spm_threshold spm_unit_unadjusted_spm_threshold spm_unit_geographic_adjustment +spm_measurement_adults spm_measurement_children spm_unit_market_income spm_unit_benefits +spm_unit_taxes spm_unit_spm_expenses spm_unit_payroll_tax spm_unit_self_employment_tax +spm_unit_federal_tax spm_unit_state_tax spm_unit_local_tax child_support_expense +spm_unit_medical_out_of_pocket_expenses spm_unit_capped_work_childcare_expenses +snap wic free_school_meals reduced_price_school_meals spm_unit_capped_housing_subsidy +spm_unit_energy_subsidy tanf ssi social_security total_unemployment_compensation +child_support_received workers_compensation educational_assistance acp ebb""".split() +# Mapped up from person or tax unit to the SPM unit. +UP_VARS = """eitc refundable_ctc employment_income self_employment_income capital_gains +partnership_s_corp_income""".split() + +tables = None +known = None +path = None + + +def load(h5): + global tables, known, path + path = h5 + known = set(CountryTaxBenefitSystem().variables) + with pd.HDFStore(h5, "r") as store: + tables = {n: store.select(n) for n in ("household", "person", *GROUPS)} + + +def state_file(fips): + households = tables["household"] + households = households[households["state_fips"] == fips] + people = tables["person"] + people = people[ + people["person_household_id"].isin(households["household_id"]) + ].reset_index(drop=True) + columns = { + n: people[n].values + for n in people.columns + if n in known or n == "person_id" or n.startswith("person_") + } + + def add_group(table, group): + ids = f"{group}_id" + membership = people[f"person_{group}_id"].values + rows = table.set_index(ids).index.get_indexer(membership) + for name in table.columns: + if name in known: + columns[name] = table[name].values[rows] + columns[ids] = membership + + add_group(households, "household") + for group in GROUPS: + add_group(tables[group], group) + return pd.DataFrame({f"{k}__{DATA_YEAR}": v for k, v in columns.items()}) + + +def run(args): + fips, out = args + target = Path(out) / f"{fips:02d}.parquet" + if target.exists(): + return fips, "cached" + started = time.time() + sim = Microsimulation(dataset=Dataset.from_dataframe(state_file(fips), DATA_YEAR)) + ids = sim.calculate("spm_unit_id", DATA_YEAR).values + frame = {"spm_unit_id": ids} + age = sim.calculate("age", DATA_YEAR).values + # Children per SPM unit from the person rows. + person_unit = sim.calculate("person_spm_unit_id", DATA_YEAR).values + frame["n_children"] = ( + pd.Series(age < 18).groupby(person_unit).sum().reindex(ids).values + ) + frame["n_people"] = pd.Series(age).groupby(person_unit).size().reindex(ids).values + for year in YEARS: + for name in SPM_VARS: + frame[f"{name}__{year}"] = np.asarray( + sim.calculate(name, year, map_to="spm_unit").values, dtype=float + ) + for name in UP_VARS: + frame[f"{name}__{year}"] = np.asarray( + sim.calculate(name, year, map_to="spm_unit").values, dtype=float + ) + frame = pd.DataFrame(frame) + frame["state_fips"] = fips + frame.to_parquet(target) + return fips, round(time.time() - started) + + +def main(h5, out, only=None, workers=3): + Path(out).mkdir(parents=True, exist_ok=True) + load(h5) + fips = sorted(int(v) for v in tables["household"]["state_fips"].unique()) + if only: + fips = [f for f in fips if f in only] + print( + "policyengine-us", version("policyengine-us"), "states", len(fips), flush=True + ) + with Pool(workers, initializer=load, initargs=(h5,)) as pool: + for fips_done, seconds in pool.imap_unordered(run, [(f, out) for f in fips]): + print(fips_done, seconds, flush=True) + + +if __name__ == "__main__": + only = ( + [int(v) for v in sys.argv[3].split(",")] + if len(sys.argv) > 3 and sys.argv[3] + else None + ) + workers = int(sys.argv[4]) if len(sys.argv) > 4 else 3 + main(sys.argv[1], sys.argv[2], only, workers) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/fam.py b/docs/evidence/us-state-child-spm-2026-11/scripts/fam.py new file mode 100644 index 0000000000..7c4c95882c --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/fam.py @@ -0,0 +1,51 @@ +import json +import os + +import numpy as np +import pandas as pd + +D = os.path.expanduser("~/reviews/pe30-population-2026-09-27/") +diag = json.load(open(D + "rel/calibration_diagnostics.json")) +T = diag["targets"] +print( + T[1000]["name"], + T[1000]["metadata"].get("geography_scope"), + list(T[1000]["metadata"])[:14], +) + + +def row(t): + m = t["metadata"] + return dict( + reg=t["registry"]["family"], + src=m.get("source_variable"), + role=m.get("target_role"), + geo=m.get("geography_scope") + or ("state" if "state" in t["name"] else "national"), + t=t["target"], + i=t["initial_estimate"], + f=t["final_estimate"], + name=t["name"], + ) + + +d = pd.DataFrame([row(x) for x in T]) +d["ri"] = d.i / d.t.replace(0, np.nan) - 1 +d["rf"] = d.f / d.t.replace(0, np.nan) - 1 +g = d.groupby(["reg", "role", "src"], dropna=False).agg( + n=("t", "size"), + t=("t", "sum"), + i=("i", "sum"), + f=("f", "sum"), + med_ri=("ri", "median"), + med_rf=("rf", "median"), +) +g["agg_ri"] = g.i / g.t - 1 +g["agg_rf"] = g.f / g.t - 1 +pd.set_option("display.width", 200) +pd.set_option("display.max_rows", 300) +print( + g.sort_values("agg_ri") + .round(3)[["n", "agg_ri", "agg_rf", "med_ri", "med_rf"]] + .to_string() +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/flip.py b/docs/evidence/us-state-child-spm-2026-11/scripts/flip.py new file mode 100644 index 0000000000..de725c505f --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/flip.py @@ -0,0 +1,74 @@ +"""Which SPM units flip poverty between PE 2024 and PE 2025, and how much weight they carry.""" + +import os + +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +u = pd.read_parquet(f"{SP}/run/default_units.parquet") +u = u[u.kids > 0].copy() +u["W"] = u.w1 * u.kids +p24 = u["spm_unit_is_in_spm_poverty__2024"].astype(bool) +p25 = u["spm_unit_is_in_spm_poverty__2025"].astype(bool) +u["in"] = (~p24) & p25 +u["out"] = p24 & (~p25) +g = u.groupby("state") +tot = g.W.sum() +s = pd.DataFrame( + { + "pe24": 100 * (u.W * p24).groupby(u.state).sum() / tot, + "pe25": 100 * (u.W * p25).groupby(u.state).sum() / tot, + "in_pts": 100 * (u.W * u["in"]).groupby(u.state).sum() / tot, + "out_pts": 100 * (u.W * u["out"]).groupby(u.state).sum() / tot, + "n_in": u["in"].groupby(u.state).sum(), + "n_out": u["out"].groupby(u.state).sum(), + } +) +s["top1_in_share"] = ( + u[u["in"]].groupby("state").W.max() / u[u["in"]].groupby("state").W.sum() +) +s["top1_in_pts"] = 100 * u[u["in"]].groupby("state").W.max() / tot +print(s.sort_values("in_pts", ascending=False).round(2).head(16).to_string()) +print( + "all states: in", + (u.W * u["in"]).sum() / u.W.sum() * 100, + "out", + (u.W * u["out"]).sum() / u.W.sum() * 100, + "n_in", + u["in"].sum(), + "n_out", + u["out"].sum(), +) +cols = [ + "state", + "kids", + "n_people__x" if "n_people__x" in u else "people", + "w1", + "w0", + "source_year", + "household_support_channel", + "SPM_TENMORTSTATUS" if "SPM_TENMORTSTATUS" in u else "SPM_POOR", +] +for st in ["MD", "DC"]: + x = u[(u.state == st) & u["in"]].sort_values("W", ascending=False).head(6) + show = x[ + ["kids", "w0", "w1", "W", "source_year", "household_support_channel"] + ].copy() + for n in [ + "spm_unit_net_income", + "spm_unit_spm_threshold", + "spm_unit_market_income", + "spm_unit_benefits", + "spm_unit_taxes", + "spm_unit_spm_expenses", + "snap", + "spm_unit_state_tax", + "spm_unit_federal_tax", + "refundable_ctc", + "eitc", + "employment_income", + ]: + for y in (2024, 2025): + show[f"{n[:18]}_{y % 100}"] = x[f"{n}__{y}"] + print(st) + print(show.round(0).T.to_string()) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/house.py b/docs/evidence/us-state-child-spm-2026-11/scripts/house.py new file mode 100644 index 0000000000..a1c57dfb00 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/house.py @@ -0,0 +1,83 @@ +"""Where do Census housing subsidy recipients drop out of the PE chain? Default file, asec rows, child units.""" + +import glob +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +f = glob.glob(S + "9a814a3b*/populace_us_2024.h5")[0] +s = pd.read_hdf(f, "spm_unit") +print([c for c in s.columns if "hous" in c.lower() or "take" in c.lower()][:20]) +sid = [c for c in s.columns if c.startswith("spm_unit_id")][0] +cols = [c for c in s.columns if "housing" in c.lower()] +print( + { + c: ( + round( + float( + pd.to_numeric(s[c], errors="coerce").fillna(0).astype(float).mean() + ), + 4, + ) + ) + for c in cols + } +) +u = pd.read_parquet( + f"{SP}/run/default_units.parquet", + columns=[ + "spm_unit_id", + "kids", + "w1", + "state", + "household_support_channel", + "SPM_CAPHOUSESUB", + "SPM_RESOURCES", + "SPM_POVTHRESHOLD", + "spm_unit_capped_housing_subsidy__2024", + ], +) +u = u[(u.kids > 0) & (u.household_support_channel == "asec")].copy() +u["W"] = u.w1 * u.kids +u = u.merge(s[[sid] + cols], left_on="spm_unit_id", right_on=sid, how="left") +rec = u.SPM_CAPHOUSESUB.fillna(0) > 0 +print( + "census recipient share of child weight", + round(u.W[rec].sum() / u.W.sum(), 4), + "PE subsidy>0 share", + round(u.W[u.spm_unit_capped_housing_subsidy__2024 > 0].sum() / u.W.sum(), 4), +) +for c in cols: + v = pd.to_numeric(u[c], errors="coerce").fillna(0) + print( + c, + "among census recipients", + round(np.average(v[rec] > 0, weights=u.W[rec]), 3), + "among others", + round(np.average(v[~rec] > 0, weights=u.W[~rec]), 3), + ) +print( + "census recipients with PE subsidy>0", + round( + np.average(u.spm_unit_capped_housing_subsidy__2024[rec] > 0, weights=u.W[rec]), + 3, + ), +) +print( + "mean subsidy among census recipients: census", + round(np.average(u.SPM_CAPHOUSESUB[rec], weights=u.W[rec])), + "PE", + round(np.average(u.spm_unit_capped_housing_subsidy__2024[rec], weights=u.W[rec])), +) +both = rec & (u.spm_unit_capped_housing_subsidy__2024 > 0) +print( + "mean among both: census", + round(np.average(u.SPM_CAPHOUSESUB[both], weights=u.W[both])), + "PE", + round(np.average(u.spm_unit_capped_housing_subsidy__2024[both], weights=u.W[both])), +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/house_sim.py b/docs/evidence/us-state-child-spm-2026-11/scripts/house_sim.py new file mode 100644 index 0000000000..ac6cbdf37b --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/house_sim.py @@ -0,0 +1,102 @@ +"""Why do Census housing recipients get no subsidy in the model? Real state cuts of the default file, 2024.""" + +import glob +import os +import sys +import warnings + +import numpy as np +import pandas as pd + +warnings.filterwarnings("ignore") +SP = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, SP) +import extract_state as ex +from policyengine_core.data import Dataset +from policyengine_us import Microsimulation + +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +ex.load(glob.glob(S + "9a814a3b*/populace_us_2024.h5")[0]) +VARS = "receives_housing_assistance takes_up_housing_assistance_if_eligible is_eligible_for_housing_assistance housing_assistance hud_hap hud_max_subsidy hud_ttp hud_gross_rent spm_unit_allocated_housing_subsidy spm_unit_allocated_tenant_payment spm_unit_capped_housing_subsidy spm_unit_tenure_type".split() +rows = [] +for fips in (25, 17, 6, 48): + sim = Microsimulation(dataset=Dataset.from_dataframe(ex.state_file(fips), 2024)) + d = {"spm_unit_id": sim.calculate("spm_unit_id", 2024).values, "state": fips} + for v in VARS: + try: + d[v] = sim.calculate(v, 2024).values + except Exception as e: + print("fail", v, str(e)[:90]) + rows.append(pd.DataFrame(d)) + del sim +d = pd.concat(rows, ignore_index=True) +d["spm_unit_tenure_type"] = d.spm_unit_tenure_type.astype(str) +d.to_parquet(f"{SP}/run/house_sim.parquet") +u = pd.read_parquet( + f"{SP}/run/default_units.parquet", + columns=[ + "spm_unit_id", + "kids", + "w1", + "household_support_channel", + "SPM_CAPHOUSESUB", + "SPM_TENMORTSTATUS", + ], +) +d = d.merge(u, on="spm_unit_id") +d = d[ + (d.kids > 0) + & (d.household_support_channel == "asec") + & (d.SPM_CAPHOUSESUB.fillna(0) > 0) +].copy() +d["W"] = d.w1 * d.kids +a = lambda m: round(float(np.average(m, weights=d.W)), 3) +print( + "census recipients", + len(d), + "flag", + a(d.receives_housing_assistance), + "eligible", + a(d.is_eligible_for_housing_assistance), + "takeup", + a(d.takes_up_housing_assistance_if_eligible), +) +print( + "housing_assistance>0", + a(d.housing_assistance > 0), + "hap>0", + a(d.hud_hap > 0), + "max_subsidy>0", + a(d.hud_max_subsidy > 0), + "gross_rent>0", + a(d.hud_gross_rent > 0), + "gross_rent>ttp", + a(d.hud_gross_rent > d.hud_ttp), + "capped>0", + a(d.spm_unit_capped_housing_subsidy > 0), +) +print( + "tenure", + d.groupby("spm_unit_tenure_type").W.sum().div(d.W.sum()).round(3).to_dict(), +) +print( + "Census tenure code", + d.groupby("SPM_TENMORTSTATUS").W.sum().div(d.W.sum()).round(3).to_dict(), +) +for n in ( + "hud_gross_rent", + "hud_ttp", + "hud_max_subsidy", + "hud_hap", + "spm_unit_capped_housing_subsidy", + "SPM_CAPHOUSESUB", +): + print( + n, + "mean", + round(float(np.average(d[n], weights=d.W))), + "p50", + round(float(d[n].median())), + ) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/idcheck.py b/docs/evidence/us-state-child-spm-2026-11/scripts/idcheck.py new file mode 100644 index 0000000000..ed8dde7475 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/idcheck.py @@ -0,0 +1,54 @@ +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +u = pd.read_parquet(f"{SP}/run/dense_units.parquet") +u = u[u.kids > 0] +p = lambda n, y=2024: u[f"{n}__{y}"].values.astype(float) +snap = p("snap") +net = p("spm_unit_net_income") +R = ( + p("spm_unit_market_income") + + p("spm_unit_benefits") + + p("acp") + + p("ebb") + - p("spm_unit_federal_tax") + - p("spm_unit_payroll_tax") + - p("spm_unit_self_employment_tax") + - p("spm_unit_state_tax") + - p("spm_unit_local_tax") + - p("spm_unit_spm_expenses") +) +d = net - R +print( + "n off by >1", + (np.abs(d) > 1).sum(), + "of", + len(d), + "weight share", + (u.w1 * u.kids)[np.abs(d) > 1].sum() / (u.w1 * u.kids).sum(), + "max", + np.abs(d).max(), +) +x = u[np.abs(d) > 1] +print(x[["state", "kids", "household_support_channel", "w1"]].head(8).to_string()) +print(pd.Series(d[np.abs(d) > 1]).describe().round(1).to_dict()) +print( + x[ + [ + "spm_unit_taxes__2024", + "spm_unit_federal_tax__2024", + "spm_unit_state_tax__2024", + "spm_unit_local_tax__2024", + "spm_unit_payroll_tax__2024", + "spm_unit_self_employment_tax__2024", + "acp__2024", + "ebb__2024", + ] + ] + .head(4) + .T.round(0) + .to_string() +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/national_cf.py b/docs/evidence/us-state-child-spm-2026-11/scripts/national_cf.py new file mode 100644 index 0000000000..bad2009123 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/national_cf.py @@ -0,0 +1,108 @@ +"""One national simulation of the default file per process: base, aged pooled incomes, or the 2021 CTC reform. +Usage: national_cf.py mode in base, aged, reform""" + +import os +import re +import sys +import time +import warnings + +import numpy as np +import pandas as pd + +warnings.filterwarnings("ignore") +SP = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, SP) +import extract_state as ex +from policyengine_core.data import Dataset +from policyengine_core.reforms import Reform +from policyengine_us import Microsimulation + +mode = sys.argv[1] +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +H5 = S + "9a814a3b3b53c0ecd6e1737b6ec862c31300ef6f/populace_us_2024.h5" +ex.load(H5) +t = ex.tables +people = t["person"] +households = t["household"] +if mode == "aged": + # Census resources of the child at the 20th percentile, 2022 and 2023 to 2024 (raw ASEC, this session). + F = {2022: 46508 / 42020, 2023: 46508 / 44342, 2024: 1.0} + hc = households.set_index("household_id")["household_support_channel"] + ch = people["person_household_id"].map(hc).values + pat = re.compile( + r"(income|dividend|_distributions|^social_security_|benefits|compensation|capital_gains|non_sch_d)" + ) + cols = [ + c + for c in people.columns + if c in ex.known + and pat.search(c) + and "last_year" not in c + and people[c].dtype.kind == "f" + ] + print("aged columns", len(cols), cols, flush=True) + f = people["source_year"].map(F).values + f = np.where(ch == "asec", f, 1.0) + people = people.copy() + for c in cols: + people[c] = people[c].values * f + t["person"] = people + print("asec share aged >1", (f > 1).mean(), flush=True) +# Same flat frame as state_file, with no state filter. +orig = households + + +class All: + pass + + +columns = { + n: people[n].values + for n in people.columns + if n in ex.known or n == "person_id" or n.startswith("person_") +} + + +def add_group(table, group): + ids = f"{group}_id" + membership = people[f"person_{group}_id"].values + rows = table.set_index(ids).index.get_indexer(membership) + for name in table.columns: + if name in ex.known: + columns[name] = table[name].values[rows] + columns[ids] = membership + + +add_group(households, "household") +for g in ex.GROUPS: + add_group(t[g], g) +frame = pd.DataFrame({f"{k}__2024": v for k, v in columns.items()}) +kw = {} +if mode == "reform": + d = "2025-01-01.2025-12-31" + kw["reform"] = Reform.from_dict( + { + "gov.irs.credits.ctc.amount.arpa[0].amount": {d: 3600}, + "gov.irs.credits.ctc.amount.arpa[1].amount": {d: 3000}, + "gov.irs.credits.ctc.refundable.fully_refundable": {d: True}, + "gov.irs.credits.ctc.phase_out.arpa.in_effect": {d: True}, + }, + country_id="us", + ) +t0 = time.time() +sim = Microsimulation(dataset=Dataset.from_dataframe(frame, 2024), **kw) +res = {"spm_unit_id": sim.calculate("spm_unit_id", 2024).values} +for y in (2024, 2025) if mode != "reform" else (2025,): + for n in ( + "spm_unit_is_in_spm_poverty", + "spm_unit_net_income", + "spm_unit_spm_threshold", + ): + res[f"{n}__{y}"] = np.asarray( + sim.calculate(n, y, map_to="spm_unit").values, float + ) +pd.DataFrame(res).to_parquet(f"{SP}/run/cf_{mode}.parquet") +print(mode, "seconds", round(time.time() - t0), flush=True) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/noise.py b/docs/evidence/us-state-child-spm-2026-11/scripts/noise.py new file mode 100644 index 0000000000..b61c6ff58b --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/noise.py @@ -0,0 +1,70 @@ +"""Sampling noise in state child SPM rates: clustered linearization, cluster bootstrap, DL between-state variance.""" + +import json +import os +import sys + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +TAG = sys.argv[1] if len(sys.argv) > 1 else "default" +YEAR = 2025 +u = pd.read_parquet(f"{SP}/run/{TAG}_units.parquet") +u = u[u.kids > 0].copy() +u["W"] = u.w1 * u.kids +u["poor"] = u[f"spm_unit_is_in_spm_poverty__{YEAR}"].astype(float) +u["epoor"] = (u.SPM_RESOURCES.fillna(0) < u.SPM_POVTHRESHOLD.fillna(0)).astype(float) +u["clu"] = u.source_year.astype(str) + ":" + u.source_household_id.astype(str) +census = json.load(open(f"{SP}/census_child_spm.json")) +census = census.get("states", census) if isinstance(census, dict) else census +rows = [] +rng = np.random.default_rng(20261101) + + +def lin(g, col): + r = (g.W * g[col]).sum() / g.W.sum() + z = g.W * (g[col] - r) / g.W.sum() + c = z.groupby(g.clu).sum().values + n = len(c) + return r, np.sqrt(n / (n - 1) * (c**2).sum()), n + + +def boot(g, col, B=400): # noqa: N803 + a = g.groupby("clu").agg( + wp=("W", lambda s: (s * g.loc[s.index, col]).sum()), w=("W", "sum") + ) + wp, w = a.wp.values, a.w.values + n = len(w) + idx = rng.integers(0, n, size=(B, n)) + return np.std(wp[idx].sum(1) / w[idx].sum(1), ddof=1) + + +for st, g in u.groupby("state"): + r, se, n = lin(g, "poor") + re, see, _ = lin(g, "epoor") + w = g.w1.values + hh = g.groupby("household_id" if "household_id" in g else "clu").w1.first().values + kish = hh.sum() ** 2 / (hh**2).sum() + wc = g.W.values + kc = wc.sum() ** 2 / (wc**2).sum() + rows.append( + dict( + state=st, + model=100 * r, + se=100 * se, + clusters=n, + boot=100 * boot(g, "poor"), + E=100 * re, + E_se=100 * see, + kish_units=kish, + kish_child=kc, + se_kish=100 * np.sqrt(r * (1 - r) / kc), + top5_share=np.sort(wc)[-5:].sum() / wc.sum(), + max_share=wc.max() / wc.sum(), + ) + ) +d = pd.DataFrame(rows).set_index("state") +d.to_csv(f"{SP}/run/{TAG}_noise_raw.csv") +print(d.round(2).to_string()) +print(d.median(numeric_only=True).round(2).to_string()) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/paired.py b/docs/evidence/us-state-child-spm-2026-11/scripts/paired.py new file mode 100644 index 0000000000..10f5c656d3 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/paired.py @@ -0,0 +1,113 @@ +"""Paired record-level comparison of PE and Census resource parts by state. Pairing cancels most sampling noise.""" + +import os +import sys + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +TAG = sys.argv[1] if len(sys.argv) > 1 else "default" +u = pd.read_parquet(f"{SP}/run/{TAG}_units.parquet") +u = u[u.kids > 0].copy() +u = u[ + u.household_support_channel == "asec" +].copy() # Census flags and PE inputs share a source only on asec rows +W = (u.w1 * u.kids).values +c = lambda n: u[n].fillna(0).values.astype(float) +p = lambda n: u[f"{n}__2024"].values.astype(float) +low = c("SPM_RESOURCES") < 2 * c("SPM_POVTHRESHOLD") +d = pd.DataFrame( + { + "state": u.state.values, + "W": W, + "low": low, + "snap_c": c("SPM_SNAPSUB"), + "snap_p": p("snap"), + "house_c": c("SPM_CAPHOUSESUB"), + "house_p": p("spm_unit_capped_housing_subsidy"), + "lunch_c": c("SPM_SCHLUNCH"), + "lunch_p": p("free_school_meals") + p("reduced_price_school_meals"), + "wic_c": c("SPM_WICVAL"), + "wic_p": p("wic"), + "eng_c": c("SPM_ENGVAL"), + "eng_p": p("spm_unit_energy_subsidy"), + "T_c": c("SPM_POVTHRESHOLD"), + "T_p": p("spm_unit_spm_threshold"), + "geo_c": c("SPM_GEOADJ"), + "geo_p": p("spm_unit_geographic_adjustment"), + "exp_c": c("SPM_CAPWKCCXPNS") + c("SPM_MEDXPNS") + c("SPM_CHILDSUPPD"), + "exp_p": p("spm_unit_spm_expenses"), + "eitc_c": c("SPM_EITC"), + "eitc_p": p("eitc"), + "actc_c": c("SPM_ACTC"), + "actc_p": p("refundable_ctc"), + "sttax_c": c("SPM_STTAX"), + "sttax_p": p("spm_unit_state_tax"), + "cash_c": c("SPM_TOTVAL"), + "cash_p": p("spm_unit_market_income"), + } +) + + +def wm(g, n): + return np.average(g[n], weights=g.W) + + +out = [] +for s, g in list(d.groupby("state")) + [("US", d)]: + l = g[g.low] # noqa: E741 + r = dict(state=s, n=len(g)) + for k in ("snap", "house", "lunch", "wic", "eng", "eitc", "actc", "sttax", "exp"): + r[k + "_c"] = wm(l, k + "_c") + r[k + "_p"] = wm(l, k + "_p") + r["geo_ratio"] = np.exp( + np.average(np.log(g.geo_p / g.geo_c.replace(0, np.nan)).fillna(0), weights=g.W) + ) + out.append(r) +o = pd.DataFrame(out).set_index("state") +pd.set_option("display.width", 230) +show = o[ + [ + "n", + "snap_c", + "snap_p", + "house_c", + "house_p", + "lunch_c", + "lunch_p", + "eitc_c", + "eitc_p", + "actc_c", + "actc_p", + "sttax_c", + "sttax_p", + "exp_c", + "exp_p", + "geo_ratio", + ] +] +print( + show.loc[ + [ + "US", + "LA", + "MS", + "AR", + "HI", + "MT", + "DE", + "MD", + "MA", + "MO", + "TN", + "IL", + "DC", + "FL", + ] + ] + .round(0) + .assign(geo_ratio=show.geo_ratio.round(3)) + .to_string() +) +o.to_csv(f"{SP}/run/{TAG}_paired.csv") diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/part.py b/docs/evidence/us-state-child-spm-2026-11/scripts/part.py new file mode 100644 index 0000000000..4e5dc6bcfb --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/part.py @@ -0,0 +1,75 @@ +"""Arithmetic on real simulation output, not a re-simulation: what if partnership and S-corp income entered SPM resources before tax?""" + +import glob +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +for tag, pat, fn in ( + ("dense", "15cefac4*", "*.h5"), + ("default", "9a814a3b*", "populace_us_2024.h5"), +): + f = [x for x in glob.glob(S + pat + "/" + fn) if "calib" not in x][0] + p = pd.read_hdf(f, "person") + cols = [ + c + for c in ( + "partnership_income", + "s_corp_income", + "partnership_s_corp_income", + "partnership_se_income", + ) + if c in p + ] + print(tag, cols, {c: round(float(p[c].abs().sum() / 1e9), 1) for c in cols}) + use = [c for c in ("partnership_income", "s_corp_income") if c in p] or [ + "partnership_s_corp_income" + ] + a = p.groupby("person_spm_unit_id")[use].sum().sum(axis=1).rename("ps") + u = pd.read_parquet( + f"{SP}/run/{tag}_units.parquet", + columns=[ + "spm_unit_id", + "kids", + "w1", + "spm_unit_net_income__2024", + "spm_unit_spm_threshold__2024", + "spm_unit_is_in_spm_poverty__2024", + "household_support_channel", + "state", + ], + ) + u = u[u.kids > 0].merge(a, left_on="spm_unit_id", right_index=True, how="left") + u["ps"] = u.ps.fillna(0) + W = u.w1 * u.kids + was = u.spm_unit_net_income__2024 < u.spm_unit_spm_threshold__2024 + now = (u.spm_unit_net_income__2024 + u.ps) < u.spm_unit_spm_threshold__2024 + print( + " check identity", + round( + float((was == u.spm_unit_is_in_spm_poverty__2024.astype(bool)).mean()), 5 + ), + "share child units with nonzero", + round(float(np.average(u.ps != 0, weights=W)), 4), + ) + print( + " child rate was", + round(100 * np.average(was, weights=W), 2), + "with income added", + round(100 * np.average(now, weights=W), 2), + ) + print( + " by channel", + { + k: ( + round(100 * np.average(was[g.index], weights=W[g.index]), 2), + round(100 * np.average(now[g.index], weights=W[g.index]), 2), + ) + for k, g in u.groupby("household_support_channel") + }, + ) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/puf_house.py b/docs/evidence/us-state-child-spm-2026-11/scripts/puf_house.py new file mode 100644 index 0000000000..1bbbf1f452 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/puf_house.py @@ -0,0 +1,62 @@ +"""Housing receipt on the two support halves of the dense file: same source households, ASEC measured vs PUF clone reimputed.""" + +import glob +import os + +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +f = [x for x in glob.glob(S + "15cefac4*/*.h5") if "calib" not in x][0] +s = pd.read_hdf(f, "spm_unit") +print([c for c in s.columns if "source" in c or "support" in c][:8]) +ch = s.spm_unit_support_channel.astype(str) +cl = s.spm_unit_support_clone_index +a = ( + s[(ch == "asec")] + .set_index("spm_unit_source_id") + .receives_housing_assistance.astype(bool) +) +b = ( + s[(ch == "puf_tax_detail") & (cl == 1)] + .set_index("spm_unit_source_id") + .receives_housing_assistance.astype(bool) +) +print( + "unweighted rate asec", + round(a.mean(), 4), + "puf clone", + round(b.mean(), 4), + "units", + len(a), + len(b), +) +m = pd.concat([a.rename("asec"), b.rename("puf")], axis=1).dropna() +print(pd.crosstab(m.asec, m.puf, normalize="index").round(3).to_string()) +print( + "rate of puf given asec=1", + round(m.puf[m.asec.astype(bool)].mean(), 3), + "given asec=0", + round(m.puf[~m.asec.astype(bool)].mean(), 3), +) +u = pd.read_parquet( + f"{SP}/run/dense_units.parquet", + columns=[ + "spm_unit_id", + "SPM_RESOURCES", + "SPM_POVTHRESHOLD", + "kids", + "household_support_channel", + ], +) +u = u.merge(s[["spm_unit_id", "receives_housing_assistance"]], on="spm_unit_id") +u["low"] = u.SPM_RESOURCES < 2 * u.SPM_POVTHRESHOLD +print( + u[u.kids > 0] + .groupby(["household_support_channel", "low"]) + .receives_housing_assistance.apply(lambda v: v.astype(bool).mean()) + .round(4) + .to_dict() +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/rent2.py b/docs/evidence/us-state-child-spm-2026-11/scripts/rent2.py new file mode 100644 index 0000000000..bcc4700374 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/rent2.py @@ -0,0 +1,75 @@ +import glob +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +f = [x for x in glob.glob(S + "15cefac4*/*.h5") if "calib" not in x][0] +p = pd.read_hdf(f, "person") +r = p.pre_subsidy_rent +print( + "persons", + len(p), + "nan", + round(r.isna().mean(), 4), + "zero", + round((r == 0).mean(), 4), + "pos", + round((r > 0).mean(), 4), +) +print( + p.assign(pos=r > 0, nan=r.isna()) + .groupby("person_support_channel")[["pos", "nan"]] + .mean() + .round(4) + .to_dict() +) +for c in ("is_household_head", "is_tax_unit_head"): + if c in p: + print(c, p.assign(pos=r > 0).groupby(c).pos.mean().round(4).to_dict()) +u = p.groupby("person_spm_unit_id").agg( + n=("pre_subsidy_rent", "size"), + pos=("pre_subsidy_rent", lambda s: (s > 0).sum()), + tot=("pre_subsidy_rent", "sum"), +) +print( + "units share any rent", + round((u.pos > 0).mean(), 4), + "mean members with rent among those", + round(u.pos[u.pos > 0].mean(), 3), + "mean rent", + round(u.tot[u.pos > 0].mean()), +) +d = pd.read_parquet( + f"{SP}/run/dense_units.parquet", + columns=[ + "spm_unit_id", + "kids", + "w1", + "household_support_channel", + "SPM_TENMORTSTATUS", + "SPM_RESOURCES", + "SPM_POVTHRESHOLD", + "SPM_CAPHOUSESUB", + ], +) +d = d.merge(u, left_on="spm_unit_id", right_index=True) +d["W"] = d.w1 * d.kids +d = d[d.kids > 0] +print( + d.groupby(["household_support_channel", "SPM_TENMORTSTATUS"]) + .apply( + lambda g: pd.Series( + { + "child_w_share": g.W.sum() / d.W.sum(), + "any_rent": np.average(g.pos > 0, weights=g.W), + "n": len(g), + } + ) + ) + .round(3) +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/rent3.py b/docs/evidence/us-state-child-spm-2026-11/scripts/rent3.py new file mode 100644 index 0000000000..b4b3014678 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/rent3.py @@ -0,0 +1,51 @@ +import glob +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +for tag, pat, fn in ( + ("default", "9a814a3b*", "populace_us_2024.h5"), + ("dense", "15cefac4*", "*.h5"), +): + f = [x for x in glob.glob(S + pat + "/" + fn) if "calib" not in x][0] + p = pd.read_hdf(f, "person")[ + [ + "person_household_id", + "person_spm_unit_id", + "is_household_head", + "pre_subsidy_rent", + "age", + ] + ] + h = pd.read_hdf(f, "household") + s = pd.read_hdf(f, "spm_unit") + wc = [c for c in h.columns if c == "household_weight"][0] + print( + tag, + "hh cols", + [c for c in h.columns if "tenure" in c], + "spm", + [c for c in s.columns if "tenure" in c], + ) + a = p.groupby("person_household_id").pre_subsidy_rent.sum().rename("rent") + h = h.merge(a, left_on="household_id", right_index=True) + t = ( + h.groupby(["household_support_channel", "tenure_type"]) + .apply( + lambda g: pd.Series( + { + "w_share": g[wc].sum() / h[wc].sum(), + "any_rent": np.average(g.rent > 0, weights=g[wc]), + "mean_rent_pos": g.rent[g.rent > 0].mean(), + "n": len(g), + } + ) + ) + .round(3) + ) + print(t.to_string()) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/rent4.py b/docs/evidence/us-state-child-spm-2026-11/scripts/rent4.py new file mode 100644 index 0000000000..9e2a69ab73 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/rent4.py @@ -0,0 +1,74 @@ +"""Position test: person_rent[head_mask] = predicted writes household-order predictions in person order. +If the two orders differ, pairing the n-th head's rent with the n-th household's tenure should restore the rent/tenure link.""" + +import glob +import os + +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +f = [x for x in glob.glob(S + "15cefac4*/*.h5") if "calib" not in x][0] +p = pd.read_hdf(f, "person") +h = pd.read_hdf(f, "household") +print( + [ + c + for c in h.columns + if "source" in c or "clone" in c or "support" in c or c.endswith("_id") + ] +) +print([c for c in p.columns if "source" in c or "clone" in c or "support" in c][:10]) +print( + "first household ids", + h.household_id.head(4).tolist(), + "monotone hh", + h.household_id.is_monotonic_increasing, + "monotone person hh", + p.person_household_id.is_monotonic_increasing, +) +heads = p[p.is_household_head.astype(bool)] +same = heads.person_household_id.values == h.household_id.values +print( + "heads", + len(heads), + "households", + len(h), + "same position share", + round(same.mean(), 4), +) +hh = h.set_index("household_id") +# the base frame before cloning: unit of test is one channel at clone zero +for ch in sorted(h.household_support_channel.astype(str).unique()): + hs = h[h.household_support_channel.astype(str) == ch] + for cl in sorted(p.person_support_clone_index.unique())[:3]: + hp = heads[ + (heads.person_support_channel.astype(str) == ch) + & (heads.person_support_clone_index == cl) + ] + ids = set(hp.person_household_id) + hs2 = hs[hs.household_id.isin(ids)] + print(ch, cl, "heads", len(hp), "hh", len(hs2)) + if len(hp) != len(hs2) or len(hp) == 0: + continue + same = (hp.person_household_id.values == hs2.household_id.values).mean() + ten_own = ( + hs2.set_index("household_id") + .tenure_type.astype(str) + .reindex(hp.person_household_id) + .values + ) + ten_pos = hs2.tenure_type.astype(str).values + rent = hp.pre_subsidy_rent.values + print(" same position", round(same, 4)) + for lab, t in (("own row", ten_own), ("nth household", ten_pos)): + print( + " ", + lab, + { + k: round(float((rent[t == k] > 0).mean()), 3) + for k in ("RENTED", "OWNED_WITH_MORTGAGE", "NONE") + }, + ) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/rent5.py b/docs/evidence/us-state-child-spm-2026-11/scripts/rent5.py new file mode 100644 index 0000000000..d5a925f50c --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/rent5.py @@ -0,0 +1,73 @@ +"""Rent, real estate tax and housing receipt by tenure across files, including the ACS-local release.""" + +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +f = S + "725d89993f6b2dc4821fd5c3620f0f3d4d630102/populace_us_2024_acs_local.h5" +p = pd.read_hdf(f, "person") +h = pd.read_hdf(f, "household") +s = pd.read_hdf(f, "spm_unit") +print( + "rent cols", + [ + c + for c in p.columns + if "rent" in c.lower() and "parent" not in c and "current" not in c + ], + [ + c + for c in h.columns + if "rent" in c.lower() or "RNTP" in c or "tenure" in c.lower() + ], +) +print( + "hh tenure", + h.tenure_type.astype(str).value_counts(normalize=True).round(3).to_dict(), +) +a = p.groupby("person_household_id")[ + ["pre_subsidy_rent"] + (["real_estate_taxes"] if "real_estate_taxes" in p else []) +].sum() +h = h.merge(a, left_on="household_id", right_index=True) +w = "household_weight" +t = ( + h.groupby([h.household_support_channel.astype(str), h.tenure_type.astype(str)]) + .apply( + lambda g: pd.Series( + { + "w": g[w].sum() / 1e6, + "any_rent": np.average(g.pre_subsidy_rent > 0, weights=g[w] + 1e-12), + "mean_pos": g.pre_subsidy_rent[g.pre_subsidy_rent > 0].mean(), + "any_ret": np.average( + g.get("real_estate_taxes", pd.Series(0, index=g.index)) > 0, + weights=g[w] + 1e-12, + ), + "n": len(g), + } + ) + ) + .round(3) +) +print(t.to_string()) +heads = p[p.is_household_head.astype(bool)] +print( + "same position household/head", + round((heads.person_household_id.values == h.household_id.values).mean(), 4) + if len(heads) == len(h) + else (len(heads), len(h)), +) +m = [c for c in s.columns if "hous" in c.lower()] +print( + { + c: round( + float(pd.to_numeric(s[c], errors="coerce").fillna(0).astype(float).mean()), + 4, + ) + for c in m + } +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/rent_eval.py b/docs/evidence/us-state-child-spm-2026-11/scripts/rent_eval.py new file mode 100644 index 0000000000..0fe2aea5b4 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/rent_eval.py @@ -0,0 +1,205 @@ +"""What rent misplacement does: same weights, same everything, rent on the household it was drawn for.""" + +import glob +import json +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +c = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +FIPS = { + "AL": 1, + "AK": 2, + "AZ": 4, + "AR": 5, + "CA": 6, + "CO": 8, + "CT": 9, + "DE": 10, + "DC": 11, + "FL": 12, + "GA": 13, + "HI": 15, + "ID": 16, + "IL": 17, + "IN": 18, + "IA": 19, + "KS": 20, + "KY": 21, + "LA": 22, + "ME": 23, + "MD": 24, + "MA": 25, + "MI": 26, + "MN": 27, + "MS": 28, + "MO": 29, + "MT": 30, + "NE": 31, + "NV": 32, + "NH": 33, + "NJ": 34, + "NM": 35, + "NY": 36, + "NC": 37, + "ND": 38, + "OH": 39, + "OK": 40, + "OR": 41, + "PA": 42, + "RI": 44, + "SC": 45, + "SD": 46, + "TN": 47, + "TX": 48, + "UT": 49, + "VT": 50, + "VA": 51, + "WA": 53, + "WV": 54, + "WI": 55, + "WY": 56, +} +INV = {v: k for k, v in FIPS.items()} +VARS = [ + "spm_unit_is_in_spm_poverty__2024", + "spm_unit_is_in_spm_poverty__2025", + "snap__2024", + "snap__2025", + "spm_unit_capped_housing_subsidy__2024", + "spm_unit_net_income__2025", + "spm_unit_spm_threshold__2025", +] +out = {} +for base, fix in (("dense", "denserent"), ("default", "sparserent")): + fs = sorted(glob.glob(f"{SP}/run/{fix}/*.parquet")) + if not fs: + continue + f = pd.concat( + [pd.read_parquet(x, columns=["spm_unit_id"] + VARS) for x in fs], + ignore_index=True, + ).rename(columns={v: v + "_fx" for v in VARS}) + u = pd.read_parquet( + f"{SP}/run/{base}_units.parquet", + columns=[ + "spm_unit_id", + "kids", + "w0", + "w1", + "state", + "household_support_channel", + ] + + VARS, + ) + u = u.merge(f, on="spm_unit_id", validate="one_to_one") + n = len(fs) + print(f"\n{base}: {n} states, {len(u)} units") + for w in ("w0", "w1"): + print( + " ", + w, + "SNAP 2024 $bn was", + round((u[w] * u.snap__2024).sum() / 1e9, 2), + "fix", + round((u[w] * u.snap__2024_fx).sum() / 1e9, 2), + "; housing subsidy $bn was", + round((u[w] * u.spm_unit_capped_housing_subsidy__2024).sum() / 1e9, 2), + "fix", + round((u[w] * u.spm_unit_capped_housing_subsidy__2024_fx).sum() / 1e9, 2), + "; units with subsidy M was", + round( + (u[w] * (u.spm_unit_capped_housing_subsidy__2024 > 0)).sum() / 1e6, 2 + ), + "fix", + round( + (u[w] * (u.spm_unit_capped_housing_subsidy__2024_fx > 0)).sum() / 1e6, 2 + ), + ) + k = u[u.kids > 0].copy() + for w in ("w0", "w1"): + W = k[w] * k.kids + print( + " ", + w, + "child SPM 2024 was", + round(100 * np.average(k.spm_unit_is_in_spm_poverty__2024, weights=W), 2), + "fix", + round( + 100 * np.average(k.spm_unit_is_in_spm_poverty__2024_fx, weights=W), 2 + ), + "2025 was", + round(100 * np.average(k.spm_unit_is_in_spm_poverty__2025, weights=W), 2), + "fix", + round( + 100 * np.average(k.spm_unit_is_in_spm_poverty__2025_fx, weights=W), 2 + ), + ) + W = k.w1 * k.kids + r = lambda v: (W * k[v]).groupby(k.state).sum() / W.groupby(k.state).sum() * 100 + t = pd.DataFrame( + { + "census": c.rate, + "was": r("spm_unit_is_in_spm_poverty__2025"), + "fix": r("spm_unit_is_in_spm_poverty__2025_fx"), + } + ).dropna() + t["moe"] = c.moe.reindex(t.index) + t["step"] = t.fix - t.was + for v in ("was", "fix"): + e = t[v] - t.census + print( + " ", + v, + "mean gap", + round(e.mean(), 2), + "MAD", + round(e.abs().mean(), 2), + "sd", + round(e.std(), 2), + "corr", + round(np.corrcoef(t[v], t.census)[0, 1], 3), + "beyond", + int((e.abs() > t.moe).sum()), + ) + print( + " step mean", + round(t.step.mean(), 2), + "min", + round(t.step.min(), 2), + "max", + round(t.step.max(), 2), + ) + t.to_csv(f"{SP}/run/{base}_rentfix_states.csv") + print( + t.reindex( + [ + s + for s in [ + "DC", + "DE", + "TN", + "MD", + "FL", + "RI", + "VT", + "MO", + "MA", + "LA", + "MT", + "MS", + "HI", + "AR", + "CA", + "TX", + "NY", + ] + if s in t.index + ] + ) + .round(1) + .T.to_string() + ) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/rentfix.py b/docs/evidence/us-state-child-spm-2026-11/scripts/rentfix.py new file mode 100644 index 0000000000..a78481d255 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/rentfix.py @@ -0,0 +1,84 @@ +"""Undo the rent misalignment on the dense file: the n-th head in person order holds the rent drawn for the n-th household in table order. +Writes person-level corrected rent; clones take their base record's corrected rent through household_source_id.""" + +import glob +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +f = [x for x in glob.glob(S + "15cefac4*/*.h5") if "calib" not in x][0] +p = pd.read_hdf(f, "person") +h = pd.read_hdf(f, "household") +heads = p[p.is_household_head.astype(bool)] +ch = h.household_support_channel.astype(str) +hs = h[ch == "asec"] +hp = heads[ + (heads.person_support_channel.astype(str) == "asec") + & (heads.person_support_clone_index == 0) +] +assert len(hs) == len(hp) +print( + "source ids unique in base", + hs.household_source_id.is_unique, + type(hs.household_source_id.iloc[0]), +) +right = pd.Series( + hp.pre_subsidy_rent.values, index=hs.household_source_id.values, name="rent_right" +) +print( + "base households", + len(right), + "positive", + int((right > 0).sum()), + "sum", + round(right.sum() / 1e9, 2), +) +print( + "other channel sources found", + h.household_source_id[ch != "asec"].isin(right.index).mean(), +) +print( + "clone index by channel", + h.groupby([ch, h.household_support_clone_index]).size().to_dict(), +) +h["rent_right"] = h.household_source_id.map(right) +assert h.rent_right.notna().all() +own = heads.groupby("person_household_id").pre_subsidy_rent.sum().rename("rent_was") +h = h.merge(own, left_on="household_id", right_index=True) +w = h.household_weight +print( + h.groupby(h.tenure_type.astype(str)) + .apply( + lambda g: pd.Series( + { + "weight_M": g.household_weight.sum() / 1e6, + "was_any": np.average(g.rent_was > 0, weights=g.household_weight), + "right_any": np.average(g.rent_right > 0, weights=g.household_weight), + "was_mean": np.average(g.rent_was, weights=g.household_weight), + "right_mean": np.average(g.rent_right, weights=g.household_weight), + } + ) + ) + .round(3) + .to_string() +) +print( + "weighted total rent, was", + round((w * h.rent_was).sum() / 1e9, 1), + "right", + round((w * h.rent_right).sum() / 1e9, 1), +) +print( + "records moved", + round(float((h.rent_was != h.rent_right).mean()), 4), + "weight moved", + round(float(w[h.rent_was != h.rent_right].sum() / w.sum()), 4), +) +h[["household_id", "rent_right", "rent_was"]].to_parquet( + f"{SP}/run/rentfix_dense.parquet" +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/rep_boot.py b/docs/evidence/us-state-child-spm-2026-11/scripts/rep_boot.py new file mode 100644 index 0000000000..20da90384d --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/rep_boot.py @@ -0,0 +1,52 @@ +"""Replicate calibration: Poisson bootstrap of source households, then the same solver on each replicate. + +Captures noise that the fixed-weight linearization misses, including calibration's own response. +Usage: rep_boot.py """ + +import os +import sys +import time + +import numpy as np +import pandas as pd + +sys.path.insert(0, os.path.expanduser("~/reviews/pe30-population-2026-09-27/scripts")) +import calib_resolve as cr + +OUT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "run", "rep") +first, last = int(sys.argv[1]), int(sys.argv[2]) +diag, T, A, z, lw, fam, b = cr.load() +lw = lw.copy() +lw[fam == "jct"] = 0.0 +w0 = z["initial_household_weight"].astype(np.float64) +H5 = cr.W / "pe_data" / "populace_us_2024.h5" +h = pd.read_hdf(H5, "household")["household_id"].to_numpy() +p = ( + pd.read_hdf(H5, "person")[ + ["person_household_id", "source_year", "source_household_id"] + ] + .drop_duplicates("person_household_id") + .set_index("person_household_id") + .reindex(h) +) +clu = pd.factorize(p.source_year.astype(str) + ":" + p.source_household_id.astype(str))[ + 0 +] +n = clu.max() + 1 +print("households", len(h), "clusters", n, flush=True) +A = A.tocsc() +for r in range(first, last + 1): + f = f"{OUT}/r{r:03d}.npz" + if os.path.exists(f): + continue + t = time.time() + rng = np.random.default_rng(20261101 + r) + m = rng.poisson(1.0, n)[clu] + keep = m > 0 + w0r = (w0 * m)[keep] + w0r *= w0.sum() / w0r.sum() + w, traj = cr.solve_np(A[:, keep].tocsr(), b, lw, w0r) + full = np.zeros(len(w0)) + full[keep] = w + np.savez_compressed(f, weights=full, loss=traj[-1]) + print(r, round(time.time() - t), round(float(traj[-1]), 4), flush=True) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/rep_eval.py b/docs/evidence/us-state-child-spm-2026-11/scripts/rep_eval.py new file mode 100644 index 0000000000..8572379e72 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/rep_eval.py @@ -0,0 +1,285 @@ +"""Waterfall by state with replicate-calibration standard errors, plus the noise-only test on replicate SEs.""" + +import glob +import itertools +import json +import math +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +H5 = S + "9a814a3b3b53c0ecd6e1737b6ec862c31300ef6f/populace_us_2024.h5" +hh = pd.read_hdf(H5, "household")["household_id"].to_numpy() +p = ( + pd.read_hdf(H5, "person")[ + ["person_household_id", "source_year", "source_household_id"] + ] + .drop_duplicates("person_household_id") + .set_index("person_household_id") + .reindex(hh) +) +clu = pd.factorize(p.source_year.astype(str) + ":" + p.source_household_id.astype(str))[ + 0 +] +ncl = clu.max() + 1 +z = np.load( + S + "8ab57ffc2ca41d8af631ff62ebbce95e966299f3/populace_us_2024_calibration.npz", + allow_pickle=True, +) +w0 = z["initial_household_weight"].astype(float) +w1 = z["household_weight"].astype(float) +pos = pd.Series(np.arange(len(hh)), index=hh) +u = pd.read_parquet(f"{SP}/run/default_units.parquet") +u = u[u.kids > 0].copy() +ix = pos.reindex(u.household_id.values).values.astype(int) +k = u.kids.values.astype(float) +st = u.state.values +states = sorted(set(st)) +sidx = pd.Categorical(st, categories=states).codes +c = lambda n: u[n].fillna(0).values.astype(float) +q = lambda n, y=2024: u[f"{n}__{y}"].values.astype(float) +Rc = c("SPM_RESOURCES") +Tc = c("SPM_POVTHRESHOLD") +Tp = q("spm_unit_spm_threshold") +Rp = q("spm_unit_net_income") +ratio = Tp / Tc +pf = pd.Series(ratio).groupby(u.source_year.values).transform("median").values +Ty = Tc * pf +P24 = q("spm_unit_is_in_spm_poverty", 2024) +P25 = q("spm_unit_is_in_spm_poverty", 2025) + + +# Three factors: price year of thresholds, threshold rest, resources. +def fl(a, b, r): + T = (Tp if b else Ty) if a else (Tp / pf if b else Tc) + return ((Rp if r else Rc) < T).astype(float) + + +F = {bits: fl(*bits) for bits in itertools.product([0, 1], repeat=3)} +assert np.abs(F[(1, 1, 1)] - P24).mean() < 1e-3, np.abs(F[(1, 1, 1)] - P24).mean() + + +def shap(i): + out = 0 + for bits in itertools.product([0, 1], repeat=2): + s = sum(bits) + w = math.factorial(s) * math.factorial(2 - s) / math.factorial(3) + a = bits[:i] + (1,) + bits[i:] + b = bits[:i] + (0,) + bits[i:] + out = out + w * (F[a] - F[b]) + return out + + +Sh = [shap(i) for i in range(3)] +E = F[(0, 0, 0)] +stages = { + "E": E, + "priceyear": Sh[0], + "threshold_rest": Sh[1], + "resources": Sh[2], + "year": P25 - P24, + "P25": P25, + "P24": P24, +} + + +def rate(W, f): # noqa: N803 + return ( + 100 + * np.bincount(sidx, W * f, minlength=51) + / np.bincount(sidx, W, minlength=51) + ) + + +def stageset(w, w_init): + W = w[ix] * k + out = {n: rate(W, f) for n, f in stages.items()} + out["D"] = rate(w_init[ix] * k, E) + return out + + +base = stageset(w1, w0) +reps = [] +fs = sorted(glob.glob(f"{SP}/run/rep/r*.npz")) +for f in fs: + r = int(os.path.basename(f)[1:4]) + w = np.load(f)["weights"] + m = np.random.default_rng(20261101 + r).poisson(1.0, ncl)[clu].astype(float) + wi = w0 * m + wi *= w0.sum() / wi.sum() + reps.append(stageset(w, wi)) +print("replicates", len(reps)) +names = list(base) +A = {n: np.array([r[n] for r in reps]) for n in names} +se = {n: pd.Series(A[n].std(0, ddof=1), index=states) for n in names} +seW = pd.Series((A["E"] - A["D"]).std(0, ddof=1), index=states) # noqa: N816 +b = {n: pd.Series(base[n], index=states) for n in names} +cen = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +sr = pd.read_csv(f"{SP}/asec/state_raw.csv", index_col=0) +noise = pd.read_csv(f"{SP}/run/default_noise.csv", index_col=0) +T = pd.DataFrame( + { + "census": cen.rate, + "pool": sr.avg_22_24, + "D": b["D"], + "E": b["E"], + "priceyear": b["priceyear"], + "threshold_rest": b["threshold_rest"], + "resources": b["resources"], + "year": b["year"], + "model": b["P25"], + } +) +T["se_model_rep"] = se["P25"] +T["se_model_lin"] = noise.se +T["rep_bias"] = A["P25"].mean(0) - b["P25"].values +T["se_E_rep"] = se["E"] +T["se_D_rep"] = se["D"] +T["se_weights_step"] = seW +for n in ("priceyear", "threshold_rest", "resources", "year"): + T["se_" + n] = se[n] +T.to_csv(f"{SP}/run/waterfall.csv") +print( + "ratio rep/lin median", + (T.se_model_rep / T.se_model_lin).median().round(3), + "median rep se", + T.se_model_rep.median().round(2), + "rms", + np.sqrt((T.se_model_rep**2).mean()).round(2), +) +print("mean rep bias", T.rep_bias.mean().round(2)) +top = [ + "DC", + "DE", + "TN", + "MD", + "FL", + "RI", + "VT", + "MO", + "LA", + "MT", + "MS", + "HI", + "AR", + "CA", + "TX", +] +pd.set_option("display.width", 220) +print( + T.loc[ + top, + [ + "census", + "pool", + "D", + "E", + "priceyear", + "threshold_rest", + "resources", + "year", + "model", + ], + ] + .round(1) + .to_string() +) +print( + T.loc[ + top, + [ + "se_D_rep", + "se_weights_step", + "se_E_rep", + "se_priceyear", + "se_threshold_rest", + "se_resources", + "se_year", + "se_model_rep", + "se_model_lin", + ], + ] + .round(1) + .to_string() +) +print( + T[ + [ + "census", + "pool", + "D", + "E", + "priceyear", + "threshold_rest", + "resources", + "year", + "model", + ] + ] + .mean() + .round(2) + .to_dict() +) +d = T.copy() +cse = cen.moe / 1.645 +d["gap"] = d.model - d.census +v = d.se_model_rep**2 + cse**2 +w = 1 / v +mu = (w * d.gap).sum() / w.sum() +Q = (w * (d.gap - mu) ** 2).sum() +t2 = max(0, (Q - 50) / (w.sum() - (w**2).sum() / w.sum())) +ws = 1 / (v + t2) +mur = (ws * d.gap).sum() / ws.sum() +print( + "DL rep SE: Q", + round(Q, 1), + "tau", + round(np.sqrt(t2), 2), + "mu_re", + round(mur, 2), + "se_mu", + round(np.sqrt(1 / ws.sum()), 2), +) +rng = np.random.default_rng(1) +sy = cen.rate +cv = cse**2 +w_ = 1 / cv +m0 = (w_ * sy).sum() / w_.sum() +q0 = (w_ * (sy - m0) ** 2).sum() +t0 = max(0, (q0 - 50) / (w_.sum() - (w_**2).sum() / w_.sum())) +Bc = t0 / (t0 + cv) +tr = m0 + Bc * (sy - m0) +ps = np.sqrt(Bc * cv) +for lab, sh, tx in ( + ("noise + common shift", d.gap.mean(), 0.0), + ("noise + shift + tau", d.gap.mean(), np.sqrt(t2)), +): + Sn = 20000 + Tr = tr.values + ps.values * rng.standard_normal((Sn, 51)) + C = Tr + cse.values * rng.standard_normal((Sn, 51)) + M = ( + Tr + + sh + + tx * rng.standard_normal((Sn, 51)) + + d.se_model_rep.values * rng.standard_normal((Sn, 51)) + ) + g = M - C + qq = lambda a: np.round(np.percentile(a, [5, 50, 95]), 2) + print( + lab, + "MAD", + qq(np.abs(g).mean(1)), + "sd", + qq(g.std(1, ddof=1)), + "beyond", + qq((np.abs(g) > cen.moe.values).sum(1)), + "corr", + qq([np.corrcoef(M[i], C[i])[0, 1] for i in range(3000)]), + ) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/runcuts.py b/docs/evidence/us-state-child-spm-2026-11/scripts/runcuts.py new file mode 100644 index 0000000000..aa228a243b --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/runcuts.py @@ -0,0 +1,21 @@ +"""Simulate cuts already on disk, smallest first. Usage: runcuts.py """ + +import os +import sys +from pathlib import Path + +SP = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, SP) +if __name__ == "__main__": + from cutrun import Pool, run + + tag, workers = sys.argv[1], int(sys.argv[2]) + d = Path(SP) / "run" / f"{tag}_cuts" + out = Path(SP) / "run" / tag + out.mkdir(parents=True, exist_ok=True) + fs = sorted(d.glob("*.pkl"), key=lambda q: q.stat().st_size) + with Pool(workers, maxtasksperchild=1) as pool: + for done, sec in pool.imap_unordered( + run, [(int(q.stem), str(d), str(out), (2024, 2025)) for q in fs] + ): + print(done, sec, flush=True) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/sparse_rent.py b/docs/evidence/us-state-child-spm-2026-11/scripts/sparse_rent.py new file mode 100644 index 0000000000..39c8ddc229 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/sparse_rent.py @@ -0,0 +1,77 @@ +"""All 51 states of the default file with rent back on the household it was drawn for; weights unchanged. Source ids share the dense file's draws. +Usage: sparse_rent.py """ + +import glob +import os +import sys + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, SP) +from cutrun import Path, Pool, ex, run, version + +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +h5 = S + "9a814a3b3b53c0ecd6e1737b6ec862c31300ef6f/populace_us_2024.h5" +workers = int(sys.argv[1]) +tag = "sparserent" +years = (2024, 2025) +d = Path(SP) / "run" / f"{tag}_cuts" +d.mkdir(parents=True, exist_ok=True) +out = Path(SP) / "run" / tag +out.mkdir(parents=True, exist_ok=True) +de = pd.read_hdf( + [x for x in glob.glob(S + "15cefac4*/*.h5") if "calib" not in x][0], "household" +)[["household_id", "household_source_id"]] +right = ( + pd.read_parquet(f"{SP}/run/rentfix_dense.parquet") + .merge(de, on="household_id") + .drop_duplicates("household_source_id") + .set_index("household_source_id") + .rent_right +) +ex.load(h5) +h = ex.tables["household"] +hr = pd.Series(h.household_source_id.map(right).values, index=h.household_id.values) +assert hr.notna().all() +p = ex.tables["person"] +head = p.is_household_head.astype(bool).values +rent = np.zeros(len(p)) +rent[head] = p.person_household_id[head].map(hr).values +was = p.pre_subsidy_rent.values +print( + "records moved", + round(float((was != rent).mean()), 4), + "rent total was", + round(was.sum() / 1e6, 1), + "right", + round(rent.sum() / 1e6, 1), + flush=True, +) +p["pre_subsidy_rent"] = rent +ex.tables["person"] = p +fips = sorted(int(v) for v in h["state_fips"].unique()) +for f in fips: + q = d / f"{f:02d}.pkl" + if not q.exists(): + ex.state_file(f).to_pickle(q) +ex.tables = None +sizes = {f: (d / f"{f:02d}.pkl").stat().st_size for f in fips} +order = sorted(fips, key=sizes.get) +print( + "policyengine-us", + version("policyengine-us"), + "states", + len(order), + "cut GB", + round(sum(sizes.values()) / 1e9, 2), + flush=True, +) +with Pool(workers, maxtasksperchild=1) as pool: + for done, sec in pool.imap_unordered( + run, [(f, str(d), str(out), years) for f in order] + ): + print(done, sec, flush=True) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/steps.py b/docs/evidence/us-state-child-spm-2026-11/scripts/steps.py new file mode 100644 index 0000000000..adc494de21 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/steps.py @@ -0,0 +1,70 @@ +"""Sum of steps from Census to the model, by state, on the dense file and the sparse file: means and shares of cross-state variance.""" + +import json +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +c = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +sr = pd.read_csv(f"{SP}/asec/state_raw.csv", index_col=0) +out = {} +for tag, fit, lab in ( # noqa: B007 + ("dense", "dense_fit", "dense b5db384"), + ("default", "default_noise", "sparse Build P"), +): + s = pd.read_csv(f"{SP}/run/{tag}_shapley9_all.csv", index_col=0).drop(index="US") + if tag == "dense": + f = pd.read_csv(f"{SP}/run/dense_fit.csv", index_col=0) + D = f.D + model = f.model + else: + w = pd.read_csv(f"{SP}/run/waterfall.csv", index_col=0) + D = w.D + model = w.model + T = pd.DataFrame( + { + "period_and_sample": sr.avg_22_24 - c.rate, + "selection": D - sr.avg_22_24, + "calibration": s.E - D, + } + ) + for k in ( + "priceyear", + "threshold_rest", + "cash", + "snap", + "housing", + "otherkind", + "fed", + "payst", + "exp", + ): + T[k] = s[k] + T["year"] = model - s.pe24 + T["gap"] = model - c.rate + assert (T.drop(columns="gap").sum(1) - T.gap).abs().max() < 1e-6 + var = T.gap.var() + R = pd.DataFrame( + { + "mean": T.drop(columns="gap").mean(), + "var_share": [ + np.cov(T[k], T.gap)[0, 1] / var for k in T.columns if k != "gap" + ], + "sd": T.drop(columns="gap").std(), + "corr_with_gap": [ + np.corrcoef(T[k], T.gap)[0, 1] for k in T.columns if k != "gap" + ], + } + ) + print(lab, "gap mean", round(T.gap.mean(), 2), "sd", round(T.gap.std(), 2)) + print(R.round(2).to_string()) + out[tag] = T + T.to_csv(f"{SP}/run/{tag}_steps.csv") +pd.set_option("display.width", 230) +top = ["DC", "DE", "TN", "MD", "FL", "LA", "MT"] +print(out["dense"].loc[top].round(1).T.to_string()) +print(out["default"].loc[top].round(1).T.to_string()) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/thr.py b/docs/evidence/us-state-child-spm-2026-11/scripts/thr.py new file mode 100644 index 0000000000..409a5dccb8 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/thr.py @@ -0,0 +1,24 @@ +import os + +SP = os.path.dirname(os.path.abspath(__file__)) +import numpy as np +import pandas as pd + +a = pd.read_parquet(os.path.join(SP, "asec/raw_asec_2022_2025.parquet")) +a["ref"] = a.SPM_POVTHRESHOLD / (a.SPM_GEOADJ * a.SPM_EQUIVSCALE) +u = a[a.A_AGE < 18] +yrcol = [c for c in a.columns if c == "income_year"][0] +g = u.groupby([yrcol, "SPM_TENMORTSTATUS"]).ref.median().unstack() +print(g.round(1).to_string()) +print((g / g.shift(1) - 1).round(4).to_string()) +print("mean GEOADJ by year", u.groupby(yrcol).SPM_GEOADJ.mean().round(4).to_dict()) +print("spread ref within year", u.groupby(yrcol).ref.nunique().to_dict()) +print( + u.groupby(yrcol) + .apply( + lambda d: np.average(d.SPM_POVTHRESHOLD, weights=d.MARSUPWT), + include_groups=False, + ) + .round(0) + .to_dict() +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/vardec.py b/docs/evidence/us-state-child-spm-2026-11/scripts/vardec.py new file mode 100644 index 0000000000..601a080e7e --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/vardec.py @@ -0,0 +1,241 @@ +"""Between-state variance, noise-only null, and independent source-year and channel splits.""" + +import json +import os +import sys + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +TAG = sys.argv[1] if len(sys.argv) > 1 else "default" +n = pd.read_csv(f"{SP}/run/{TAG}_noise_raw.csv", index_col=0) +c = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +d = n.join(c) +d["cse"] = d.moe / 1.645 +d["gap"] = d.model - d.rate +d["v"] = d.se**2 + d.cse**2 + + +def dl(y, v): + w = 1 / v + mu = (w * y).sum() / w.sum() + Q = (w * (y - mu) ** 2).sum() + k = len(y) + tau2 = max(0.0, (Q - (k - 1)) / (w.sum() - (w**2).sum() / w.sum())) + ws = 1 / (v + tau2) + mus = (ws * y).sum() / ws.sum() + return dict( + mu_fixed=mu, + Q=Q, + df=k - 1, + tau2=tau2, + tau=np.sqrt(tau2), + mu_re=mus, + se_mu=np.sqrt(1 / ws.sum()), + I2=max(0, (Q - (k - 1)) / Q), + ) + + +print( + "gap sd", + d.gap.std(), + "mean", + d.gap.mean(), + "MAD", + d.gap.abs().mean(), + "corr", + np.corrcoef(d.model, d.rate)[0, 1], + "beyond moe", + (d.gap.abs() > d.moe).sum(), +) +print( + "mean se_model", + d.se.mean(), + "rms se_model", + np.sqrt((d.se**2).mean()), + "rms se census", + np.sqrt((d.cse**2).mean()), +) +r = dl(d.gap, d.v) +print("DL model-census", {k: round(v, 3) for k, v in r.items()}) +d["se_E"] = d.E_se +g2 = d.E - d.rate +print("DL E-census", {k: round(v, 3) for k, v in dl(g2, d.E_se**2 + d.cse**2).items()}) +# Empirical-Bayes posterior of the systematic state gap. +tau2, mu = r["tau2"], r["mu_re"] +B = tau2 / (tau2 + d.v) +d["eb"] = mu + B * (d.gap - mu) +d["eb_sd"] = np.sqrt(B * d.v) +# Noise-only null: true state rates from shrunk Census, one common shift, no state-specific error. +rng = np.random.default_rng(20261101) +cy = d.rate +cv = d.cse**2 +cdl = dl(cy, cv) +ct = cdl["tau2"] +Bc = ct / (ct + cv) +truth = cdl["mu_re"] + Bc * (cy - cdl["mu_re"]) +post_sd = np.sqrt(Bc * cv) +S = 20000 +for label, shift, tau_extra in [ + ("no shift, noise only", 0, 0), + ("common shift, noise only", d.gap.mean(), 0), + ("common shift + DL tau", d.gap.mean(), np.sqrt(tau2)), +]: + T = truth.values + post_sd.values * rng.standard_normal((S, 51)) + C = T + d.cse.values * rng.standard_normal((S, 51)) + M = ( + T + + shift + + tau_extra * rng.standard_normal((S, 51)) + + d.se.values * rng.standard_normal((S, 51)) + ) + gap = M - C + mad = np.abs(gap).mean(1) + mean = gap.mean(1) + sd = gap.std(1, ddof=1) + beyond = (np.abs(gap) > 1.645 * d.cse.values).sum(1) + cor = np.array([np.corrcoef(M[i], C[i])[0, 1] for i in range(4000)]) + q = lambda a: np.round(np.percentile(a, [5, 50, 95]), 2) + print( + label, + "MAD", + q(mad), + "mean", + q(mean), + "sd", + q(sd), + "beyond", + q(beyond), + "corr", + q(cor), + ) +print( + d.loc[ + [ + "DC", + "DE", + "TN", + "MD", + "FL", + "RI", + "VT", + "MO", + "LA", + "MT", + "MS", + "HI", + "AR", + "CA", + "TX", + "NY", + ], + ["model", "rate", "gap", "se", "cse", "eb", "eb_sd"], + ] + .round(1) + .to_string() +) +d.to_csv(f"{SP}/run/{TAG}_noise.csv") +# Independent subsamples +u = pd.read_parquet(f"{SP}/run/{TAG}_units.parquet") +u = u[u.kids > 0].copy() +u["W"] = u.w1 * u.kids +u["poor"] = u["spm_unit_is_in_spm_poverty__2025"].astype(float) +u["p24"] = u["spm_unit_is_in_spm_poverty__2024"].astype(float) +u["clu"] = u.source_year.astype(str) + ":" + u.source_household_id.astype(str) + + +def rate(x, col="poor"): + return 100 * (x.W * x[col]).groupby(x.state).sum() / x.W.groupby(x.state).sum() + + +def se(x, col="poor"): + out = {} + for st, g in x.groupby("state"): + r = (g.W * g[col]).sum() / g.W.sum() + z = g.W * (g[col] - r) / g.W.sum() + c_ = z.groupby(g.clu).sum().values + k = len(c_) + out[st] = 100 * np.sqrt(k / (k - 1) * (c_**2).sum()) if k > 1 else np.nan + return pd.Series(out) + + +cen = d.rate +by = {} +for y, x in u.groupby("source_year"): + by[y] = rate(x) + by[f"se{y}"] = se(x) + by[f"W{y}"] = x.W.groupby(x.state).sum() / u.W.groupby(u.state).sum() +Y = pd.DataFrame(by) +print( + "weight share by source year mean", + Y[[f"W{y}" for y in (2022, 2023, 2024)]].mean().round(3).to_dict(), +) +a = Y[[2022, 2023, 2024]] +print( + "corr of state rates across independent source years\n", + a.corr().round(2).to_string(), +) +print( + "corr of state gaps across source years\n", + a.sub(cen, axis=0).corr().round(2).to_string(), +) +for y in (2022, 2023, 2024): + print( + y, + "corr with census", + round(np.corrcoef(a[y], cen)[0, 1], 2), + "mean gap", + round((a[y] - cen).mean(), 2), + "MAD", + round((a[y] - cen).abs().mean(), 2), + "median se", + round(Y[f"se{y}"].median(), 2), + ) +m = a.mean(axis=1) +print( + "simple mean of 3 yrs corr", + round(np.corrcoef(m, cen)[0, 1], 2), + "MAD", + round((m - cen).abs().mean(), 2), +) +print( + pd.concat( + [ + a.round(1), + cen.rename("census"), + Y[[f"se{y}" for y in (2022, 2023, 2024)]].round(1), + ], + axis=1, + ) + .loc[["DC", "DE", "TN", "MD", "FL", "RI", "VT", "MO", "LA", "MT", "MS", "HI", "AR"]] + .to_string() +) +ch = {} +for k, x in u.groupby("household_support_channel"): + ch[k] = rate(x) + ch[f"se_{k}"] = se(x) + ch[f"W_{k}"] = x.W.groupby(x.state).sum() / u.W.groupby(u.state).sum() +C = pd.DataFrame(ch) +print("channel corr", C[["asec", "puf_tax_detail"]].corr().round(2).to_string()) +for k in ("asec", "puf_tax_detail"): + print( + k, + "corr with census", + round(np.corrcoef(C[k], cen)[0, 1], 2), + "mean gap", + round((C[k] - cen).mean(), 2), + "MAD", + round((C[k] - cen).abs().mean(), 2), + "median se", + round(C[f"se_{k}"].median(), 2), + "share", + round(C[f"W_{k}"].mean(), 3), + ) +print( + pd.concat([C.round(1), cen], axis=1) + .loc[["DC", "DE", "TN", "MD", "FL", "RI", "VT", "MO", "LA", "MT", "MS", "HI", "AR"]] + .to_string() +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/year.py b/docs/evidence/us-state-child-spm-2026-11/scripts/year.py new file mode 100644 index 0000000000..536b85a272 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/year.py @@ -0,0 +1,157 @@ +"""Exact Shapley of the PE 2024 to PE 2025 step, national and by state, on final weights. Also the threshold growth.""" + +import itertools +import math +import os +import sys + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +TAG = sys.argv[1] if len(sys.argv) > 1 else "default" +u = pd.read_parquet(f"{SP}/run/{TAG}_units.parquet") +u = u[u.kids > 0].copy() +p = lambda n, y: u[f"{n}__{y}"].values.astype(float) +W = (u.w1 * u.kids).values +st = u.state.values + + +def parts(y): + snap = p("snap", y) + ctc = p("refundable_ctc", y) + eitc = p("eitc", y) + fed = p("spm_unit_federal_tax", y) + ctc + eitc # federal before those two credits + net = p("spm_unit_net_income", y) + mkt = p("spm_unit_market_income", y) + ben = p("spm_unit_benefits", y) - snap + pay = p("spm_unit_payroll_tax", y) + p("spm_unit_self_employment_tax", y) + sl = p("spm_unit_state_tax", y) + p("spm_unit_local_tax", y) + exp = p("spm_unit_spm_expenses", y) + rest = net - (mkt + ben + snap - fed + ctc + eitc - pay - sl - exp) + return dict( + market=mkt, + benefits=ben + rest, + snap=snap, + fed_precredit=-fed, + ctc=ctc, + eitc=eitc, + paystate=-pay - sl, + exp=-exp, + threshold=p("spm_unit_spm_threshold", y), + ) + + +a, b = parts(2024), parts(2025) +assert ( + np.abs( + sum(v for k, v in a.items() if k != "threshold") + - p("spm_unit_net_income", 2024) + ).max() + < 1 +) +FACT = list(a) + + +def poor(bits): + R = sum((b[k] if s else a[k]) for k, s in zip(FACT, bits) if k != "threshold") + T = b["threshold"] if bits[FACT.index("threshold")] else a["threshold"] + return R < T + + +states = sorted(set(st)) +den = pd.Series(W).groupby(st).sum() + + +def rate(flag): + return 100 * pd.Series(flag * W).groupby(st).sum() / den + + +vals = {} +nat = {} +for bits in itertools.product([0, 1], repeat=len(FACT)): + f = poor(bits) + vals[bits] = rate(f) + nat[bits] = 100 * (f * W).sum() / W.sum() +n = len(FACT) +out = pd.DataFrame(index=states) +nout = {} +for i, fk in enumerate(FACT): + tot = 0 + nt = 0 + for bits in itertools.product([0, 1], repeat=n - 1): + s = sum(bits) + w = math.factorial(s) * math.factorial(n - s - 1) / math.factorial(n) + A = bits[:i] + (1,) + bits[i:] + B = bits[:i] + (0,) + bits[i:] + tot = tot + w * (vals[A] - vals[B]) + nt = nt + w * (nat[A] - nat[B]) + out[fk] = tot + nout[fk] = nt +print( + "national Shapley", + {k: round(v, 2) for k, v in nout.items()}, + "sum", + round(sum(nout.values()), 2), + "from", + round(nat[(0,) * n], 2), + "to", + round(nat[(1,) * n], 2), +) +print( + out.loc[["MD", "DC", "DE", "MO", "MI", "NC", "OK", "NV", "TX", "OR", "CA", "HI"]] + .round(1) + .to_string() +) +print("mean", out.mean().round(2).to_dict()) +for tn, dv in (("threshold", None),): # noqa: B007 + r = p("spm_unit_spm_threshold", 2025) / p("spm_unit_spm_threshold", 2024) + print("threshold growth", pd.Series(r).describe().round(4).to_dict()) + print( + "by tenure", + pd.Series(r).groupby(u.SPM_TENMORTSTATUS.values).median().round(4).to_dict(), + ) + print( + "ref thresh growth", + pd.Series( + p("spm_unit_reference_spm_threshold", 2025) + / p("spm_unit_reference_spm_threshold", 2024) + ) + .groupby(u.SPM_TENMORTSTATUS.values) + .median() + .round(4) + .to_dict(), + ) + print( + "geo adj change", + pd.Series( + p("spm_unit_geographic_adjustment", 2025) + / p("spm_unit_geographic_adjustment", 2024) + ) + .describe() + .round(4) + .to_dict(), + ) +g = lambda n, y: (u[f"{n}__{y}"] * W).sum() / W.sum() +for n in [ + "employment_income", + "spm_unit_market_income", + "spm_unit_benefits", + "snap", + "refundable_ctc", + "eitc", + "spm_unit_federal_tax", + "spm_unit_net_income", +]: + print( + n, round(g(n, 2024)), round(g(n, 2025)), round(g(n, 2025) / g(n, 2024) - 1, 4) + ) +lost = (u["refundable_ctc__2024"] > 0) & (u["refundable_ctc__2025"] == 0) +print( + "units with refundable CTC 2024 and none in 2025: child-weight share", + round(W[lost].sum() / W.sum(), 4), + "n", + lost.sum(), +) +if "ctc__2025" in u: + pass From 3538a6ff3be7a2dfac14f5d51ee46cacd23356af Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 1 Nov 2026 18:35:58 -0500 Subject: [PATCH 2/9] Add the state child SPM diagnosis, outputs and receipts Fills the note from the 51-state runs: noise and systematic error, the step decomposition, the rent assignment bug, ACS-local results, the dashboard's exposure and the ordered fixes. Scripts, state-level outputs and receipts sit beside it. Poverty stays a holdout throughout. Co-Authored-By: Claude Opus 5.5 --- .../us-state-child-spm-2026-11/README.md | 85 ++-- .../outputs/ablate_eval.csv | 50 +++ .../outputs/acs_eval.csv | 52 +++ .../outputs/acs_solves.csv | 12 + .../outputs/acs_stored.csv | 52 +++ .../outputs/asec_state_raw.csv | 52 +++ .../outputs/census_child_spm.json | 260 +++++++++++ .../outputs/census_flags_by_file.csv | 54 +++ .../outputs/cf_state.csv | 52 +++ .../outputs/chi_eval.csv | 8 + .../outputs/dash_swing.csv | 52 +++ .../outputs/default_noise.csv | 52 +++ .../outputs/default_noise_raw.csv | 52 +++ .../outputs/default_paired.csv | 53 +++ .../outputs/default_rentfix_states.csv | 52 +++ .../outputs/default_shapley.csv | 52 +++ .../outputs/default_shapley9_all.csv | 53 +++ .../outputs/default_shapley9_asec.csv | 53 +++ .../outputs/default_steps.csv | 52 +++ .../outputs/dense_fit.csv | 52 +++ .../outputs/dense_rentfix_states.csv | 52 +++ .../outputs/dense_shapley.csv | 52 +++ .../outputs/dense_shapley9_all.csv | 53 +++ .../outputs/dense_shapley9_asec.csv | 53 +++ .../outputs/dense_shapley9_puf_tax_detail.csv | 53 +++ .../outputs/dense_steps.csv | 52 +++ .../outputs/state_baseline.json | 417 ++++++++++++++++++ .../outputs/waterfall.csv | 52 +++ .../us-state-child-spm-2026-11/receipts.json | 352 +++++++++++++++ .../scripts/acs_eval.py | 16 +- .../scripts/acs_rent.sh | 6 - .../scripts/acs_rent_cut.py | 66 --- .../scripts/acs_rent_run.py | 166 +++++++ .../scripts/dash_swing.py | 59 +++ .../scripts/kish.py | 41 ++ 35 files changed, 2592 insertions(+), 98 deletions(-) create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/ablate_eval.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/acs_stored.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/asec_state_raw.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/census_child_spm.json create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/census_flags_by_file.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/cf_state.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/chi_eval.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/dash_swing.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/default_noise.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/default_noise_raw.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/default_paired.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/default_rentfix_states.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/default_shapley.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/default_shapley9_all.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/default_shapley9_asec.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/default_steps.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/dense_fit.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/dense_rentfix_states.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley9_all.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley9_asec.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley9_puf_tax_detail.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/dense_steps.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/state_baseline.json create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/waterfall.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/receipts.json delete mode 100755 docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent.sh delete mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_cut.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_run.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/dash_swing.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/kish.py diff --git a/docs/evidence/us-state-child-spm-2026-11/README.md b/docs/evidence/us-state-child-spm-2026-11/README.md index 49c45d581f..92030c28d9 100644 --- a/docs/evidence/us-state-child-spm-2026-11/README.md +++ b/docs/evidence/us-state-child-spm-2026-11/README.md @@ -6,11 +6,11 @@ Model figures come from real PolicyEngine US simulations at 2.90.2 (`469ad12cb95 ## What we found -1. **Noise drives most of the state-to-state scatter on the default file.** A state rate carries a replicate standard error of about 3.6 points, so a 90% interval runs about ±6 points. Child-weighted effective samples run from 26 units in Maine to 310 in California. Noise accounts for about 60% of the cross-state variance in the gaps. +1. **Noise drives most of the state-to-state scatter on the default file.** A state rate carries a replicate standard error of about 3.6 points, so a 90% interval runs about ±6 points. Child-weighted effective samples run from 26 in Maine to 301 in California. Noise accounts for about 60% of the cross-state variance in the gaps. 2. **A common upward shift of about 3 points sits underneath it.** On the dense file, which halves the noise, the mean gap stays at +3.6. -3. **State-specific error with a standard deviation of about 3 points survives more data.** Delaware, Florida, Maryland, Massachusetts, Louisiana, Mississippi and Hawaii keep their gaps on the dense file. Tennessee, Rhode Island, Vermont, Missouri, DC and Montana lose most or all of theirs. -4. **The rent imputation puts rent on the wrong households.** About 91% of base households carry another household's rent, in every Populace US file we checked, including the local-area file. PolicyEngine/microcosm#1444 fixes it. {{RENT_SUMMARY}} -5. **The default file is not the state path.** `policyengine.py` routes state regions to the ACS-local file. {{ACS_SUMMARY}} +3. **State-specific error with a standard deviation of about 3 points survives more data.** Delaware, Florida, Maryland, Massachusetts, Louisiana, Mississippi and Hawaii keep at least two-thirds of their gaps on the dense file. Tennessee, Rhode Island, Vermont, Missouri, DC and Montana lose at least half of theirs. +4. **The rent imputation puts rent on the wrong households.** About 91% of base households carry another household's rent, in every Populace US file we checked, including the local-area file. PolicyEngine/microcosm#1444 fixes it. With published weights held fixed, the fix nearly doubles modelled housing subsidies on the dense file, from $7.3bn to $13.9bn, and lowers the 2025 child rate 0.7 points, from 18.19 to 17.49. It lifts SNAP by less than 1%, so it does not explain the benefit shortfall below. +5. **The default file is not the state path.** `policyengine.py` routes state regions to the ACS-local file. On that file the mean gap falls to +0.88 and the mean absolute gap to 3.18, yet 29 jurisdictions still fall outside Census's margin, because 23,407 donor households hold 68% of child weight. ACS rows alone reach a mean absolute gap of 2.46 and a correlation of .69 with a median standard error of 1.06, which points to the largest available fix. ## What the comparison measures @@ -19,13 +19,13 @@ Table 18 averages income years 2023 to 2025 and carries a margin of 1.0 to 3.7 p | Measure | Default (Build P) | Dense (`b5db384`) | ACS-local (Build O 10/17) | | --- | --- | --- | --- | | Household records | 57,240 | 352,932 | 1,586,908 | -| Mean gap | +3.24 | +3.62 | {{ACS_MEAN}} | -| Standard deviation of gaps | 5.11 | 4.02 | {{ACS_SD}} | -| Mean absolute gap | 4.80 | 4.33 | {{ACS_MAD}} | -| Correlation with Census | .52 | .65 | {{ACS_CORR}} | -| Outside Census's margin, of 51 | 38 | 38 | {{ACS_BEYOND}} | -| Median state standard error | 3.57 | 1.86 | {{ACS_SE}} | -| Median child Kish sample, source households | 59 | 305 | 100 | +| Mean gap | +3.24 | +3.62 | +0.88 | +| Standard deviation of gaps | 5.11 | 4.02 | 4.12 | +| Mean absolute gap | 4.80 | 4.33 | 3.18 | +| Correlation with Census | .52 | .65 | .54 | +| Outside Census's margin, of 51 | 38 | 38 | 29 | +| Median state standard error | 3.57 | 1.86 | 2.86 | +| Median child-weighted Kish sample | 59 | 425 | 100 | | State-specific standard deviation τ | 3.25 | 3.07 | not fitted | The default file's standard error comes from 80 replicate calibrations: a Poisson bootstrap of source households, then a full re-solve. The linearized standard error, 4.04, runs a little higher. The dense and ACS-local standard errors linearize the ratio and cluster on source household. Census's own root-mean-square standard error is 1.35. @@ -59,13 +59,13 @@ Three readings follow from the state table: | State | Census | Default gap (SE) | Dense gap (SE) | ACS-local gap (SE) | Reading | | --- | --- | --- | --- | --- | --- | -| DC | 20.3 | +14.1 (6.1) | +5.8 (3.4) | {{DC}} | Mostly noise | -| DE | 8.7 | +13.7 (4.4) | +13.0 (3.2) | {{DE}} | Persists; donors hold 25.4, ACS rows 15.0 | -| TN | 10.0 | +13.2 (3.9) | +5.3 (1.8) | {{TN}} | Half noise, half systematic | -| MD | 10.7 | +12.5 (4.7) | +8.5 (2.8) | {{MD}} | Persists at a lower level | -| FL | 18.4 | +9.8 (2.8) | +11.6 (1.7) | {{FL}} | Persists on the donors; ACS rows sit at 13.3 | -| LA | 20.7 | -8.6 (3.3) | -7.0 (1.7) | {{LA}} | Persists; cash and SNAP run high | -| MT | 9.3 | -6.8 (3.4) | +1.0 (1.5) | {{MT}} | Noise on the default file | +| DC | 20.3 | +14.1 (6.1) | +5.8 (3.4) | +0.9 (4.5) | Mostly noise | +| DE | 8.7 | +13.7 (4.4) | +13.0 (3.2) | +13.5 (5.6) | Persists; donors hold 25.4, ACS rows 15.0 | +| TN | 10.0 | +13.2 (3.9) | +5.3 (1.8) | +6.6 (3.0) | Half noise, half systematic | +| MD | 10.7 | +12.5 (4.7) | +8.5 (2.8) | +6.9 (4.3) | Persists at a lower level | +| FL | 18.4 | +9.8 (2.8) | +11.6 (1.7) | +4.3 (3.2) | Persists on the donors; ACS rows sit at 13.3 | +| LA | 20.7 | -8.6 (3.3) | -7.0 (1.7) | -9.0 (2.2) | Persists; cash and SNAP run high | +| MT | 9.3 | -6.8 (3.4) | +1.0 (1.5) | -4.5 (1.3) | Noise on the default file | ## The common shift @@ -82,7 +82,7 @@ Three readings follow from the state table: Benefit administrative targets pull poverty up, tax targets pull it down, and no target anchors a state, child and income cell. On the dense file, income targets start within 10% (AGI -4.2%) while benefit receipt starts far below target (SNAP -37.8%, Medicaid -26.2%, EITC -50.8%, ACA -43.9%). Those misses line up with the +3.3 point rise, though we ran the ablations on the default file only. A chi-square anchor to design weights lowers noise and leaves the shift alone: at λ = .03 the median standard error falls to 2.78, and the mean gap rises to 4.77. -**Pooled records keep nominal income from their source year.** PolicyEngine holds every record to a 2024 threshold, while a 2022 record's market income keeps its nominal 2022 value. That accounts for 2.3 to 2.9 points of the thresholds step. Aging 2022 and 2023 ASEC records by Census's growth in 20th-percentile child resources (a real national simulation on the default file) lowers the national 2025 rate from 17.17 to 16.29, the mean gap from 3.24 to 2.45, and the mean absolute gap from 4.80 to 4.05, with 33 states outside the margin rather than 38. `outputs/cf_state.csv` holds each state. +**Pooled records keep nominal income from their source year.** PolicyEngine holds every record to a 2024 threshold, while a 2022 record's market income keeps its nominal 2022 value. That accounts for 2.3 to 2.5 points of the thresholds step. Aging 2022 and 2023 ASEC records by Census's growth in 20th-percentile child resources (a real national simulation on the default file) lowers the national 2025 rate from 17.17 to 16.29, the mean gap from 3.24 to 2.45, and the mean absolute gap from 4.80 to 4.05, with 33 states outside the margin rather than 38. `outputs/cf_state.csv` holds each state. **The model overshoots from 2024 to 2025.** PolicyEngine rises 1.48 points while Census holds at 13.4. Reference thresholds match Census exactly for 2025, so the difference sits in resources. Census's child resources grew 4.2% to 6.1% across the 10th to 50th percentiles, and PolicyEngine's employment income grew 3.97%. The adult SSN requirement in `gov.irs.credits.ctc.adult_ssn_requirement_applies` starts in 2025 and removes refundable CTC from units holding 2.48% of child weight; 83% of that weight has no adult with an eligible SSN card. It explains only 11% of the movement into poverty. @@ -101,7 +101,21 @@ Benefit administrative targets pull poverty up, tax targets pull it down, and no The second row is the test: it restores the link exactly, so the draws are right and only their destination is wrong. The default, dense and ACS-local files all carry the same draws. ACS rows inherit the problem through the gap fill: 39.6% of ACS renters carry rent, and so do 30% of ACS owners, even though the file stores native `RNTP` for every renter. The build's `positive_rent_nonrenter` receipt recorded 30,838 such heads, and `test_signal_gate_preserves_archived_qrf_rent_outside_renter_household` allowed them. -The harm reaches poverty through `hud_gross_rent`. `hud_hap` takes the lesser of the maximum subsidy and gross rent less tenant payment, so a Census recipient with no rent gets nothing. On the default file, 74% of Census housing recipients among child units on ASEC rows get no model subsidy. {{RENT_TABLE}} +The harm reaches poverty through `hud_gross_rent`. `hud_hap` takes the lesser of the maximum subsidy and gross rent less tenant payment, so a Census recipient with no rent gets nothing. On the default file, 74% of Census housing recipients among child units on ASEC rows get no model subsidy. Moving rent back onto the right households, with published weights held fixed, gives: + +| All 51 states | Dense, as published | Dense, corrected | Default, as published | Default, corrected | +| --- | --- | --- | --- | --- | +| Modelled housing subsidy, 2024 | $7.26bn | $13.88bn | $4.50bn | $7.51bn | +| SPM units with a subsidy | 1.23M | 2.57M | 0.68M | 1.34M | +| SNAP, 2024 | $89.43bn | $90.14bn | $99.63bn | $100.46bn | +| SNAP at initial weights, 2024 | $57.58bn | $58.86bn | $68.00bn | $70.45bn | +| Child SPM rate, 2024 | 16.62 | 15.88 | 15.69 | 15.20 | +| Child SPM rate, 2025 | 18.19 | 17.49 | 17.17 | 16.81 | +| Mean gap | +3.62 | +3.06 | +3.24 | +3.03 | +| Mean absolute gap | 4.33 | 4.13 | 4.80 | 4.71 | +| Outside Census's margin, of 51 | 38 | 36 | 38 | 34 | + +The state step runs from -2.93 to +0.40 on the dense file. The fix explains a real part of the housing shortfall and about a sixth of the dense file's mean gap. It does not explain the SNAP miss at initial weights. A second cause sits on the PUF half. `impute_us_housing_assistance_to_puf_support` thresholds a person-level QRF at 0.5, which leaves 2.05% of PUF-half units as recipients against 3.73% on the ASEC half (2.82% against 7.75% on low-income child units), and only 9.6% of ASEC recipients keep the flag on their PUF clone. @@ -109,20 +123,40 @@ A second cause sits on the PUF half. `impute_us_housing_assistance_to_puf_suppor The dashboard reads ACS-local slices, not the default file. Master serves Build P's August 19 slices under policyengine-us 1.825.2. PolicyEngine/child-poverty-impact-dashboard#127, still a draft, moves it to Build O 10/17 through `policyengine.py` 6.11.1. -{{DASHBOARD}} +At 2.90.2, the 10/17 file gives a mean gap of +0.88, a mean absolute gap of 3.18, and 29 of 51 jurisdictions outside Census's margin. Its median state standard error of 2.86 means a 90% interval of about ±4.7 points on a state baseline. Census's own error would give a mean absolute gap of about 1.05, so about two points of the 3.18 come from the model. + +State reform effects hold up better, because a reform changes the same households in both runs. The 2021 CTC reform lowers the median state's 2025 child rate 2.97 points, with a median standard error of 1.28, or about ±2.1 at 90%. The largest effects carry the largest errors: West Virginia at -11.85 (4.58), Missouri at -8.96 (3.72) and DC at -8.65 (3.52). -Its stored audits give a sense of the instability. The 2021 CTC reform's 2024 state effect swings between builds: Arizona from -10.3 to -3.8 points, DC from -1.3 to -8.1, North Carolina from -2.9 to -6.3. +The dashboard's stored audits give a second measure of the same size. Between Build P and Build O, a state's 2025 effect moves 1.16 points on average with a standard deviation of 1.63, which implies 1.15 per build. Single states swing further at 2024: Arizona from -10.3 to -3.8, DC from -1.3 to -8.1, North Carolina from -2.9 to -6.3. Those builds also differ in model version, so this measure runs high if anything. So state baselines and state reform effects on the dashboard both need a stated uncertainty, and neither should read as a point estimate to the tenth. The legacy `backend/` and `cpid_calc/` paths read `enhanced_cps_2024`, and PR #127 says the frontend no longer calls them. ## What would fix it -{{FIXES}} +In order of evidence and reach: + +1. **Put rent back and rebuild.** PolicyEngine/microcosm#1444 fixes the assignment. After a rebuild, tighten `us_housing_inputs_signal_gate` so positive rent outside renter households fails the build, and re-run this note. Calibration then fits to corrected housing, which the fixed-weight runs here cannot show. +2. **Give ACS records more of the state mass.** `--acs-share` raises the weight on real state samples. On all 51 states, against the release-like solve: + + | Solve | Mean absolute gap | Correlation | Median state SE | Median reform SE | + | --- | --- | --- | --- | --- | + | Share 0.5, as released | 2.79 | .56 | 2.62 | 1.29 | + | Share 0.7, λ = .03 | 2.40 | .64 | 1.82 | 0.88 | + | Share 0.9, λ = .03 | 2.16 | .75 | 1.06 | 0.56 | + | Share 0.964, λ = .03 | 2.14 | .77 | 0.87 | 0.47 | + + The #1078 sweep puts the cost at about 40% more held-out target error at share 0.9, mostly on SOI cells, so the share needs a methodology decision. It more than halves the error on a state's reform effect. +3. **Age pooled incomes** (microcosm#944). A crude single-factor run removes 0.88 points nationally and 0.75 from the mean absolute gap. A real fix ages each income source and draws the pool from 2023 to 2025 to match Table 18. +4. **Close benefit receipt before calibration.** SNAP, Medicaid, EITC and ACA start 26% to 51% below target on the dense file, and calibration closes those gaps by moving weight. Better take-up and receipt inputs should reduce the tilt. Rent does not close the SNAP gap. +5. **Keep measured housing receipt on the PUF half.** Replace the 0.5 threshold in `impute_us_housing_assistance_to_puf_support`, or carry the ASEC flag to its clone. +6. **Reconcile 2025 resources near the line.** The model's child rate rises 1.48 points while Census's holds. Census's child resources grew 4.2% to 6.1% and PolicyEngine's employment income grew 3.97%, so start with the uprating series for low earners. +7. **Count partnership and S-corp income** (PolicyEngine/policyengine-us#9919; PolicyEngine/policyengine-us#10573 partly addresses it). +8. **Report state child rates as a standing holdout** with replicate standard errors, in every release's receipts. Poverty stays a comparison and never a target. ## Limits - Corrected-rent runs keep the published weights. Calibration fit those weights to outcomes that used misplaced rent, so a rebuild can move results further. -- The #1078 solves come from the 2026-09-23 Build O checkpoint. We applied them to outcomes from the 10/17 file, which shares its household ids. +- The #1078 solves come from the 2026-09-23 Build O checkpoint. We applied them to outcomes from the 10/17 file, which shares its household ids, and that mismatch alone moves the mean absolute gap: 2.79 for the release-like solve against 3.18 for the 10/17 weights. - The aged run scales 42 income columns on 2022 and 2023 ASEC records by a single child-resource factor. PUF records stay as they are, and a real fix would age each income source separately. - ACS-local cuts add `spm_unit_spm_universe_status` as `INCLUDED` everywhere, because the release predates that input. The dashboard's audit found masking moves child rates by a negligible amount. - The ablations ran on Build P, not the dense file. @@ -138,4 +172,5 @@ Scripts sit in `scripts/` and write beside themselves under `run/` and `asec/`. 4. `ablate_eval.py`, `ablate_noise.py`, `fam.py`, `chi_solve.py`, `chi_eval.py`, `dmiss.py`: calibration. 5. `national_cf.py`, `cf_eval.py`, `ctc_ssn.py`, `part.py`: aged incomes, the CTC reform and partnership income. 6. `rent2.py` to `rent5.py`, `rentfix.py`, `dense_rent.py`, `sparse_rent.py`, `runcuts.py`, `rent_eval.py`, `house.py`, `house_sim.py`, `puf_house.py`: rent and housing. -7. `acs_hh.py`, `acs_more.sh`, `acs_one.py`, `acs_eval.py`, `acs_rent_cut.py`, `acs_rent.sh`, `acs_stored.py`: the ACS-local path. +7. `acs_hh.py`, `acs_more.sh`, `acs_one.py`, `acs_eval.py`, `acs_rent_run.py`, `acs_stored.py`, `kish.py`: the ACS-local path. +8. `dash_swing.py`: the dashboard's stored audits. diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/ablate_eval.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/ablate_eval.csv new file mode 100644 index 0000000000..9465fc2ac7 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/ablate_eval.csv @@ -0,0 +1,50 @@ +run,natE,natP24,natP25,kids_m,E_pool_mean,E_pool_mad,E_pool_corr,P25_cen_mean,P25_cen_mad,P25_cen_corr +initial,15.0620764477773,15.347836112351281,16.69840528239648,81.55663372127822,2.294313416861093,2.7172208336028407,0.8345687193812189,3.2677686242522026,4.20659998326037,0.6516693967552849 +published,16.502406199878294,15.688595607597467,17.16724469444985,76.68300544760096,3.873603049179267,4.471104228488742,0.6260801264720072,3.236802990802789,4.798497276265718,0.5168815743952836 +R0_full,15.924216152755955,14.704814455699976,16.23279522764708,76.52056952228126,3.0633161234820205,4.109825370479613,0.6425277893022162,2.9267900056344387,4.745426037283913,0.4198348796841481 +drop_aca,15.819391353347935,14.673740041115744,16.085415612047147,76.44401323573673,3.0714952779893503,4.173441445786006,0.6372062028419944,2.9220536239005463,4.765382612452128,0.416337014601458 +drop_all_eitc,15.640155597742124,15.198094676994769,16.653757790242516,76.60667883453945,2.9184664920775187,3.9440949812401334,0.7109395005884531,3.011242446865335,4.7041142573880705,0.5203007598967829 +drop_all_eitc_ctc_actc,16.807711099208102,16.27957445288309,17.696602373929633,75.8444029938321,4.080601067942891,4.882210715454786,0.6564746338328344,4.002986884523601,5.307312538279662,0.5634384235225074 +drop_count_eitc_ctc_actc,17.177829131537628,17.155067594363693,18.61534050715503,75.51925051121415,4.49551381814701,5.083799002588413,0.7051922349704665,4.517674715387939,5.733831583166095,0.5813699422569714 +drop_ctc_actc,17.170016072538555,16.242738522044416,17.907245178988113,75.85885132219627,4.382254465725262,5.082199829303582,0.6569744263900658,3.9907866009101074,5.425148558499853,0.463203684084818 +drop_ctc_actc_tax,18.529463913939285,18.705390907285494,20.570601045111935,75.29251403965378,5.7598948663653795,6.302480445805714,0.6142497020019401,6.552014880086792,7.523692688382396,0.3893914243839443 +drop_ctc_actc_tax_count,19.03953354209649,18.052827033879755,19.894330225880093,74.6057490358358,6.220892383741369,6.571052869438273,0.6368507516576651,5.910407139607957,6.71452477395443,0.42247030045123235 +drop_medicaid_chip,14.818036603669615,13.551341341064159,15.122046912442737,76.42841935939808,2.427989314820742,3.7532443315511657,0.6333224001106237,1.7203229030140548,4.258358783502336,0.48474589159172465 +drop_other_bea,16.188146298313413,14.885979833356634,16.47918135490516,76.63368180035285,3.2192765271898462,4.333819740845506,0.6349581772681222,2.8042172229569124,4.691243680345419,0.439921491171793 +drop_other_cbo,15.921148405554028,14.623925723097013,16.14222955630875,76.52146761837056,3.0438908815997805,4.124890493862227,0.6512731026404498,2.7382590142606134,4.565639260357853,0.44332973096387873 +drop_other_federal_reserve,16.09688181418814,14.90268128012894,16.380208442962413,76.34676628581386,3.2745124199878735,4.417142381127857,0.6416483400218373,3.0386587942791174,4.967938225170937,0.41727594334950624 +drop_other_hhs_acf_tanf,15.499988254026238,14.594439176651974,16.15968731609002,76.42953327316228,2.950886805947737,4.214893981740142,0.6447973257290592,2.877830930873818,4.572964026827521,0.4617746266731397 +drop_other_ssa,15.71126345925938,15.222783663476708,16.65333001622099,76.55100045818601,3.0212928909833447,3.946281101463029,0.6594245762883867,3.200995082941771,4.742612508615553,0.49169980691961074 +drop_other_state_income_tax,15.893660823796443,14.680154985429892,16.187284770656365,76.3614417783142,2.9974010742098955,4.0889326397603964,0.645884535157083,2.6882748176579896,4.5355469078906925,0.4678734217364748 +drop_pep_national,15.86007421276696,14.680261927861709,16.22336865168751,76.41270327297524,3.0392371625504975,4.150762393982498,0.6469762182137764,2.8308599732609254,4.707112076466498,0.426603480565126 +drop_pep_state,15.642770302476197,14.33868073829011,15.975257179454793,78.44203836858914,2.93017623516216,4.039109583489123,0.6531074932498372,2.587890085229834,4.7569928817182054,0.4316601670684967 +drop_snap,14.284282328942155,14.270290568527688,15.560413728830587,76.51622406752014,1.8197228323606962,3.8754884924983517,0.5929728538095529,1.5147524389015008,4.275596842891081,0.42947906659310975 +drop_soi_actc,16.004589225539423,15.035982553121494,16.627451021057198,76.63714544034485,3.2970105191876025,4.199284702498356,0.6251246563095062,3.0157512069679555,4.857511139341075,0.41883371904955163 +drop_soi_ctc,17.23715973458685,16.139961710380025,17.786977672610764,75.73705060760066,4.212626734126116,5.053877353182301,0.6313427857643636,3.894913963865974,5.642091808254783,0.4765545533796267 +drop_soi_eitc_other,15.69904589734109,14.773627420249326,16.276363664004172,76.46486458759222,2.9503807549082057,4.039142613369825,0.642423726415993,2.9487784575176965,4.739276351700349,0.4380712896549166 +drop_soi_eitc_state,16.109612739318717,15.005833946559324,16.48094700475888,76.75949759996668,3.1592938923267537,4.1013018113270645,0.6503739778489152,2.9128814552168145,4.943259386742928,0.4669513169561062 +drop_soi_eitc_t25_by_agi_children,15.867480510506402,14.612310320334224,16.083778404824017,76.50244072169298,3.2298911510838986,4.113968646490979,0.6430425490105994,2.793967155955605,4.645056719356822,0.4119848798597359 +drop_soi_eitc_t25_child_totals,15.930475714264789,14.569049086016472,16.111231754058334,76.53564355937986,3.0476929209602743,4.115494022306632,0.647548914791618,2.828246258997465,4.594815916635461,0.43803339938249347 +drop_soi_other,15.211282473002896,14.866952603193036,16.21412649234447,76.79276086556541,2.0877257174631314,2.5593752038499398,0.8332293652846579,2.78486251567881,3.957965562801621,0.5892755603548562 +drop_soi_return_count,15.00683145682903,13.44668814671616,14.83685581975737,76.30024441618669,2.3057997774636365,3.8584955621517723,0.6252345695053271,1.3009820467069653,4.102252400694822,0.4632716974272967 +drop_ssi,16.031294654824528,14.928777132328895,16.47453508837923,76.49200459262731,3.262615490695995,4.295763163514418,0.63692668522365,2.6952109294690354,4.647031131432378,0.44036756840507835 +keep_pep,15.0134605731427,15.154037793131236,16.43003933728045,74.7496636712652,1.6579069707966614,2.411528334988822,0.8077165576187653,2.429144875008616,3.8451131210061806,0.602967968047262 +keep_pep_actc_only,15.228731686822924,15.404585649600376,16.752878453799408,74.7315159836609,1.6635870526915837,2.391729229316454,0.8317214733747696,2.430723254554038,3.8270008751950617,0.6424487483013556 +keep_pep_all_soi,13.690419510391843,13.198058258009734,14.41033928870889,76.37016508792573,1.1966023975597802,3.5014378813551166,0.592942236630598,0.7112748225507065,3.162939580606731,0.5334607466751029 +keep_pep_count,14.515213971325505,15.013800962474226,16.289462462444778,75.05568592311994,1.193102775352841,2.298111789736409,0.7893232911858047,2.240630690404167,3.713732467440932,0.6048803899414609 +keep_pep_ctc_actc,11.905086596952493,11.525764574321279,12.75182788209374,75.8440843051013,-1.0451774138054,1.8836105305161248,0.8309653961730378,-0.8307829700021379,2.6596087091378173,0.6343252289934157 +keep_pep_ctc_actc_count,12.575739935654726,12.70141067060658,14.012349886856912,76.10815725306925,-0.36459802484301074,1.7858784441285445,0.8416500341498842,0.3118807034963335,2.5909158026810246,0.676651914114917 +keep_pep_ctc_only,11.884379965290641,11.543098530169875,12.571272102511449,75.09360819604093,-0.9452911898606429,1.812386453412346,0.8427442135068935,-0.8199103975508037,2.5999751358997,0.6454207524274004 +keep_pep_eitc,17.152152972969297,17.03439871034984,18.549827698376433,74.73671465552262,3.4742679893472763,3.8020307452664674,0.7814562466324008,3.950951784498883,4.782677332458221,0.5986892015235319 +keep_pep_medicaid,18.648738965229363,18.875526326089354,20.647601738222004,74.82051381666378,4.838032304826807,5.093836534484346,0.7271288351668718,5.948600451653428,6.824546787034102,0.5222223757254406 +keep_pep_snap_ssi_aca,19.06134826825314,19.26109939525907,20.971373600706904,74.9402109722991,5.673305937443629,5.6966136493988255,0.8188546694247184,6.846498727583604,7.203689461609362,0.6403021540401134 +keep_pep_soi_adjusted_gross_income,15.448292427331692,15.143629605652437,16.540073922727142,75.08273287370386,2.3681812308680166,2.9625864450111954,0.7913090103220951,2.8982575139009765,4.197457868273756,0.5812038692148748 +keep_pep_soi_employment_income,15.598096975298862,15.528540004745144,16.87841534777281,74.753434137952,2.5003666437878955,3.0810530475444637,0.7922872367991433,3.1548148764457067,4.361146936457874,0.5995536315521629 +keep_pep_soi_income_tax,16.78183225519556,17.04162213745876,18.52635483130624,74.96386271728768,3.226338530488393,3.484902874769228,0.8363603074485367,4.190380609637151,4.955214365329211,0.6545067001046092 +keep_pep_soi_income_tax_before_credits,17.123675600869888,17.31806448551758,18.725773870115347,74.77703743693942,3.684650431052845,3.8355153333710836,0.8497958590697229,4.586866126847752,5.191949249645728,0.6686844509016306 +keep_pep_soi_other,11.689545317325567,11.261265612629936,11.924069415444977,75.73759565846335,-0.8864344897750683,4.485176046203521,0.5858665133453148,-1.4589312036321995,3.99044164337063,0.5947433017600242 +keep_pep_soi_tax_all,6.871553606992856,6.204462942650036,6.69488529605842,76.59728075542536,-4.919604910623718,5.031743760400607,0.778849926449078,-5.487015592252383,5.557878231089069,0.601968160814887 +keep_pep_soi_taxable_income,17.348751678800678,17.48837278677986,18.90046305293727,74.75879880618004,4.132129194618196,4.320056093913739,0.8316357598220409,5.052742961332301,5.5456762231608545,0.6587662248868175 +keep_pep_soi_taxable_interest_income,15.897400458045217,16.21751335886641,17.572620547896193,74.893925258176,2.6260160746547574,3.1091586653139096,0.7986826714967612,3.433506291891224,4.659369272029208,0.6011202667561169 +keep_pep_soi_taxable_pension_income,14.977418636852358,15.360692082513408,16.673869602241197,74.79136799284176,1.574686355540493,2.3978747058952803,0.8040220033652759,2.615498905251759,3.9774897429281824,0.6029590800414021 +keep_pep_soi_taxable_social_security,14.910381128778518,15.523195493189414,16.83200443366213,74.82725785925692,1.5187597544586982,2.3784300753632936,0.8014649307528147,2.7095348249087663,4.020027887160448,0.6095429957884052 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval.csv new file mode 100644 index 0000000000..59e021a220 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval.csv @@ -0,0 +1,52 @@ +state,census,moe,acs_local,se,kish_src,acs_share,acs_only,acs_only_se,donor_only,donor_only_se,delta,delta_se,stored_2301,gap +AK,10.5,2.1,12.280018990905361,3.2515087080493936,99.51358381248738,0.41906561091719086,14.877056011665996,3.8674701569110397,10.406607937726202,4.8421060477273725,-1.7128711765052902,1.255587507448183,12.269848823547363,1.7800189909053614 +AL,15.5,2.4,15.097029105403672,2.9718369630821964,133.44722639909833,0.3080806998135229,15.013489562072616,1.3201238751499236,15.134225525513061,4.2590911210429265,-3.7065665355345523,1.8864143360004062,14.110982894897461,-0.4029708945963275 +AR,13.3,2.7,6.865179131445666,1.4277517420367007,138.2913051495604,0.3446122143394325,10.614289507353144,1.4069716796086178,4.893843600463475,1.9922624640006978,-1.9729223774049145,0.847577176741741,6.774383068084717,-6.434820868554334 +AZ,13.3,2.3,17.2274257709247,3.9824119226674144,95.44001901549503,0.32823023017732,15.422829288753853,1.1361190125873954,18.10916106972576,5.904781891308697,-6.409766223213803,3.185852094349919,17.127504348754883,3.9274257709246996 +CA,17.9,1.0,19.81299229330585,1.9180899658407171,422.7751271596843,0.2837607789085938,17.18181747772617,0.44765749055376786,20.855415261955702,2.675217434299166,-4.3311474346083285,1.0100990700622332,20.379192352294922,1.9129922933058516 +CO,7.7,1.8,9.444477925729958,2.7007539129759284,84.16336691356992,0.3167165607859737,8.126498611394895,0.714650612194822,10.055389666988338,3.955798901807002,-0.7445325358294997,0.24294375820384187,9.367508888244629,1.7444779257299574 +CT,12.8,3.2,12.639491386601781,2.9545836509146484,109.13395509892804,0.35243678570098613,14.997664995927149,1.6303966945262747,11.356053555910302,4.46854567162926,-2.0892910893802488,0.6372033696864737,12.430046081542969,-0.16050861339821942 +DC,20.3,3.7,21.17762088880096,4.4701322503635375,61.08743705414466,0.4034754527762713,22.09693661968139,5.492706307713332,20.5558169203178,6.4729839790652735,-8.648974183112678,3.516566041632336,20.46465492248535,0.8776208888009585 +DE,8.7,2.6,22.214556265883786,5.602961251401652,64.69160861915779,0.30803265271757674,14.964556458685824,2.865571367630918,25.4419291781805,7.9508134389185345,-2.9691945909874917,1.6724748973047714,22.213157653808594,13.514556265883787 +FL,18.4,1.8,22.716581875939795,3.1759971844812482,188.57166282880516,0.31737704011827417,13.309764442599114,0.5823985920811567,27.090164438184587,4.641358293823405,-3.529584484380603,1.1074842163816723,22.613277435302734,4.3165818759397965 +GA,15.1,2.2,17.43337014267132,2.9220203367320376,136.74989678955393,0.3146201235481187,12.365941406152075,0.7861697616877288,19.75954736195083,4.2966217600223375,-3.4609575448229744,1.3240145036166515,17.39934539794922,2.3333701426713187 +HI,13.0,2.6,5.857583818085909,1.9924154571434063,121.88136839074532,0.37760164062764257,5.072886842676986,0.8403045589641391,6.333650087940408,3.1646961400793523,-1.5974204310103088,0.7037351939528196,5.165446758270264,-7.142416181914091 +IA,8.2,1.9,5.3913265527436955,1.7485583365884696,90.868623455542,0.3464490034124007,5.438172692878637,0.8378005928894581,5.366493297728849,2.6407115517483755,-0.7506708887596472,0.20370448393538723,5.389122486114502,-2.8086734472563037 +ID,6.5,1.3,6.8832216559761825,1.6198373655121179,110.00111474292255,0.33214753479536296,9.519825758051493,1.536874895172609,5.571941697658865,2.2714500189212745,-1.7885081332636041,0.9779700333034664,6.954473495483398,0.3832216559761825 +IL,12.4,1.6,13.732748462967361,3.188524839830753,99.64157317458911,0.2965816587151526,9.11322317159108,0.7046820523010107,15.680474862723223,4.555283003881556,-4.427158137239671,1.8697292092442803,18.092145919799805,1.332748462967361 +IN,10.6,2.2,9.223448046626508,2.1304367963241537,143.41747358369312,0.35487947569914285,9.880223739963972,0.8067320680282937,8.862157086373566,3.271524311124084,-2.170078429848301,1.1944609728937645,9.129535675048828,-1.3765519533734913 +KS,9.7,2.5,11.586384567718781,4.682058023618752,100.24803097551683,0.3334748697513686,8.619343508755703,1.157438878904149,13.070850172662428,6.938308560293711,-5.5529596017194836,4.510245888964424,10.451759338378906,1.8863845677187818 +KY,13.3,2.9,9.689846323973743,2.7045401368097894,86.7299805225745,0.3957257386758641,7.453986059465105,0.6847411421861506,11.154061352444216,4.496155378456515,-2.5243584152065885,1.2141501106276622,9.635833740234375,-3.6101536760262576 +LA,20.7,3.0,11.730880540483419,2.1602498486130592,135.98266446398628,0.3111933330719865,14.302598248238658,1.3818096828258386,10.569014020279953,3.0474358140102185,-1.6161803656670206,0.35380373025382233,11.565276145935059,-8.96911945951658 +MA,12.8,2.0,21.445487004357428,3.7873564269488145,142.59135649775865,0.32989952283900936,15.29427219951415,1.1885725905269742,24.473813200445946,5.584053451433311,-3.438875768601351,1.6580263748064328,20.928058624267578,8.645487004357427 +MD,10.7,2.5,17.594849581875806,4.2786987984134255,68.35673639862648,0.32215088761216787,11.384224840576135,1.1754050446097233,20.546477365215054,6.361925729175259,-3.413791655908443,2.1376792390671855,17.483667373657227,6.894849581875807 +ME,6.5,2.3,7.341376743429005,3.004786485774932,41.96489704646121,0.3333179546821343,4.66433020068298,1.0427753176758428,8.679807385867475,4.547443563654665,-2.6266704709698754,1.5680031208324663,7.270956039428711,0.8413767434290049 +MI,10.3,1.9,9.518321082342105,2.688194473081669,107.99600603956145,0.3203877234279062,6.846850836223199,0.5731837064265984,10.777724862798427,3.9594785796878003,-3.506682134099301,1.6387990819136933,9.475631713867188,-0.7816789176578958 +MN,6.9,1.9,5.148035849588164,1.4201569766760287,73.68080788806905,0.34048793553809076,5.546916997173596,0.7187904123890178,4.942104486411001,2.112153494310965,-0.9536367002109238,0.5389159550862128,5.14799690246582,-1.751964150411836 +MO,9.7,2.3,16.712115012858845,4.128411239978734,83.50267716273419,0.33222332397483334,10.966752143597944,0.998952501067569,19.57047113459243,6.180935610841163,-8.959376509915272,3.71805967482898,16.677257537841797,7.012115012858846 +MS,19.1,2.6,13.834987455238846,2.8630327922771452,145.0004798994927,0.34971731263512185,15.918161912032344,1.681247230773782,12.714671342054093,4.3159608466529615,-3.394959085138506,1.5588895786278296,12.927408218383789,-5.265012544761156 +MT,9.3,2.3,4.762273156353108,1.2631907201580235,77.32609423665268,0.32933782545962187,10.54391779607155,2.746637529267138,1.923117549388858,1.0592414015685152,-0.6722671920587023,0.23095341412744352,4.747105598449707,-4.537726843646893 +NC,14.4,2.2,11.995112092574214,2.436251526440106,148.92635928209822,0.3136719210648219,10.355041646555073,0.7418068425966107,12.744672052706704,3.5445117002334965,-5.352585782229246,1.8981625872267058,11.701009750366211,-2.4048879074257865 +ND,10.3,2.1,10.77332600550937,3.442629648631427,71.26795320565108,0.33186741866405767,5.077876834056866,1.4567092582961796,13.602306461578337,5.14314936813182,-1.2256245427537,0.5680947013226061,10.772493362426758,0.4733260055093691 +NE,7.1,1.9,9.449340085155248,4.204702751257847,89.81299216631996,0.3063484897355067,6.616695179849248,1.4327432632288672,10.70036668259837,5.993988593123991,-2.773364941208342,2.04436491124329,9.424169540405273,2.349340085155248 +NH,7.5,2.4,7.341353766570573,2.4133327789181878,78.1245591530323,0.3519654122706294,5.426856408706541,1.0410016798293962,8.381169950167626,3.710256303932428,-1.7440078720187737,1.1466799134944343,7.5636773109436035,-0.15864623342942696 +NJ,13.3,1.9,9.557043381747203,1.897321401265812,133.2332237876243,0.33625390236036024,11.961959528060447,0.7749380283485001,8.33871239355312,2.802524845161197,-1.8300351640183579,0.523337571902647,9.367637634277344,-3.742956618252798 +NM,10.9,2.1,14.01167154192929,3.6218680380495374,101.89929991180674,0.3715312357460946,14.845410948645391,2.5727440555716186,13.518790670697477,5.566234603240514,-3.660158217562636,1.131823165638872,14.007346153259277,3.11167154192929 +NV,15.0,2.5,13.468276340728854,2.8448332242995376,94.78167841738083,0.3410867850150841,15.56302854546373,1.4699101327703195,12.383926719766048,4.222778531117257,-1.7376207562912138,0.627204265198586,13.599339485168457,-1.5317236592711456 +NY,16.2,1.9,16.438761395241823,2.343798019106511,206.3385164184602,0.3282953526362707,14.640476182044296,0.8125413850408143,17.31767250673155,3.479738382344976,-3.1739864748408753,0.7858351554970053,16.431594848632812,0.2387613952418235 +OH,12.3,2.1,9.090849449499077,1.8148204442785203,150.5748237609115,0.3594694685405358,10.263074274729792,0.707324640545021,8.43299004352262,2.793027179390088,-3.8587554469843512,1.4557292641982924,9.078166961669922,-3.209150550500924 +OK,9.9,2.0,13.83283197089369,4.084103267465708,90.37723579179182,0.30082612879830045,7.473084378961515,0.6936697180268595,16.56917314011818,5.806288395797654,-2.8990779051992153,1.2847313395227358,13.372641563415527,3.932831970893689 +OR,11.0,2.4,14.960178635932131,3.8329077560982148,90.57209608006168,0.3868748897063032,9.96236498527892,0.9391047234304888,18.113741542437342,6.235615770472673,-2.1027433074865645,1.4104331982528935,14.899346351623535,3.960178635932131 +PA,11.1,2.0,13.904691968664487,2.821035187081575,173.62005580154482,0.346456113240414,11.128527656204925,0.9551151036763976,15.376389764171986,4.281592179548099,-2.1674883896829673,0.7008161263853433,13.813882827758789,2.8046919686644873 +RI,8.4,2.3,13.60351363660979,3.7744287273928645,58.0512003578863,0.2638155685183552,12.630687973641486,2.1865267072560863,13.952130836825097,5.084017230649946,-7.082426369729525,2.9604813725566546,10.114660263061523,5.20351363660979 +SC,11.1,2.1,10.810091607299103,2.213361527230768,126.28476681888931,0.3736839049269087,12.129888503293133,1.220142342915903,10.022650789978407,3.4424994407736964,-4.377230751356924,1.5151733806703083,9.70772647857666,-0.2899083927008963 +SD,7.8,2.2,6.7334030791646615,2.32364806600712,56.458835601021825,0.26912123840231045,6.7068360049000635,1.5212604403340164,6.743185500412182,3.1335961856246137,-3.8757962438048383,1.8512021312782982,6.721802234649658,-1.0665969208353383 +TN,10.0,1.7,16.56342989643172,2.9691597078939376,108.01722037300557,0.3282847810394231,18.32285828603685,1.3583296773440554,15.703551264338433,4.348695188218484,-5.4719950504883315,2.092924270925401,15.603744506835938,6.563429896431721 +TX,16.1,1.3,14.56129472980773,1.6461007405757648,344.2831892907306,0.3083157384243811,15.448597880836138,0.5091761389700658,14.165782584436048,2.366103530975708,-3.2431418088928776,0.9339374602177575,14.510196685791016,-1.5387052701922705 +UT,7.3,1.6,8.396840398155128,2.103323261796674,108.1806419862176,0.29356651846541537,5.3493391276149715,0.7200935582967108,9.66326443013613,2.997569027198019,-0.9210572651019494,0.39799265987206806,8.38582706451416,1.0968403981551278 +VA,12.1,2.4,15.480344613972704,3.568543765129185,144.61271966502778,0.3120242155444285,10.43654201641124,0.7417936207780743,17.76790848529483,5.136568707470384,-4.143535467007477,2.4537166573058573,15.400092124938965,3.3803446139727047 +VT,8.3,2.5,10.308498569173608,4.077020640484767,79.55381568655247,0.3813777601649377,5.468605036993444,1.7524339067205175,13.292270628890982,6.444382063588592,-0.17161126906749033,0.08026389915938878,10.242634773254395,2.0084985691736073 +WA,9.3,1.9,14.191340763191679,3.4701090743188856,115.52322401443288,0.3410985566238413,11.36195810226469,1.0626012254042743,15.656048955108263,5.234133950704177,-2.8903319465027324,1.4112503830036995,14.172506332397461,4.891340763191678 +WI,7.3,1.7,5.888274576437183,1.6534623534195003,88.35058103331907,0.33178902497349727,7.594207048513189,0.9840981041263285,5.041222234086362,2.3991460653326406,-3.2429978446197953,1.3266675291907528,5.814634799957275,-1.4117254235628165 +WV,11.3,2.4,16.406165852468614,4.5967941361012805,88.00715193392061,0.3651987935901132,11.229932548243433,1.9972605412849338,19.384033788062002,7.091073090936904,-11.847910332700181,4.584928140436288,16.38048553466797,5.106165852468614 +WY,6.5,1.4,7.401438055757387,2.4969548232434695,80.91998182442593,0.3319623870118944,5.339602776175029,1.469142581544115,8.426008750173787,3.6864669776928496,-1.6214124288534664,0.9933258041620445,7.408247947692871,0.9014380557573869 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves.csv new file mode 100644 index 0000000000..99972470e9 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves.csv @@ -0,0 +1,12 @@ +run,mean_gap,mad,beyond,corr,med_se,med_delta,med_delta_se,acs_share,DE,DC,TN,MD,LA,MT,HI,MA +dup_release_repro,0.544647278204183,2.7886350939161892,27,0.5563910628408775,2.615637095279978,-2.994076890617613,1.292256962440916,0.3481740564228461,19.72096757153362,19.40304497242515,16.043549040971147,17.176587822918897,12.027706493180412,4.534327158576392,5.722639757413111,19.183838317977454 +proj_chi_s050_0.03,0.27806832715569085,2.734114031625438,21,0.5737793903816584,2.357436908512107,-2.935075411873965,1.210184271957055,0.35381870008679583,19.25305735633003,20.27839942917138,15.505442086850039,17.29785999996839,12.009270456475054,4.850919824134285,5.84242605135861,19.48690654141444 +soft_chi_s050_0.1,0.03666643819765543,2.585351625532392,20,0.5849139132710077,2.402630453569502,-2.9684169114554586,1.1627641419402723,0.36703387978463625,18.936399489435015,20.17727139468469,15.61138420080497,16.927392662743056,11.961887482184487,4.264553919675482,5.931090315761128,19.48056369601165 +soft_chi_s700_0,0.2722806136794624,2.5233981395409657,24,0.6278832481244133,1.8825631654345845,-2.7789980387905118,0.9719246794509924,0.5323355514970661,19.88375465080892,21.656603520349034,15.708753888451223,17.01329819148205,12.659494932239813,5.41516099491029,5.827740027731627,19.402471728689115 +soft_chi_s700_0.03,-0.026580847142335953,2.4029499593356385,23,0.6445210236966457,1.823368625116039,-2.7935298326396705,0.8817559474634424,0.5383162332537033,19.3847160463197,21.3545841952864,14.861625854049299,16.39005279126511,12.679167173634717,5.263917143048904,6.0828375088813775,18.774519297731846 +soft_chi_s700_0.1,-0.2268683703569958,2.3270703876421392,20,0.6559213735996077,1.8471575980594037,-2.810431756156195,0.8313090532329959,0.5550259489828211,18.370862852135303,21.484361595602966,14.77507615043668,15.960596320168857,12.534100659393891,5.127223108726691,6.230713167299212,18.142961948312763 +soft_chi_s900_0,-0.1458447478736399,2.2741066175605353,24,0.7240547027895161,1.151117080796917,-3.1618756258319074,0.5927852681302287,0.7881426593725687,16.551442408397687,25.254609984652674,14.983840708120976,14.789207931718328,12.887580827632778,6.656828980913233,6.2263335410973815,17.719514820330552 +soft_chi_s900_0.03,-0.4548573249034494,2.162521439016692,22,0.7459660446918597,1.056820726700587,-3.0133436473419537,0.5640830863687071,0.8010793832198903,16.207791050183783,24.471418485651192,14.345915241704857,14.628241020762575,13.472252578365584,6.425878798418147,6.440864594444196,16.636697208774066 +soft_chi_s900_0.1,-0.7011707000588694,2.1286033403021016,21,0.7453267387500889,0.9879625361307123,-2.8858168495464054,0.5419403294710926,0.8173361826685147,15.799735925878519,23.776175717795308,14.456171557236855,14.22147052432781,12.974062901653799,6.241481658245595,6.404087629779315,15.499720474386635 +soft_chi_s964_0,-0.42384078940653297,2.2335587346009715,23,0.7538343494808044,0.9147166874640632,-3.037816703365899,0.5240280882310927,0.9130730706856416,14.94317731051859,26.635829758432187,14.49617354576192,13.399849982968556,12.918120474714872,7.208015099913618,6.2708673010172244,16.406922667181373 +soft_chi_s964_0.03,-0.6451740708461082,2.139972983678509,22,0.7719873950319354,0.8683681739745109,-3.108520441224063,0.4692140607191504,0.9201088941650787,15.020227309790263,25.732826885357802,14.182538067759129,13.645269605994729,13.626317180920186,7.0742738192143,6.495613719807099,15.594008303464898 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acs_stored.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_stored.csv new file mode 100644 index 0000000000..a6398d58b8 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_stored.csv @@ -0,0 +1,52 @@ +state,o1017@2.30.1 2025,buildp@1.825.2 2025,o1017@1.825.2 2025,o1017@2.30.1 2024,buildp@1.825.2 2024,o1017@2.2.1 2024,census,moe,default,default_se,gap_acs +AK,12.269848823547363,10.207805633544922,12.292646408081055,12.254180908203125,9.327346801757812,10.34885311126709,10.5,2.1,11.644427030114803,6.332772219323601,1.7698488235473633 +AL,14.110982894897461,15.13514518737793,15.279952049255371,14.049397468566895,15.275094985961914,14.755683898925781,15.5,2.4,16.987156204496586,4.77804546692084,-1.389017105102539 +AR,6.774383068084717,6.269811153411865,5.93632698059082,5.7081403732299805,5.191522121429443,5.704855918884277,13.3,2.7,8.128457681954233,3.501990871084489,-6.525616931915284 +AZ,17.127504348754883,16.236642837524414,18.706769943237305,13.041116714477539,16.75157356262207,13.10439395904541,13.3,2.3,16.951186290817823,4.931830911917693,3.827504348754882 +CA,20.379192352294922,17.045089721679688,17.0638427734375,18.897056579589844,17.09000015258789,18.94719886779785,17.9,1.0,24.416506507457978,2.653037840146489,2.4791923522949233 +CO,9.367508888244629,7.787666320800781,9.107039451599121,8.95353889465332,7.733107566833496,8.981779098510742,7.7,1.8,10.352503583390458,3.820461090793149,1.6675088882446287 +CT,12.430046081542969,11.59237003326416,12.10657787322998,12.274319648742676,12.140087127685547,12.299995422363281,12.8,3.2,13.371307251776662,5.002325263747212,-0.36995391845703196 +DC,20.46465492248535,10.765353202819824,10.287036895751953,20.691083908081055,10.659543991088867,20.640901565551758,20.3,3.7,34.36530331852773,10.601939242811653,0.16465492248535085 +DE,22.213157653808594,17.11366844177246,18.58260154724121,18.741989135742188,17.239473342895508,18.724576950073242,8.7,2.6,22.42918607516834,6.87057378619714,13.513157653808594 +FL,22.613277435302734,20.025964736938477,22.18424415588379,20.395206451416016,19.656354904174805,21.2016658782959,18.4,1.8,28.15649904995264,3.962926881590984,4.213277435302736 +GA,17.39934539794922,13.268603324890137,13.112616539001465,16.163633346557617,13.66926383972168,17.02637481689453,15.1,2.2,18.428986886706188,3.973453086314512,2.299345397949219 +HI,5.165446758270264,5.757835388183594,6.0647125244140625,5.838687896728516,7.513661861419678,5.963184833526611,13.0,2.6,7.019040434276882,2.7805868848504707,-7.834553241729736 +IA,5.389122486114502,7.0783162117004395,5.240716457366943,5.374711036682129,7.199353218078613,5.473372459411621,8.2,1.9,8.808982597327754,3.639254429438333,-2.8108775138854973 +ID,6.954473495483398,5.922501087188721,5.827974319458008,6.925483703613281,6.857194900512695,6.9221510887146,6.5,1.3,6.9578273141402125,2.7396037844431986,0.45447349548339844 +IL,18.092145919799805,16.69071388244629,18.319591522216797,13.41452407836914,18.113983154296875,13.453118324279785,12.4,1.6,14.678691537509486,3.8382020965079566,5.692145919799804 +IN,9.129535675048828,10.376998901367188,8.87652587890625,9.099635124206543,10.459083557128906,8.946839332580566,10.6,2.2,12.734348293509468,3.915265266967416,-1.4704643249511715 +KS,10.451759338378906,8.720693588256836,10.918420791625977,10.41631031036377,8.979998588562012,11.052299499511719,9.7,2.5,9.659862114476377,4.696231456905677,0.751759338378907 +KY,9.635833740234375,10.870016098022461,9.865987777709961,9.526994705200195,10.89116382598877,9.456998825073242,13.3,2.9,18.537173560636017,6.281260601560727,-3.6641662597656257 +LA,11.565276145935059,12.422067642211914,11.34785270690918,11.620853424072266,12.927974700927734,11.645283699035645,20.7,3.0,12.087426776757605,3.536744221066976,-9.13472385406494 +MA,20.928058624267578,17.66620445251465,20.199460983276367,20.365575790405273,18.05204200744629,19.529817581176758,12.8,2.0,20.202673733449153,5.082037498794953,8.128058624267577 +MD,17.483667373657227,15.555747985839844,15.025901794433594,9.866395950317383,10.97234058380127,9.896873474121094,10.7,2.5,23.165434057221027,6.042028256286184,6.783667373657227 +ME,7.270956039428711,9.798665046691895,7.220693588256836,7.217267036437988,10.030389785766602,7.214400291442871,6.5,2.3,12.449100804293858,6.13486277739015,0.7709560394287109 +MI,9.475631713867188,7.770370006561279,8.121955871582031,7.022150039672852,6.853955268859863,7.208935737609863,10.3,1.9,14.518361806845276,4.000674369632836,-0.8243682861328132 +MN,5.14799690246582,4.849502086639404,4.41375732421875,5.100409507751465,4.900975704193115,5.099771976470947,6.9,1.9,8.43142834945164,3.7306098701724806,-1.75200309753418 +MO,16.677257537841797,12.789344787597656,12.240023612976074,12.134055137634277,12.436325073242188,12.22953987121582,9.7,2.3,18.479794346249818,5.195454214849073,6.977257537841798 +MS,12.927408218383789,12.917068481445312,13.397915840148926,12.632619857788086,11.891935348510742,13.609383583068848,19.1,2.6,12.942210983876368,3.985885849068236,-6.172591781616212 +MT,4.747105598449707,4.57055139541626,4.45315408706665,4.695467948913574,4.609851837158203,4.77234411239624,9.3,2.3,2.5309435706442085,1.5861244617479786,-4.552894401550294 +NC,11.701009750366211,9.820626258850098,10.860300064086914,10.867331504821777,10.01740837097168,12.393776893615723,14.4,2.2,18.100974606703634,4.667944264996081,-2.6989902496337894 +ND,10.772493362426758,10.286600112915039,10.15654182434082,10.372590065002441,10.235039710998535,10.346437454223633,10.3,2.1,11.130475374010498,4.0410378809574645,0.4724933624267571 +NE,9.424169540405273,8.083951950073242,7.396210670471191,9.418564796447754,9.6867094039917,9.423369407653809,7.1,1.9,10.711871739273764,4.344057457416736,2.324169540405274 +NH,7.5636773109436035,7.637781620025635,6.746689319610596,6.965229511260986,7.666688442230225,7.029958248138428,7.5,2.4,10.516178236344569,4.614807837439194,0.06367731094360352 +NJ,9.367637634277344,9.402259826660156,8.575506210327148,8.468988418579102,9.474333763122559,8.581535339355469,13.3,1.9,10.924964213914969,3.6050731998973897,-3.932362365722657 +NM,14.007346153259277,13.921367645263672,13.76626968383789,14.008567810058594,14.147199630737305,13.995532989501953,10.9,2.1,10.15133656941352,3.9062252843191314,3.107346153259277 +NV,13.599339485168457,13.569028854370117,12.644025802612305,12.875255584716797,13.623827934265137,12.856012344360352,15.0,2.5,19.07006538200538,5.8055135948679,-1.400660514831543 +NY,16.431594848632812,17.031265258789062,18.11141586303711,15.968120574951172,17.340425491333008,16.104650497436523,16.2,1.9,17.72711706952501,3.5698850096921197,0.2315948486328132 +OH,9.078166961669922,8.41537857055664,8.538422584533691,7.3885650634765625,8.433159828186035,7.44478178024292,12.3,2.1,9.813281011698678,2.909392463247397,-3.221833038330079 +OK,13.372641563415527,10.870774269104004,12.022736549377441,11.693496704101562,10.811004638671875,11.924123764038086,9.9,2.0,17.214397377076793,4.784835016565054,3.472641563415527 +OR,14.899346351623535,13.189056396484375,13.788415908813477,10.653480529785156,10.818109512329102,10.726090431213379,11.0,2.4,16.287025373398983,5.206864576296931,3.899346351623535 +PA,13.813882827758789,11.623380661010742,11.67545223236084,13.587095260620117,11.587688446044922,13.592569351196289,11.1,2.0,14.135315176005452,3.248356681256722,2.7138828277587894 +RI,10.114660263061523,10.603348731994629,8.362356185913086,9.554133415222168,14.910812377929688,9.554133415222168,8.4,2.3,17.87488341023184,7.039949763613315,1.714660263061523 +SC,9.70772647857666,9.443751335144043,9.017725944519043,9.411684036254883,9.619269371032715,9.078572273254395,11.1,2.1,9.884637709168972,3.5625308459596647,-1.3922735214233395 +SD,6.721802234649658,8.601188659667969,5.7997145652771,6.496435165405273,9.07537841796875,6.496435165405273,7.8,2.2,11.338984093590906,4.7545850659567925,-1.0781977653503416 +TN,15.603744506835938,17.399497985839844,16.838436126708984,14.38286304473877,16.32317543029785,15.223307609558105,10.0,1.7,23.237083981929004,5.143819316231732,5.6037445068359375 +TX,14.510196685791016,14.051313400268555,14.439839363098145,13.560338020324707,14.026515007019043,14.60934829711914,16.1,1.3,19.24437088161237,2.651235362434403,-1.5898033142089858 +UT,8.38582706451416,8.811441421508789,7.957401752471924,8.195793151855469,8.99677562713623,8.194806098937988,7.3,1.6,13.21129757366149,3.6996600431023254,1.0858270645141603 +VA,15.400092124938965,15.295173645019531,15.264839172363281,13.884775161743164,15.330557823181152,13.92672348022461,12.1,2.4,18.12834310047842,4.435237116964007,3.300092124938965 +VT,10.242634773254395,10.431380271911621,9.690251350402832,10.24825668334961,10.436868667602539,10.24096393585205,8.3,2.5,17.67870021257423,7.094454518557269,1.9426347732543938 +WA,14.172506332397461,10.550259590148926,13.212450981140137,14.022198677062988,11.360112190246582,14.030243873596191,9.3,1.9,14.206930055854658,4.267283147442617,4.87250633239746 +WI,5.814634799957275,6.0491108894348145,5.163439750671387,5.054064750671387,6.070775032043457,5.064352035522461,7.3,1.7,7.034634654513513,3.08294960963598,-1.4853652000427244 +WV,16.38048553466797,14.855488777160645,13.71448040008545,14.11241340637207,14.771713256835938,14.191621780395508,11.3,2.4,17.93170541550054,5.962326417829841,5.080485534667968 +WY,7.408247947692871,7.815789222717285,7.960083484649658,7.411695957183838,8.006929397583008,7.983084678649902,6.5,1.4,8.787559151426471,3.416415435764844,0.9082479476928711 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/asec_state_raw.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/asec_state_raw.csv new file mode 100644 index 0000000000..fa1ba26c31 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/asec_state_raw.csv @@ -0,0 +1,52 @@ +state,2022,2023,2024,2025,avg_23_25,avg_22_24,pool_23_25,census,moe,model +AK,11.742250772539032,9.144475754994634,11.025094000726003,11.025703481756025,10.39842441249222,10.63727350941989,10.385123619199785,10.5,2.1,11.644426986408602 +AL,14.229576948317568,14.318475868598759,15.016964751309011,16.632061192463205,15.32250060412366,14.52167252274178,15.322411977437005,15.5,2.4,16.98715636912008 +AR,15.56371895090868,16.06069459922046,11.889816160137775,11.027554596598085,12.992688451985442,14.504743236755639,12.982343687268106,13.3,2.7,8.12845772011748 +AZ,15.705949190547415,15.47399930545391,12.050024488012602,13.30550603120295,13.60984327488982,14.40999099467131,13.596540158768349,13.3,2.3,16.951186258024865 +CA,16.797673426558703,19.17209405631504,18.58671422998794,16.571646396383798,18.11015156089559,18.185493904287227,18.11753998735953,17.9,1.0,24.41650645326989 +CO,7.418904011848927,8.01198022196501,7.911591452421268,8.813192984945081,8.245588219777119,7.780825228745068,8.25493107344393,7.7,1.8,10.352503836811634 +CT,11.09204254393255,10.775491259930428,13.112711275489447,12.544795000477727,12.144332511965866,11.660081693117474,12.128226284317284,12.8,3.2,13.371307682492237 +DC,16.188639739636187,20.438683106933492,19.309717509072826,21.122187439973132,20.290196018659817,18.645680118547503,20.276901862896366,20.3,3.7,34.365303438733925 +DE,10.292227370260731,8.679114087435847,11.644346527904931,6.173279214261751,8.832246609867509,10.205229328533838,8.872106183604838,8.7,2.6,22.429186288025384 +FL,17.351784629326648,18.17132295896659,17.18946553871046,19.86717949927365,18.409322665650233,17.570857709001235,18.399935594213357,18.4,1.8,28.15649890233655 +GA,11.190840796560298,13.026194930319038,17.952423338613258,15.30977257103377,15.42946361332202,14.056486355164198,15.44261441868672,15.1,2.2,18.428986738455304 +HI,11.236523127053816,11.133359537059551,14.115113228415273,13.79161921290518,13.013363992793336,12.161665297509549,13.004127297545235,13.0,2.6,7.019040438905304 +IA,6.141884485533542,5.985968986973003,7.963696275897187,9.44595300849348,7.798539423787891,6.697183249467911,7.804448044048466,8.2,1.9,8.80898267607782 +ID,5.793933570208933,5.750195039392725,5.769906704612402,7.852948622049597,6.457683455351575,5.77134510473802,6.464289199062273,6.5,1.3,6.957827284586571 +IL,8.869315393324918,13.986610693141118,10.267437389020227,13.784916298211357,12.679654793457567,11.04112115849542,12.680881653752552,12.4,1.6,14.678691391590323 +IN,8.486349562170021,8.941014008789727,10.25193775759754,12.445588729989966,10.546180165459077,9.226433776185763,10.524294715881606,10.6,2.2,12.73434830167166 +KS,9.686172497871633,10.61046214819598,7.059655174746284,9.937126739271402,9.202414687404556,9.118763273604634,9.202456329866736,9.7,2.5,9.659862214627816 +KY,13.169719094264696,14.398548223011026,17.390413836868824,6.26047230746556,12.683144789115138,14.986227051381514,12.761043767437215,13.3,2.9,18.5371736654285 +LA,12.175301416022457,22.514100103949275,22.231770503344162,16.84846255175197,20.531444386348472,18.973724007771963,20.550920660901287,20.7,3.0,12.087426626104243 +MA,11.215350830223118,12.485048538166401,11.164326031764508,14.097617736647443,12.58233076885945,11.621575133384676,12.57030649429523,12.8,2.0,20.202673816573878 +MD,13.204340415705378,13.389209312722102,10.032601265511571,8.241112555938752,10.554307711390809,12.208716997979684,10.582646934483131,10.7,2.5,23.16543402488221 +ME,3.083438652479766,6.725107844065107,5.857540549132934,8.851318598109833,7.144655663769292,5.222029015225935,7.142742518069979,6.5,2.3,12.449100684445808 +MI,9.37996431754811,11.317440580932518,9.765980398916605,9.049338094232729,10.044253024693951,10.154461765799077,10.061054933693407,10.3,1.9,14.518361699859508 +MN,5.457814657034463,7.084824769433547,7.196297633315432,7.267773534901452,7.182965312550144,6.579645686594481,7.182539055028663,6.9,1.9,8.431428192061507 +MO,11.95013122874995,9.952076556218547,10.59910488153741,8.688815349141722,9.746665595632559,10.833770888835303,9.746914211771577,9.7,2.3,18.479794697686096 +MS,17.605421705282417,15.893703615893632,18.318707841001032,22.774803026779637,18.995738161224768,17.272611054059027,18.954429752161147,19.1,2.6,12.942211004413902 +MT,6.777162781365585,10.19741392086936,7.213076993339979,9.70772867632419,9.039406530177844,8.062551231858308,9.068761468913076,9.3,2.3,2.5309436062772113 +NC,13.324659470471722,14.699469455156626,17.356035377162865,10.418332949140346,14.157945927153278,15.126721434263738,14.118056875722063,14.4,2.2,18.100974612766848 +ND,8.388637081588247,10.055765354425745,9.338429159017437,11.265900435399093,10.220031649614091,9.260943865010477,10.214409181082498,10.3,2.1,11.13047533590008 +NE,3.1932324935435874,8.414169251220617,8.707921090634455,5.345986399696482,7.489358913850517,6.7717742784662205,7.489798128391237,7.1,1.9,10.711871752578398 +NH,7.320679331841904,6.614574450154254,7.03260131541967,9.398691240045057,7.68195566853966,6.989285032471943,7.67563173189731,7.5,2.4,10.516178219256554 +NJ,13.967164894827434,12.626945926755496,15.490552338958738,11.14956652402791,13.089021596580714,14.028221053513889,13.096360568763007,13.3,1.9,10.924964312878116 +NM,11.6979273944023,8.784244517059783,11.641225207085279,13.45302247185058,11.292830731998547,10.707799039515786,11.242245228179504,10.9,2.1,10.15133671821333 +NV,14.51908925947071,19.62339447401711,11.004034562220706,14.3553915017646,14.99427351266747,15.048839431902843,14.97184761208205,15.0,2.5,19.070065323872694 +NY,16.44139146054365,15.638020012052639,14.344625859330986,18.507636978263662,16.163427616549097,15.474679110642427,16.15246416949128,16.2,1.9,17.727116992316713 +OH,5.786530397682931,14.153140654790734,9.886769293543354,12.81628040248174,12.285396783605277,9.942146782005672,12.279728784240971,12.3,2.1,9.813281022726176 +OK,13.048873023290255,9.773404030224372,10.822268179617504,10.571354856634418,10.389009022158765,11.214848411044043,10.388497167772895,9.9,2.0,17.21439734214549 +OR,10.327881492942787,10.527951224062168,12.4021259088159,10.085066706225799,11.005047946367958,11.085986208606952,10.999692551222667,11.0,2.4,16.2870253593211 +PA,9.704181677852835,14.726636465084285,8.39479133772251,9.486669664796132,10.869365822534307,10.941869826886544,10.882032377190491,11.1,2.0,14.135315201475251 +RI,7.01041798662941,6.156053644150039,11.063033344659317,7.415471092052738,8.211519360287364,8.076501658479588,8.233995656353272,8.4,2.3,17.87488315880047 +SC,14.095160182455789,10.239715887677772,14.271926361435797,9.577141338269175,11.362927862460916,12.868934143856452,11.37050563532496,11.1,2.1,9.884637976608813 +SD,7.253537952232686,4.868533464031931,9.653581165563185,8.038212493057983,7.520109040884367,7.258550860609268,7.518589948567328,7.8,2.2,11.33898407217388 +TN,7.545471553294831,8.191660258163987,9.302263227188401,12.657729769705965,10.050551085019451,8.346465012882406,10.050138704007582,10.0,1.7,23.237084061349254 +TX,15.65193745542604,15.326328304892062,16.49576280914009,16.494264428002662,16.105451847344938,15.824676189819398,16.105566154682876,16.1,1.3,19.24437100079317 +UT,5.364840417906747,5.738086271838058,6.39537574792533,8.818593352281523,6.984018457348303,5.832767479223378,6.988548792784237,7.3,1.6,13.211297432608319 +VA,9.697885061135517,15.387709620612222,11.359903992243673,12.638677321841921,13.128763644899271,12.148499557997136,13.123103620502038,12.1,2.4,18.12834306934188 +VT,9.00383319494905,6.910725322922523,9.625846154270423,9.334086057612687,8.623552511601877,8.513468224047331,8.616956653577393,8.3,2.5,17.678699918725112 +WA,11.320871417892958,9.55640308008236,8.704467919999432,10.300584612419458,9.520485204167082,9.860580805991583,9.520845779763503,9.3,1.9,14.206930139564697 +WI,5.529717351086974,8.394920719261709,5.627888668819814,7.887953197634016,7.303587528571846,6.517508913056166,7.322539660055865,7.3,1.7,7.034634564819478 +WV,9.056608472111039,11.373729523079849,10.470098272081291,10.990472100104546,10.944766631755229,10.30014542242406,10.947609311022028,11.3,2.4,17.93170551281414 +WY,5.911528861090066,6.777060710225308,5.526562270915909,7.224422330490823,6.50934843721068,6.071717280743761,6.513375640873973,6.5,1.4,8.787559212429837 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/census_child_spm.json b/docs/evidence/us-state-child-spm-2026-11/outputs/census_child_spm.json new file mode 100644 index 0000000000..472b1ec7ac --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/census_child_spm.json @@ -0,0 +1,260 @@ +{ + "source": "U.S. Census Bureau, Poverty in the United States: 2025 (P60-290), Table 18: SPM percent and margin of error for people under 18, three-year average 2023 to 2025", + "rows": [ + { + "state": "AK", + "rate": 10.5, + "moe": 2.1 + }, + { + "state": "AL", + "rate": 15.5, + "moe": 2.4 + }, + { + "state": "AR", + "rate": 13.3, + "moe": 2.7 + }, + { + "state": "AZ", + "rate": 13.3, + "moe": 2.3 + }, + { + "state": "CA", + "rate": 17.9, + "moe": 1.0 + }, + { + "state": "CO", + "rate": 7.7, + "moe": 1.8 + }, + { + "state": "CT", + "rate": 12.8, + "moe": 3.2 + }, + { + "state": "DC", + "rate": 20.3, + "moe": 3.7 + }, + { + "state": "DE", + "rate": 8.7, + "moe": 2.6 + }, + { + "state": "FL", + "rate": 18.4, + "moe": 1.8 + }, + { + "state": "GA", + "rate": 15.1, + "moe": 2.2 + }, + { + "state": "HI", + "rate": 13.0, + "moe": 2.6 + }, + { + "state": "IA", + "rate": 8.2, + "moe": 1.9 + }, + { + "state": "ID", + "rate": 6.5, + "moe": 1.3 + }, + { + "state": "IL", + "rate": 12.4, + "moe": 1.6 + }, + { + "state": "IN", + "rate": 10.6, + "moe": 2.2 + }, + { + "state": "KS", + "rate": 9.7, + "moe": 2.5 + }, + { + "state": "KY", + "rate": 13.3, + "moe": 2.9 + }, + { + "state": "LA", + "rate": 20.7, + "moe": 3.0 + }, + { + "state": "MA", + "rate": 12.8, + "moe": 2.0 + }, + { + "state": "MD", + "rate": 10.7, + "moe": 2.5 + }, + { + "state": "ME", + "rate": 6.5, + "moe": 2.3 + }, + { + "state": "MI", + "rate": 10.3, + "moe": 1.9 + }, + { + "state": "MN", + "rate": 6.9, + "moe": 1.9 + }, + { + "state": "MO", + "rate": 9.7, + "moe": 2.3 + }, + { + "state": "MS", + "rate": 19.1, + "moe": 2.6 + }, + { + "state": "MT", + "rate": 9.3, + "moe": 2.3 + }, + { + "state": "NC", + "rate": 14.4, + "moe": 2.2 + }, + { + "state": "ND", + "rate": 10.3, + "moe": 2.1 + }, + { + "state": "NE", + "rate": 7.1, + "moe": 1.9 + }, + { + "state": "NH", + "rate": 7.5, + "moe": 2.4 + }, + { + "state": "NJ", + "rate": 13.3, + "moe": 1.9 + }, + { + "state": "NM", + "rate": 10.9, + "moe": 2.1 + }, + { + "state": "NV", + "rate": 15.0, + "moe": 2.5 + }, + { + "state": "NY", + "rate": 16.2, + "moe": 1.9 + }, + { + "state": "OH", + "rate": 12.3, + "moe": 2.1 + }, + { + "state": "OK", + "rate": 9.9, + "moe": 2.0 + }, + { + "state": "OR", + "rate": 11.0, + "moe": 2.4 + }, + { + "state": "PA", + "rate": 11.1, + "moe": 2.0 + }, + { + "state": "RI", + "rate": 8.4, + "moe": 2.3 + }, + { + "state": "SC", + "rate": 11.1, + "moe": 2.1 + }, + { + "state": "SD", + "rate": 7.8, + "moe": 2.2 + }, + { + "state": "TN", + "rate": 10.0, + "moe": 1.7 + }, + { + "state": "TX", + "rate": 16.1, + "moe": 1.3 + }, + { + "state": "UT", + "rate": 7.3, + "moe": 1.6 + }, + { + "state": "VA", + "rate": 12.1, + "moe": 2.4 + }, + { + "state": "VT", + "rate": 8.3, + "moe": 2.5 + }, + { + "state": "WA", + "rate": 9.3, + "moe": 1.9 + }, + { + "state": "WI", + "rate": 7.3, + "moe": 1.7 + }, + { + "state": "WV", + "rate": 11.3, + "moe": 2.4 + }, + { + "state": "WY", + "rate": 6.5, + "moe": 1.4 + } + ] +} \ No newline at end of file diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/census_flags_by_file.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/census_flags_by_file.csv new file mode 100644 index 0000000000..d795daa69e --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/census_flags_by_file.csv @@ -0,0 +1,54 @@ +,dense_0fb05b6,dense_0fb05b6,dense_0fb05b6,dense_0fb05b6,dense_0fb05b6,dense_b5db384,dense_b5db384,dense_b5db384,dense_b5db384,dense_b5db384,sparse_buildp,sparse_buildp,sparse_buildp,sparse_buildp,sparse_buildp +,D,E,kish,records,pool,D,E,kish,records,pool,D,E,kish,records,pool +state,,,,,,,,,,,,,,, +AK,11.131780918645298,16.409248822192428,1280.7510750009108,3711.0,10.63727350941989,11.131780918645298,16.194556293612283,1169.3861887465123,3711.0,10.63727350941989,11.254415609256204,9.02435136344812,133.09802879677864,826.0,10.63727350941989 +AL,14.349346237703015,15.89226777693915,2088.615780083505,7443.0,14.52167252274178,14.349346237703015,16.81316469985187,1976.4790585338922,7443.0,14.52167252274178,17.20573894774863,16.607525526139906,236.55107319475567,1061.0,14.52167252274178 +AR,14.276444444479772,12.825540195637286,1892.8420311303146,6430.0,14.504743236755639,14.276444444479772,12.912154401478993,1716.7022179354965,6430.0,14.504743236755639,12.289322385665908,11.984027385304842,205.8083941145262,952.0,14.504743236755639 +AZ,14.948852037802352,17.901579761568623,1674.6315963913416,5956.0,14.40999099467131,14.948852037802352,18.674716085081368,1540.5216061069773,5956.0,14.40999099467131,21.57817380236772,22.489854894589172,189.9592184041849,1164.0,14.40999099467131 +CA,18.235503457287603,20.114380150638027,7670.714505093112,32227.0,18.185493904287227,18.235503457287603,20.714954017464414,7204.835794233725,32227.0,18.185493904287227,14.206351955773922,17.979249773877193,964.8602100502725,2659.0,18.185493904287227 +CO,7.9968313639306,14.063894907340558,1247.343333114155,4699.0,7.780825228745068,7.9968313639306,14.486536550855025,1161.2219460807694,4699.0,7.780825228745068,10.429439428326544,10.858414646733081,145.44069869412928,1164.0,7.780825228745068 +CT,11.70149208575182,13.970654873990696,1120.6475629790366,3950.0,11.660081693117474,11.70149208575182,15.630098846008295,1046.5621029311478,3950.0,11.660081693117474,12.712232820324143,13.003823363877945,135.72407292141725,908.0,11.660081693117474 +DC,17.419199318491437,26.462166367099112,1651.4730071307958,6010.0,18.645680118547503,17.419199318491437,26.19208509489287,1504.3875662957523,6010.0,18.645680118547503,25.107467339097344,52.70238736322671,175.55582471377855,551.0,18.645680118547503 +DE,10.325839764433509,14.390692389077309,1173.359368474098,3840.0,10.205229328533838,10.325839764433509,15.1446114450492,1075.229082564426,3840.0,10.205229328533838,13.714216479420605,12.957297100970527,138.95841520788005,1068.0,10.205229328533838 +FL,17.60076643715988,23.71904357503944,4246.633594761431,17540.0,17.570857709001235,17.60076643715988,24.111702712389313,4042.4659346065437,17540.0,17.570857709001235,29.92687351127549,30.877687609630772,561.2687931315957,1642.0,17.570857709001235 +GA,14.034036177358722,16.962398846163925,1957.9603812073149,8027.0,14.056486355164198,14.034036177358722,17.623853759390897,1841.1834632880982,8027.0,14.056486355164198,19.172565110812638,14.400959324173607,256.7233154812113,1215.0,14.056486355164198 +HI,12.575145854583731,11.59818316645407,1631.012338914187,5519.0,12.161665297509549,12.575145854583731,11.774189166659875,1518.9808324226597,5519.0,12.161665297509549,12.015548988928826,17.244110656462933,197.42767354447827,838.0,12.161665297509549 +IA,7.256733570877532,8.362354924864498,1247.6072581662174,4021.0,6.697183249467911,7.256733570877532,8.997492557025778,1092.60631025202,4021.0,6.697183249467911,10.242234105123705,13.196425186307861,138.47468958011123,973.0,6.697183249467911 +ID,5.723320669313954,6.387720650162759,1772.2180493196815,5683.0,5.77134510473802,5.723320669313954,6.956496379813835,1630.6139168055572,5683.0,5.77134510473802,7.336601852578505,8.131051782451717,185.13141307532993,746.0,5.77134510473802 +IL,11.558174183427155,14.208662996819802,2444.5012885319684,9485.0,11.04112115849542,11.558174183427155,13.097726188757402,2296.1455316721667,9485.0,11.04112115849542,13.743942334352646,14.16498918846737,276.79640609431533,1668.0,11.04112115849542 +IN,8.844078013025944,11.004940336297551,1642.6182505302718,5514.0,9.226433776185763,8.844078013025944,11.12617544900566,1539.927083172241,5514.0,9.226433776185763,10.788234383701989,10.352642869057032,177.01966696059426,1141.0,9.226433776185763 +KS,9.599689002818245,10.934496514861085,1248.8827111978544,4349.0,9.118763273604634,9.599689002818245,11.020574580945842,1156.809988161519,4349.0,9.118763273604634,14.94322355814495,9.962971000843263,148.6054105840971,921.0,9.118763273604634 +KY,14.932039244810197,14.87288599780986,1174.4216390639226,3703.0,14.986227051381514,14.932039244810197,14.81804989436489,1086.0873481475237,3703.0,14.986227051381514,13.828225052270895,18.59272575763501,129.52044465545663,776.0,14.986227051381514 +LA,18.621449668093963,20.221036114520672,2197.0911544184887,8125.0,18.973724007771963,18.621449668093963,20.921902545827148,2060.762243627255,8125.0,18.973724007771963,22.085137122858203,20.19458093390622,260.90086270703296,1000.0,18.973724007771963 +MA,11.53687151947103,14.672277207145926,2252.8350178139995,7841.0,11.621575133384676,11.53687151947103,15.659158722663257,2084.820714422103,7841.0,11.621575133384676,14.675608124097286,15.432276127472935,254.60923423077767,1522.0,11.621575133384676 +MD,12.068845221556595,15.540937920348599,1046.836285937356,4246.0,12.208716997979684,12.068845221556595,15.766838509318848,978.9039968370985,4246.0,12.208716997979684,16.713304998145034,23.306342504048914,142.9724839367435,1091.0,12.208716997979684 +ME,5.156870749210488,5.606472024619577,866.6710044577735,2628.0,5.222029015225935,5.156870749210488,5.62705909525707,794.2344728611527,2628.0,5.222029015225935,6.088127903206732,5.727408884425186,98.94461640482403,785.0,5.222029015225935 +MI,9.701134578974726,11.011631346347086,2193.0928548546135,7650.0,10.154461765799077,9.701134578974726,11.830697098340064,2043.9166761025806,7650.0,10.154461765799077,12.622334376667203,17.304622119910075,244.58681076309966,1478.0,10.154461765799077 +MN,7.227378314093075,8.234486675040504,1348.4281791255778,4530.0,6.579645686594481,7.227378314093075,8.20760623793026,1259.5070972476221,4530.0,6.579645686594481,9.051686772833191,12.552582952572417,151.41085939244604,1166.0,6.579645686594481 +MO,11.02176183080613,15.00740740105141,1473.9613604695558,5025.0,10.833770888835303,11.02176183080613,15.117478696997525,1349.687665254501,5025.0,10.833770888835303,15.16556753403146,15.310910601606182,158.23194083624088,1013.0,10.833770888835303 +MS,16.552249744335537,14.925509597093173,1783.4174259286635,6379.0,17.272611054059027,16.552249744335537,15.841985521987509,1647.8291875973648,6379.0,17.272611054059027,16.53300114339551,11.967844917314173,217.18543432971407,882.0,17.272611054059027 +MT,7.589720944518802,10.715414328134916,1670.3485766525316,5670.0,8.062551231858308,7.589720944518802,11.255244273164978,1553.3789131849069,5670.0,8.062551231858308,13.034331765361454,17.49391920500919,189.76250275414372,744.0,8.062551231858308 +NC,15.12505841909942,17.292650725444584,2377.7048588391494,8922.0,15.126721434263738,15.12505841909942,18.817700694339482,2143.7949464360154,8922.0,15.126721434263738,16.893222194580012,15.75593178546281,278.9726584586971,1337.0,15.126721434263738 +ND,9.489454591563454,7.4930715915659345,1488.6629336263418,4470.0,9.260943865010477,9.489454591563454,7.63078548995473,1369.1397640143823,4470.0,9.260943865010477,10.488822804193942,5.963289575658017,154.69431792442464,682.0,9.260943865010477 +NE,6.977099490263862,9.874967574503078,1294.0893462688755,4209.0,6.7717742784662205,6.977099490263862,9.417314380262143,1199.1505396928244,4209.0,6.7717742784662205,7.595127929561856,8.837638979188856,145.9510960348787,884.0,6.7717742784662205 +NH,7.365400934971398,7.55989048122407,1320.788056304331,3866.0,6.989285032471943,7.365400934971398,7.493675599383199,1184.8552463634048,3866.0,6.989285032471943,7.264752309850339,9.200421541459052,140.868912806551,840.0,6.989285032471943 +NJ,13.522145840019196,15.27964206272619,1765.52782718692,6618.0,14.028221053513889,13.522145840019196,15.826171775172057,1617.174530250633,6618.0,14.028221053513889,15.111919351810663,14.122366700093778,214.92794357369306,1651.0,14.028221053513889 +NM,11.093335147719058,13.19145891647553,1977.8572109994464,6404.0,10.707799039515786,11.093335147719058,12.969735825865722,1859.4603873883643,6404.0,10.707799039515786,8.458222023113725,9.179683456657028,197.21158124194926,902.0,10.707799039515786 +NV,15.751080999100939,15.27740236267875,1322.7437263497548,5019.0,15.048839431902843,15.751080999100939,15.356941678797515,1250.4594868742392,5019.0,15.048839431902843,16.612958155740255,19.623393902835147,153.2144587425425,952.0,15.048839431902843 +NY,15.311217986494224,17.727448686251858,3452.9544751004355,13712.0,15.474679110642427,15.311217986494224,18.324898381557144,3177.6667317192346,13712.0,15.474679110642427,21.247277713032837,16.35358569469746,431.19504540166105,2166.0,15.474679110642427 +OH,10.081949077315661,14.184989972902537,2566.9987490775793,8451.0,9.942146782005672,10.081949077315661,15.005100188964308,2383.770343011138,8451.0,9.942146782005672,12.125989312775257,9.176284846402721,259.8938711628161,1531.0,9.942146782005672 +OK,11.03247567487848,15.070765045769477,1546.6536933581347,5430.0,11.214848411044043,11.03247567487848,15.331135386083364,1454.7419122591948,5430.0,11.214848411044043,12.51777978580922,14.082912185032026,184.8895033261389,918.0,11.214848411044043 +OR,11.364423373050506,18.88326041399511,1625.0005321736894,5323.0,11.085986208606952,11.364423373050506,19.693949406262277,1485.3375012702109,5323.0,11.085986208606952,14.735407120410818,19.66425090664921,174.20405252731825,1152.0,11.085986208606952 +PA,10.84828598731419,12.91824315099976,2731.3710260837947,9463.0,10.941869826886544,10.84828598731419,14.39710192949929,2547.921210136899,9463.0,10.941869826886544,13.21552692251402,12.767784123857522,313.9407214900252,1999.0,10.941869826886544 +RI,7.78932858171827,9.924885410509757,942.3827269013855,3058.0,8.076501658479588,7.78932858171827,9.727133622169012,899.3144720449286,3058.0,8.076501658479588,8.976898416653533,19.332812444582338,115.36121502541874,804.0,8.076501658479588 +SC,12.417047923341366,13.481802309422688,1750.8930522887995,6283.0,12.868934143856452,12.417047923341366,14.939913919997874,1623.6836827846898,6283.0,12.868934143856452,13.126431926501269,16.06576164992219,198.57355826188999,955.0,12.868934143856452 +SD,7.191863420735705,7.15230122109354,1190.7247275915206,3801.0,7.258550860609268,7.191863420735705,7.1943546633170445,1094.5389160969194,3801.0,7.258550860609268,7.545697095129558,8.96203665111507,140.02483771729896,866.0,7.258550860609268 +TN,8.00160073661006,13.762351891967059,1887.2577326243,6467.0,8.346465012882406,8.00160073661006,14.058012515615667,1763.3304502796598,6467.0,8.346465012882406,12.572049003889626,11.157478600297567,213.4611164306311,1082.0,8.346465012882406 +TX,15.749270231375428,17.92155587074783,5696.62738654864,22333.0,15.824676189819398,15.749270231375428,18.32664253946711,5273.815930090872,22333.0,15.824676189819398,17.729657601322774,19.423503557645418,671.2372643331317,1875.0,15.824676189819398 +UT,5.7300090983360175,6.036792178440205,1403.311640884394,5183.0,5.832767479223378,5.7300090983360175,5.937223674095712,1311.4449701092092,5183.0,5.832767479223378,7.393320952153151,9.803531004406727,182.57153743556984,861.0,5.832767479223378 +VA,12.238309974172203,16.221242815876778,1784.5979885078273,6658.0,12.148499557997136,12.238309974172203,16.87925749863849,1661.048991339211,6658.0,12.148499557997136,18.80234608766441,21.462234707033442,215.49254181633236,1394.0,12.148499557997136 +VT,8.966681400257917,9.305865072985394,1476.0710716066164,4378.0,8.513468224047331,8.966681400257917,9.348212080687897,1395.3472366116268,4378.0,8.513468224047331,10.197888340394693,17.300133702601787,155.57089695495154,496.0,8.513468224047331 +WA,9.664098361618834,13.317556355939717,2080.2513104113555,6795.0,9.860580805991583,9.664098361618834,14.29671944784773,1919.3611344178046,6795.0,9.860580805991583,11.108326891761418,12.49154024058394,217.79313599494608,1305.0,9.860580805991583 +WI,6.386789538126811,9.578233382949508,1424.2270842686853,4901.0,6.517508913056166,6.386789538126811,9.30739167909626,1320.9299173458971,4901.0,6.517508913056166,10.404423491398967,9.74414537106952,168.6388492204826,1232.0,6.517508913056166 +WV,10.171742192049425,13.203687634416458,2287.5784883828014,6601.0,10.30014542242406,10.171742192049425,14.149743438058252,2099.7713929818706,6601.0,10.30014542242406,10.969674553034984,14.862075940319261,220.39920666393735,845.0,10.30014542242406 +WY,6.107100782375785,8.952917711254516,1109.6668807220467,4386.0,6.071717280743761,6.107100782375785,9.390998723821976,1052.0330115644163,4386.0,6.071717280743761,5.77544618818918,8.723064218446835,157.0853280537897,557.0,6.071717280743761 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/cf_state.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/cf_state.csv new file mode 100644 index 0000000000..339b956af2 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/cf_state.csv @@ -0,0 +1,52 @@ +state,census,base,aged,reform,aged_d,aged_se,ref_d,ref_se +AK,10.5,11.644427030114803,11.643429227455554,9.356088951412733,-0.0009978026592492029,0.000960112910447603,-2.28833807870207,2.261766560795337 +AL,15.5,16.987156204496586,16.51390629450606,11.188350089286738,-0.47324990999052474,0.4745377880034005,-5.798806115209848,3.0493082322103064 +AR,13.3,8.128457681954234,8.128457681954234,6.529882948085271,0.0,0.0,-1.598574733868963,1.583121738634196 +AZ,13.3,16.95118629081782,16.951148278389134,14.06926985806545,-3.8012428685618715e-05,3.6534290498381e-05,-2.8819164327523694,2.036349348806637 +CA,17.9,24.416506507457978,23.488632416049214,18.74096668707447,-0.9278740914087642,0.6168570408154611,-5.675539820383509,1.790537707557314 +CO,7.7,10.352503583390458,10.189434110455789,10.189348659243352,-0.16306947293466934,0.1646424584938923,-0.16315492414710597,0.16464405504737262 +CT,12.8,13.37130725177666,13.37124987856117,12.920574476673922,-5.737321549048602e-05,5.7139429159669644e-05,-0.4507327751027379,0.4533885432420388 +DC,20.3,34.36530331852772,26.869737056411758,18.97730178311427,-7.495566262115965,7.069346336014555,-15.388001535413451,8.308628706330074 +DE,8.7,22.42918607516834,22.42918470264657,15.410643123303826,-1.3725217691273883e-06,1.3893715902063216e-06,-7.018542951864513,3.691136821579667 +FL,18.4,28.15649904995264,27.680820883074595,24.737234071015024,-0.4756781668780441,0.46410585220491035,-3.4192649789376155,1.6791050313837301 +GA,15.1,18.428986886706188,17.93430455389714,14.403377453853569,-0.49468233280904883,0.4957793744725546,-4.025609432852619,1.9452189916221743 +HI,13.0,7.019040434276882,7.605855751607297,6.534674738334569,0.5868153173304149,0.5893147470369712,-0.48436569594231305,0.48691397019613786 +IA,8.2,8.808982597327754,8.808982214230436,7.9476401538571375,-3.830973174245855e-07,3.876012088235121e-07,-0.8613424434706163,0.8639629226028857 +ID,6.5,6.9578273141402125,6.95782715756334,5.019753077926579,-1.5657687235659523e-07,1.5797305884850147e-07,-1.9380742362136338,1.368717767880322 +IL,12.4,14.678691537509486,13.327169247963777,11.612004476965458,-1.3515222895457093,1.068071685247731,-3.0666870605440284,1.5491895823967223 +IN,10.6,12.734348293509466,12.191554621759558,9.793373408043927,-0.5427936717499087,0.5446883906476108,-2.9409748854655398,2.168107456504604 +KS,9.7,9.659862114476377,9.505860330849227,5.497535642161538,-0.1540017836271499,0.15525522028604014,-4.162326472314839,4.029466247367279 +KY,13.3,18.537173560636017,13.411581508246579,16.038957259321528,-5.125592052389438,4.920904725694563,-2.498216301314489,1.8669970965168168 +LA,20.7,12.087426776757606,11.778797395923913,10.390391777462405,-0.3086293808336933,0.30996814766262515,-1.6970349992952016,1.244061882460288 +MA,12.8,20.202673733449153,20.20264664134427,15.808287284959627,-2.7092104883053025e-05,2.419099874498959e-05,-4.394386448489525,3.0137922324180977 +MD,10.7,23.165434057221024,16.919395060679516,16.896225947393066,-6.2460389965415075,5.128839418273168,-6.269208109827957,5.131061227001518 +ME,6.5,12.449100804293858,12.449100804293858,7.215819954175362,0.0,0.0,-5.233280850118496,3.6852097488984494 +MI,10.3,14.518361806845276,13.40354729076479,9.243604901831914,-1.1148145160804859,0.7957684239996845,-5.274756905013362,2.1903792925304875 +MN,6.9,8.431428349451641,8.431428281153337,6.925550944312631,-6.82983039013152e-08,6.91212479406765e-08,-1.5058774051390102,1.50139588130885 +MO,9.7,18.479794346249815,18.479794346249815,9.929624274519105,0.0,0.0,-8.55017007173071,4.440221636189807 +MS,19.1,12.942210983876368,12.942210983876368,8.533672553872645,0.0,0.0,-4.408538430003723,3.089441890755916 +MT,9.3,2.530943570644209,2.530943570644209,2.4569410164102665,0.0,0.0,-0.07400255423394242,0.05399142126716014 +NC,14.4,18.100974606703634,17.024415267618977,8.524184625853266,-1.0765593390846568,0.7628958393434667,-9.576789980850368,3.1899493361318587 +ND,10.3,11.130475374010498,11.13047508895545,10.65836939200694,-2.85055048010463e-07,2.8883174137525173e-07,-0.47210598200355847,0.47603655627215385 +NE,7.1,10.711871739273763,9.767844556134538,5.476826329567906,-0.9440271831392248,0.9454923910734041,-5.235045409705856,3.0986534454180514 +NH,7.5,10.516178236344569,8.192359417034215,5.897617165025005,-2.323818819310354,1.7666061872879941,-4.618561071319564,2.709970775165079 +NJ,13.3,10.924964213914967,10.924957632719114,10.92484182128186,-6.581195853172517e-06,5.499263006833095e-06,-0.00012239263310753756,7.640475118836059e-05 +NM,10.9,10.15133656941352,10.150137300289675,8.902278712657822,-0.001199269123844715,0.0012108380992284663,-1.249057856755698,1.2442989269141707 +NV,15.0,19.07006538200538,19.070049756566235,14.558931641350906,-1.562543914701564e-05,1.1083686563102814e-05,-4.511133740654476,2.5801182549647783 +NY,16.2,17.72711706952501,17.43521603789165,14.542075331228029,-0.2919010316333619,0.2911424525029866,-3.1850417382969827,1.5842817878176936 +OH,12.3,9.813281011698676,9.438895521371638,7.20050903246034,-0.37438549032703783,0.3757610752203432,-2.612771979238336,1.9150486506010898 +OK,9.9,17.214397377076793,16.537103292883643,11.286918819658391,-0.6772940841931501,0.679246301289913,-5.927478557418402,2.5537495322141823 +OR,11.0,16.287025373398983,16.287025124729947,12.998719745100383,-2.486690355851806e-07,2.515283613852294e-07,-3.2883056282986,3.217098292413338 +PA,11.1,14.135315176005454,13.59675161302163,11.680181152053198,-0.5385635629838248,0.5386120666081763,-2.4551340239522563,1.4519790372745882 +RI,8.4,17.874883410231842,17.874883410231842,10.689761970551206,0.0,0.0,-7.1851214396806355,4.6435424225791495 +SC,11.1,9.884637709168972,9.884627090365557,5.854587409432078,-1.0618803415241018e-05,1.0690055018428396e-05,-4.030050299736894,2.0589147357202022 +SD,7.8,11.338984093590906,8.831151821846257,8.573140226226952,-2.5078322717446486,2.4759245403722248,-2.7658438673639534,2.0935114378530892 +TN,10.0,23.237083981929008,19.828560194551294,15.311922644897072,-3.408523787377714,2.496303660129884,-7.925161337031936,3.631677276792304 +TX,16.1,19.24437088161237,17.378727592360132,13.742161117124438,-1.8656432892522368,1.0237587765303886,-5.502209764487931,1.8033144100229541 +UT,7.3,13.211297573661492,13.2112969780398,11.93803500097427,-5.956216924118962e-07,5.496529191364889e-07,-1.273262572687221,1.2668590582628771 +VA,12.1,18.12834310047842,18.12832191713219,16.20727280810839,-2.1183346230913003e-05,2.0581119195468716e-05,-1.9210702923700325,1.8969955166459491 +VT,8.3,17.678700212574228,17.67870002324115,14.293245513016384,-1.89333078992604e-07,1.9220175809913354e-07,-3.385454699557844,2.4513588355580507 +WA,9.3,14.206930055854658,13.745158693529802,12.144826817691069,-0.46177136232485516,0.46363601457792836,-2.062103238163589,1.5064467653404392 +WI,7.3,7.034634654513512,6.225068687077606,3.664659065878091,-0.8095659674359066,0.8120373590228037,-3.3699755886354215,2.6397463077510985 +WV,11.3,17.93170541550054,17.298223741260962,6.787849956747667,-0.6334816742395795,0.6361094102083887,-11.143855458752874,5.3061060417418116 +WY,6.5,8.787559151426473,8.787354254712252,8.278877229830464,-0.00020489671422119216,0.00020726293128274842,-0.5086819215960094,0.5117664587615717 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/chi_eval.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/chi_eval.csv new file mode 100644 index 0000000000..54b1acba47 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/chi_eval.csv @@ -0,0 +1,8 @@ +,kish,natE,natP25,kids_m,med_se,mean_gap,sd_gap,mad,corr,tau +published,9174.432030037513,16.502406199878294,17.16724469444985,76.68300544760096,4.0410378809574645,3.2368029908027895,5.110599853784951,4.798497276265718,0.5168815743952837,2.731850116733383 +initial,42354.89991775766,15.0620764477773,16.69840528239648,81.55663372127822,2.2024435353488827,3.2677686242522026,4.012696814911332,4.20659998326037,0.6516693967552849,2.7380054458133998 +l0.003,13981.181825100262,16.089572612479138,16.734270656393615,76.48069635725693,3.7208685795405003,3.0694873446398083,4.9187459259366,4.787101242487701,0.45282373076295457,2.7316659778557324 +l0.01,19725.072361575498,16.40326201771537,17.297121852237392,75.79766898059314,3.2774313352695215,3.4223451602722323,4.705581483315894,4.941355623094533,0.5190948288703109,3.1381804770359394 +l0.03,26321.55088467229,17.337614337387453,18.9197921050442,75.76725252787328,2.776073997161351,4.770693507293791,4.739880915173033,5.657886610058391,0.5658419883378385,3.4324687116868646 +l0.1,37346.284503486124,17.736224548692643,19.820694251379123,84.62530263971136,2.4977027911193157,5.175052017193905,4.299931397428465,5.659113316978163,0.6757311127900032,3.009051999783622 +l0.3,40984.23285762958,16.898280271659456,18.795789830547022,84.86742884423965,2.3784240957673113,4.5520291736025085,4.1636740756618895,5.070038506807206,0.6940762651236411,2.813210954269435 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/dash_swing.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/dash_swing.csv new file mode 100644 index 0000000000..6f3313f5dd --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/dash_swing.csv @@ -0,0 +1,52 @@ +,p24,p25,o24,o25 +AK,-4.189894676208496,-5.673839092254639,-4.373375415802002,-1.7095413208007812 +AL,-5.012664794921875,-4.470902442932129,-2.8875207901000977,-2.7333478927612305 +AR,-1.5955448150634766,-2.695366144180298,-1.4236054420471191,-1.9772796630859375 +AZ,-10.281723976135254,-9.662915229797363,-3.781346321105957,-6.3656511306762695 +CA,-3.736156463623047,-3.880396842956543,-4.793203353881836,-5.535208702087402 +CO,-0.6606168746948242,-0.8275508880615234,-0.8121490478515625,-0.9536361694335938 +CT,-1.7586374282836914,-1.7703189849853516,-2.002377510070801,-2.030771255493164 +DC,-1.3295745849609375,-2.9570493698120117,-8.179778099060059,-7.9533491134643555 +DE,-2.33499813079834,-2.279691696166992,-5.36961555480957,-5.435258865356445 +FL,-3.865865707397461,-3.357553482055664,-5.740966796875,-3.9676551818847656 +GA,-3.080746650695801,-2.6071701049804688,-4.445429801940918,-3.4896020889282227 +HI,-3.5331966876983643,-2.710688829421997,-2.608574390411377,-2.785074472427368 +IA,-1.2073469161987305,-1.085604190826416,-0.9085164070129395,-0.8048229217529297 +ID,-1.167829990386963,-1.0795774459838867,-1.1714277267456055,-1.901484489440918 +IL,-7.139523506164551,-6.458962440490723,-4.282228469848633,-8.83888053894043 +IN,-3.4897637367248535,-3.511981964111328,-2.219841957092285,-2.1886167526245117 +KS,-4.764968395233154,-4.5028886795043945,-6.837752819061279,-5.541018486022949 +KY,-3.459348201751709,-3.3902740478515625,-2.6096558570861816,-2.5431671142578125 +LA,-5.638120174407959,-4.8973894119262695,-3.1079702377319336,-1.4829511642456055 +MA,-4.3399858474731445,-3.395580291748047,-3.340383529663086,-3.3914051055908203 +MD,-0.8330593109130859,-7.321868896484375,-1.5074882507324219,-9.015921592712402 +ME,-2.779177188873291,-2.7190308570861816,-2.5734190940856934,-2.655895233154297 +MI,-2.7965292930603027,-4.478377103805542,-2.080575466156006,-3.4591875076293945 +MN,-0.5588521957397461,-0.5429868698120117,-1.079054832458496,-0.9754786491394043 +MO,-5.693965435028076,-6.024465084075928,-6.493651390075684,-8.944635391235352 +MS,-4.121949672698975,-4.28740119934082,-5.5541839599609375,-4.007966995239258 +MT,-0.7315001487731934,-0.6603364944458008,-0.8444640636444092,-0.768653154373169 +NC,-2.9216790199279785,-2.721771240234375,-4.820042610168457,-4.398758888244629 +ND,-1.095254898071289,-1.1478958129882812,-0.9279356002807617,-1.2256460189819336 +NE,-5.928585529327393,-4.526432991027832,-6.791402339935303,-6.594109296798706 +NH,-3.1012496948242188,-1.7489027976989746,-1.7163872718811035,-1.8274922370910645 +NJ,-1.2045764923095703,-1.0750389099121094,-1.1831417083740234,-1.7260732650756836 +NM,-5.908068656921387,-5.670726776123047,-6.657066345214844,-5.910312652587891 +NV,-2.995401382446289,-2.899956703186035,-2.7631330490112305,-1.9952678680419922 +NY,-3.84584903717041,-3.301645278930664,-3.8091773986816406,-3.3273448944091797 +OH,-4.279670238494873,-3.564304828643799,-2.4238171577453613,-3.895282745361328 +OK,-0.9729490280151367,-1.6426286697387695,-1.3617620468139648,-2.4307985305786133 +OR,-0.7172441482543945,-3.117441177368164,-1.4312019348144531,-4.85249137878418 +PA,-2.39363956451416,-1.8110342025756836,-3.553032875061035,-2.6409196853637695 +RI,-10.134502410888672,-7.170621871948242,-7.31915807723999,-5.006382942199707 +SC,-3.361548900604248,-3.2307605743408203,-3.2702345848083496,-3.384464740753174 +SD,-4.291806697845459,-3.8360729217529297,-1.7623538970947266,-2.543172836303711 +TN,-4.139863014221191,-5.404635429382324,-4.014834403991699,-4.543438911437988 +TX,-3.4791202545166016,-3.509881019592285,-3.225029945373535,-3.6476917266845703 +UT,-1.6343493461608887,-2.336082935333252,-1.6495895385742188,-0.9567546844482422 +VA,-5.260139465332031,-5.2570648193359375,-2.962580680847168,-4.125798225402832 +VT,-0.4380931854248047,-0.2148294448852539,-0.7923793792724609,-0.10500144958496094 +WA,-2.850407600402832,-1.7509937286376953,-3.2660112380981445,-2.919992446899414 +WI,-2.336136817932129,-2.9149160385131836,-2.6450157165527344,-3.169431209564209 +WV,-9.820388793945312,-9.350496768951416,-9.833352088928223,-11.881651878356934 +WY,-1.9863653182983398,-1.8889093399047852,-1.3712310791015625,-1.6214418411254883 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/default_noise.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/default_noise.csv new file mode 100644 index 0000000000..5724828a11 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/default_noise.csv @@ -0,0 +1,52 @@ +state,model,se,clusters,boot,E,E_se,kish_units,kish_child,se_kish,top5_share,max_share,rate,moe,cse,gap,v,se_E,eb,eb_sd +AK,11.644427030114803,6.332772219323601,275,6.170486701013467,9.02435136344812,4.885226597501499,63.748837119203266,50.683170943904564,4.505511956055355,0.19423221737699323,0.05117110256604789,10.5,2.1,1.2765957446808511,1.1444270301148034,41.73370067717403,4.885226597501499,1.9175464315402309,2.5161255338574726 +AL,16.987156204496586,4.77804546692084,370,4.87593700931805,16.607525526139906,4.457521226817351,93.65080602332375,80.11303618156603,4.195477443277819,0.12846462653910432,0.03128785009369101,15.5,2.4,1.458966565349544,1.4871562044965856,24.958301922770634,4.457521226817351,1.9249041396913387,2.396895642823325 +AR,8.128457681954233,3.501990871084489,362,3.374601736545862,11.984027385304843,4.207918212883635,95.40156579863513,77.26925615612267,3.1087887556633698,0.12508251069460147,0.028531312452451954,13.3,2.7,1.6413373860182372,-5.171542318045768,14.957928475900278,4.207918212883635,-0.3498851244377801,2.2313399879951663 +AZ,16.951186290817823,4.931830911917693,392,5.04429499505136,22.489854894589172,7.45196258736064,73.65186969070464,58.621892301458054,4.900459997150592,0.16785520991848255,0.04382527920885634,13.3,2.3,1.398176291793313,3.6511862908178223,26.2778530866798,7.45196258736064,2.4086763651703227,2.410869741244434 +CA,24.416506507457978,2.653037840146489,959,2.636105151932288,17.9792497738772,2.3002033379485094,389.73613789462917,310.22219733081425,2.4390393588384507,0.04709966524994881,0.013179550394393388,17.9,1.0,0.60790273556231,6.516506507457979,7.408155517153288,2.3002033379485094,4.2943790358815965,1.9281440736488333 +CO,10.352503583390458,3.820461090793149,354,3.7031926383141713,10.85841464673308,5.163249629869176,61.08269892846661,49.549381249402316,4.3278545808931765,0.19780243468063882,0.046168833187365504,7.7,1.8,1.094224924012158,2.652503583390458,15.79325113059379,5.163249629869176,2.247283403538439,2.251244875053135 +CT,13.371307251776662,5.002325263747212,269,5.268242921633707,13.003823363877945,5.1976672703684255,57.005062496714245,52.95831553368593,4.676820838888071,0.15621614752149274,0.043138052035278214,12.8,3.2,1.9452887537993921,0.5713072517766609,28.807406379982012,5.1976672703684255,1.750349816252497,2.4346285278568662 +DC,34.36530331852773,10.601939242811653,145,10.82361623209995,52.70238736322671,11.23948871158529,48.28469823056736,28.828807980538993,8.84531878105965,0.32119708677987857,0.08696107137876122,20.3,3.7,2.2492401215805473,14.065303318527729,117.46019683279741,11.23948871158529,2.7732557872742154,2.648992182575729 +DE,22.42918607516834,6.87057378619714,319,6.727627935688211,12.957297100970527,6.403295665528966,49.22053959024031,45.32510287956483,6.195645091519167,0.19613879928573935,0.06210406102075545,8.7,2.6,1.580547112462006,13.72918607516834,49.70291332629128,6.403295665528966,3.5797585983287528,2.547294737325313 +FL,28.15649904995264,3.962926881590984,517,3.819927734482392,30.877687609630772,4.3268195304964685,204.65572110263983,150.56300605719844,3.665421578594129,0.08230334496942977,0.01961446418650838,18.4,1.8,1.094224924012158,9.756499049952641,16.902117653165856,4.3268195304964685,4.414513347881382,2.2753233660527505 +GA,18.428986886706188,3.973453086314512,421,3.975356708249677,14.400959324173607,4.2240528614966815,107.40193460095661,80.55440521824534,4.319903157093752,0.13444405503971948,0.04080603652542257,15.1,2.2,1.3373860182370823,3.328986886706188,17.576930790918357,4.2240528614966815,2.435265178857139,2.2888207572897574 +HI,7.019040434276882,2.7805868848504707,297,2.708565229091335,17.244110656462937,5.467568346396977,73.8681354911207,59.839501126761505,3.3024929707776116,0.14858269900164134,0.03845817438436234,13.0,2.6,1.580547112462006,-5.980959565723118,10.22979259891443,5.467568346396977,-1.3341888548897356,2.077265589987775 +IA,8.808982597327754,3.639254429438333,307,3.788580513657659,13.196425186307867,5.307155078469996,55.52320885797061,47.76461155498144,4.100962343393038,0.1865480342489132,0.05385757563487331,8.2,1.9,1.1550151975683889,0.6089825973277545,14.578232908800473,5.307155078469996,1.5659173877166617,2.221730200505174 +ID,6.9578273141402125,2.7396037844431986,308,2.7933256950589054,8.131051782451717,3.398010098890605,92.46790805538677,71.10906476146123,3.01727060089904,0.15102431900002034,0.03618082643769337,6.5,1.3,0.790273556231003,0.4578273141402125,8.129961189413493,3.398010098890605,1.2909881191335828,1.9725895805315508 +IL,14.678691537509486,3.8382020965079566,569,3.897080455583675,14.164989188467366,3.9458691449841883,105.04091701934067,82.93024363168735,3.8861177439886694,0.14473383337293894,0.03890983113331173,12.4,1.6,0.9726443768996961,2.278691537509486,15.677832417552672,3.9458691449841883,2.1276827055650673,2.248590341530365 +IN,12.734348293509468,3.915265266967416,397,4.1714586273409955,10.35264286905703,3.7170152103311205,85.7977094356774,68.160281661198,4.03779570703108,0.145623144623814,0.042892859785850786,10.6,2.2,1.3373860182370823,2.1343482935094684,17.117903472497467,3.7170152103311205,2.0796473813407728,2.279728818143474 +KS,9.659862114476377,4.696231456905677,313,4.610772577477521,9.962971000843263,4.638865158676821,60.13082056590417,55.562309121623045,3.963106060168454,0.1625448988489369,0.041621347413524086,9.7,2.5,1.519756838905775,-0.040137885523622074,24.364250746231292,4.638865158676821,1.5643338826677993,2.3901975720006843 +KY,18.537173560636017,6.281260601560727,272,6.259084176425292,18.59272575763501,5.9607061218880775,55.594811460142296,46.527965098235235,5.696976994805962,0.20171680634143896,0.05125574816823753,13.3,2.9,1.762917933130699,5.237173560636016,42.56211438367284,5.9607061218880775,2.5304129031195237,2.5198483117391564 +LA,12.087426776757605,3.536744221066976,365,3.386024308305543,20.194580933906224,4.886297374508776,106.16514531553632,82.628280973606,3.58614681488302,0.14415349259500945,0.0384313614455479,20.7,3.0,1.8237082066869301,-8.612573223242395,15.83447130838791,4.886297374508776,-1.3616576208224762,2.252185778740176 +MA,20.202673733449153,5.082037498794953,483,5.159606808657431,15.432276127472935,4.834691286253737,97.95418862733884,83.61518374552855,4.390925016947508,0.11277734692957907,0.026067279006202718,12.8,2.0,1.21580547112462,7.402673733449152,27.305288082774616,4.834691286253737,3.2035043185105425,2.4209652970344298 +MD,23.165434057221027,6.042028256286184,328,6.0609176334476915,23.306342504048914,7.644301328552849,55.0306328423584,45.03218404719873,6.286907011608641,0.20854957989909628,0.0529993892034269,10.7,2.5,1.519756838905775,12.465434057221028,38.81576629916153,7.644301328552849,3.7344771354052844,2.501900535126163 +ME,12.449100804293858,6.13486277739015,206,6.191957916264864,5.727408884425186,3.995284702465449,33.1152185167114,26.053480112368266,6.46794660302854,0.28916826922351135,0.09918609595025708,6.5,2.3,1.398176291793313,5.949100804293858,39.591438240340075,3.995284702465449,2.6732908155512205,2.5058622147197127 +MI,14.518361806845276,4.000674369632836,434,3.939856305851101,17.304622119910075,4.466847398810141,95.45588834362752,73.12746289970889,4.11959927188567,0.15066694809492948,0.03909548339184694,10.3,1.9,1.1550151975683889,4.218361806845275,17.339455518451036,4.466847398810141,2.706509369610683,2.2841636293574434 +MN,8.43142834945164,3.7306098701724806,381,3.8434528651633206,12.552582952572417,5.205129681507279,57.41306431441452,45.500650174527465,4.119220076581563,0.19564479033822102,0.04304348904430934,6.9,1.9,1.1550151975683889,1.5314283494516392,15.251510110042275,5.205129681507279,1.8835135779143228,2.238522973406886 +MO,18.479794346249818,5.195454214849073,326,5.172587441627019,15.310910601606178,5.385801713821571,70.00864242116391,50.03320419544817,5.487215819664648,0.1992520027252493,0.07069521514758342,9.7,2.3,1.398176291793313,8.779794346249819,28.9476414415259,5.385801713821571,3.434000652128179,2.435842845245955 +MS,12.942210983876368,3.985885849068236,321,4.035543649046535,11.967844917314173,3.4199699429054737,94.98469232700307,79.88648112699188,3.7555314958910575,0.11591565613463618,0.02682024452120574,19.1,2.6,1.580547112462006,-6.157789016123633,18.385415176514396,3.4199699429054737,-0.31564371017854187,2.303968759113046 +MT,2.5309435706442085,1.5861244617479786,213,1.664936313913927,17.493919205009192,8.6133534347748,74.05930053304587,52.10306918363349,2.17592017405911,0.1840901012855966,0.04348534335511726,9.3,2.3,1.398176291793313,-6.769056429355793,4.470687751088214,8.6133534347748,-3.4630241738398446,1.6720782972673776 +NC,18.100974606703634,4.667944264996081,449,4.755494968821379,15.75593178546281,4.228012087869523,107.2179877714125,84.33246704981973,4.192691844855072,0.1249171606340377,0.0334661255847847,14.4,2.2,1.3373860182370823,3.7009746067036335,23.578305022885846,4.228012087869523,2.4513349927675616,2.3809108701509687 +ND,11.130475374010498,4.0410378809574645,230,4.269886925408716,5.963289575658014,3.1942238429126566,60.78103291195482,44.25173305589728,4.727898486366507,0.22777119290750872,0.06484571330482254,10.3,2.1,1.2765957446808511,0.8304753740104971,17.95968385067045,3.1942238429126566,1.6960968735461133,2.29612469859813 +NE,10.711871739273764,4.344057457416736,330,4.622923969856289,8.837638979188856,3.682927837799346,67.67826119911027,51.290345812510424,4.318289237390328,0.18273118022255674,0.053159483820940795,7.1,1.9,1.1550151975683889,3.6118717392737647,20.2048952999519,3.682927837799346,2.475526550012298,2.334517149886991 +NH,10.516178236344569,4.614807837439194,244,4.644994564899235,9.200421541459054,4.80088414699402,50.91685631437766,42.66577443235297,4.696360370703935,0.21000816133572145,0.05895774367929081,7.5,2.4,1.458966565349544,3.016178236344569,23.42503481529806,4.80088414699402,2.287840807840974,2.379040393375113 +NJ,10.924964213914969,3.6050731998973897,518,3.4985090350623436,14.122366700093778,4.996143746436052,90.63484182608163,77.19060663380664,3.5506330174054304,0.11279753458059692,0.024701964743787854,13.3,1.9,1.1550151975683889,-2.375035786085032,14.330612883232348,4.996143746436052,0.5385042768327366,2.215259377645884 +NM,10.15133656941352,3.9062252843191314,327,3.977010919719209,9.17968345665703,4.037523674544619,74.88789094961987,59.144985462620426,3.926977919899776,0.16782700738241324,0.04591798806097022,10.9,2.1,1.2765957446808511,-0.7486634305864808,16.888292667191337,4.037523674544619,1.1963082059372567,2.2750381620902713 +NV,19.07006538200538,5.8055135948679,320,6.132664968392267,19.62339390283514,5.867883507743527,53.8189719639138,50.250231438792994,5.541937869539914,0.18013995987584386,0.05561232868980417,15.0,2.5,1.519756838905775,4.070065382005382,36.01364894959688,5.867883507743527,2.4015588766450193,2.4863506371339144 +NY,17.72711706952501,3.5698850096921197,669,3.660731763992116,16.353585694697465,3.5809831453243914,161.4744379901859,129.25975149615252,3.3590444891144924,0.08719741501659684,0.030392037402981874,16.2,1.9,1.1550151975683889,1.527117069525012,14.078139089038451,3.5809831453243914,1.8726353302374317,2.208488338457482 +OH,9.813281011698678,2.909392463247397,480,2.867236716065459,9.176284846402721,2.938347736066476,94.18129337404824,77.6802950561555,3.375382373959854,0.1314535345730297,0.03120412815851696,12.3,2.1,1.2765957446808511,-2.486718988301323,10.094261200538012,2.938347736066476,0.12492698509350153,2.071408192475008 +OK,17.214397377076793,4.784835016565054,309,4.71113255600303,14.082912185032024,4.386083548051616,75.74235127122593,60.08798706256565,4.870005946593579,0.15725939644814943,0.04683432032802124,9.9,2.0,1.21580547112462,7.3143973770767925,24.372829079363665,4.386083548051616,3.2885277452242647,2.390296209531971 +OR,16.287025373398983,5.206864576296931,366,5.246037490643189,19.664250906649208,6.664268153792332,61.385308231105604,48.04342769640842,5.327215691949326,0.18633095323347657,0.04681466573346644,11.0,2.4,1.458966565349544,5.287025373398983,29.24002215470366,6.664268153792332,2.7128200277930774,2.4383428673294776 +PA,14.135315176005452,3.248356681256722,623,3.440109385475408,12.767784123857526,3.539547978215054,119.95047632036783,95.79190114395048,3.559554460707664,0.1226662186815226,0.0374447586054056,11.1,2.0,1.21580547112462,3.0353151760054526,12.030004072281745,3.539547978215054,2.4308121601197157,2.146101766817567 +RI,17.87488341023184,7.039949763613315,218,7.112783142036048,19.33281244458234,8.0545158526458,43.968675446995185,39.305057429647746,6.111325151499424,0.21397513527135703,0.049623386945115075,8.4,2.3,1.398176291793313,9.474883410231838,51.515789617132064,8.0545158526458,2.9945884094134207,2.5531662922794784 +SC,9.884637709168972,3.5625308459596647,343,3.7951453311272516,16.065761649922194,5.287290470153665,82.27387151348555,65.43623808080012,3.6895264888701615,0.15339421777769296,0.03702599688546029,11.1,2.1,1.2765957446808511,-1.2153622908310275,14.321322723751342,5.287290470153665,0.9351450792696865,2.2150133710898867 +SD,11.338984093590906,4.7545850659567925,266,4.650975210752039,8.96203665111507,3.991951895048361,59.908756151183155,47.708909211681096,4.590433296626902,0.1775239978101076,0.03823858901471819,7.8,2.2,1.3373860182370823,3.538984093590906,24.394680511195396,3.991951895048361,2.4032510899943365,2.39054720876647 +TN,23.237083981929004,5.143819316231732,372,5.002203719639913,11.157478600297566,3.8488973208083026,98.05494750797263,74.04423436786264,4.908184983944115,0.13463596558353486,0.034477800825323195,10.0,1.7,1.033434650455927,13.237083981929004,27.526864334801648,3.8488973208083026,4.440660379050621,2.423059499345234 +TX,19.24437088161237,2.651235362434403,739,2.758475380463217,19.423503557645418,2.8065476454611633,296.2185581814811,223.47503857294353,2.637082708207148,0.06664215886078988,0.0179680867848099,16.1,1.3,0.790273556231003,3.1443708816123674,7.653581240700677,2.8065476454611633,2.5932231110700013,1.9438482251536329 +UT,13.21129757366149,3.6996600431023254,337,3.7993185253295163,9.803531004406727,3.9991252241495627,96.2499787464925,77.95828141247213,3.8350692177559416,0.1132693353110794,0.024101784191065928,7.3,1.6,0.9726443768996961,5.91129757366149,14.6335215184425,3.9991252241495627,3.3579767973872885,2.223152669553906 +VA,18.12834310047842,4.435237116964007,471,4.472316221707145,21.46223470703345,4.699151775310103,92.96168372450565,83.40381140900776,4.218449914258342,0.10882151728856482,0.024625783525523658,12.1,2.4,1.458966565349544,6.028343100478422,21.799911722503044,4.699151775310103,3.068928290971872,2.357900254838781 +VT,17.67870021257423,7.094454518557269,128,7.072170061550221,17.300133702601787,7.356953337151184,51.407008877146595,41.72119333812808,5.906128805650975,0.21517331214366198,0.06258083022891381,8.3,2.5,1.519756838905775,9.37870021257423,52.64094576527852,7.356953337151184,2.9650712101341568,2.556625989641898 +WA,14.206930055854658,4.267283147442617,410,4.1852444789254495,12.491540240583939,4.146824798916377,84.69243213256703,67.98896490960296,4.234060026519761,0.1397832513797281,0.03361894400680617,9.3,1.9,1.1550151975683889,4.906930055854657,19.543765567061712,4.146824798916377,2.8436757533191748,2.3239386686178296 +WI,7.034634654513513,3.08294960963598,356,3.177640058436483,9.744145371069523,5.124727394165319,63.91123916400042,51.500672411972296,3.563484828021995,0.17224256069516478,0.047070588357335706,7.3,1.7,1.033434650455927,-0.2653653454864866,10.572565472317606,5.124727394165319,1.0953159067671507,2.091616778863818 +WV,17.93170541550054,5.962326417829841,294,6.099167133706788,14.862075940319261,5.576408326391771,76.67986452201751,55.37824601115169,5.155002782179925,0.19033458896045133,0.044526712098936806,11.3,2.4,1.458966565349544,6.631705415500541,37.677919751559465,5.576408326391771,2.8123190604516104,2.4958305726071512 +WY,8.787559151426471,3.416415435764844,191,3.516390421576282,8.723064218446835,3.639362921005805,68.56604856255444,54.1274268532679,3.848154308199441,0.17625875748639,0.045756790106534245,6.5,1.4,0.8510638297872339,2.2875591514264713,12.396204072104403,3.639362921005805,2.1428935047140554,2.1583419507169372 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/default_noise_raw.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/default_noise_raw.csv new file mode 100644 index 0000000000..7a908171f8 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/default_noise_raw.csv @@ -0,0 +1,52 @@ +state,model,se,clusters,boot,E,E_se,kish_units,kish_child,se_kish,top5_share,max_share +AK,11.644427030114803,6.332772219323601,275,6.170486701013467,9.02435136344812,4.885226597501499,63.748837119203266,50.683170943904564,4.505511956055355,0.19423221737699323,0.05117110256604789 +AL,16.987156204496586,4.77804546692084,370,4.87593700931805,16.607525526139906,4.457521226817351,93.65080602332375,80.11303618156603,4.195477443277819,0.12846462653910432,0.03128785009369101 +AR,8.128457681954233,3.501990871084489,362,3.374601736545862,11.984027385304843,4.207918212883635,95.40156579863513,77.26925615612267,3.1087887556633698,0.12508251069460147,0.028531312452451954 +AZ,16.951186290817823,4.931830911917693,392,5.04429499505136,22.489854894589172,7.45196258736064,73.65186969070464,58.621892301458054,4.900459997150592,0.16785520991848255,0.04382527920885634 +CA,24.416506507457978,2.653037840146489,959,2.636105151932288,17.9792497738772,2.3002033379485094,389.73613789462917,310.22219733081425,2.4390393588384507,0.04709966524994881,0.013179550394393388 +CO,10.352503583390458,3.820461090793149,354,3.7031926383141713,10.85841464673308,5.163249629869176,61.08269892846661,49.549381249402316,4.3278545808931765,0.19780243468063882,0.046168833187365504 +CT,13.371307251776662,5.002325263747212,269,5.268242921633707,13.003823363877945,5.1976672703684255,57.005062496714245,52.95831553368593,4.676820838888071,0.15621614752149274,0.043138052035278214 +DC,34.36530331852773,10.601939242811653,145,10.82361623209995,52.70238736322671,11.23948871158529,48.28469823056736,28.828807980538993,8.84531878105965,0.32119708677987857,0.08696107137876122 +DE,22.42918607516834,6.87057378619714,319,6.727627935688211,12.957297100970527,6.403295665528966,49.22053959024031,45.32510287956483,6.195645091519167,0.19613879928573935,0.06210406102075545 +FL,28.15649904995264,3.962926881590984,517,3.819927734482392,30.877687609630772,4.3268195304964685,204.65572110263983,150.56300605719844,3.665421578594129,0.08230334496942977,0.01961446418650838 +GA,18.428986886706188,3.973453086314512,421,3.975356708249677,14.400959324173607,4.2240528614966815,107.40193460095661,80.55440521824534,4.319903157093752,0.13444405503971948,0.04080603652542257 +HI,7.019040434276882,2.7805868848504707,297,2.708565229091335,17.244110656462937,5.467568346396977,73.8681354911207,59.839501126761505,3.3024929707776116,0.14858269900164134,0.03845817438436234 +IA,8.808982597327754,3.639254429438333,307,3.788580513657659,13.196425186307867,5.307155078469996,55.52320885797061,47.76461155498144,4.100962343393038,0.1865480342489132,0.05385757563487331 +ID,6.9578273141402125,2.7396037844431986,308,2.7933256950589054,8.131051782451717,3.398010098890605,92.46790805538677,71.10906476146123,3.01727060089904,0.15102431900002034,0.03618082643769337 +IL,14.678691537509486,3.8382020965079566,569,3.897080455583675,14.164989188467366,3.9458691449841883,105.04091701934067,82.93024363168735,3.8861177439886694,0.14473383337293894,0.03890983113331173 +IN,12.734348293509468,3.915265266967416,397,4.1714586273409955,10.35264286905703,3.7170152103311205,85.7977094356774,68.160281661198,4.03779570703108,0.145623144623814,0.042892859785850786 +KS,9.659862114476377,4.696231456905677,313,4.610772577477521,9.962971000843263,4.638865158676821,60.13082056590417,55.562309121623045,3.963106060168454,0.1625448988489369,0.041621347413524086 +KY,18.537173560636017,6.281260601560727,272,6.259084176425292,18.59272575763501,5.9607061218880775,55.594811460142296,46.527965098235235,5.696976994805962,0.20171680634143896,0.05125574816823753 +LA,12.087426776757605,3.536744221066976,365,3.386024308305543,20.194580933906224,4.886297374508776,106.16514531553632,82.628280973606,3.58614681488302,0.14415349259500945,0.0384313614455479 +MA,20.202673733449153,5.082037498794953,483,5.159606808657431,15.432276127472935,4.834691286253737,97.95418862733884,83.61518374552855,4.390925016947508,0.11277734692957907,0.026067279006202718 +MD,23.165434057221027,6.042028256286184,328,6.0609176334476915,23.306342504048914,7.644301328552849,55.0306328423584,45.03218404719873,6.286907011608641,0.20854957989909628,0.0529993892034269 +ME,12.449100804293858,6.13486277739015,206,6.191957916264864,5.727408884425186,3.995284702465449,33.1152185167114,26.053480112368266,6.46794660302854,0.28916826922351135,0.09918609595025708 +MI,14.518361806845276,4.000674369632836,434,3.939856305851101,17.304622119910075,4.466847398810141,95.45588834362752,73.12746289970889,4.11959927188567,0.15066694809492948,0.03909548339184694 +MN,8.43142834945164,3.7306098701724806,381,3.8434528651633206,12.552582952572417,5.205129681507279,57.41306431441452,45.500650174527465,4.119220076581563,0.19564479033822102,0.04304348904430934 +MO,18.479794346249818,5.195454214849073,326,5.172587441627019,15.310910601606178,5.385801713821571,70.00864242116391,50.03320419544817,5.487215819664648,0.1992520027252493,0.07069521514758342 +MS,12.942210983876368,3.985885849068236,321,4.035543649046535,11.967844917314173,3.4199699429054737,94.98469232700307,79.88648112699188,3.7555314958910575,0.11591565613463618,0.02682024452120574 +MT,2.5309435706442085,1.5861244617479786,213,1.664936313913927,17.493919205009192,8.6133534347748,74.05930053304587,52.10306918363349,2.17592017405911,0.1840901012855966,0.04348534335511726 +NC,18.100974606703634,4.667944264996081,449,4.755494968821379,15.75593178546281,4.228012087869523,107.2179877714125,84.33246704981973,4.192691844855072,0.1249171606340377,0.0334661255847847 +ND,11.130475374010498,4.0410378809574645,230,4.269886925408716,5.963289575658014,3.1942238429126566,60.78103291195482,44.25173305589728,4.727898486366507,0.22777119290750872,0.06484571330482254 +NE,10.711871739273764,4.344057457416736,330,4.622923969856289,8.837638979188856,3.682927837799346,67.67826119911027,51.290345812510424,4.318289237390328,0.18273118022255674,0.053159483820940795 +NH,10.516178236344569,4.614807837439194,244,4.644994564899235,9.200421541459054,4.80088414699402,50.91685631437766,42.66577443235297,4.696360370703935,0.21000816133572145,0.05895774367929081 +NJ,10.924964213914969,3.6050731998973897,518,3.4985090350623436,14.122366700093778,4.996143746436052,90.63484182608163,77.19060663380664,3.5506330174054304,0.11279753458059692,0.024701964743787854 +NM,10.15133656941352,3.9062252843191314,327,3.977010919719209,9.17968345665703,4.037523674544619,74.88789094961987,59.144985462620426,3.926977919899776,0.16782700738241324,0.04591798806097022 +NV,19.07006538200538,5.8055135948679,320,6.132664968392267,19.62339390283514,5.867883507743527,53.8189719639138,50.250231438792994,5.541937869539914,0.18013995987584386,0.05561232868980417 +NY,17.72711706952501,3.5698850096921197,669,3.660731763992116,16.353585694697465,3.5809831453243914,161.4744379901859,129.25975149615252,3.3590444891144924,0.08719741501659684,0.030392037402981874 +OH,9.813281011698678,2.909392463247397,480,2.867236716065459,9.176284846402721,2.938347736066476,94.18129337404824,77.6802950561555,3.375382373959854,0.1314535345730297,0.03120412815851696 +OK,17.214397377076793,4.784835016565054,309,4.71113255600303,14.082912185032024,4.386083548051616,75.74235127122593,60.08798706256565,4.870005946593579,0.15725939644814943,0.04683432032802124 +OR,16.287025373398983,5.206864576296931,366,5.246037490643189,19.664250906649208,6.664268153792332,61.385308231105604,48.04342769640842,5.327215691949326,0.18633095323347657,0.04681466573346644 +PA,14.135315176005452,3.248356681256722,623,3.440109385475408,12.767784123857526,3.539547978215054,119.95047632036783,95.79190114395048,3.559554460707664,0.1226662186815226,0.0374447586054056 +RI,17.87488341023184,7.039949763613315,218,7.112783142036048,19.33281244458234,8.0545158526458,43.968675446995185,39.305057429647746,6.111325151499424,0.21397513527135703,0.049623386945115075 +SC,9.884637709168972,3.5625308459596647,343,3.7951453311272516,16.065761649922194,5.287290470153665,82.27387151348555,65.43623808080012,3.6895264888701615,0.15339421777769296,0.03702599688546029 +SD,11.338984093590906,4.7545850659567925,266,4.650975210752039,8.96203665111507,3.991951895048361,59.908756151183155,47.708909211681096,4.590433296626902,0.1775239978101076,0.03823858901471819 +TN,23.237083981929004,5.143819316231732,372,5.002203719639913,11.157478600297566,3.8488973208083026,98.05494750797263,74.04423436786264,4.908184983944115,0.13463596558353486,0.034477800825323195 +TX,19.24437088161237,2.651235362434403,739,2.758475380463217,19.423503557645418,2.8065476454611633,296.2185581814811,223.47503857294353,2.637082708207148,0.06664215886078988,0.0179680867848099 +UT,13.21129757366149,3.6996600431023254,337,3.7993185253295163,9.803531004406727,3.9991252241495627,96.2499787464925,77.95828141247213,3.8350692177559416,0.1132693353110794,0.024101784191065928 +VA,18.12834310047842,4.435237116964007,471,4.472316221707145,21.46223470703345,4.699151775310103,92.96168372450565,83.40381140900776,4.218449914258342,0.10882151728856482,0.024625783525523658 +VT,17.67870021257423,7.094454518557269,128,7.072170061550221,17.300133702601787,7.356953337151184,51.407008877146595,41.72119333812808,5.906128805650975,0.21517331214366198,0.06258083022891381 +WA,14.206930055854658,4.267283147442617,410,4.1852444789254495,12.491540240583939,4.146824798916377,84.69243213256703,67.98896490960296,4.234060026519761,0.1397832513797281,0.03361894400680617 +WI,7.034634654513513,3.08294960963598,356,3.177640058436483,9.744145371069523,5.124727394165319,63.91123916400042,51.500672411972296,3.563484828021995,0.17224256069516478,0.047070588357335706 +WV,17.93170541550054,5.962326417829841,294,6.099167133706788,14.862075940319261,5.576408326391771,76.67986452201751,55.37824601115169,5.155002782179925,0.19033458896045133,0.044526712098936806 +WY,8.787559151426471,3.416415435764844,191,3.516390421576282,8.723064218446835,3.639362921005805,68.56604856255444,54.1274268532679,3.848154308199441,0.17625875748639,0.045756790106534245 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/default_paired.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/default_paired.csv new file mode 100644 index 0000000000..87b72d2e1f --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/default_paired.csv @@ -0,0 +1,53 @@ +state,n,snap_c,snap_p,house_c,house_p,lunch_c,lunch_p,wic_c,wic_p,eng_c,eng_p,eitc_c,eitc_p,actc_c,actc_p,sttax_c,sttax_p,exp_c,exp_p,geo_ratio +AK,151,949.3729283004988,5621.295014456027,1830.8700812739703,33.33994012213777,1020.3183956393424,3050.0791021437135,39.66292970226499,715.6650292522562,301.6410271044397,301.6410271044397,1820.3406252855111,1863.0119987990872,2103.78106783166,2117.41365895268,0.0,0.0,7682.537326131264,7264.850233188141,0.9817828191653676 +AL,197,1633.5970719022148,6232.626682527898,5.532494118724164,0.003472706792504948,1259.8802430526093,1822.1067936188565,242.14087991855737,653.8365371831013,0.01214077986187485,0.01214077986187485,3579.35744076113,3766.0493295051165,2387.305908051451,2498.0952914192,892.5897831599661,984.4108389600456,7791.684130257503,7311.631795074401,1.0062974228313188 +AR,203,2074.097731073239,2224.3523089902455,175.53381535687726,177.49133080438708,1511.7937665853162,2057.323664672746,346.79279101108295,419.91417087559114,0.0026444555152636885,0.0026444555152636885,3722.9010282643158,3898.5926392954307,2342.9698198552906,2426.805157986369,585.6059595260186,561.3510600546518,5582.648495587591,5025.886418335295,1.0018672113325457 +AZ,202,2527.520648996794,4879.129732300132,813.5631652434174,344.32812959184946,1328.172016500401,1708.278690411686,316.5027715696383,610.8907744475467,4.60093604810759e-06,4.60093604810759e-06,3341.0591737729524,2701.9813894328,2258.444132174478,2380.3992681816467,7.237598547152557,199.77317408793007,4548.111814513874,3974.505415084967,1.0212953905042006 +CA,326,1583.1292294354487,3824.900940790037,1250.8019672598791,344.62467640812565,1291.8507603936928,2047.468685391086,183.92227200735974,372.1481436619907,51.84844220705737,51.84844220705737,2691.5210314820924,2000.7462928738305,1489.4471956038085,1587.5007649398663,-337.97439343193065,-159.687118361219,7174.626560461107,6537.578136419894,1.0340036189704742 +CO,181,3763.5311224050047,6704.096261638298,1814.970995433759,34.80183632018428,1614.7981885239747,2413.18552758463,184.55403948408764,558.8017859017286,204.86100442355027,204.86100442355027,3712.0724049066703,3842.9792702657073,2414.6602121481005,2452.503800456776,-4646.8578958486605,-8959.070947099843,6044.082481105889,5018.136107173503,1.0472930138688659 +CT,147,1813.3168305806917,3697.172498134421,2378.199844881395,0.6091909443546775,1146.6165841658915,1475.9218781534664,120.03520758249238,173.31725795181973,356.08419351320987,356.08419351320987,2674.0709390660486,2776.116330447348,1285.8612055427127,1560.018800006731,110.74163070305849,126.54036871363843,13728.567864501554,13461.495944108101,1.016603608446411 +DC,81,2343.5607584508157,6485.3825674534455,4839.176107394211,1927.3783019596683,359.2272816319612,1960.4473854988544,224.98611416106831,1194.542719112103,50.78762682979098,50.78762682979098,2457.4511958843086,1774.0675367433232,2043.036498880869,2113.133462950159,-765.9509372102724,-1092.4025287712263,5457.327844104755,4862.831005965879,0.9851049788579949 +DE,172,4209.582797040339,4884.66657941051,1112.65139077276,649.6374086836653,2016.6486386995468,2240.385820910001,108.68260675625265,230.16409573368477,15.653245316386172,15.653245316386172,2985.0448557510726,3146.132835947715,2268.016233382865,2352.7194400588546,488.8502927185603,723.1367977141093,6120.978551236069,5777.149608785021,1.001032559292028 +FL,242,1957.6783812478347,5988.717662852995,272.45240732027213,0.00520379740557326,1094.9449457750786,1741.8599484951535,263.20247861382325,847.0579462390215,24.913041465382737,24.913041465382737,3764.6519721853706,3610.035178923789,1938.522838642584,2062.6568183769486,0.0,0.0,6749.070789815816,6131.371884903824,1.0278933270988164 +GA,227,1994.6004698890008,4042.2549156565847,77.04701110560546,7.094675762614614e-05,1040.0606801418933,1294.8621806811532,84.9742405905925,785.3204598093215,3.5684693699345997,3.5684693699345997,3727.2861351323377,4022.309555919561,1872.2594319270713,1975.4682793911038,1364.9356465999458,1237.5747089596493,6931.958016179198,6407.833365980652,1.0529073965851101 +HI,149,3689.0127146446557,15134.43760528871,4916.200064388073,1822.7637879807162,1069.8888131495173,1559.2540387752683,928.6028244527232,1017.0968258239127,6.938278363861172e-05,6.938278363861172e-05,1933.0078714115814,2338.531585340746,2307.0294293394268,2395.9810445305934,1207.2301863425296,781.7438505264256,3600.0861217013153,2845.3793772056033,0.9735680387851162 +IA,184,1644.1517296987208,2698.695034415145,0.001173456464769393,0.000583505143329911,937.3761399734423,1374.0481265737615,153.9760825525614,730.7973682765044,78.7704738717524,78.7704738717524,2888.9078168089654,2740.4366343620227,1920.4676167505477,2033.5652072245741,739.1686592428894,521.5770930912737,9425.632153861117,9020.186701831502,1.001472369806956 +ID,153,732.0262085361078,1915.5271068644488,432.4338899649257,0.0,688.7781667505074,644.9347609173578,231.5836469962159,397.35211951904574,0.5948514701804839,0.5948514701804839,1335.9463025542302,1712.2518050649933,1634.4060743849534,1944.4531647824115,170.52319602244148,63.36930056726149,8449.97308305158,7531.697143442515,1.0163880938306795 +IL,272,4498.160086658185,6077.6517116200675,2207.5947306555254,216.61630359776547,1099.3495609716701,1504.3180511121154,148.15272792794357,878.2668644269899,197.69365949312876,197.69365949312876,3708.76295185782,3697.2780220147415,2129.9047690089924,2173.171630718861,500.76603233413107,368.83501706864257,6350.620439534459,5944.597053658848,1.0031628578061418 +IN,220,2365.02001827323,3885.4547292810366,344.86777143968004,0.006413196970978574,1626.917300007358,2112.684291215449,148.05562785789792,360.67022820906993,68.14024858965213,68.14024858965213,2631.9031324558528,2172.9154952407503,2826.350271646488,2826.21804648505,1573.6753955919992,1029.2316859561975,9991.865180290804,9419.708658439484,0.9937924050056054 +KS,167,370.5357447599507,1341.4445803073233,411.0098211942236,0.0006343370997989951,1012.5502357113669,1315.8548470237413,112.99449946837561,551.9004676833105,181.1026096895117,181.1026096895117,2016.3103149344904,2095.5753786000064,2586.522052427468,2668.9040317130502,940.2775703353541,910.3539486325789,9685.233723741945,9113.72401598848,1.011918373409981 +KY,149,3481.077389371535,4471.933720030508,0.001054126493097597,0.0002474114498599381,1394.8623016716922,1811.3491170282884,274.6010822414309,1010.072056658684,34.47374822456829,34.47374822456829,3108.54954809032,2549.8598280354095,2641.9273740389676,2042.42538684623,1616.8684977246041,1063.395830289345,5373.83785347123,4644.060183759894,1.0071061156548928 +LA,192,1286.2410533786044,4662.639323226623,1242.8034246457923,217.15302833266477,1586.1311289841933,1841.8318818953985,139.88474121926984,314.1056749851096,64.1098377447884,64.1098377447884,3278.042314391667,4172.836745876652,1939.8112264348827,2117.624700385244,5.384690198809109,489.09038801086615,6472.17789150685,6311.8989221941565,1.0135623962271878 +MA,214,2732.3861213389164,6152.979164513513,3294.483789765955,642.5145691080893,1234.0730824916236,1731.0268838737215,338.19102349428596,668.8406465856551,253.40168306803915,253.40168306803915,3883.898126777957,2673.875865815249,2043.6464231992038,1820.1889208985936,-545.8959234811641,-810.5218873629891,4168.9191688586925,3916.9812262925793,0.9810086053990609 +MD,177,838.3778277668763,4987.003146772719,121.30015468869836,0.0019120371462404944,846.2329214437605,1380.2595329100027,287.4127821242828,455.9047528314771,67.67018794426026,67.67018794426026,2630.242311393635,1754.632879105155,1887.768087298562,1710.1273346681544,926.7160895648012,404.87297308575165,8915.200690841484,8485.538393993344,0.9892481709982173 +ME,130,4267.011751060322,2532.0593773490937,1416.5144381190712,72.36452543549342,1372.3095269080827,1946.9951980330075,173.86944674679134,577.0454494127285,221.46701052651085,221.46701052651085,2349.2506722485236,2512.833627046639,1353.4541017047518,1316.362016893408,-588.0197078672506,-472.6002060557215,6880.799229865373,5837.959936931795,1.027065681068397 +MI,215,3195.031144944672,4423.960546288415,853.1379025537725,2.7307164391993848e-05,832.5610232189314,1887.190563160893,178.25213063153706,654.560599288815,174.31279396176686,174.31279396176686,2677.4725293225597,3049.9670051714797,2032.912455520452,2052.0858727226946,840.8549693673035,-376.3455640888013,5992.721031656976,5034.676947531328,1.0044439537594871 +MN,197,1518.5845076772987,2311.5818370907846,1118.47017993156,0.007072734216808725,1186.3022804350207,1756.7879781913352,775.6714276753149,1073.0222292201795,180.79732117507226,180.79732117507226,3377.5090407577563,3120.0226787431066,2426.8706166768084,2601.8354684924293,-2401.3882564335704,-3063.96263098211,9958.109162947489,9584.455470727822,0.9438518580646132 +MO,166,1226.0743437213887,6558.967291034683,148.54846907579002,0.0,639.6817786208165,3262.0058653452743,32.64289673380106,637.6739775859232,115.59042080805773,115.59042080805773,2623.4942075108006,3233.9125229582337,3161.148612630388,3470.5366493833308,720.3641746673154,566.7746424257142,6139.8478262300305,5566.978718983585,1.0124940669840976 +MS,179,1374.290157289659,3156.9898125796353,400.61336998043646,21.800800914397954,873.641143170056,1283.8972630900714,33.51248800510692,401.7641809728301,40.25011718869057,40.25011718869057,3785.984181903916,4099.885151948632,2113.518789069628,2193.935993360339,436.55981121557863,295.73745036504374,6489.462011449377,5992.727562475621,0.9930133447225208 +MT,103,1915.5634968438849,3897.694679452159,238.00358844010373,1.6562497161466328e-05,1700.7492530985337,2261.4011999968384,290.0920793483821,837.9701856527056,39.955324077263406,39.955324077263406,2759.4019266056334,2871.7879387455837,2739.624651324462,2779.564361261671,5964.956775606566,5727.315430310377,8045.101101722996,7058.6884156549895,1.0010320703812872 +NC,222,2971.144506885167,4218.169553228629,408.55052238677706,178.0832341173512,897.8920741984316,1391.224338649364,168.29321116702138,699.520930713526,40.47118561363704,40.47118561363704,3856.2034968201374,4141.826116868694,2140.0449557137254,2232.924618303574,981.5882031256008,1319.0331107026936,7352.663364863712,7034.199144746266,1.0562661446685475 +ND,88,29.40681703871359,4169.635759304228,1316.3040890350262,0.005296478289126945,1678.082030747161,1669.9964974794234,170.2302280429051,619.3647922833923,11.502711582865633,11.502711582865633,3437.634668499672,3700.7522730179217,1720.7785022755527,2067.94682010395,3.005414850959374e-05,0.0,5624.345434161636,5084.211929052904,0.9861815516214147 +NE,180,644.8662396592495,907.0917072451595,0.0007473654065155958,0.0,604.2667655002338,207.44967456757345,211.8672735672333,965.8796733028745,25.97977770069509,25.97977770069509,2001.5669389535528,2065.323646576417,1721.2561038169347,1709.7183413814346,934.3728972497724,-909.4323259004756,9487.948325808084,9075.891439511104,1.0099001191837844 +NH,140,2065.686156425687,2111.586812088655,954.8155200838796,8.087301682510194e-05,452.9860726139359,1277.3276226129256,315.4358785465132,981.8513911305159,272.1314505058321,272.1314505058321,2767.937126496294,2992.5782295927065,1865.0262655988597,1899.0003544582632,0.000732964346665196,0.00023587480724492876,6020.778516663803,5540.825322894348,1.0175542585417945 +NJ,299,2376.8893162603977,3506.8634796866936,456.8514861628147,32.85816801742298,1060.9725547161613,1121.3540108971633,200.16466227748427,461.3967718084233,306.23377229194,306.23377229194,3417.2251097046696,2724.72779796565,1796.6675582687228,1842.2024923469176,-931.0968833926988,-883.7943200210623,5632.007530982579,5425.259130451283,0.9978516643274088 +NM,172,5394.472971001547,7639.79131389196,1943.622459064218,545.4553909883741,1698.9870873832026,2149.67881903771,476.588204500585,1011.521895260445,59.43106763560419,59.43106763560419,4225.599241705035,4267.836842881804,2651.374090776496,2949.0965132732927,-3186.8593112144413,-2715.482736440503,3911.2263742458026,3155.5018389978204,1.0263668587431074 +NV,180,1260.2772091315646,4720.94962032173,35.27937226180029,22.920516688799005,1104.4598915694041,2217.3838764623697,38.01109433484309,304.9974459951073,0.00020591773389149598,0.00020591773389149598,2227.6189042110127,2251.5300788535146,1515.7782180894148,1618.6889371592458,0.0,0.0,6432.029184833849,6103.083228569152,1.0019554771895172 +NY,327,2792.102073293907,7401.607785139724,1060.3370991085826,798.8941304685698,1109.23899920035,1942.886544651506,76.25583011406817,310.81383940386564,206.07161613957368,206.07161613957368,3171.356401432766,3008.1461868229676,2093.591023423997,2310.257909882274,-608.2545368021761,-403.2439420101178,3624.043410457888,3082.58356514122,1.0062490790424523 +OH,249,2991.6570461532237,5766.241265458086,514.9970939593516,0.00036956396059476784,740.0368207488597,1361.6384869916867,210.68361147529467,890.971337923526,185.56347685173964,185.56347685173964,3672.052603494,4162.463285768361,1898.2123466736748,2061.578021599799,138.1520529877409,130.85910593027978,5493.627422099002,5362.0694600795105,0.9964287093714271 +OK,156,3401.149307228062,5123.565448071635,363.5629552165434,267.4104273666336,1005.0839726860738,1377.908357466366,215.3920260566176,634.1199200294815,98.38800526249287,98.38800526249287,3558.0999168625476,3468.4475603949463,2044.8782786313059,2124.863821140808,670.9699351537855,573.4912121806369,8712.430503050491,8377.407308114087,0.9882482514314679 +OR,198,2095.467086350566,4253.334827736172,0.0002489569293866382,0.0,1328.1084049893411,2051.68140094757,239.8285355082549,639.8826409675112,112.35973035554841,112.35973035554841,1501.727307847,1590.9530867072442,1762.690082926532,1762.629844620607,1714.4983966252091,2552.4816331693273,5465.604859010726,4888.897551978182,1.0055658955219668 +PA,309,4752.5189859489765,5633.283502347526,180.75369410834818,0.0001024033484644392,1408.135415063136,1762.8837742597495,151.78287109533775,850.3945870209055,291.9107318225202,291.9107318225202,2207.009633389998,2150.004908620536,2582.5686716530254,2646.3935174880367,986.5109135011093,793.451696904316,6479.333532319634,5851.467537070428,1.0078707324604699 +RI,127,2048.1291651734546,2429.0981560662844,237.89775662220433,241.62927657431044,671.4339699833174,476.9193571408954,197.79100755972243,589.2028464920414,160.15859679385986,160.15859679385986,2493.4498500976565,2345.8335082557387,1581.2538241495179,1318.6487020809602,283.86024497623,804.9825097332007,8326.797085820624,7861.070146322111,1.0023378135398153 +SC,178,3211.250428061471,2988.6862185229106,59.13884020256115,0.006496558733858669,855.1629408672594,1231.4239862224497,129.5948023343363,492.07504040051487,0.0021049390392170004,0.0021049390392170004,3600.6684011387265,4037.8647360761765,2284.5790294103044,2328.458921355552,222.65574023163626,111.42116184107316,6583.004330564551,5968.7052806565525,1.008211162294826 +SD,141,750.701756572193,2299.6214687806673,286.5895911330959,0.0010878450102876304,547.9398772962172,1162.2522077210208,17.78683469972483,797.8113028165976,56.38755654964443,56.38755654964443,2182.572147675297,2870.447973555372,2815.060220660177,2772.0306089528513,0.0,0.0,14511.115690796303,13776.957871007637,0.990792403266794 +TN,212,1153.5253576532264,3675.3144447020527,1118.7586901665866,0.0,1318.674501558271,1605.7999830382023,95.58915213823504,278.78969386434323,56.22854608661109,56.22854608661109,2608.6140590811324,3172.239617831927,1739.3039083157257,2093.2492585279288,0.0,0.0,10637.5383107406,9843.188772150299,1.0073982220441433 +TX,310,1293.3444186208865,4372.130641825858,441.65536882938574,153.88077120321643,1045.2486937689443,1593.1634616586693,56.53866425175835,547.8711976507012,26.18351904884464,26.18351904884464,4105.254129299648,3943.604422245849,2283.0405187018646,2337.410596662051,0.0,0.0,7512.416150045178,7068.814887308051,1.026627186470972 +UT,177,1491.3779536905256,2796.7486344130534,1233.827169564572,0.2001610147361343,1182.3500416397198,964.1883334601384,328.53113896608346,943.8914746019698,0.01748509216533539,0.01748509216533539,1790.0621510242102,1845.214585128984,2193.6028654711854,2457.5811149818624,1371.0647833133817,1131.582531708584,21024.103594091386,20418.348748552286,1.028237013036623 +VA,223,2042.0058771602373,5629.9430589888525,406.40723540969924,0.0001221744675438873,776.1079171753717,1464.6390572125927,54.190705178634204,723.1485588905646,118.39086463243677,118.39086463243677,2720.9259816724298,2333.4885131105793,1837.8983002751959,1709.136650272018,243.84942569998805,400.9912306865783,4478.253176953143,3724.0998904375383,1.0002773725423069 +VT,63,129.82656605104708,2231.2174361965604,485.81711596213154,0.0,1404.8726024323664,1809.4428676523996,336.4115001925712,735.8656928442729,48.13730811733455,48.13730811733455,2278.940196687821,1251.2908842598144,831.1067610849013,794.127637647965,-531.0537708199116,-222.0043028136918,9294.676070757456,7605.057974140194,1.0122717805043868 +WA,188,1860.9849817190022,4473.033426846725,1964.0311020781774,0.003024975706003034,1662.9428886928808,2315.8045487358095,217.40886677275876,754.5341409799495,35.035551425600815,35.035551425600815,2755.9263268760606,1251.9456083623006,2175.3859246661495,2110.1692290557025,-182.30265627769685,-353.06022936170734,4135.158387789271,3316.15413006836,1.023313678670043 +WI,196,4397.518845056771,4806.647485695107,1471.2743967016224,52.92942535813691,1017.9707644115039,1770.5543647559348,272.50693001091133,533.5562885954528,320.7822361867115,320.7822361867115,2768.724936008046,2633.676296774597,1810.749780352466,1804.1517155322856,-200.9950560918322,-117.96240267851671,4043.632403956318,3942.501775669759,0.9918237732947764 +WV,172,3259.657506758474,9100.276631459832,1158.998624739075,0.0,2022.00058506202,2519.0017991813133,112.79527050494193,1138.3632255528596,527.944563838932,527.944563838932,3601.0373357044714,4018.2039789225164,2486.2750063371764,2598.007000693421,482.3328343423386,341.2380783582885,4916.72911869662,3273.584074468357,1.0014884049831165 +WY,86,61.72311017130472,185.04427596816055,0.012267118709900923,0.009350974449621928,776.1611591515241,1073.8968857303662,106.79019495290314,407.7410194905827,0.0028421667660806036,0.0028421667660806036,1104.3022594118704,1712.1484593357422,1095.4073692458164,1237.004448770852,0.0,0.0,8599.807762232542,8351.101178319219,0.9855135669216282 +US,9589,2249.906932822062,4790.034463743288,786.9696319503663,157.7864056458493,1135.028699866291,1727.469583930558,180.51024739827332,611.8596230676515,103.42438620107336,103.42438620107336,3182.004127725925,3037.383431459737,2062.406374828032,2134.3758803833375,148.30581127833102,31.017773745187817,6896.711131637543,6356.107844503804,1.0127405915871852 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/default_rentfix_states.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/default_rentfix_states.csv new file mode 100644 index 0000000000..f00c83ae25 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/default_rentfix_states.csv @@ -0,0 +1,52 @@ +state,census,was,fix,moe,step +AK,10.5,11.644427030114807,11.644427030114807,2.1,0.0 +AL,15.5,16.987156204496582,16.987156172693346,2.4,-3.1803235600591506e-08 +AR,13.3,8.128457681954233,8.12665370441204,2.7,-0.0018039775421918591 +AZ,13.3,16.951186290817823,18.420541058790104,2.3,1.4693547679722805 +CA,17.9,24.416506507457978,24.10827259793097,1.0,-0.3082339095270079 +CO,7.7,10.352503583390458,9.00042149640059,1.8,-1.3520820869898689 +CT,12.8,13.37130725177666,13.103727257080852,3.2,-0.26757999469580795 +DC,20.3,34.36530331852773,34.36530331852773,3.7,0.0 +DE,8.7,22.42918607516834,22.42918607516834,2.6,0.0 +FL,18.4,28.15649904995264,27.095564527709552,1.8,-1.0609345222430875 +GA,15.1,18.428986886706188,18.428921870197616,2.2,-6.501650857160257e-05 +HI,13.0,7.019040434276884,7.02263046625347,2.6,0.0035900319765858058 +IA,8.2,8.808982597327752,8.808981940130073,1.9,-6.571976793878775e-07 +ID,6.5,6.9578273141402125,6.9578273141402125,1.3,0.0 +IL,12.4,14.678691537509486,13.892808212545575,1.6,-0.7858833249639119 +IN,10.6,12.73434829350947,12.73435106019549,2.2,2.766686019839426e-06 +KS,9.7,9.659862114476377,9.659862114476377,2.5,0.0 +KY,13.3,18.537173560636017,18.53715922525417,2.9,-1.4335381845143047e-05 +LA,20.7,12.087426776757603,10.998922192762377,3.0,-1.0885045839952259 +MA,12.8,20.202673733449156,20.735055290041316,2.0,0.5323815565921599 +MD,10.7,23.16543405722103,22.20160300348038,2.5,-0.9638310537406518 +ME,6.5,12.449100804293858,12.449101305564115,2.3,5.012702573026218e-07 +MI,10.3,14.518361806845279,9.135550732308516,1.9,-5.382811074536763 +MN,6.9,8.43142834945164,8.431428334707942,1.9,-1.474369781817586e-08 +MO,9.7,18.479794346249818,17.93926242592331,2.3,-0.540531920326508 +MS,19.1,12.942210983876365,12.942210983876365,2.6,0.0 +MT,9.3,2.5309435706442085,2.500512766712494,2.3,-0.03043080393171449 +NC,14.4,18.100974606703634,16.366059471258783,2.2,-1.7349151354448509 +ND,10.3,11.1304753740105,11.13047552583656,2.1,1.5182606105668128e-07 +NE,7.1,10.711871739273764,10.7118714268824,1.9,-3.12391364332143e-07 +NH,7.5,10.516178236344567,7.823302559599673,2.4,-2.692875676744894 +NJ,13.3,10.924964213914969,12.202838563136197,1.9,1.2778743492212286 +NM,10.9,10.15133656941352,13.168284612343323,2.1,3.016948042929803 +NV,15.0,19.070065382005385,20.000062051758462,2.5,0.929996669753077 +NY,16.2,17.72711706952501,16.7627659883383,1.9,-0.9643510811867131 +OH,12.3,9.813281011698674,8.890005335970482,2.1,-0.9232756757281919 +OK,9.9,17.21439737707679,17.68328553393632,2.0,0.46888815685953134 +OR,11.0,16.287025373398986,17.05894482560417,2.4,0.7719194522051822 +PA,11.1,14.135315176005452,14.125219350458613,2.0,-0.01009582554683952 +RI,8.4,17.87488341023184,17.87488341023184,2.3,0.0 +SC,11.1,9.88463770916897,9.617223324446238,2.1,-0.2674143847227324 +SD,7.8,11.338984093590906,11.326160563799045,2.2,-0.012823529791861077 +TN,10.0,23.237083981929008,24.31226521388352,1.7,1.075181231954513 +TX,16.1,19.24437088161237,19.60031027631085,1.3,0.35593939469848124 +UT,7.3,13.21129757366149,13.211324362162902,1.6,2.678850141180078e-05 +VA,12.1,18.12834310047842,18.128333445817884,2.4,-9.654660537705695e-06 +VT,8.3,17.678700212574235,17.67870002324115,2.5,-1.8933308609803134e-07 +WA,9.3,14.206930055854656,14.265896489842294,1.9,0.05896643398763857 +WI,7.3,7.034634654513512,5.482848919611162,1.7,-1.5517857349023503 +WV,11.3,17.93170541550054,17.484239585466508,2.4,-0.44746583003403373 +WY,6.5,8.787559151426471,8.787559151426471,1.4,0.0 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/default_shapley.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/default_shapley.csv new file mode 100644 index 0000000000..73badc1230 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/default_shapley.csv @@ -0,0 +1,52 @@ +,priceyear,threshold_rest,cash,inkind,fed,payst,exp,E_census_flag,pe_2024,pe_all_swapped,pe_2025,year +AK,3.3608050203643165,-0.33936729029887136,2.0133125125282243,-2.6460439429041576,0.821201989053139,0.01279663143098456,-0.602630696864039,9.024351363448119,11.644425586757714,11.644425586757714,11.644427030114805,1.4433570907357307e-06 +AL,1.3183318859112512,1.872716040682047,-1.2939607142366065,-5.630536991827319,1.7011392854598284,0.08310380947648903,1.8555847996000019,16.607525526139906,16.513903641205598,16.513903641205598,16.987156204496582,0.4732525632909841 +AR,2.5540817340424318,0.29798093780734025,-1.6300929952769998,-4.970315373069428,0.34768173636066746,0.9388146278723541,-1.3955589860289515,11.984027385304842,8.126619067012252,8.126619067012252,8.128457681954234,0.0018386149419828968 +AZ,1.8207620014806611,-2.3728945721952783,-4.367061807524891,-4.576024508036879,2.458768285673739,1.2168455175322523,-1.387050286203167,22.489854894589175,15.283199525315613,15.283199525315613,16.951186290817823,1.66798676550221 +CA,3.734813616864572,3.9983482223438083,-3.0123724059105044,-2.5309403818033522,0.32827439277913373,0.9100596392788926,0.7992971388734389,17.9792497738772,22.20672999630319,22.20672999630319,24.416506507457978,2.2097765111547893 +CO,2.3569618035223394,1.6085212746847446,-1.3625943039942636,-1.2780729463765963,0.8501832122088124,-1.055260632986236,-1.1385427893273354,10.85841464673308,10.839610264464547,10.839610264464547,10.352503583390458,-0.4871066810740885 +CT,2.271271603388731,0.8490269445798393,-3.6414922706787896,-0.2798754696077862,-0.30075866111132926,1.2747226755707834,0.1945289676054879,13.003823363877943,13.37124715362488,13.37124715362488,13.371307251776658,6.009815177776545e-05 +DC,5.547207414901779,-2.9706911303668417,-8.28195726881857,-10.214454341133216,2.025732209658579,-4.791437015641988,-7.1470509143165195,52.7023873632267,26.86973631750992,26.86973631750992,34.36530331852772,7.495567001017804 +DE,3.9581170401120946,2.0604785613853944,-7.451893790453215,3.3285408814776885,2.3480383654405395,2.3167154792223883,0.0001367983154430194,12.957297100970528,19.51743043647086,19.51743043647086,22.42918607516834,2.9117556386974783 +FL,3.0188619207465237,1.8755076340242889,-2.61302442638674,-4.785740912870631,0.8406645979121391,0.08112042035364984,-1.6533379787304059,30.877687609630765,27.64173886467959,27.64173886467959,28.15649904995264,0.514760185273051 +GA,2.9980647023309768,5.255069854634639,-1.475494027095384,-4.257042375437337,0.7449608461766424,0.3787614025169008,-0.930319786375591,14.400959324173607,17.114959940924454,17.114959940924454,18.428986886706188,1.314026945781734 +HI,2.7865481742238227,-0.8175449821643097,-5.560900458323872,-5.4502092830208735,1.5273452528345322,0.20202467031311366,-1.0296673660068556,17.244110656462933,8.901706664318487,8.901706664318487,7.019040434276884,-1.882666230041603 +IA,0.7089033031831818,-1.8196371024399083,-1.850960945582794,-4.96657765056953,2.7384801764738746,0.40118595289503106,-0.47355260666894167,13.196425186307863,7.934266313598778,7.934266313598778,8.808982597327752,0.8747162837289739 +ID,0.6272234722454092,-0.28410040282524596,-2.6800883285942394,0.5123999842653562,1.2274133818765989,0.11269901109669594,0.6208052026968527,8.131051782451717,8.267404103213144,8.267404103213144,6.9578273141402125,-1.3095767890729313 +IL,5.013899745108192,0.6056672221530393,-4.793425091828129,-3.5738270061870403,1.6815041704720965,0.22090187795955257,0.7294644243282948,14.164989188467368,14.049174530473374,14.049174530473374,14.678691537509486,0.629517007036112 +IN,0.911694589043641,0.4385221004849856,-0.022582080428553572,-2.9334723825644367,2.1220310936645017,0.9428229216893627,0.6691250996228952,10.352642869057034,12.48078421056943,12.48078421056943,12.734348293509468,0.25356408294003785 +KS,1.208829242392519,0.7293630172656478,-0.7086763261737665,-1.8514835399518081,-0.44575899870011776,0.6050234527094212,0.005734533258932915,9.962971000843265,9.506002381644093,9.506002381644093,9.659862114476377,0.15385973283228438 +KY,3.5471439175373476,0.2187196371904262,-1.0906706120606506,-6.158256439680514,1.9078631287428505,0.03322300883614256,0.6825044936523845,18.59272575763501,17.733252891852995,17.733252891852995,18.537173560636017,0.8039206687830216 +LA,2.1946986500641503,0.6021045074112926,-4.8872099747062,-6.1336119585801026,0.4236087483282882,1.174007513770854,-1.0072161504703834,20.19458093390622,12.560962269724122,12.560962269724122,12.087426776757603,-0.4735354929665192 +MA,3.1504620947839825,1.824317791646738,-2.1512932748998423,-2.3851721573228892,2.7201819672862593,0.39138859785887997,0.886040144084859,15.432276127472939,19.86820129091093,19.86820129091093,20.202673733449156,0.33447244253822817 +MD,2.97249625382442,-1.6814742747720492,-2.998092953931356,-13.149218679022852,2.301804102472539,0.2584282552123607,0.0009505066893057412,23.306342504048917,11.011235714521286,11.011235714521286,23.16543405722103,12.154198342699745 +ME,1.2217293963410976,1.4986581861528971,2.6854598298722276,0.5438976565036788,0.5285312855381021,0.3828917293153594,-0.13966101691758645,5.727408884425186,12.448915951230964,12.448915951230964,12.449100804293858,0.00018485306289406367 +MI,1.949393687957881,0.18168664357080452,-3.2077604647093763,-3.067915041014814,-0.2888168792998045,-2.3453693451553077,0.32583363496835127,17.30462211991008,10.851674356227814,10.851674356227814,14.518361806845277,3.666687450617463 +MN,0.9958881932858108,-2.139190232384351,-1.8390293421403037,-2.817721124184953,1.179781840523287,0.7767361772425894,-0.2776146191462994,12.552582952572417,8.431433845768195,8.431433845768195,8.431428349451641,-5.496316553887937e-06 +MO,2.525285234964226,0.4371240070971101,-3.4962118050910957,-4.62959308702418,1.70708832589088,0.14567731621576566,2.7446197512378583,15.31091060160618,14.744900344896745,14.744900344896745,18.479794346249818,3.734894001353073 +MS,3.5098295754957576,-1.0385148782609601,-0.0785712601499286,-1.5045648869727495,-0.7629749839372522,-0.018800291832153548,0.8680365875875611,11.96784491731417,12.942284779244446,12.942284779244446,12.942210983876366,-7.379536807938791e-05 +MT,0.5577773574890139,0.3136967856775926,-6.176332077657837,-8.988299317619814,0.7404220233403311,-0.12222123623227765,-1.288019510472027,17.493919205009192,2.530943229534177,2.530943229534177,2.5309435706442085,3.411100313321924e-07 +NC,2.9917755138877893,1.5889517915483808,-3.9378451737128195,-4.658060467751194,1.5449345899330151,0.7586528397177827,0.8379867280707843,15.755931785462808,14.882327607156546,14.882327607156546,18.100974606703634,3.2186469995470883 +ND,0.4047400496250773,-0.09026307888463096,1.2563325709431499,-3.549040409978305,3.1914238537457535,-0.0696840527174508,3.551669514601349,5.963289575658015,10.658468022992958,10.658468022992958,11.130475374010501,0.47200735101754354 +NE,1.2960767368126376,0.12743794431720334,0.01817693138399376,-1.823662131288207,2.232723261325984,-0.15264217173790479,0.17359694359898634,8.837638979188856,10.709346493601549,10.709346493601549,10.711871739273764,0.0025252456722153482 +NH,3.0837204256743815,1.82454376204759,-8.180206286203951,3.7084724997140737,-1.2383708305092618,0.11590918405441983,0.07600508555678054,9.200421541459052,8.590495381793085,8.590495381793085,10.516178236344567,1.9256828545514821 +NJ,2.594862337861526,-0.046349521859947056,-1.9052847376211515,-3.9276541420271442,1.0620220631781778,0.04847714646746479,-1.0234554458273308,14.122366700093778,10.924984400265373,10.924984400265373,10.924964213914967,-2.0186350406348197e-05 +NM,0.8984443360241857,1.345765766159638,-1.7996477694093034,-3.23615974089942,2.3938654302839257,1.8519543175560549,-0.4825706994635374,9.179683456657028,10.151335096908571,10.151335096908571,10.15133656941352,1.472504948196729e-06 +NV,1.2780572340969762,0.15538364393189058,-0.8371691269923955,-3.4712094090605867,-0.4022519790696299,0.052032758542375775,-0.22155253596842953,19.623393902835147,16.17668448831535,16.17668448831535,19.070065382005385,2.8933808936900363 +NY,3.6688540626959734,2.925855721004915,-5.5621025524462855,-2.5489613687673462,1.3610938431669954,0.6383900023920127,0.7071016018252911,16.353585694697465,17.54381700456902,17.54381700456902,17.72711706952501,0.18330006495598994 +OH,2.9082863134583876,0.13223925491974475,-1.603410854540424,-1.981967575270292,-0.19320136079625766,0.4083430366090697,0.9667068080125256,9.17628484640272,9.813280468795472,9.813280468795472,9.813281011698674,5.42903201505851e-07 +OK,2.2507619572468056,-0.302401652731688,-0.9501987966650453,-2.949897696875654,0.7642730713738818,0.15176168971961204,0.7058568171615272,14.082912185032024,13.753067574261463,13.753067574261463,17.21439737707679,3.4613298028153263 +OR,0.6438555867545718,0.7542297393411018,-2.1713591501213183,-6.800482791273317,3.1285350558586917,0.5075668039504908,-2.1957512166856405,19.66425090664921,13.53084493447379,13.53084493447379,16.287025373398986,2.7561804389251954 +PA,1.6062834649456545,0.5424530179471139,-1.2907728999152983,-4.152542937970984,1.2634326999418022,0.23390647416397164,0.6854287132343312,12.767784123857524,11.655972656204115,11.655972656204115,14.135315176005454,2.479342519801339 +RI,4.410445374723934,0.36167593080258276,-8.506345200603583,-4.673537230681236,2.368739583227816,2.5921980933756896,1.837150687640257,19.33281244458234,17.723139683067803,17.723139683067803,17.87488341023184,0.1517437271640354 +SC,1.7637594676864115,-1.5867336498387754,-3.5912231132870795,-2.7464248536980085,0.36790953094148776,0.5937132790561693,-1.9793405032637237,16.065761649922194,8.887421807518676,8.887421807518676,9.88463770916897,0.9972159016502946 +SD,1.5274428131576496,-0.46686239926801004,-0.18135726210368344,-2.5926033021161374,3.044852837850543,-0.08639021869963183,0.3181767182611175,8.96203665111507,10.525295838196916,10.525295838196916,11.338984093590906,0.8136882553939895 +TN,2.255655284592354,1.4452316800238965,6.287566201536704,-4.080439968592732,2.180280486756023,0.2744145749825271,1.5605406948568774,11.15747860029757,21.08072755445322,21.08072755445322,23.23708398192901,2.1563564274757923 +TX,4.067480349194922,0.25842735649785353,-2.941430279692982,-4.386737336382392,0.6480292524583766,0.24275972632422,-0.6703892183404248,19.42350355764541,16.641643407704983,16.641643407704983,19.24437088161237,2.602727473907386 +UT,2.899323682435838,0.5329597611058944,-2.3798379364787667,-1.4709403622056436,1.4263187737303753,0.4632630365941238,0.6634239980047029,9.803531004406725,11.93804195759325,11.93804195759325,13.21129757366149,1.2732556160682407 +VA,2.356755215099008,-2.918770809800026,-2.1728268691566233,-2.1033275298249974,1.3495482957473668,0.24683656630353026,-0.0920857251428775,21.462234707033442,18.128363850258822,18.128363850258822,18.12834310047842,-2.0749780400564077e-05 +VT,1.1477721372579623,-0.5996401917257697,2.9791428700883307,-5.025076866521651,1.089683599173489,1.3399307745415987,-1.8105128039642777,17.30013370260179,16.421433221451473,16.421433221451473,17.67870021257423,1.2572669911227585 +WA,1.7507481968406027,1.9712234199557683,-3.937549630476159,1.5203884664242577,1.7521481009555826,0.2791475383614217,-1.1014054216630882,12.49154024058394,14.726240910982327,14.726240910982327,14.206930055854656,-0.5193108551276708 +WI,0.6000931061076196,-2.4307106639785605,-1.6027657720689565,-1.5959895353699043,2.2517580426320762,-0.05507977314021497,0.12317856733347367,9.744145371069521,7.0346293425850535,7.0346293425850535,7.034634654513511,5.3119284579850046e-06 +WV,2.3786505868597323,-0.29607897879689254,-0.23747900918151596,-1.1797192944641235,1.8952229569823247,0.8951469189067289,-0.3861001860461497,14.862075940319263,17.93171893457937,17.93171893457937,17.93170541550054,-1.3519078827073372e-05 +WY,0.6804024383838546,-0.04432538183610529,0.8616959686231731,-1.445993411911752,-0.3690853911960428,-0.7955063828085727,1.177466176279481,8.723064218446833,8.787718233980868,8.787718233980868,8.787559151426473,-0.00015908255439534003 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/default_shapley9_all.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/default_shapley9_all.csv new file mode 100644 index 0000000000..e19df961ce --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/default_shapley9_all.csv @@ -0,0 +1,53 @@ +,E,priceyear,threshold_rest,cash,snap,housing,otherkind,fed,payst,exp,pe24,n +AK,9.02435136344812,3.079003222885145,-0.4408448794903329,1.9019503628352825,-1.7044601462015034,0.3712291509576962,-0.7559144314770624,0.705946938026233,0.014875925034060319,-0.5517119192599229,11.644425586757718,338 +AL,16.607525526139902,1.7975595620420175,1.596809581752448,-1.3998890603147562,-4.574198939948313,0.04624062553049113,-1.0488234664218004,1.62362973858201,-0.05184595049528187,1.916896024338885,16.5139036412056,466 +AR,11.984027385304827,2.5874757331344687,0.13672852688311643,-1.466982166039604,-5.158764991198195,0.4823206757955083,-0.28920315735713753,0.3816471912572347,0.9781166659606891,-1.5087467967286652,8.126619067012243,447 +AZ,22.489854894589193,1.904377014324691,-2.3464360100035995,-4.368502832542008,-3.4393064323911786,0.29843569837452444,-1.5552288741120381,2.3001131814643347,1.3622873343378938,-1.362394448726184,15.283199525315627,505 +CA,17.979249773877193,3.613066950313934,4.071795319558703,-2.9367550487813014,-4.028195601032923,2.369173715245819,-0.8761426121731972,0.37681345453600756,0.9265529765110698,0.711171068247872,22.206729996303178,1088 +CO,10.858414646733076,2.260001087534816,1.7068373122960012,-1.3754469271118164,-1.1047944480168228,1.205384522217379,-1.5159947491304981,0.8426697978171357,-0.9825587356635284,-1.0549022422111927,10.839610264464548,441 +CT,13.00382336387795,2.3239860108523285,1.4851799865026287,-3.682476138600359,-2.6506624345118244,1.895623291873009,-0.1073290054504543,-0.3138035795599009,1.1830713103185255,0.2338343483229853,13.371247153624891,356 +DC,52.7023873632267,6.239318476118635,-2.553933384036976,-8.918515486182512,-5.084297083990847,1.930025547209525,-10.561947800487118,2.287361135814824,-3.4640695202239113,-5.706592929938394,26.869736317509922,191 +DE,12.957297100970527,4.151021849475116,2.1257703587220877,-7.779509651289908,0.7258967979223958,1.7419850226643319,0.5805009159046985,2.4601348374005876,2.3626762290335694,0.19165697566744863,19.517430436470857,404 +FL,30.8776876096308,2.9077952258397732,2.0009281128638166,-2.635064685257263,-4.714744447169579,0.6290752164342265,-0.8407477447788938,0.9187807959949558,0.12892840943532882,-1.6308996283135506,27.64173886467961,627 +GA,14.400959324173618,2.969653404020692,5.230148662077255,-1.5813126477921433,-3.9645377500865084,0.3363852201126174,-0.6756801090084359,0.7953132889128408,0.374872705410167,-0.770842156895647,17.11495994092446,538 +HI,17.244110656462926,2.4991899178110937,-0.8314718979437538,-5.564579438056641,-7.146687374925437,2.8480996972960777,-0.8602832913418547,1.51802163758558,0.21458482543570084,-1.0192780680052047,8.901706664318482,350 +IA,13.196425186307867,0.7777983537528183,-1.2394959472822982,-1.831502289701529,-5.318888700319705,0.653451263776053,-1.10720949937547,2.841722295298881,0.3927721641406854,-0.4308065129985223,7.93426631359878,400 +ID,8.131051782451719,0.5977622240247035,-0.21601021767302173,-2.662333080515075,0.13999076858057363,0.4834190750601891,-0.13391042375948026,1.150738217110187,0.12882534589337752,0.647870412039976,8.267404103213147,375 +IL,14.164989188467372,4.95244872152442,0.7123059199138466,-4.61836024571742,-4.352477318524943,3.2369230641188658,-2.19674488408092,1.1816384380140672,0.09491117013649485,0.8735404766216022,14.049174530473381,675 +IN,10.352642869057032,1.1180184744647146,0.41002618669479335,-0.11028704127762966,-2.4715002338156293,0.4314659555267092,-0.7392634338244504,2.1667367881197954,0.9840673718350519,0.33887727378903804,12.480784210569427,514 +KS,9.962971000843254,1.1640086635344293,0.7864874888101006,-0.7248076779709614,-1.8777811992278344,0.2473167860508876,-0.18540989310776865,-0.37699170214773126,0.5633593353341054,-0.05315042047440044,9.50600238164408,387 +KY,18.592725757635005,3.5332274643913815,1.679130601297591,-1.0572586260806007,-4.154695646193308,7.87233107558875e-06,-3.667774907075876,1.870594933438364,0.053102937037160396,0.8841925050722055,17.733252891852995,344 +LA,20.1945809339062,2.31547282989839,0.23251367279144775,-5.05413022242856,-7.136294338019582,2.6334524176780967,-1.346227294626237,0.6215153407889262,1.0810703116204938,-0.9809913818850629,12.560962269724113,439 +MA,15.432276127472951,2.874497887449206,1.8450268520145632,-2.045511775260086,-3.285776191261088,2.219581756943433,-1.119235441668818,2.5068492997505736,0.40871835355108177,1.0317744219191358,19.86820129091095,609 +MD,23.30634250404891,3.4779669109245086,-1.6822690803224116,-2.96383921121605,-11.999276355536924,0.20174730611957392,-1.8830977950600065,2.4405184239541784,0.1776380674512425,-0.06449505584174198,11.011235714521279,440 +ME,5.7274088844251825,1.1545205078445901,1.319036127827562,2.459445263854676,0.29216087110333955,1.102475105621852,-0.33558876524658143,0.533294868339815,0.40384254364479083,-0.20767945618427042,12.448915951230957,286 +MI,17.3046221199101,2.0154080311656752,0.2144051204202423,-3.1869770760641476,-3.6286266230858764,1.7152841574432243,-1.4484839677955819,-0.3339606208767184,-2.4152939655803736,0.6152971806912904,10.85167435622783,552 +MN,12.552582952572402,0.9723807126762035,-1.864995111488679,-1.8744222943029325,-2.2601106443124,0.49286769954106435,-1.4857074014031808,1.1690245792454086,0.7242882938169628,0.005525059423342152,8.431433845768192,483 +MO,15.310910601606178,2.509935015790563,0.6602599202498531,-3.576271920782865,-3.285736531368575,-0.07147610850994851,-1.6743579496789047,1.7566090546474453,0.19870130034573338,2.9163269625972594,14.744900344896738,410 +MS,11.967844917314165,3.4158981774967234,-0.9251562934922093,-0.23866501961546263,-1.8570945303741997,1.599582896166532,-1.2576381821140021,-0.64249128704704,-0.05448477256499428,0.9344888734749202,12.942284779244433,404 +MT,17.493919205009174,1.6963827675187289,0.46726087619379025,-6.139893508925355,-7.235578186888045,0.03879653484820497,-3.1074314671227814,0.788652935036166,-0.11673554604069271,-1.3544303800950204,2.5309432295341754,258 +NC,15.755931785462824,3.0209895022282938,1.76575097916327,-3.87973007836128,-3.456835976662144,0.46732043693337555,-2.035387109161442,1.5161898790644281,0.684835128593573,1.0432630598956618,14.882327607156556,545 +ND,5.963289575658014,0.8046369069865872,-0.09026234200740572,1.1999944546712817,-3.184296867225359,0.18546643184148476,-0.7843978424521052,3.269652780739225,-0.06968405271745069,3.364068977498679,10.658468022992954,269 +NE,8.83763897918886,1.34486353442194,0.11687999268273204,0.02663292345217308,-1.4813520382687195,5.851054763220696e-07,-0.6532422832050772,2.2894112786191116,0.10614921716271503,0.12236430444234114,10.709346493601554,414 +NH,9.20042154145905,3.083899691234773,1.9134582163232141,-8.036343267513196,0.7670667785221275,3.2059292218110826,-0.8386162379018971,-1.134425464577162,0.33778320979087434,0.09132169264421744,8.59049538179308,312 +NJ,14.122366700093764,2.612740822873895,-0.12828280370616202,-1.960087373217407,-3.0814603261622313,-0.07433982549684244,-0.7028259068848016,0.9525522604054255,0.10781612281609132,-0.9234952704563623,10.924984400265368,668 +NM,9.179683456657026,0.9459170773813352,1.2763354662114974,-1.5918262217514463,-4.402083830084937,1.4431436474175685,-0.02214745736955929,2.0829315631751943,1.6484045398309024,-0.40902314455901356,10.15133509690857,391 +NV,19.623393902835147,0.8884843857477623,0.24700507583769843,-0.8181280426508156,-2.631895886840315,0.37238697849322516,-1.1523861017189456,-0.26157919991762535,0.052032903928276385,-0.14262952739905072,16.176684488315356,411 +NY,16.353585694697436,3.457280612801215,3.1122506763682463,-5.494418026062303,-3.364648359557897,1.595814120979365,-0.6168217419291238,1.3187804804733179,0.5918763904684764,0.5901171563302531,17.54381700456899,819 +OH,9.176284846402721,3.201554020356257,0.21646680102285307,-1.8181591703716147,-2.845529971004474,1.4631226045302599,-0.46024099816568487,-0.2688134005336702,0.37778785791956915,0.7708078786392613,9.813280468795476,613 +OK,14.08291218503201,2.1798398134022796,-0.23762088204772325,-0.8946078086259897,-2.283712969415842,-0.5490110351000965,-0.15187656363539975,0.7001337847093749,0.10573419526500963,0.8012768546778238,13.753067574261449,384 +OR,19.66425090664919,0.5567448516391978,1.238192235397592,-2.2547761108371116,-5.764454892676281,2.4302805401643292e-05,-1.3027560832391576,3.1725801803314955,0.4236294204895825,-2.2025898760861344,13.530844934473777,468 +PA,12.767784123857522,1.7505662508560553,0.5048985345016381,-1.3487031795426314,-3.403044411398112,0.4230270541971858,-1.0402760513721998,1.1440859254533067,0.22674391650242515,0.6308904931489254,11.655972656204113,773 +RI,19.33281244458234,3.7190422112751635,0.27283807875530985,-8.284183057311624,-3.217672681869239,0.8397194511460729,-1.1554119276599606,2.205117783843287,2.1708548068384297,1.84002257346803,17.7231396830678,297 +SC,16.065761649922184,1.904171947044423,-1.302781176252481,-3.3429721572495286,-2.9704961408772554,1.1595572900053424,-1.4394743114425215,0.2996654037394474,0.5233060873839561,-2.00931678475489,8.887421807518672,419 +SD,8.962036651115069,1.6077898946679525,-0.5713604203978584,-0.306891209403139,-3.6468006136399245,1.6437471763484512,-0.8514928731400901,3.1482055573962833,-0.08638980247888402,0.6264514777290544,10.525295838196913,327 +TN,11.15747860029757,2.2427768123510803,1.4296861423719467,6.261536283697897,-4.586505239065246,1.4026494096803925,-0.8482004604363261,2.2191149564288963,0.2769988175330339,1.5251922315939779,21.080727554453226,491 +TX,19.423503557645454,4.115077211066346,0.3511062068222839,-2.8820880744323167,-3.9604887066725225,0.4115240778567649,-0.9293710145838354,0.5963369490045847,0.23895666743039917,-0.7229134664321435,16.641643407705015,858 +UT,9.803531004406732,2.881288525166957,0.665571129501926,-1.9764593063097529,-1.2492081911284814,0.5757418114951622,-1.09558831844743,1.2354030497975388,0.46976221941363877,0.628000033696968,11.938041957593258,403 +VA,21.46223470703344,2.429321128340785,-2.8013455728119947,-2.200764318682719,-3.215683072460755,1.6503082755555074,-0.6237338895563551,1.3724386956284966,0.18435912550759567,-0.128771228295186,18.12836385025881,595 +VT,17.300133702601787,1.068322973290802,-0.4730734696679558,3.0875618599090795,-5.322925196346758,1.0532838778781706,-1.1099080043328378,1.4193159083525333,1.3635151223119517,-1.9647935525453062,16.42143322145147,158 +WA,12.491540240583936,1.8460295177188464,2.139714649209785,-3.9925074602701063,-1.6363204205238713,3.3437248480029607,-0.5476158005747865,1.8965228739816384,0.22769052557602823,-1.0425380627221092,14.726240910982321,503 +WI,9.744145371069516,1.0115797911827886,-2.1191085907480174,-1.553627014508667,-2.821452325483031,1.5721535218677656,-1.3422414355681556,2.327112357067846,-0.1439702060102474,0.36003787371525003,7.034629342585048,450 +WV,14.862075940319256,2.3315911721731237,-0.42676887853221707,-0.24938757726926422,-3.2963769846126354,3.4021879364723344,-0.9452928216821259,1.813462846959808,0.9566779659105559,-0.5164506651594786,17.931718934579358,346 +WY,8.723064218446828,0.6642206077957047,-0.10973220855467786,0.8928499514437716,-0.9221586802495984,0.2542335922230876,-0.863264757800295,-0.3568023843867584,-0.7230881471486392,1.2283960422114422,8.787718233980861,220 +US,16.50240619987829,2.7875154271809177,1.086563659793531,-2.5129332135007845,-3.700875329222458,1.1511787328891259,-1.0669901241379318,1.0642513928243647,0.334874859756845,0.042604002135569495,15.688595607597467,23461 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/default_shapley9_asec.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/default_shapley9_asec.csv new file mode 100644 index 0000000000..6d338c4f4e --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/default_shapley9_asec.csv @@ -0,0 +1,53 @@ +,E,priceyear,threshold_rest,cash,snap,housing,otherkind,fed,payst,exp,pe24,n +AK,6.210517478470331,3.017601980066417,-0.3908330885440298,-0.2068044784763642,-1.7066340444919146,0.33110274911410165,-0.6700373811142998,-0.2824359407736757,0.0,-0.0953258010358711,6.20715147321469,151 +AL,26.613934669104843,1.9156945350835564,0.15048030954492192,-0.34202432184018616,-8.892074855231371,2.152184839608514e-05,-1.704001038843697,1.6300744488835748,-0.10391570725727904,-0.7543167748004237,18.513872786492332,197 +AR,7.626099379326257,2.4792457160674006,-0.06255737981661233,-0.7784257333876458,-2.1043334096258004,0.12132701168936535,-0.5119226014607704,-0.29354664162869737,0.32132860337634955,-1.4170115484637573,5.38020339607609,203 +AZ,31.333867786161267,2.204932807585928,-7.318254811566868,0.2757862821195314,-1.8542532087597037,0.8081664087734899,-2.769652393244472,0.6545716211265741,0.47639977314065074,-1.283516417033319,22.52804784830308,202 +CA,22.210778699583017,4.616151270861619,4.829709292152435,-0.37364659138785805,-3.302202431631649,3.0291152644115265,-1.0640879651863062,0.03817585530410156,0.499705925298301,-0.3476904092328981,30.136008910172286,326 +CO,19.202336678880204,5.497868711218073,3.262566064960554,4.117988491312896,-3.1403861611142103,2.895385087201749,-2.3692806143320455,-2.0143644970594314,-7.492884984452845,-3.288327730189287,16.67090104642567,181 +CT,15.276932257752682,2.1496502585565436,3.210422535682046,-1.7893835461894805,-5.4747971480888635,3.2670597010890337,-0.4709535564364666,-1.214121071335413,0.31326507971575096,-0.5350331820345058,14.73304132871133,147 +DC,54.532193090978176,8.692409167005874,-3.860885503820856,-10.423558563188234,-6.118702727262956,3.8018906361958447,-11.246662109229026,-0.6022064410921086,-3.4339646055048454,-3.7875147633660053,27.55299818071585,81 +DE,7.54606210826096,6.704897360308395,0.6041870775737508,-0.019918057145960833,-1.01998660613777,3.5071330167376593,-1.2358933386381863,-0.5684393596422869,1.0214732500488157,-0.43859693650691073,16.10091851485846,172 +FL,40.32390222702993,3.203648929708263,1.2221369268479827,2.117148251955981,-4.515733961145926,0.7057377788613489,-0.7203047298241034,0.2927818458597061,0.0,-0.42204354944671507,42.20727371984647,242 +GA,18.545089769638604,5.127053262318756,6.243625861787377,-0.13598287394881828,-4.689569402231161,0.569777541528278,-1.7153484206602088,-1.8111953793383384,-0.40202193383579626,-0.9859407108298023,20.745487714428887,227 +HI,27.199207482409328,4.5499331955658135,-1.47832196806344,-0.0004778366112551089,-19.06370585966475,7.840094047333307,-1.32423723774881,-0.36083375587038197,-0.2823645052270086,0.0025288260197838955,17.08182238814257,149 +IA,19.012620211995117,0.5968231836363732,-2.0646974305405568,-1.850098613885006,-5.633254317070397,1.357882357101209e-06,-2.064659181977431,1.4771435398912942,-0.11528272856070343,-0.16276464704763835,9.195831374323403,184 +ID,7.2606594535758395,0.5105953801143098,-0.13937666688758804,6.094016816367202e-07,1.00215769429018,1.218284460606717,-0.16512360609417578,-0.07772839841801164,0.06477581387810141,-0.12582278881031803,9.548421951656735,153 +IL,18.656180900066925,8.062250888575422,-0.3986186791687475,-1.3560907388984331,-5.234275158898941,6.3474136913936405,-3.5296666020978282,-1.0884324988997245,-0.8091389557024298,-0.6642942684206884,19.985328577949193,272 +IN,7.938873234109183,0.7053838189829127,0.9601312642833861,-0.3151090013149175,-1.090077994881386,0.13951124654743394,-0.350558445546747,-0.10458931819543121,-0.016538014486933702,-0.6804630251388488,7.1865637643586515,220 +KS,3.8875196911102465,2.1356852358539262,2.5496803444338996,2.790462157567883,-2.1386922744345984,0.590895383867138,-0.34012031618929084,-0.28205418146203054,1.4387025813556762,-0.40527777901379664,10.22680084308905,167 +KY,16.079690202653875,5.453093050722158,2.5055155055482237,2.2874387377864625,-5.518174036375222,6.524414762725742e-06,-5.448558246200092,4.548135189310982,-0.16905679972919904,0.039766578449550505,19.777856706581495,149 +LA,22.04325236416082,1.152452949304316,0.25259160381486284,-0.1939828467608425,-10.810968580801424,2.4893997283516947,-1.138984104017434,-1.187624384273078,0.2900142031692414,-0.20302181016872634,12.693129122779428,192 +MA,25.83153614856535,5.468262991521699,2.093267358720091,-2.860114074010607,-6.279812338786889,2.9064608205622737,-2.097779572850868,1.5119298708073203,-0.2607868135068752,-0.33717495188741087,25.97578943913408,214 +MD,37.82743569433896,5.21892173004812,-4.061127297651845,0.15082287335053604,-23.911889580080462,0.4410036932701899,-3.420783324791697,4.074336299367393,-0.1317004090630184,-2.161351384368517,14.02566829441965,177 +ME,0.001304139977435091,1.6313728640464566,2.7966284470888683,-3.1892453072669706,1.1381510795876455,1.735797918684476,-0.39532144256742013,0.10125790178570362,0.11908372960255449,-0.22571615152131494,3.7133131794174346,130 +MI,12.561104689906607,3.0259209085738252,0.9272141741200834,-1.7218501252100653,-2.4054870988926798,3.1186134263874385,-0.7071987956618064,-0.6513604096960068,-2.4903354002730675,-0.35030336437723597,11.306318004877088,215 +MN,16.44680471981629,1.6773991136069544,-2.6103704168779376,0.4278527660103308,-2.778224020673021,4.6952180591024106e-07,-2.329515233823781,-0.28976833466660157,-0.2897736590963476,-2.0533263181251327,8.201079085692552,197 +MO,16.070992230763455,1.0155731327601696,1.8303317280366653,-3.2340818419375195,-1.630376205819101,9.143558430247191e-07,-0.43077220117895665,0.044459909771848494,0.07857013629896273,-0.3572377050101306,13.387460098041235,166 +MS,13.812494273835599,3.216316518967737,-0.8619656230941511,0.4866921966887518,-1.9765013217766243,1.8992938256974083,-1.2897424623713696,-0.40135867637018213,-0.1692981315532088,-0.7045546117777276,14.01137598824623,179 +MT,15.394012972596938,1.5560419970225718,0.4187538050471516,-4.2740471575650965,-6.910181067928063,0.02930876084124661,-2.7916953800100712,-2.4572522878896733e-08,-0.4187539573623941,-0.4187535072592537,2.584686440810512,103 +NC,14.644363440908704,3.3095715007463555,1.5725038083907832,0.776286047217878,-3.4502606135283087,1.207145576559919,-1.7824377127370938,-0.445841174205714,0.0338051164126095,-0.821809360169351,15.043326629595782,222 +ND,11.78554370814929,0.3964788548714922,0.0,-0.17337979592778222,-4.534586398946413,0.3465272111900469,-0.39653223712584335,-5.343885995276597e-06,0.0,-0.39647640999299383,7.027569588331806,88 +NE,7.612038804080584,0.796014014790456,-0.11448187618440932,0.6621832082335337,-1.7940640444081883,1.339279524154666e-07,-1.7304010618056087,-1.0802515598187283,-1.8201587730988,0.20249982779703718,2.733378673513833,180 +NH,1.8073941221113257,4.769584159667453,3.3334026935571375,-0.9988885786645972,2.4298639618849327,3.995690241912651,-1.0278712870839626,-0.1700124984394993,0.0,-0.2721354022279358,13.867027412717512,140 +NJ,17.54338127197621,4.0883430786868775,-1.5637438563151909,2.2795208798739623,-5.529611479846939,0.00933413661997302,-1.1918976892582112,-0.20473197901553208,-0.6064437718961564,-0.45927418039560547,14.364876410429387,299 +NM,12.58358929216294,1.843165634016204,1.4059976432854098,-2.7977922052929873,-8.53542329161092,3.2732968280785997,-0.061150075019734906,2.88404978508614,1.0029185656006276,-0.5120029270785337,11.08664924922775,172 +NV,25.273424911557257,0.5299954228166776,0.7661350804992025,1.388796853134267,-4.030165187658996,1.3896699384660766e-05,-1.0742918536178552,-0.559613989798782,0.0,-0.09469094758432876,22.199604186046827,180 +NY,15.11286675805412,3.3478587364525563,3.110432286729158,-1.6215242062136226,-3.32005936920716,1.916542767407645,-0.4451597915168035,0.8314150679099106,0.13975384270499935,-0.280382433278566,18.791743659042236,327 +OH,11.396610521573546,2.7630793706324828,0.9244126107370441,-2.5648806621290468,-4.451848662730596,1.9240264354788845,-0.7016803113323146,-0.008833960116185383,0.0,0.291567935203621,9.572453277317436,249 +OK,13.249551252633143,2.178557411447695,0.6500602746541796,7.22154360768835e-05,-3.626950609072729,1.1448997337829056e-06,-0.43862665784688415,0.5817518990372301,-1.361037697289281e-08,-0.7880327925536984,11.806384125024369,156 +OR,23.8705952104834,0.6720236843823026,-1.29186972594283,0.29360640912511393,-4.2086667948285115,2.7910402225715326e-07,-0.01653195736378343,0.7539224398911969,0.056931217315548496,-2.23316057943645,17.896850182730013,198 +PA,14.915285194337649,1.6802191381630918,1.2994249346062583,-1.6173711105199067,-4.215546759111561,1.083983219190749,-0.8827269477215947,0.3034758736101673,-0.19794157691320452,-0.10369047381230297,12.265111491829346,309 +RI,17.356103155960504,4.532728210285195,0.21508191475265898,-7.312972464650462,-3.180807578262675,-0.009014387195275319,-0.6976735997371246,1.3949446374326449,1.086998203007084,-0.4714235589704331,12.913964532622108,127 +SC,3.3688512941934747,1.0059892297689539,1.6112099258550234,3.3531578773575688,0.099373684410818,0.5645371168858329,-1.1703594930190575,-0.20262382407358695,-8.77941359900974e-07,0.39718818587514954,9.027323119312824,178 +SD,12.018235670887186,1.3368872400482954,0.25113375944798516,0.2410663860153124,-3.4721932728339273,0.6046457326075533,-0.35586986655374664,0.9933490664289325,0.0,-2.8762080728806607,8.741046643166928,141 +TN,18.22614762843225,3.2658084413813384,2.4099577349534163,2.3026877351875568,-7.070639725246382,2.6640789425779503,-0.697644790387287,-1.0363203001848718,0.0,0.038939962552736906,20.103015629266714,212 +TX,27.147550807087264,5.811335595423045,1.670117196645333,-0.1428872925260545,-4.66596804498181,0.3695959399144872,-0.7296037878545518,-0.08216900747886002,0.0,-0.5923297585306889,28.785641647698164,310 +UT,16.896517232105882,3.5247435877345543,-0.6178119738089994,1.0887927457268733,-2.73690753648341,1.0888342292247386,-1.7579456700347171,-0.14166099114819697,-0.03774100992250659,-0.4103626830581695,16.896457930336048,177 +VA,30.18073565734874,1.58547273976386,0.12814208710765243,0.8712868545399874,-6.5012206455333885,0.7472161169425268,-1.768215795741053,2.0420398785215994,0.13809162479362688,-0.486758842623391,26.93678967512016,223 +VT,14.44719961446292,1.0386161556971854,1.1932299976345881,1.038642593302414,-7.939264178216318,2.767725128343691,-0.8413554087103832,1.9311638205416501,1.5244509335001175,-0.7131954408878927,14.447213215667965,63 +WA,20.90909658127428,3.4555600386293928,2.914410723962141,1.3662802523841493,-2.684319665283341,5.128222502949553,-0.5911221845045068,-0.24057116064871212,-0.17122928014639596,0.03550387626975393,30.121831684886306,188 +WI,13.971017150285503,2.389492609332252,-3.101730144873907,5.31906014023744,-2.785318594435354,4.386735572386483,-1.7706676748121817,0.11630421217630085,-0.14631995944912976,-0.0005292759363844726,18.37804403491102,196 +WV,23.77972752386654,3.5902781119236855,-0.7329794378325957,0.10821006085227752,-3.877560824653373,6.225927349544736,-1.4506531887812946,-0.6559672608119548,-0.08330162611361287,-1.1823896249549715,25.721291083039443,172 +WY,2.560329572894481,0.3472166074550461,-0.10571699616902873,0.3877680535623498,-0.35245179388919334,8.448378892419609e-08,-0.8456462170014758,-1.914745438350555,0.0,0.01822926771497163,0.09498314070038663,86 +US,20.059535128913083,3.519464550344866,1.2025120969529322,-0.06795582964578015,-4.5620144964548315,1.6176320967436972,-1.3197934525435209,0.14580095596422127,-0.19850122865307934,-0.5615895640933565,19.835090257528233,9589 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/default_steps.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/default_steps.csv new file mode 100644 index 0000000000..df90a8055b --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/default_steps.csv @@ -0,0 +1,52 @@ +,period_and_sample,selection,calibration,priceyear,threshold_rest,cash,snap,housing,otherkind,fed,payst,exp,year,gap +AK,0.1372735094198898,0.6171420998363146,-2.2300642458080837,3.079003222885145,-0.4408448794903329,1.9019503628352825,-1.7044601462015034,0.3712291509576962,-0.7559144314770624,0.705946938026233,0.014875925034060319,-0.5517119192599229,1.4433570907357307e-06,1.1444270301148087 +AL,-0.9783274772582207,2.684066425006849,-0.598213421608726,1.7975595620420175,1.596809581752448,-1.3998890603147562,-4.574198939948313,0.04624062553049113,-1.0488234664218004,1.62362973858201,-0.05184595049528187,1.916896024338885,0.47325256329098053,1.487156204496582 +AR,1.2047432367556379,-2.2154208510897373,-0.30529500036107393,2.5874757331344687,0.13672852688311643,-1.466982166039604,-5.158764991198195,0.4823206757955083,-0.28920315735713753,0.3816471912572347,0.9781166659606891,-1.5087467967286652,0.0018386149419828968,-5.171542318045775 +AZ,1.1099909946713087,7.16818280769642,0.911681092221464,1.904377014324691,-2.3464360100035995,-4.368502832542008,-3.4393064323911786,0.29843569837452444,-1.5552288741120381,2.3001131814643347,1.3622873343378938,-1.362394448726184,1.6679867655022207,3.651186290817847 +CA,0.2854939042872289,-3.979141948513309,3.7728978181032744,3.613066950313934,4.071795319558703,-2.9367550487813014,-4.028195601032923,2.369173715245819,-0.8761426121731972,0.37681345453600756,0.9265529765110698,0.711171068247872,2.2097765111547965,6.516506507457976 +CO,0.08082522874506815,2.648614199581469,0.4289752184065385,2.260001087534816,1.7068373122960012,-1.3754469271118164,-1.1047944480168228,1.205384522217379,-1.5159947491304981,0.8426697978171357,-0.9825587356635284,-1.0549022422111927,-0.4871066810740903,2.652503583390458 +CT,-1.1399183068825263,1.052151127206674,0.2915905435538022,2.3239860108523285,1.4851799865026287,-3.682476138600359,-2.6506624345118244,1.895623291873009,-0.1073290054504543,-0.3138035795599009,1.1830713103185255,0.2338343483229853,6.0098151775989095e-05,0.5713072517766662 +DC,-1.6543198814524978,6.461787220549844,27.59492002412935,6.239318476118635,-2.553933384036976,-8.918515486182512,-5.084297083990847,1.930025547209525,-10.561947800487118,2.287361135814824,-3.4640695202239113,-5.706592929938394,7.4955670010178,14.065303318527722 +DE,1.5052293285338383,3.5089871508867763,-0.7569193784500872,4.151021849475116,2.1257703587220877,-7.779509651289908,0.7258967979223958,1.7419850226643319,0.5805009159046985,2.4601348374005876,2.3626762290335694,0.19165697566744863,2.911755638697482,13.72918607516834 +FL,-0.8291422909987638,12.356015802274264,0.950814098355302,2.9077952258397732,2.0009281128638166,-2.635064685257263,-4.714744447169579,0.6290752164342265,-0.8407477447788938,0.9187807959949558,0.12892840943532882,-1.6308996283135506,0.514760185273051,9.756499049952662 +GA,-1.0435136448358016,5.116078755648433,-4.771605786639013,2.969653404020692,5.230148662077255,-1.5813126477921433,-3.9645377500865084,0.3363852201126174,-0.6756801090084359,0.7953132889128408,0.374872705410167,-0.770842156895647,1.3140269457817375,3.3289868867061987 +HI,-0.8383347024904513,-0.14611630858071223,5.228561667534089,2.4991899178110937,-0.8314718979437538,-5.564579438056641,-7.146687374925437,2.8480996972960777,-0.8602832913418547,1.51802163758558,0.21458482543570084,-1.0192780680052047,-1.8826662300416022,-5.98095956572312 +IA,-1.5028167505320882,3.545050855655801,2.9541910811841543,0.7777983537528183,-1.2394959472822982,-1.831502289701529,-5.318888700319705,0.653451263776053,-1.10720949937547,2.841722295298881,0.3927721641406854,-0.4308065129985223,0.8747162837289757,0.6089825973277563 +ID,-0.7286548952619798,1.565256747840487,0.7944499298732115,0.5977622240247035,-0.21601021767302173,-2.662333080515075,0.13999076858057363,0.4834190750601891,-0.13391042375948026,1.150738217110187,0.12882534589337752,0.647870412039976,-1.309576789072933,0.45782731414021427 +IL,-1.3588788415045805,2.702821175857215,0.42104685411473675,4.95244872152442,0.7123059199138466,-4.61836024571742,-4.352477318524943,3.2369230641188658,-2.19674488408092,1.1816384380140672,0.09491117013649485,0.8735404766216022,0.6295170070361102,2.2786915375094914 +IN,-1.3735662238142368,1.5618006075162203,-0.43559151464495116,1.1180184744647146,0.41002618669479335,-0.11028704127762966,-2.4715002338156293,0.4314659555267092,-0.7392634338244504,2.1667367881197954,0.9840673718350519,0.33887727378903804,0.2535640829400396,2.1343482935094666 +KS,-0.5812367263953657,5.824460284540315,-4.980252557301695,1.1640086635344293,0.7864874888101006,-0.7248076779709614,-1.8777811992278344,0.2473167860508876,-0.18540989310776865,-0.37699170214773126,0.5633593353341054,-0.05315042047440044,0.15385973283228616,-0.04013788552363273 +KY,1.686227051381513,-1.1580019991106276,4.764500705364119,3.5332274643913815,1.679130601297591,-1.0572586260806007,-4.154695646193308,7.87233107558875e-06,-3.667774907075876,1.870594933438364,0.053102937037160396,0.8841925050722055,0.8039206687830251,5.23717356063602 +LA,-1.726275992228036,3.1114131150862114,-1.890556188951976,2.31547282989839,0.23251367279144775,-5.05413022242856,-7.136294338019582,2.6334524176780967,-1.346227294626237,0.6215153407889262,1.0810703116204938,-0.9809913818850629,-0.4735354929665192,-8.612573223242405 +MA,-1.178424866615325,3.054032990712612,0.7566680033756636,2.874497887449206,1.8450268520145632,-2.045511775260086,-3.285776191261088,2.219581756943433,-1.119235441668818,2.5068492997505736,0.40871835355108177,1.0317744219191358,0.33447244253822817,7.402673733449177 +MD,1.5087169979796844,4.504588000165329,6.593037505903897,3.4779669109245086,-1.6822690803224116,-2.96383921121605,-11.999276355536924,0.20174730611957392,-1.8830977950600065,2.4405184239541784,0.1776380674512425,-0.06449505584174198,12.154198342699756,12.465434057221035 +ME,-1.2779709847740648,0.8660988879807912,-0.3607190187815439,1.1545205078445901,1.319036127827562,2.459445263854676,0.29216087110333955,1.102475105621852,-0.33558876524658143,0.533294868339815,0.40384254364479083,-0.20767945618427042,0.0001848530628887346,5.949100804293845 +MI,-0.1455382342009237,2.467872610868138,4.682287743242885,2.0154080311656752,0.2144051204202423,-3.1869770760641476,-3.6286266230858764,1.7152841574432243,-1.4484839677955819,-0.3339606208767184,-2.4152939655803736,0.6152971806912904,3.6666874506174665,4.218361806845296 +MN,-0.32035431340551934,2.4720410862386997,3.5008961797392217,0.9723807126762035,-1.864995111488679,-1.8744222943029325,-2.2601106443124,0.49286769954106435,-1.4857074014031808,1.1690245792454086,0.7242882938169628,0.005525059423342152,-5.4963165556642934e-06,1.5314283494516356 +MO,1.1337708888353042,4.3317966451961585,0.14534306757471604,2.509935015790563,0.6602599202498531,-3.576271920782865,-3.285736531368575,-0.07147610850994851,-1.6743579496789047,1.7566090546474453,0.19870130034573338,2.9163269625972594,3.734894001353073,8.779794346249812 +MS,-1.8273889459409745,-0.7396099106635212,-4.56515622608134,3.4158981774967234,-0.9251562934922093,-0.23866501961546263,-1.8570945303741997,1.599582896166532,-1.2576381821140021,-0.64249128704704,-0.05448477256499428,0.9344888734749202,-7.379536808116427e-05,-6.157789016123649 +MT,-1.237448768141693,4.971780533503148,4.459587439647718,1.6963827675187289,0.46726087619379025,-6.139893508925355,-7.235578186888045,0.03879653484820497,-3.1074314671227814,0.788652935036166,-0.11673554604069271,-1.3544303800950204,3.4111003177628163e-07,-6.7690564293557935 +NC,0.7267214342637374,1.7665007603162923,-1.137290409117206,3.0209895022282938,1.76575097916327,-3.87973007836128,-3.456835976662144,0.46732043693337555,-2.035387109161442,1.5161898790644281,0.684835128593573,1.0432630598956618,3.2186469995470883,3.700974606703644 +ND,-1.039056134989524,1.2278789391834657,-4.525533228535928,0.8046369069865872,-0.09026234200740572,1.1999944546712817,-3.184296867225359,0.18546643184148476,-0.7843978424521052,3.269652780739225,-0.06968405271745069,3.364068977498679,0.47200735101754,0.8304753740104935 +NE,-0.32822572153377916,0.8233536510956325,1.2425110496270069,1.34486353442194,0.11687999268273204,0.02663292345217308,-1.4813520382687195,5.851054763220696e-07,-0.6532422832050772,2.2894112786191116,0.10614921716271503,0.12236430444234114,0.002525245672213572,3.6118717392737683 +NH,-0.5107149675280569,0.27546727737840015,1.9356692316087072,3.083899691234773,1.9134582163232141,-8.036343267513196,0.7670667785221275,3.2059292218110826,-0.8386162379018971,-1.134425464577162,0.33778320979087434,0.09132169264421744,1.9256828545514821,3.0161782363445617 +NJ,0.728221053513888,1.083698298296758,-0.9895526517168829,2.612740822873895,-0.12828280370616202,-1.960087373217407,-3.0814603261622313,-0.07433982549684244,-0.7028259068848016,0.9525522604054255,0.10781612281609132,-0.9234952704563623,-2.0186350406348197e-05,-2.3750357860850393 +NM,-0.19220096048421453,-2.249577016402064,0.721461433543304,0.9459170773813352,1.2763354662114974,-1.5918262217514463,-4.402083830084937,1.4431436474175685,-0.02214745736955929,2.0829315631751943,1.6484045398309024,-0.40902314455901356,1.4725049499730858e-06,-0.7486634305864808 +NV,0.048839431902843344,1.5641187238374084,3.0104357470948955,0.8884843857477623,0.24700507583769843,-0.8181280426508156,-2.631895886840315,0.37238697849322516,-1.1523861017189456,-0.26157919991762535,0.052032903928276385,-0.14262952739905072,2.8933808936900327,4.070065382005389 +NY,-0.7253208893575724,5.772598602390406,-4.893692018335397,3.457280612801215,3.1122506763682463,-5.494418026062303,-3.364648359557897,1.595814120979365,-0.6168217419291238,1.3187804804733179,0.5918763904684764,0.5901171563302531,0.1833000649559935,1.5271170695249836 +OH,-2.357853217994329,2.183842530769585,-2.949704466372536,3.201554020356257,0.21646680102285307,-1.8181591703716147,-2.845529971004474,1.4631226045302599,-0.46024099816568487,-0.2688134005336702,0.37778785791956915,0.7708078786392613,5.42903201505851e-07,-2.486718988301323 +OK,1.3148484110440428,1.3029313747651905,1.565132399222776,2.1798398134022796,-0.23762088204772325,-0.8946078086259897,-2.283712969415842,-0.5490110351000965,-0.15187656363539975,0.7001337847093749,0.10573419526500963,0.8012768546778238,3.46132980281533,7.314397377076778 +OR,0.08598620860695227,3.6494209118038725,4.928843786238366,0.5567448516391978,1.238192235397592,-2.2547761108371116,-5.764454892676281,2.4302805401643292e-05,-1.3027560832391576,3.1725801803314955,0.4236294204895825,-2.2025898760861344,2.7561804389251954,5.287025373398972 +PA,-0.1581301731134559,2.273657095627458,-0.4477427986564795,1.7505662508560553,0.5048985345016381,-1.3487031795426314,-3.403044411398112,0.4230270541971858,-1.0402760513721998,1.1440859254533067,0.22674391650242515,0.6308904931489254,2.479342519801344,3.035315176005458 +RI,-0.3234983415204127,0.9003967581739438,10.35591402792881,3.7190422112751635,0.27283807875530985,-8.284183057311624,-3.217672681869239,0.8397194511460729,-1.1554119276599606,2.205117783843287,2.1708548068384297,1.84002257346803,0.1517437271640354,9.474883410231834 +SC,1.7689341438564519,0.25749778264483325,2.939329723420899,1.904171947044423,-1.302781176252481,-3.3429721572495286,-2.9704961408772554,1.1595572900053424,-1.4394743114425215,0.2996654037394474,0.5233060873839561,-2.00931678475489,0.9972159016502964,-1.215362290831031 +SD,-0.5414491393907319,0.28714623452029375,1.4163395559855072,1.6077898946679525,-0.5713604203978584,-0.306891209403139,-3.6468006136399245,1.6437471763484512,-0.8514928731400901,3.1482055573962833,-0.08638980247888402,0.6264514777290544,0.813688255393993,3.538984093590906 +TN,-1.6535349871175935,4.225583991007214,-1.4145704035920517,2.2427768123510803,1.4296861423719467,6.261536283697897,-4.586505239065246,1.4026494096803925,-0.8482004604363261,2.2191149564288963,0.2769988175330339,1.5251922315939779,2.156356427475796,13.237083981929022 +TX,-0.2753238101806037,1.90498141150338,1.6938459563226758,4.115077211066346,0.3511062068222839,-2.8820880744323167,-3.9604887066725225,0.4115240778567649,-0.9293710145838354,0.5963369490045847,0.23895666743039917,-0.7229134664321435,2.602727473907386,3.1443708816123994 +UT,-1.467232520776622,1.5605534729297714,2.410210052253583,2.881288525166957,0.665571129501926,-1.9764593063097529,-1.2492081911284814,0.5757418114951622,-1.09558831844743,1.2354030497975388,0.46976221941363877,0.628000033696968,1.2732556160682424,5.911297573661501 +VA,0.04849955799713612,6.653846529667289,2.6598886193690134,2.429321128340785,-2.8013455728119947,-2.200764318682719,-3.215683072460755,1.6503082755555074,-0.6237338895563551,1.3724386956284966,0.18435912550759567,-0.128771228295186,-2.074978039345865e-05,6.028343100478418 +VT,0.21346822404733068,1.6844201163473596,7.102245362207096,1.068322973290802,-0.4730734696679558,3.0875618599090795,-5.322925196346758,1.0532838778781706,-1.1099080043328378,1.4193159083525333,1.3635151223119517,-1.9647935525453062,1.2572669911227585,9.378700212574227 +WA,0.5605808059915827,1.2477460857698297,1.3832133488225224,1.8460295177188464,2.139714649209785,-3.9925074602701063,-1.6363204205238713,3.3437248480029607,-0.5476158005747865,1.8965228739816384,0.22769052557602823,-1.0425380627221092,-0.5193108551276691,4.906930055854652 +WI,-0.7824910869438337,3.8869145783428083,-0.6602781203294583,1.0115797911827886,-2.1191085907480174,-1.553627014508667,-2.821452325483031,1.5721535218677656,-1.3422414355681556,2.327112357067846,-0.1439702060102474,0.36003787371525003,5.311928459761361e-06,-0.26536534548649193 +WV,-0.99985457757594,0.6695291306109254,3.89240138728427,2.3315911721731237,-0.42676887853221707,-0.24938757726926422,-3.2963769846126354,3.4021879364723344,-0.9452928216821259,1.813462846959808,0.9566779659105559,-0.5164506651594786,-1.3519078827073372e-05,6.63170541550053 +WY,-0.42828271925623884,-0.2962710925545817,2.9476180302576482,0.6642206077957047,-0.10973220855467786,0.8928499514437716,-0.9221586802495984,0.2542335922230876,-0.863264757800295,-0.3568023843867584,-0.7230881471486392,1.2283960422114422,-0.00015908255439356367,2.2875591514264677 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/dense_fit.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/dense_fit.csv new file mode 100644 index 0000000000..67a295f1ca --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/dense_fit.csv @@ -0,0 +1,52 @@ +state,model,se,pe24,E,E_se,D,D_se,clusters,kish_units,kish_src,rate,moe,cse,gap,sp57,sp57_se,acs_stored +AK,11.019712636717708,2.0902693233049265,10.538185647720928,16.194556293612283,2.785584561838246,11.131780918645296,1.5690911107339354,715,389.8601662856484,270.7715001562766,10.5,2.1,1.2765957446808511,0.5197126367177081,11.644427030114809,3.928977062730973,12.269848823547363 +AL,16.660960866133678,2.1821275071382527,15.891722249355341,16.813164699851864,2.501198128374972,14.349346237703015,1.485047499835843,1100,505.07688925323913,302.12251907730234,15.5,2.4,1.458966565349544,1.1609608661336779,16.987156204496582,3.484833374151784,14.110982894897461 +AR,12.453706371843415,1.5095049912955576,11.412468475477754,12.912154401478993,1.929286934390155,14.276444444479768,1.3192959788197114,1073,511.00053229705276,340.86624849339563,13.3,2.7,1.6413373860182372,-0.8462936281565856,8.128457681954226,3.0274434908359176,6.774383068084717 +AZ,22.687794744163234,2.447357721159525,19.366507611449986,18.67471608508137,2.3884965295968725,14.948852037802352,1.5373834065497718,899,450.4484703371293,296.2740473504042,13.3,2.3,1.398176291793313,9.387794744163234,16.951186290817848,5.358818375942788,17.127504348754883 +CA,24.121290625968072,1.0526517298935083,22.917724283085835,20.714954017464414,1.1519202427700403,18.235503457287603,0.650443974800001,5029,2325.3576465004144,1571.984374501322,17.9,1.0,0.60790273556231,6.221290625968074,24.416506507457974,2.3311938117816187,20.379192352294922 +CO,16.379684444985866,2.3517278780979,15.104305631488465,14.486536550855025,2.5743734366030857,7.9968313639306,1.1559796037166532,733,357.02549752036697,239.16896520980544,7.7,1.8,1.094224924012158,8.679684444985867,10.352503583390458,3.574357278097987,9.367508888244629 +CT,16.560293015964547,2.437327640174254,15.038560899940071,15.630098846008295,3.7105656763516923,11.70149208575182,1.7168531432102607,576,279.0267702043459,180.53162295278318,12.8,3.2,1.9452887537993921,3.760293015964546,13.371307251776667,3.8331970400943,12.430046081542969 +DC,26.102302910381407,3.371388674899598,24.85935717464523,26.192085094892875,4.076699779143671,17.41919931849144,2.170319135800099,603,252.91233439014192,151.55028324914826,20.3,3.7,2.2492401215805473,5.802302910381407,34.36530331852772,6.134790145191017,20.46465492248535 +DE,21.69380057983112,3.1552325459483437,18.667422163433102,15.1446114450492,3.330304275750786,10.32583976443351,1.7919837384465735,624,301.37401959090397,199.45531593242546,8.7,2.6,1.580547112462006,12.99380057983112,22.42918607516834,4.399237582955547,22.213157653808594 +FL,30.028279400134906,1.664972951960285,26.74729713265519,24.111702712389313,1.7630913931877656,17.60076643715988,0.9825806470242631,2391,1041.750115163126,680.5172484470773,18.4,1.8,1.094224924012158,11.628279400134907,28.15649904995266,2.806107561890349,22.613277435302734 +GA,23.626865042560066,2.1702861910188473,22.033214023549217,17.623853759390897,2.1664127096494115,14.034036177358718,1.1850829859154937,1307,526.248532082084,336.5775462207633,15.1,2.2,1.3373860182370823,8.526865042560066,18.4289868867062,3.42227452529315,17.39934539794922 +HI,8.764118379135269,1.3243186870946742,8.298806358733593,11.774189166659871,1.827841778767021,12.575145854583731,1.5320373482113137,821,458.48422175550536,315.04884644114907,13.0,2.6,1.580547112462006,-4.235881620864731,7.01904043427688,2.392571950332229,5.165446758270264 +IA,8.631375521042319,1.5207588606634646,8.287959273580794,8.997492557025776,1.8855357463794056,7.256733570877532,1.1542395079198333,688,372.07791367333505,248.87914343785567,8.2,1.9,1.1550151975683889,0.4313755210423196,8.808982597327756,3.488385258421658,5.389122486114502 +ID,10.39254600543749,1.3907731273949004,9.954220178922684,6.956496379813835,1.1876585149509817,5.723320669313954,0.8340701573266187,1134,564.3265559828751,412.7402722405761,6.5,1.3,0.790273556231003,3.89254600543749,6.957827314140214,2.480744708886921,6.954473495483398 +IL,12.795330300647167,1.452777923618364,11.279399820824375,13.097726188757402,1.716041543056205,11.558174183427155,1.131607180505969,1528,695.7990194606315,488.0240722820075,12.4,1.6,0.9726443768996961,0.3953303006471671,14.678691537509492,3.8341879094211824,18.092145919799805 +IN,14.3561105974897,2.016853296071454,14.062900194043376,11.126175449005657,1.900016657687235,8.844078013025943,1.0939295828364974,1000,491.9325251535436,328.3933526164038,10.6,2.2,1.3373860182370823,3.7561105974897,12.734348293509466,4.115777622105123,9.129535675048828 +KS,13.26447521767514,1.812787663620715,11.614738249973588,11.020574580945842,2.0118470439815237,9.599689002818243,1.5328206778487947,727,373.2612871778556,238.16662445033083,9.7,2.5,1.519756838905775,3.56447521767514,9.659862114476367,5.442906829832116,10.451759338378906 +KY,13.69527078216318,1.9887119385700365,14.162668283621848,14.81804989436489,2.4544065073215258,14.932039244810197,1.7483596085236401,647,361.2638129604242,242.94924785422782,13.3,2.9,1.762917933130699,0.3952707821631787,18.53717356063602,4.246948679188216,9.635833740234375 +LA,13.719988304410755,1.7098316395891382,13.646135415121071,20.921902545827145,2.5681784484114085,18.621449668093966,1.4118274358775997,1311,559.3010104301308,357.4252291873469,20.7,3.0,1.8237082066869301,-6.980011695589244,12.087426776757594,3.3275134849654067,11.565276145935059 +MA,20.65448570948504,1.9391771916242613,19.28551761409828,15.659158722663257,1.8526289579612374,11.53687151947103,1.06697551786317,1239,658.9099448410776,432.2779144396734,12.8,2.0,1.21580547112462,7.85448570948504,20.202673733449178,3.281678114588457,20.928058624267578 +MD,19.232590168012678,2.8070523469419375,17.747255878220983,15.766838509318845,3.1245690662360075,12.068845221556595,1.6077487391955512,669,290.78293691517274,197.83070984087192,10.7,2.5,1.519756838905775,8.532590168012678,23.165434057221034,4.744898883592186,17.483667373657227 +ME,10.632771843758372,2.2315467430125446,9.48420277401329,5.62705909525707,1.768934126332144,5.15687074921049,1.3156518303227287,360,221.92312288273777,137.77424978153468,6.5,2.3,1.398176291793313,4.132771843758372,12.449100804293845,6.011362550339514,7.270956039428711 +MI,9.89598180206563,1.4150770820670229,7.574715116862639,11.830697098340064,1.9848045563674002,9.701134578974726,1.124730460510938,1186,551.7658839042592,370.6413999162929,10.3,1.9,1.1550151975683889,-0.40401819793437,14.518361806845297,2.8614213068828036,9.475631713867188 +MN,6.939264162864532,1.3424798444336863,6.0002929911888145,8.20760623793026,1.8204675473231913,7.227378314093076,1.2379130969351457,741,399.65456738075346,271.546516482271,6.9,1.9,1.1550151975683889,0.039264162864531826,8.431428349451636,4.586538754968796,5.14799690246582 +MO,14.088579727210307,2.6161484306629017,12.703836296038547,15.117478696997525,2.741277698402171,11.021761830806128,1.4413662943512981,888,408.3112835341014,286.3754657950601,9.7,2.3,1.398176291793313,4.388579727210308,18.47979434624981,6.969264747492686,16.677257537841797 +MS,15.12656389266076,1.7165166836169314,13.69424763903693,15.841985521987509,2.0175767704428473,16.552249744335533,1.4495466461189377,953,467.3821785166118,299.1067052102768,19.1,2.6,1.580547112462006,-3.973436107339241,12.942210983876352,2.9790069289119265,12.927408218383789 +MT,10.257827148297558,1.507455171886924,8.963901590953165,11.25524427316498,2.0029565585688336,7.589720944518803,1.0530673484006259,910,469.248369926136,307.7954451915917,9.3,2.3,1.398176291793313,0.9578271482975573,2.530943570644207,3.435645732336951,4.747105598449707 +NC,17.54797515797036,1.7783903123627331,16.539871516068978,18.817700694339482,2.1181859237260228,15.125058419099416,1.2676929437378248,1418,602.8908432552339,390.4904245076153,14.4,2.2,1.3373860182370823,3.147975157970359,18.100974606703645,3.1120495099094923,11.701009750366211 +ND,9.960342986115812,1.6093527149199909,10.125321619838521,7.63078548995473,1.3259021190371971,9.489454591563454,1.2975817947086652,840,438.7202469462234,301.4267517946344,10.3,2.1,1.2765957446808511,-0.3396570138841888,11.130475374010494,3.692103262671444,10.772493362426758 +NE,7.980397397152254,1.4228721900641035,7.274694310186347,9.417314380262141,2.3179841186482073,6.977099490263861,1.218675287307913,743,403.88832709526554,281.30678792217844,7.1,1.9,1.1550151975683889,0.8803973971522545,10.711871739273768,4.838732233130637,9.424169540405273 +NH,10.715136855885294,2.175994911449899,9.771337463401158,7.493675599383197,2.006117248038249,7.3654009349714,1.2631898000561679,552,363.37780531313444,229.25765799638356,7.5,2.4,1.458966565349544,3.2151368558852944,10.516178236344562,3.2065948453888495,7.5636773109436035 +NJ,20.36430468219513,2.13978591248263,17.962661194193224,15.826171775172055,2.199859820270981,13.522145840019196,1.3113695239755556,1068,525.2007776730205,380.8308141826903,13.3,1.9,1.1550151975683889,7.064304682195129,10.924964213914961,3.379110811323347,9.367637634277344 +NM,9.502007270220455,1.5282509723766522,8.28366697495779,12.969735825865724,2.036193114166462,11.093335147719056,1.291717359676258,931,517.5701760251343,329.98241133041904,10.9,2.1,1.2765957446808511,-1.3979927297795456,10.15133656941352,3.583547022740094,14.007346153259277 +NV,20.266396327611087,2.451905215723719,17.007582059638736,15.356941678797515,2.0983863833086445,15.751080999100939,1.5856814605957528,794,383.52938780165465,263.85137487538793,15.0,2.5,1.519756838905775,5.266396327611087,19.07006538200539,4.319085296508975,13.599339485168457 +NY,21.7761067979677,1.7056988460768048,21.0458117509758,18.324898381557144,1.828585096161383,15.311217986494224,1.0368480765657095,1978,796.4090196960434,525.8436288368686,16.2,1.9,1.1550151975683889,5.5761067979677,17.727117069524983,2.875781716873627,16.431594848632812 +OH,12.276039111872556,1.905393480013562,12.24525700612132,15.005100188964308,2.3373954102897563,10.081949077315661,1.229326529621403,1310,618.6027992391695,409.7973160507123,12.3,2.1,1.2765957446808511,-0.023960888127444235,9.813281011698678,1.8671208005111162,9.078166961669922 +OK,13.820143751855637,1.858778239894062,11.723561384591564,15.331135386083364,2.2477677093317183,11.03247567487848,1.2189208568970413,914,439.48961342125364,305.0616233774748,9.9,2.0,1.21580547112462,3.920143751855637,17.21439737707678,4.089869383458009,13.372641563415527 +OR,21.52739541725039,2.3738615646672985,19.13150109347228,19.693949406262277,2.763795003080545,11.364423373050505,1.270817973586301,832,395.3941248612246,255.1006894014045,11.0,2.4,1.458966565349544,10.52739541725039,16.287025373398972,4.419927485268072,14.899346351623535 +PA,13.475600808235594,1.4735686584020704,12.012133951721735,14.39710192949929,1.761423940863605,10.84828598731419,0.9924456286468032,1442,731.9618589628819,484.95490206160775,11.1,2.0,1.21580547112462,2.3756008082355944,14.135315176005458,2.8133696851903927,13.813882827758789 +RI,11.753905508598592,2.414949971177963,11.133448423048373,9.727133622169012,2.4020109962848717,7.789328581718272,1.4155656718738505,420,249.40234082742137,165.17111040093312,8.4,2.3,1.398176291793313,3.353905508598592,17.874883410231835,5.529672101056756,10.114660263061523 +SC,15.352154421943537,1.8482040752589861,12.784902647745803,14.93991391999787,2.206232895873194,12.417047923341364,1.2250139095847006,1057,489.2191995721574,312.52952107298916,11.1,2.1,1.2765957446808511,4.252154421943537,9.884637709168969,3.4207999101280673,9.70772647857666 +SD,11.100829056265283,2.4053917891002627,11.52242163995022,7.1943546633170445,1.66755483650931,7.191863420735705,1.1829235065036319,632,328.00742496015715,214.68103022931723,7.8,2.2,1.3373860182370823,3.3008290562652833,11.338984093590906,5.2634290299995135,6.721802234649658 +TN,15.271551020582677,1.840774666594892,13.223458218532297,14.058012515615667,2.430958005998435,8.001600736610058,1.0060575872259607,1062,500.59737104674514,327.37855426628516,10.0,1.7,1.033434650455927,5.271551020582677,23.237083981929022,3.906686326755696,15.603744506835938 +TX,20.755823740113225,1.2680807014118707,18.320527471484795,18.326642539467112,1.3561551625760602,15.749270231375428,0.7473852488313413,3776,1709.1775315500051,1101.5878734075193,16.1,1.3,0.790273556231003,4.655823740113224,19.2443708816124,2.5708785076367486,14.510196685791016 +UT,11.146386609823816,1.5931046031919944,10.6792472174615,5.937223674095712,1.1530995132797994,5.7300090983360175,0.8111508281443979,1093,500.3015641836588,363.0981758388387,7.3,1.6,0.9726443768996961,3.846386609823816,13.2112975736615,2.9785149106747224,8.38582706451416 +VA,19.848466549835816,2.2955027674320765,18.584282777029586,16.8792574986385,2.22453530663791,12.238309974172203,1.2687524089286366,1071,459.73759568240285,333.23855259844123,12.1,2.4,1.458966565349544,7.7484665498358165,18.128343100478418,2.901130668178834,15.400092124938965 +VT,11.019289355101257,2.0472828246898356,10.070266870327938,9.348212080687897,1.796774224703653,8.966681400257917,1.4775242708700234,659,452.3673561089422,295.25429070942306,8.3,2.5,1.519756838905775,2.7192893551012567,17.678700212574228,4.1639070724950455,10.242634773254395 +WA,18.38938468875666,1.9206426301159434,16.152904391702986,14.296719447847728,1.9995431126721297,9.664098361618837,1.1240910452022583,1057,589.0464087107334,413.42315881804006,9.3,1.9,1.1550151975683889,9.08938468875666,14.206930055854652,3.6147767420943744,14.172506332397461 +WI,11.575193521299605,2.09560363367793,9.520820840698423,9.30739167909626,2.2716213999084087,6.386789538126811,1.0336301195680537,818,374.20608847795586,242.721524109109,7.3,1.7,1.033434650455927,4.275193521299605,7.034634654513508,3.9297119831557286,5.814634799957275 +WV,14.664224661468955,1.8526319418737804,13.946570806044056,14.149743438058254,2.3081633312668606,10.171742192049425,1.1188468885953238,1097,555.9777343191087,339.025825017473,11.3,2.4,1.458966565349544,3.3642246614689544,17.93170541550053,3.137463236331653,16.38048553466797 +WY,8.273524449133417,1.5373550511058878,8.221553169665123,9.390998723821973,1.6178989242567343,6.1071007823757855,0.8983273740799685,804,309.74234872648685,239.50162862168793,6.5,1.4,0.8510638297872339,1.7735244491334168,8.787559151426468,3.565728619489772,7.408247947692871 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/dense_rentfix_states.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/dense_rentfix_states.csv new file mode 100644 index 0000000000..8b1a3b73a3 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/dense_rentfix_states.csv @@ -0,0 +1,52 @@ +state,census,was,fix,moe,step +AK,10.5,11.019712636717708,11.019712636717708,2.1,0.0 +AL,15.5,16.660960866133674,16.233672568875818,2.4,-0.42728829725785644 +AR,13.3,12.453706371843415,11.221211122863409,2.7,-1.2324952489800065 +AZ,13.3,22.687794744163234,22.589911996017776,2.3,-0.09788274814545872 +CA,17.9,24.121290625968072,23.06679901215866,1.0,-1.054491613809411 +CO,7.7,16.379684444985866,15.980103417137062,1.8,-0.39958102784880367 +CT,12.8,16.560293015964547,16.724730202587835,3.2,0.16443718662328877 +DC,20.3,26.102302910381404,26.102302910381404,3.7,0.0 +DE,8.7,21.69380057983112,20.85009382551732,2.6,-0.8437067543137999 +FL,18.4,30.028279400134906,28.93251809530109,1.8,-1.0957613048338146 +GA,15.1,23.626865042560066,23.59879340378728,2.2,-0.0280716387727864 +HI,13.0,8.764118379135269,8.508996681966362,2.6,-0.25512169716890654 +IA,8.2,8.631375521042317,7.854548372259957,1.9,-0.7768271487823597 +ID,6.5,10.39254600543749,9.94921471692532,1.3,-0.4433312885121694 +IL,12.4,12.795330300647167,11.645045080685628,1.6,-1.150285219961539 +IN,10.6,14.3561105974897,14.067773288522979,2.2,-0.28833730896672094 +KS,9.7,13.264475217675143,12.856414187924258,2.5,-0.40806102975088443 +KY,13.3,13.695270782163183,13.64156933272043,2.9,-0.05370144944275346 +LA,20.7,13.719988304410755,12.9019239478327,3.0,-0.8180643565780557 +MA,12.8,20.65448570948504,20.017148354728654,2.0,-0.6373373547563865 +MD,10.7,19.232590168012678,18.862155558141723,2.5,-0.370434609870955 +ME,6.5,10.632771843758373,10.026721438626245,2.3,-0.6060504051321285 +MI,10.3,9.89598180206563,6.961628611797206,1.9,-2.934353190268425 +MN,6.9,6.939264162864532,5.936646163244632,1.9,-1.0026179996199005 +MO,9.7,14.088579727210307,13.640749934464818,2.3,-0.4478297927454893 +MS,19.1,15.12656389266076,14.465272134083085,2.6,-0.6612917585776756 +MT,9.3,10.257827148297556,9.146994413256909,2.3,-1.1108327350406473 +NC,14.4,17.54797515797036,17.620926068061383,2.2,0.0729509100910235 +ND,10.3,9.960342986115812,9.608296872897766,2.1,-0.35204611321804613 +NE,7.1,7.9803973971522515,8.00426004959579,1.9,0.02386265244353769 +NH,7.5,10.715136855885296,10.335430291982773,2.4,-0.37970656390252344 +NJ,13.3,20.364304682195133,18.84793300444673,1.9,-1.5163716777484026 +NM,10.9,9.502007270220455,9.174206231138218,2.1,-0.327801039082237 +NV,15.0,20.266396327611087,18.813196893966968,2.5,-1.4531994336441194 +NY,16.2,21.7761067979677,21.065890274382237,1.9,-0.7102165235854621 +OH,12.3,12.276039111872556,11.93188178115129,2.1,-0.3441573307212664 +OK,9.9,13.820143751855637,13.02157250721589,2.0,-0.7985712446397475 +OR,11.0,21.527395417250382,21.925689340743865,2.4,0.39829392349348325 +PA,11.1,13.475600808235594,12.109439939153857,2.0,-1.366160869081737 +RI,8.4,11.753905508598592,11.753905508598592,2.3,0.0 +SC,11.1,15.35215442194354,15.620085137415815,2.1,0.267930715472275 +SD,7.8,11.100829056265283,9.573333027195188,2.2,-1.527496029070095 +TN,10.0,15.271551020582674,14.26636339214995,1.7,-1.005187628432724 +TX,16.1,20.755823740113225,20.140669479815212,1.3,-0.6151542602980129 +UT,7.3,11.146386609823814,11.160233235993722,1.6,0.01384662616990795 +VA,12.1,19.848466549835816,19.129571702294086,2.4,-0.7188948475417298 +VT,8.3,11.019289355101257,10.182312093017584,2.5,-0.8369772620836731 +WA,9.3,18.389384688756664,18.48619237946035,1.9,0.09680769070368456 +WI,7.3,11.575193521299605,11.634531010016575,1.7,0.0593374887169702 +WV,11.3,14.664224661468953,14.23570114224052,2.4,-0.4285235192284329 +WY,6.5,8.273524449133419,8.273524449133419,1.4,0.0 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley.csv new file mode 100644 index 0000000000..d958954a4e --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley.csv @@ -0,0 +1,52 @@ +,priceyear,threshold_rest,cash,inkind,fed,payst,exp,E_census_flag,pe_2024,pe_all_swapped,pe_2025,year +AK,2.5611754881564344,-0.2936031875019241,-1.3831986447941185,-5.853331249074972,0.4966984503464309,0.06021850043697493,-1.244330003460182,16.194556293612283,10.538185647720926,10.538185647720926,11.01971263671771,0.4815269889967837 +AL,2.1014266920718034,0.9432791088218944,-1.7737860258943994,-3.9362696874745975,1.0147440015398341,0.7502816676521353,-0.021118207213200624,16.813164699851868,15.891722249355338,15.891722249355338,16.660960866133674,0.7692386167783365 +AR,2.311752836402673,0.13192468864308038,-1.7140788445840127,-2.4068742174922884,-0.6956634302264979,0.44983641513752315,0.4234166261182847,12.912154401478992,11.412468475477754,11.412468475477754,12.453706371843415,1.0412378963656614 +AZ,2.930412730029177,3.2053950317472433,-1.6467658152874227,-3.932566815763433,0.6200939213969806,0.1206786846601797,-0.605456210414107,18.674716085081368,19.366507611449986,19.366507611449986,22.687794744163234,3.3212871327132483 +CA,3.3927940274788186,1.6536790333158313,-2.4979379970758737,-0.8797182799680391,-0.039144611692513626,0.9005115023207177,-0.32741340875752356,20.714954017464418,22.917724283085835,22.917724283085835,24.121290625968072,1.2035663428822367 +CO,2.3715671529519744,-0.1439314114510538,1.9887202533211001,-1.2967023091481413,1.13039696796763,-2.9970098512202314,-0.4352717217878385,14.48653655085503,15.104305631488469,15.104305631488469,16.379684444985866,1.2753788134973973 +CT,3.376061002866971,-1.0880326391848754,0.23564117834226045,-1.237523025485074,-0.3900272690019571,0.4542738170561101,-1.9419310106616632,15.630098846008298,15.038560899940071,15.038560899940071,16.56029301596455,1.521732116024479 +DC,3.8039766754131312,-1.1849348527446502,-1.7295012381504629,-0.48025996081607847,0.9694066090609155,-1.1779144462565023,-1.5335007067539947,26.19208509489287,24.85935717464523,24.85935717464523,26.1023029103814,1.2429457357361713 +DE,3.3098635891025334,-0.0774839020829032,1.0210727066915586,0.2944136707062342,-0.5945274301526093,0.8317331105937051,-1.2622610264746192,15.144611445049199,18.6674221634331,18.6674221634331,21.69380057983112,3.026378416398021 +FL,4.483383022595458,1.431447907702333,0.19309435862664753,-3.7346392132651935,0.16316385229266736,0.11810529455747605,-0.01896080224351035,24.111702712389313,26.74729713265519,26.74729713265519,30.02827940013491,3.280982267479718 +GA,4.151846924430869,2.981060943729973,1.7075888669057926,-2.777677693712665,-0.8865200109247515,0.047774233984844684,-0.81471300025574,17.623853759390897,22.03321402354922,22.03321402354922,23.62686504256007,1.5936510190108493 +HI,2.816213867149542,-0.11642504630939501,-1.772032075887937,-4.103174637560725,-0.6672591614832102,-0.039419318330392514,0.4067135644958379,11.774189166659875,8.298806358733593,8.298806358733593,8.764118379135267,0.4653120204016741 +IA,1.539173391775612,0.24164479201446348,-0.6238708575646884,-1.0796595913180875,0.28867863904794033,0.09634158119663103,-1.1718412385968537,8.997492557025778,8.287959273580796,8.287959273580796,8.631375521042317,0.343416247461521 +ID,1.4970764306921367,0.6346635147805859,1.6011935213607196,-1.4248496187530955,0.3516153522876454,0.4561997582351285,-0.11817515949427232,6.956496379813835,9.954220178922682,9.954220178922682,10.39254600543749,0.43832582651480756 +IL,2.8360279463758564,-1.1390541733397972,-0.8095029638724145,-2.2481920674107094,-0.16452405309715842,-0.39185235840017735,0.0987713018113743,13.097726188757402,11.279399820824375,11.279399820824375,12.795330300647166,1.5159304798227904 +IN,1.9054840330357363,-0.4178134974936034,2.4160343184475885,-1.5344111838860113,0.6265476179470354,0.47339809398550914,-0.5325146369985364,11.126175449005657,14.062900194043376,14.062900194043376,14.3561105974897,0.29321040344632365 +KS,2.850190022078493,0.7730321343530727,-1.7121542728102028,-1.6168065360181634,0.35453139298816405,0.2597832460294956,-0.3144123175931113,11.020574580945844,11.614738249973591,11.614738249973591,13.264475217675143,1.6497369677015516 +KY,1.8098184545448521,0.7506337676491832,-0.48287306310671674,-3.7644821692019916,0.8818910422157273,0.42309347392064,-0.27346311676473445,14.818049894364894,14.162668283621851,14.162668283621851,13.695270782163183,-0.46739750145866843 +LA,2.2219408591510756,0.09928513808471612,-4.6326866049053255,-5.156951442775003,-0.7740420873149982,0.8475493734589146,0.1191376335945486,20.921902545827145,13.646135415121073,13.646135415121073,13.719988304410753,0.07385288928968059 +MA,3.2205829164627935,0.912726319461219,-1.1924113384139214,0.2468714628277463,1.0598315238070963,-0.08779367020963014,-0.5334483225002821,15.659158722663257,19.28551761409828,19.28551761409828,20.65448570948504,1.3689680953867622 +MD,2.8051663039159545,-0.809849899045045,0.7186575824655643,-2.0922736329855423,0.8804073020242912,-0.02077502014442227,0.49908473267133674,15.766838509318847,17.747255878220983,17.747255878220983,19.232590168012678,1.4853342897916946 +ME,2.6925600242151715,1.4114222612975575,-0.5205928356874203,-0.027579403718761913,0.6130639060076494,0.43622564398215297,-0.7479559173401276,5.627059095257071,9.484202774013292,9.484202774013292,10.632771843758373,1.148569069745081 +MI,2.2437088547501665,-0.30018894268022267,-3.256210822736821,-1.4298650566106899,-0.07047614916353334,-0.9122542948276939,-0.5306955702086283,11.830697098340064,7.574715116862641,7.574715116862641,9.89598180206563,2.32126668520299 +MN,1.5190072347376555,-0.7350668910180533,0.6257235090639226,-2.0890358995947467,0.33833658543293665,-1.042470303898567,-0.823807481464593,8.20760623793026,6.000292991188815,6.000292991188815,6.939264162864531,0.9389711716757159 +MO,2.1415495748402336,-0.0545354887673042,-0.9121353419202893,-2.7915967320929798,-0.613499867481335,0.6614458082280987,-0.8448703537654016,15.117478696997525,12.703836296038547,12.703836296038547,14.088579727210305,1.3847434311717581 +MS,1.9539833120842531,-0.760217021231471,-1.5467137127699342,-1.8210728345336311,-0.36103303110408647,0.6225869286932687,-0.23527152408897936,15.84198552198751,13.69424763903693,13.69424763903693,15.12656389266076,1.4323162536238296 +MT,1.7675682150960217,0.1847864751944598,-0.2570388383914456,-2.4861654468202046,0.04840057111973006,-0.31943649563212595,-1.2294571627782493,11.25524427316498,8.963901590953165,8.963901590953165,10.257827148297556,1.2939255573443909 +NC,2.6494604619475384,1.8206430592993277,-3.1917817651677303,-3.2515329408534313,0.35414565871837456,0.28374144598684503,-0.9425050982014226,18.81770069433948,16.539871516068978,16.539871516068978,17.547975157970356,1.0081036419013785 +ND,1.2987772735161474,-0.17568094719682184,0.48573822710005066,-1.4087697536964012,1.5101716266350933,0.08826306890980451,0.696036634615922,7.630785489954729,10.125321619838523,10.125321619838523,9.960342986115812,-0.16497863372271127 +NE,1.3110430460625135,-0.41644772336962826,1.680275151402886,-3.6006465528992417,0.6085514551157457,-0.23705022505661505,-1.4883452213314556,9.417314380262141,7.274694310186345,7.274694310186345,7.980397397152252,0.7057030869659071 +NH,1.5470699436688917,0.622647092818022,0.5680488562909565,0.7692038037923214,-0.6355479958172852,-0.19266890481399973,-0.4010909319209438,7.493675599383197,9.77133746340116,9.77133746340116,10.715136855885296,0.9437993924841361 +NJ,3.4518391091289566,-1.1017401295762312,0.8816529715911374,-2.4381313774288342,1.176461190996692,0.8903608795744252,-0.723953225264973,15.826171775172051,17.962661194193224,17.962661194193224,20.364304682195133,2.401643488001909 +NM,2.601026437577014,1.3896804650757038,-5.2487630789065856,-4.738876498559138,0.6639635614169664,0.6536590048652575,-0.006758742377150198,12.969735825865724,8.28366697495779,8.28366697495779,9.502007270220455,1.2183402952626654 +NV,3.634202984647745,0.6663101352897441,-1.412746938024767,-2.0365025466424074,1.147833602650922,0.0047432745374779844,-0.3532001316174926,15.356941678797513,17.007582059638736,17.007582059638736,20.266396327611087,3.258814267972351 +NY,3.999110119490332,1.2787055348911198,-2.7416830398339105,-1.595235363019672,1.1872847791097938,0.2666744155580781,0.326056923222918,18.324898381557148,21.045811750975805,21.045811750975805,21.7761067979677,0.7302950469918947 +OH,1.9018946798494754,0.7798798463925919,-3.0946777109219195,-2.995723972390314,0.10697924220393343,0.40809908008886675,0.13370565193437794,15.005100188964308,12.24525700612132,12.24525700612132,12.276039111872556,0.030782105751235633 +OK,3.2289734567044968,-0.1844343177345904,-1.7893329310306592,-5.088492710698823,0.5303559529294739,0.315869169542334,-0.6205126212040318,15.331135386083364,11.723561384591566,11.723561384591566,13.820143751855637,2.0965823672640713 +OR,3.019187937737959,-0.4060984761206987,-1.2492853031262179,-3.693437185796444,1.8423556647809722,1.0271428640790934,-1.1023138143446582,19.693949406262277,19.131501093472284,19.131501093472284,21.527395417250386,2.3958943237781014 +PA,2.42459552020516,1.2713789863353158,-2.6545962444224838,-3.997946291610923,0.6593721585270356,0.4840059403412582,-0.5717780471529162,14.397101929499287,12.012133951721735,12.012133951721735,13.475600808235592,1.4634668565138576 +RI,2.653979975678157,0.11802691139491166,0.027226136445444277,-1.7307931320632226,0.6276309280955972,0.6227611321001056,-0.9125171507716319,9.72713362216901,11.133448423048371,11.133448423048371,11.753905508598592,0.6204570855502212 +SC,2.0809989855043436,0.838266305664455,-1.9069186262455542,-2.9558719184351774,-0.06219660168942823,0.4956543877548547,-0.6449438048055631,14.939913919997876,12.784902647745806,12.784902647745806,15.352154421943542,2.567251774197736 +SD,1.4957321458804196,0.2702878762756772,1.2661596207033137,1.6696093151589033,0.6117518713293242,0.000921105877294881,-0.9863949585917572,7.194354663317045,11.52242163995022,11.52242163995022,11.100829056265283,-0.42159258368493724 +TN,2.2621733719258112,-0.038707407451891995,-0.8057351515786976,-1.004082239618145,-0.172968707435785,0.02501103937515946,-1.1002452022998195,14.058012515615664,13.223458218532295,13.223458218532295,15.271551020582674,2.0480928020503786 +TX,3.4659958900050905,1.6367086185231923,-1.2413893542964485,-3.299247450151018,0.2722787487730765,0.051310892324373414,-0.8917724131605844,18.32664253946711,18.32052747148479,18.32052747148479,20.755823740113225,2.4352962686284343 +UT,1.894665874124996,1.131277239164889,1.3177711825360616,-1.0869837128408824,1.340629621002157,0.43647049211083094,-0.29180715273226837,5.937223674095712,10.679247217461496,10.679247217461496,11.146386609823814,0.46713939236231816 +VA,2.7199992229127687,0.08614644047800994,1.0040721286832268,-0.9361358806346922,-0.7479157794936923,0.07341107113970632,-0.4945519246942364,16.879257498638495,18.584282777029586,18.584282777029586,19.84846654983582,1.2641837728062342 +VT,1.0491457320672726,0.32823066451784433,-0.7477913128571738,0.05107520868339703,1.253070650951813,0.21014882659486328,-1.4218249803179763,9.348212080687897,10.070266870327938,10.070266870327938,11.019289355101257,0.9490224847733195 +WA,2.324815447036824,0.9808663283050361,-0.7816211100790635,-0.6483203809058449,0.6171895113176767,-0.2510898170731197,-0.38565503474625074,14.296719447847728,16.152904391702986,16.152904391702986,18.389384688756664,2.236480297053678 +WI,2.011580416812281,-0.3139676305702544,0.9809937228999526,-2.205522780899054,0.25703492659731836,0.25561138499131253,-0.7723008782293905,9.30739167909626,9.520820840698423,9.520820840698423,11.575193521299605,2.0543726806011815 +WV,1.9184233630221756,0.7296292820515962,-1.3936556241033586,-1.036302727187953,-0.3731865944850905,0.2924895101288825,-0.3405698414404485,14.149743438058254,13.946570806044058,13.946570806044058,14.664224661468953,0.7176538554248957 +WY,1.0390742954384797,-0.08268547633075238,-2.0542364131517328,-0.9070381710596316,1.256618026406682,-0.0773117521751059,-0.343866063284789,9.390998723821975,8.221553169665125,8.221553169665125,8.273524449133419,0.05197127946829383 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley9_all.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley9_all.csv new file mode 100644 index 0000000000..199d1d0e30 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley9_all.csv @@ -0,0 +1,53 @@ +,E,priceyear,threshold_rest,cash,snap,housing,otherkind,fed,payst,exp,pe24,n +AK,16.19455629361222,2.71866196019763,-0.32093367176381377,-1.5068331381829543,-4.833673603280663,0.2598748341102783,-1.3341990699572577,0.6041163004262421,0.04566889641419246,-1.2890531538549765,10.538185647720894,1434 +AL,16.813164699851914,2.158951576792022,0.7730329577434732,-1.7460449744220574,-3.9320762821834396,0.6662981592370404,-0.5411836770872899,0.9733026518317576,0.7443017211415683,-0.018024583549605358,15.89172224935538,2339 +AR,12.912154401478984,2.313460863688776,0.020394382766567,-1.7855151241820444,-2.5731173517706507,0.8309644920824051,-0.4361506065113112,-0.7511889518179442,0.4378330643726564,0.4436333053703032,11.412468475477745,2232 +AZ,18.674716085081393,2.9915837195438075,3.1278154922813632,-1.7578675656429166,-3.735128068829323,0.9474744182723106,-1.0525796472094207,0.6448571358252446,0.14989758737265804,-0.6242615452451072,19.36650761145001,1934 +CA,20.71495401746437,3.326002407246919,1.7157921390847166,-2.5543026056350304,-2.508922733179521,2.4099901162830313,-0.6934289488474904,-0.03184987552643538,0.873493964514487,-0.3340041983192301,22.917724283085814,10995 +CO,14.486536550855023,2.482606839971652,-0.16400128595102934,2.086095533707234,-1.981076982317328,1.4324730197781823,-0.9601836225485461,1.2077288630975742,-3.033423258757376,-0.4524500263469231,15.104305631488465,1633 +CT,15.630098846008297,4.089068595005958,-0.916674639373182,0.13019589199315657,-3.530378077602963,3.1038123082021563,-1.8091272286281317,-0.27546693118284005,0.3797081502484655,-1.7626760147308442,15.038560899940071,1275 +DC,26.19208509489287,3.902800855529356,-1.1851156032867234,-1.8186854683869287,-3.8776095682280443,4.613045976195367,-1.8039619066021504,1.1371711855918991,-1.0805681939869412,-1.2198051970734536,24.85935717464525,1208 +DE,15.144611445049208,3.2613155219112904,-0.019594432967253994,0.9583118277740151,-2.020451461017884,2.711793920723213,-0.43501481809467824,-0.5402695206622841,0.8374875050828081,-1.230767824365332,18.667422163433102,1254 +FL,24.11170271238937,4.454828424016027,1.413816123599702,0.22013097513437768,-4.109485872369869,1.5578081121505551,-1.2390652969480147,0.18912216737383675,0.13751970380717296,0.01092008350211214,26.74729713265527,5062 +GA,17.623853759390947,4.0313929601288745,3.1033392127890616,1.670394393098989,-2.330920744265918,0.4737245563832444,-0.939057712785559,-0.8644842833110585,0.01931373537382776,-0.7543418532531232,22.033214023549288,2789 +HI,11.774189166659879,2.752763388932524,-0.11829484262610993,-1.7808656749742866,-5.670732838583083,2.416652394196368,-0.961126357744381,-0.5608838243867964,-0.013166486104898088,0.4602714333643821,8.298806358733597,1654 +IA,8.997492557025796,1.5371301876861274,0.2921811151513376,-0.5946035124423423,-1.8607275525964817,1.1125535299046523,-0.3982472963637732,0.2581457788393737,0.10944506676413578,-1.1654106003880125,8.28795927358081,1477 +ID,6.9564963798138475,1.508869868196068,0.632668534364302,1.589611156804889,-1.1081749420225298,0.23384686651007164,-0.542745780883554,0.3265355970115974,0.45952481369052545,-0.10241231456252656,9.95422017892269,2289 +IL,13.097726188757411,2.810271362751979,-1.1070071564197808,-0.7318484948663373,-3.6671559243170857,2.113632774420737,-0.7569394878543756,-0.17356912211751813,-0.34959439944818993,0.043884079917540626,11.279399820824377,3381 +IN,11.126175449005675,1.9141804247204153,-0.36561119094177885,2.408370502084657,-1.5569869619044878,0.3372469385982215,-0.3739092512858912,0.5862353443614028,0.5057072984835426,-0.5185083590783636,14.062900194043396,2142 +KS,11.020574580945876,2.779245696900656,0.5601206046935338,-1.6612206278231167,-2.1088551745130824,1.5984963063211495,-0.8956836631017183,0.41148062523448825,0.23335228819171777,-0.3227723868758749,11.614738249973628,1573 +KY,14.818049894364865,1.880623555176888,0.8828890594992,-0.38959180236706037,-3.2146839797183664,0.368569012928745,-1.257493550897208,0.9029200221643228,0.4611875944698639,-0.28980152199941756,14.162668283621832,1366 +LA,20.921902545827123,2.350635661784006,0.0015611715936659915,-4.682422839125824,-6.326777678203214,1.7050842560408195,-0.3638763683208612,-0.8980618753904231,0.8152634653007718,0.12282707561500836,13.646135415121071,2736 +MA,15.65915872266325,3.1934354507235883,0.8385204259226893,-1.2528944108317839,-2.254676006630583,3.0997241296319435,-0.43489735073342395,1.032438055091605,-0.04078953557337278,-0.5545018661656564,19.285517614098257,2810 +MD,15.766838509318848,3.021583674291604,-0.7905794245130124,0.6025181914933172,-3.5263197043714354,2.376627540352959,-0.9235032961456159,0.8944439764799174,-0.009783093798916148,0.3354295051133209,17.747255878220983,1496 +ME,5.627059095257075,2.5827463043187224,1.428493449237844,-0.5059297199066843,-0.30422431262418087,0.6757270986697911,-0.4610888555607676,0.7138499367875119,0.49304509149267445,-0.7654753136586863,9.484202774013301,765 +MI,11.830697098340055,2.2177205224247882,-0.19631850545574026,-3.1179809865696684,-2.4576295263150216,1.9205680364603683,-1.2391068312981763,-0.016567558169384086,-0.8951492659389321,-0.47151786661565687,7.574715116862634,2544 +MN,8.20760623793026,1.534469639319314,-0.5990060585019021,0.6811554109092218,-2.4062932208640033,0.9388661228469637,-0.7781193834709197,0.3140635105729924,-1.0220389889912396,-0.8704102785618706,6.0002929911888145,1634 +MO,15.117478696997534,2.1572394414777603,-0.04243875111257005,-0.9234340548111658,-2.269432843575055,0.7479656024632587,-1.2135775253125944,-0.488631017938318,0.47761656874563724,-0.8589498208959411,12.703836296038546,1911 +MS,15.841985521987493,2.0791070593948406,-0.6528259278599021,-1.6422303267753469,-2.916010273735125,1.6746631026807972,-0.6355947880433991,-0.47585108592714437,0.5815954128301101,-0.1605910555154028,13.694247639036918,1964 +MT,11.255244273164992,1.7395039525786558,0.16043003439677944,-0.3112318208177855,-2.586582759743257,1.1950090975548244,-0.9567752586811099,0.08329087067565255,-0.30379241369349963,-1.3111943844820737,8.963901590953178,1825 +NC,18.817700694339525,2.6447612262471685,1.7839622703485847,-3.206032241524513,-2.547036448472587,0.6932904358320964,-1.4318645804308443,0.3732605568028304,0.31177388003677126,-0.8999442771100048,16.539871516069027,3037 +ND,7.6307854899547225,1.317413351838657,-0.13735930548479772,0.4084703720905263,-1.6784600473162257,0.8370625985759592,-0.5179348661939053,1.5007950941438792,0.07926161076880844,0.6852873214608891,10.125321619838514,1682 +NE,9.417314380262134,1.3699671743513826,-0.47861553784246125,1.8354653810894987,-2.7374208844787917,0.02370347915105968,-1.0321991208693304,0.6484102495249386,-0.18988901804112593,-1.5820417929609587,7.274694310186342,1596 +NH,7.4936755993831845,1.5030672896330088,0.6446983684753749,0.5550855331008488,0.041084136316570305,1.211881693054455,-0.47188413312978383,-0.6222491819633841,-0.17862957053239822,-0.40539227093672914,9.771337463401148,1135 +NJ,15.82617177517208,3.484684855689268,-1.1358907884785365,0.8439971768617951,-3.023266125422199,1.4492669812442236,-0.8244994228448979,1.1636587608884554,0.8851113278623407,-0.7065733467792916,17.962661194193238,2413 +NM,12.969735825865733,2.6353716105032863,1.2509283445608677,-5.293936015609651,-4.368156949408208,0.6296499757204201,-0.6921542041904558,0.6017775592807292,0.608266289151282,-0.0578154609162026,8.2836669749578,1878 +NV,15.356941678797492,3.2221579013983304,0.613269817890106,-1.4481919802841587,-2.588558369391596,2.111159441784918,-0.9692841329101578,1.1798032769789009,-0.010714523273544864,-0.4590010513515692,17.00758205963872,1684 +NY,18.324898381557155,3.923507722839161,1.2767785965366452,-2.7933967598078446,-2.9080372802456917,2.588259294787781,-1.1000370062145293,1.1496077554245374,0.277866314950477,0.30636473114810486,21.045811750975798,4336 +OH,15.005100188964294,1.9384226602276802,0.713600069159434,-3.0251816435686596,-3.656597260199124,0.985455521474583,-0.43819827201390815,0.16612162252870402,0.39025533971969034,0.16627877982861686,12.245257006121307,2859 +OK,15.331135386083353,3.190333843709743,-0.18888912591814597,-1.863877749657363,-4.859744481370419,0.6266102353186688,-0.8179353231334469,0.5506675765153212,0.30073522879948744,-0.5454742057556384,11.723561384591557,1937 +OR,19.693949406262288,2.9909572918148712,-0.171398578062909,-1.3158314323901983,-3.116219088529963,0.6030363893190769,-1.4339162085379145,1.8870108757948982,1.059316975072444,-1.0654045372702974,19.1315010934723,1823 +PA,14.397101929499303,2.424802143163591,1.2260782818516671,-2.623250706855687,-4.196093586039303,1.3883544634291953,-1.1693932990678975,0.6689692505188263,0.4884824506068484,-0.5929169753847998,12.012133951721745,3134 +RI,9.727133622169008,2.6396859777402377,0.07854440756754262,0.0200725069591364,-2.7847132620971453,1.6419065198174043,-0.4163663187194871,0.5381904436393696,0.6023535248687678,-0.9133589988964692,11.133448423048366,868 +SC,14.939913919997897,2.2309769719863297,1.0435444823423075,-1.670681403133339,-3.6693167546425483,1.3410452491215226,-1.1617883239774303,-0.116441019427999,0.4648885434074789,-0.6172390179283864,12.78490264774583,2259 +SD,7.194354663317045,1.4873455639917283,0.1351982744369538,1.2136115875153743,-0.14568985885777644,2.455495630104436,-0.4739481894828875,0.5979712795731693,-0.0188330600900707,-0.9230842505577582,11.522421639950215,1270 +TN,14.058012515615664,2.2462267979724753,0.1782805593310441,-0.5889066478588711,-2.307305228187497,1.680275888276134,-0.9814708820266507,-0.0972469996432782,0.03322444985794527,-0.9976322348046619,13.223458218532302,2251 +TX,18.326642539467063,3.5519969606213664,1.7464462711926059,-1.1676411540185003,-3.7035671228744156,1.0553695028387076,-1.0001319144411427,0.31025514039605157,0.054372230792141235,-0.853214982489122,18.320527471484752,8055 +UT,5.937223674095707,1.8666216771102133,1.1323725832637468,1.2926737119608231,-0.748775562963725,0.18540258149564867,-0.4267493886706081,1.3086708614420604,0.43029197020971266,-0.2984848904820887,10.67924721746149,2391 +VA,16.87925749863848,2.7396133375315634,-0.020552713637381717,0.9530451809424505,-1.7983725723582424,1.5828961333339118,-0.6266887977105274,-0.7540582603546304,0.08117311959161982,-0.4520301489476725,18.58428277702957,2371 +VT,9.348212080687887,1.033437057849599,0.2486713193497076,-0.7612343362294189,-1.195334436053119,1.9001706228169062,-0.529442401879718,1.244093419067633,0.1970233095378137,-1.4153297648193637,10.070266870327927,1318 +WA,14.296719447847774,2.3577107659152134,1.040598401921276,-0.9341693028032517,-1.8454003893028346,1.485958387297078,-0.26221409056273165,0.5837656781469343,-0.17336165183888755,-0.39670285491754476,16.152904391703025,2361 +WI,9.307391679096263,2.151656530459219,-0.32363270766260044,1.0515109375552643,-1.9204355031461366,0.3606012533100677,-0.871767090497722,0.2805132166264326,0.22324202796707976,-0.738259503009445,9.520820840698422,1786 +WV,14.149743438058291,1.84698271538852,0.7975197882833301,-1.3187442385304728,-1.9978287623285185,1.2865292690448535,-0.45714835378751617,-0.3526892367177443,0.2570210507762587,-0.2648148641429089,13.946570806044093,2196 +WY,9.390998723821962,1.0511106054699346,-0.06867300364088334,-2.0332734516356274,-0.7787493296624265,0.13576731838586042,-0.2929615494869785,1.2431244807501032,-0.07404619742258432,-0.35174442691424135,8.22155316966512,1608 +US,16.310518582644047,2.9244425738271422,0.8257570661228091,-1.0973166422717728,-2.9798681711671167,1.4683336641223341,-0.8816717265813658,0.29673737608121653,0.19756411903044507,-0.4396374315724612,16.62485941023528,119970 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley9_asec.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley9_asec.csv new file mode 100644 index 0000000000..335f840ff7 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley9_asec.csv @@ -0,0 +1,53 @@ +,E,priceyear,threshold_rest,cash,snap,housing,otherkind,fed,payst,exp,pe24,n +AK,18.780771399990375,2.6674775381410814,-0.34015574893102585,0.21794059577841213,-5.013521442937228,0.3385080374731507,-1.2464086933913843,0.03221103006202974,0.0,-0.6146182989359642,14.822204417249447,717 +AL,18.83421532449117,2.297661432911492,0.6742859627937332,2.0521669199818073,-3.7299921785303694,0.6496964763990651,-0.3959974734308806,0.03196188651969943,-0.019702535528905357,-0.17331450749770422,20.220981308109106,1101 +AR,15.930819422757578,2.6152728420197673,-0.3842668825372109,0.7685309761832992,-4.0729527479543055,1.0730033586924923,-0.3959853018274032,-0.8285305388607365,-0.07248328870837263,0.05023744495188374,14.683645284716995,1078 +AZ,21.559736075807205,3.1004644896976767,2.9981953598757514,-0.5343910365600365,-3.5478552736365936,0.7251060022726362,-1.2789345489637716,0.6218436805977067,0.14812117354409451,-0.8296698481809517,22.96261607445372,900 +CA,22.878409964057855,3.5936300740281233,2.3395482480147107,-0.1351311236919159,-2.475786042775648,2.8464208555903383,-0.7619063168521685,-0.11615161076159218,0.5475937944300975,-0.5874565043378965,28.1291713377019,5039 +CO,17.877554830776162,2.5002094499888368,0.14146651719093836,0.7904738714343139,-2.0729321631773296,2.4880776527263793,-0.7882998246434654,0.15901382123171395,-3.6296162494797035,-0.636515099956252,16.82943280609159,735 +CT,18.67241546477362,6.337861587527293,-0.36063745426313215,-0.05697023975519466,-5.6243851446086675,4.3654232479786454,-3.281326488291224,1.117208475966568,0.6179596401614214,-1.6058331996475352,20.181715889841797,577 +DC,36.52323452770257,4.742188044544942,-1.792176824353334,-0.0023425660134145515,-5.013030540255532,4.248557478826119,-2.1548288689390365,0.09463681061353572,-1.130969285257538,-1.2198642021866826,34.295404574681626,604 +DE,16.14164523066652,3.547266294233456,0.034332945264673564,0.6458281879141241,-1.130322087423523,2.5514128199651225,-0.6502821400674416,-0.7762515478143032,0.4469201488038353,-0.4164093634202064,20.394140488122257,624 +FL,30.083218111320882,4.674957173858245,1.4304564452640196,1.8996361103799508,-5.1118946038438695,1.5699145230717069,-1.2721371447380738,-0.271599450169704,0.0,-0.4375337767152508,32.56501738842791,2395 +GA,21.6761314921527,4.590684570013792,4.615148176455979,2.1188129125276194,-2.2757474417862755,0.6076920095829106,-1.0197168866793158,-0.8975864504931808,-0.15764541362367615,-0.44185686123387236,28.815916106916674,1310 +HI,13.581729027294593,2.850953591589217,0.14765917775939622,-0.41779845361409085,-6.672837295491449,2.068921600903415,-1.0551350939905986,-0.9199349919459516,-0.3896991319072453,-0.6898794089223155,8.503979021674969,825 +IA,7.413303400174925,1.3546216851566493,0.04899078228490911,0.9332951957589666,-2.451977463464252,1.1304714809969743,-0.47634746387062515,0.24276705412203148,0.062103509897916444,-0.06480933211502522,8.192418848942468,689 +ID,6.429764526525913,1.1091995033586333,0.2812791864458229,0.6547816359009151,-0.8799738866702105,0.3331874051807712,-0.4095845421132331,-0.31335272161663846,0.11976280647508122,-0.21175729327644952,7.113306620210605,1137 +IL,17.679175069085456,3.2699948423258176,-2.1045472390628097,0.5670720573233716,-5.259801732419395,2.6324352194773404,-1.0485501672793336,-0.6348830011335289,-0.7451041341393686,-0.6289282092895184,13.726862704888031,1529 +IN,16.132704622486578,2.2386530290077262,-0.7930637830835884,3.2643773627239128,-1.808439133734762,0.5052796326803567,-0.22922904518119347,-0.26977048629857503,0.06356252648248316,-0.5729777795955786,18.531096945487363,1001 +KS,12.155464822151375,3.0088425372381113,0.9168641553527332,1.942947188566401,-2.022729338479837,2.8733907766534945,-1.2475410448090667,-0.5497790246873802,-0.07294376544194339,-0.2153674125023819,16.789148894041507,727 +KY,19.114684442714783,1.8598066630044692,0.9915167060790133,2.170308053974184,-5.288148684511131,0.35844640293112395,-1.9695054885911742,-0.3633186518915815,-0.41630405939198556,-0.5992717815490795,15.858213602768625,648 +LA,20.978637805894135,2.1140356136719043,0.3490950415481152,0.8872773614107328,-7.322959170129604,1.7142219938867815,-0.31521096644369767,-0.39521417935475367,0.25721621650987225,-0.4006068649439336,17.866492852049554,1313 +MA,20.510148251492737,3.4605214637598647,0.8815965674662101,-0.03635558822825685,-2.6736408193718044,3.815896613006668,-0.5871420288693933,1.2866585747283747,-0.16792487810378892,-0.23063311008024492,26.259125045800367,1248 +MD,22.22274037274413,3.8038338827021243,-1.4756991340770402,-0.6080884103827767,-4.768687737844254,4.251978307970366,-1.122484495466916,0.8993957804235827,0.31420015403218604,-0.3524825698234152,23.16470615027799,674 +ME,6.475281800401232,3.18808319745732,1.9661370707637686,0.5829881745646355,-0.7262498545014272,0.746171967271226,-0.41881054340744395,-0.5822144149368791,-0.12746884378144796,-0.2839685512056807,10.819950002625301,360 +MI,11.985593817341208,2.5024120121738074,-0.565904413929579,1.447875646405703,-3.5915584611658877,2.365636077753842,-1.4686359205423234,0.239653659522662,-1.2996213493744941,-0.20955457775270164,11.405896490432237,1186 +MN,10.093763173572139,1.87821525563682,-1.0739052820910608,-0.062001686315995216,-3.2624061261880852,1.079460419947379,-1.1343723576900375,0.30709854786507657,-1.3566128736378473,-0.20000897700212447,6.269230094096264,741 +MO,12.983285685963045,2.232877351675319,0.6120940521605621,0.48132709396420925,-1.2773303111654473,1.0454771792407547,-1.4236388111931042,-0.5178405429419058,0.07144347854526537,-0.4105706312549289,13.797124544993771,891 +MS,17.93373832223648,2.3110159531456493,-0.6944916689695115,0.8066461882541307,-2.797380007763566,1.072690268723008,-0.7802800824660567,0.0008547053776698718,-0.07214922037600068,-0.5152479254242432,17.265396532737558,955 +MT,14.214249692756495,1.983746841069896,0.11552605959523732,0.0698998855401793,-3.8066072884950923,1.7017718288212997,-1.2057398342695684,-0.024362898849289518,-0.4088441233158958,-0.697920009819353,11.94172015303391,911 +NC,19.272119982450196,3.184205931358972,1.854863253560585,0.6062258290756724,-3.216344596416107,0.8406376330024339,-1.5302919224182812,-0.3636552242945942,-0.01742010887176583,-0.4916785540773454,20.138662223369764,1422 +ND,8.534318129614098,0.9757827469360469,-0.11831813406918705,0.46448889518175607,-1.7084978164357587,0.7645828980594351,-0.5512479347046336,0.2697186720551153,0.0,-0.1260270730556026,8.50480038358127,841 +NE,7.750818614476521,1.0892260599969619,0.15684525317806267,0.8912770195459732,-0.8679908955415161,0.02880650029108632,-0.8167919781340042,0.11785676302030398,-0.5063085813823119,-0.21062794823219277,7.633110807218885,743 +NH,9.294409437643287,1.7663011479870185,0.1542245232805543,0.04713113641435139,0.2036906699872162,1.5150455186068421,-0.4368566954016772,-0.3619527344331396,0.0,-0.15445484793793746,12.027538156146516,552 +NJ,20.740986769145238,3.942844755788048,-1.3993469610765084,2.2334334455879405,-4.431297656900086,1.7059448524596472,-1.0627282700837888,1.0971661095771694,0.22795281957656854,-0.2076506618977651,22.84730520217646,1071 +NM,13.93993146016858,2.993737916888797,1.9132366160063372,-0.2047009596657383,-6.146337133904091,0.45669855574165197,-0.6073890480412183,0.37351904435049105,0.1419788140373203,0.0011234444719153275,12.861798710054046,931 +NV,18.420164438471932,3.526461238697382,0.48183832956442196,0.9461949956540636,-2.6146489672038706,2.8528924216188325,-1.445876206274299,0.3954991495405345,0.0,-0.27778503104188035,22.284740369027116,797 +NY,19.495479115701055,4.125655295930638,0.005005727981777189,0.16958590671512672,-3.477735005034797,2.6744588060610637,-1.0689545501145568,0.89940530242415,0.28354284063009905,-0.49457868606447214,22.611864754230083,1981 +OH,13.869108466308857,1.9069503501381486,0.9469372825932126,-0.053753185059006045,-5.267635314056001,1.1075049323329968,-0.5530120235788254,0.3015711987774635,0.051175084196553124,-0.18822906653324298,12.120617725120157,1312 +OK,17.594624522540826,3.6695098438180023,-0.2814497459744589,1.2675138747922157,-5.704557201635871,0.6736309138661911,-0.7483196470492429,0.2670352563666462,-0.021324737758247135,-1.13082962618328,15.585833452782778,918 +OR,21.136496664560887,3.3460913367341454,-0.8044730175625293,2.0887861224400375,-2.797992374031753,0.7665099183169046,-1.5414451067100075,2.845556272371622,1.2251416901829415,-1.0866773617049386,25.17799414459731,835 +PA,17.25103559723356,3.5312417759250163,1.603451852034698,1.274116904857825,-5.767694348450149,2.0800379531624893,-1.5433572009411811,-0.2896279878663348,-0.13050487004258426,-0.5067710388775393,17.501928637035803,1444 +RI,14.815452480828487,2.7193060489672485,0.184423790409393,-3.1364452528873725,-2.948233926524083,1.737764269505327,-0.39674920176908907,0.9343150588410998,0.5331633928503422,-0.10404229852645218,14.338954361694908,421 +SC,15.867779755919193,2.488627641058472,2.3901018988022034,1.714610961044203,-3.4659232637798905,1.2125936165985816,-1.030044014441723,-0.3946996224962478,-0.014715418285762604,-0.4457708244985212,18.322560729920507,1057 +SD,8.375287358590406,1.2903113936080113,0.10633163792775424,1.1495404350244172,-0.05695883211362887,3.688935702739968,-0.2468280011716384,0.22963465191377838,0.0,-0.611810012820912,13.924444333698158,635 +TN,15.401381441633136,2.4458301390312394,0.23105552108029367,0.6955810659767042,-1.9223418349344663,2.3626093995283335,-0.9028045609710735,-0.6603927235345135,0.0,-0.6412871379781213,17.009631309831533,1064 +TX,20.896641375371352,3.9434960521607203,2.67273195981953,0.38666039636377436,-4.203744060379348,1.0813165338832962,-1.0527540128783517,0.2017179787242985,-0.0004484056220719064,-0.9269311234853803,22.99868669395782,3780 +UT,7.88825751902396,2.326041963431446,1.5786559901150492,0.18250497671836236,-0.4807258908939698,0.2066910948054969,-0.5635948741569702,-0.5397000210998224,0.2707509498038164,-0.40246179103660534,10.466419916710763,1095 +VA,20.020026303999966,3.0228381099373975,0.175481012871839,2.279570545822338,-2.16248676104796,2.7445681580751318,-0.877440411552624,-1.079765289119643,-0.053226800729485414,-0.6323679434446061,23.437196924812355,1074 +VT,8.344649848535715,0.8606014992432728,-0.1580136337244847,2.0788434188912306,-1.3549498586613615,2.156463510556139,-0.5912442629268608,-0.0017204020357918098,-0.02924692207467364,-0.22144135208272525,11.083941845720458,659 +WA,20.38050048500825,3.2533201804778495,0.6166149260852036,0.1631548658848567,-2.684956822713388,2.1957393162991576,-0.1175049446138976,0.6179190470642643,-0.3915820234250461,-0.43808089005089224,23.595124140016356,1058 +WI,9.083491588776111,1.8993334157783968,-0.3875114424338845,0.7289654044043304,-1.3084549399319345,0.32828133765322526,-0.6871058030600696,-0.10916491463000397,-0.2997615717714803,-0.292129301713622,8.95594377307107,820 +WV,16.04399673556525,2.366735650489198,1.104059776023156,2.178496096941648,-2.1469609827298664,1.596942956612736,-0.5130886605730987,-0.13259531784820727,-0.011035321453245168,-0.77298666999702,19.713564263030552,1097 +WY,9.318690567164351,1.5227858483029186,-0.04535052209059695,-0.37933789957567987,-1.2992491781738116,0.035377964478103735,-0.38338540387969083,-1.1735045341530232,0.0,0.6099616763164739,8.205988518389047,804 +US,18.784170849916606,3.24517638381801,0.9735964164378805,0.7919965561508665,-3.498375378091644,1.7626197104529426,-0.986607109247242,0.0321291641326455,-0.06803170625324607,-0.5181497381946447,20.518525149122173,56326 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley9_puf_tax_detail.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley9_puf_tax_detail.csv new file mode 100644 index 0000000000..7fcee0c4b3 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/dense_shapley9_puf_tax_detail.csv @@ -0,0 +1,53 @@ +,E,priceyear,threshold_rest,cash,snap,housing,otherkind,fed,payst,exp,pe24,n +AK,14.118780137386528,2.748844747198858,-0.2960360499801294,-2.9015473760490202,-4.685410436151043,0.1962156138301517,-1.4002614593599048,1.0715486792207898,0.07600760870682484,-1.8284416540412902,7.099699810761765,717 +AL,15.042636636517276,2.036894446675079,0.864133894758524,-5.06270438603287,-4.112101711125104,0.6807045333569384,-0.6730831867501916,1.7911610332615449,1.4099090454104701,0.12155311250248951,12.099103418574158,1238 +AR,10.385416702219247,2.048938695486756,0.38010335216392865,-3.9134505103829342,-1.3324972998238804,0.6293090265542315,-0.46579249964349195,-0.6968577280875101,0.8662586493685724,0.772940395677516,8.674368783532435,1154 +AZ,16.505909333363654,2.9002483462292905,3.3084240231403883,-2.689077957472521,-3.8853362369576425,1.1156929449664597,-0.891823157250864,0.6464594904387111,0.1395405392597008,-0.4868954932022357,16.663141832514945,1034 +CA,19.05439293555819,3.0958213244556427,1.2522733996027011,-4.413399564191485,-2.5326431614388496,2.0736188126823425,-0.6316625369178361,0.030326253393633956,1.12943993559487,-0.14049043482197512,18.917676963917238,5956 +CO,11.896868011960272,2.457926128189817,-0.38122990038052135,3.075127052565507,-1.9039125908506438,0.6264569154830089,-1.096137452057455,2.006759576189283,-2.5815873492590082,-0.31341786761313317,13.786852524227125,898 +CT,13.431299703347937,2.346607972210971,-1.2944372206993644,0.2777528592351086,-2.0157443352722058,2.1939773050339424,-0.7301990316525859,-1.258565532188496,0.22673200007389838,-1.8560185930268407,11.321405127062365,698 +DC,17.105785387589226,3.1519319210835217,-0.6456320057785976,-3.4214269583773196,-2.8743542260655155,4.934884524489279,-1.490964838827875,2.0593343949218554,-1.0364724923871576,-1.2227813418245366,16.56030436482288,604 +DE,14.361001403418724,2.998077704327811,-0.027639965593415784,1.202499421039236,-2.7202336011210906,2.830361507291485,-0.2577811160613569,-0.3651392061256318,1.1432271735079338,-1.854050422904871,17.310322897778825,630 +FL,19.41343804428311,4.257111444461584,1.415455212185839,-1.0914643388274268,-3.316381355537799,1.5486867396868358,-1.2105816799989775,0.5560372729251064,0.242437573849842,0.35529638563547805,22.170035298663592,2667 +GA,14.216747496375698,3.517621803156979,1.8512936491956726,1.2929890701183924,-2.3655342930389742,0.36751174508235673,-0.8673426633192567,-0.846330125575549,0.1764902259588726,-1.013047023123317,16.330399884830875,1479 +HI,10.40649135086439,2.68922339172302,-0.320727963744402,-2.825852920672502,-4.907048240042553,2.679537248203701,-0.8945927930475193,-0.2921907751253491,0.258622632535521,1.3500979468539003,8.143559877548212,829 +IA,10.264668774061313,1.6816420561587524,0.4323722627783885,-1.825990597337193,-1.3734303626931206,1.0988056103345714,-0.3216862462306462,0.28442580752068,0.16592725157151778,-2.042353503439483,8.36438105272478,788 +ID,7.395393523328464,1.8325151844973622,0.9310896572816834,2.371454200396366,-1.303390195706512,0.15206223232347144,-0.6472721484933319,0.8663436889211246,0.7404225561011354,-0.017219018226234,12.321399680423527,1152 +IL,9.728023986670546,2.458887004718591,-0.368733312128811,-1.6835979982294877,-2.4918440450575763,1.732470020781707,-0.538740529805358,0.16606384971200588,-0.05523618184026576,0.5319732069032928,9.479266001724644,1852 +IN,7.126847390625388,1.6561346876518284,-0.02637149867188312,1.7225924388149596,-1.3557869302138283,0.20345357219075347,-0.48793407322296967,1.2714946777865115,0.8565505840981261,-0.47337667211811363,10.493604176940773,1141 +KS,9.953786001844653,2.5825151094556533,0.21996418621387306,-5.061562771890314,-2.188311334793097,0.3996297999438386,-0.5756785088138547,1.2963869199212132,0.5486571862349097,-0.4245567393713656,6.750829848745507,846 +KY,11.367390997357857,1.8873334087967593,0.7992295488629145,-2.4454408343576612,-1.5497162023658846,0.37987404562417765,-0.6898895971482087,1.921427278555205,1.1686350450431382,-0.0378803585998352,12.80096333176846,718 +LA,20.87960783968444,2.5181369937976203,-0.2496076975986895,-8.833729994846282,-5.581314357864116,1.6976082984215881,-0.40381529831399215,-1.274063194296544,1.2272640859845279,0.519878661773341,10.4999653367419,1423 +MA,11.606310907087584,2.9620471925617524,0.8170061237560853,-2.272142780778569,-1.9055602637627054,2.499098862259931,-0.30552912256063536,0.818008241320917,0.06491609283989708,-0.8248653553194574,13.4592898974048,1562 +MD,12.032801136181805,2.561929588693939,-0.3850917514198604,1.303591884878952,-2.804277174841661,1.2890746431242146,-0.8131583792826612,0.9009527622408796,-0.19846208866511053,0.7264892342766324,14.613849855187128,822 +ME,4.822094291670232,2.0072478718465363,0.9188541434740812,-1.538729257237871,0.0952459697230209,0.6094602116152845,-0.500763779073647,1.9444026461292467,1.0822230019180856,-1.2234587394929322,8.21657636057204,405 +MI,11.709788429506359,1.9592261849071664,0.10693456703984797,-6.676023260420541,-1.568627175968715,1.572645972747255,-1.0558719419275033,-0.21212853733671683,-0.5724693752707773,-0.679288163839084,4.584186699437289,1358 +MN,6.661723206516401,1.2373654833516667,-0.20461436123233115,1.2948570858471635,-1.6993095333561383,0.8236358712734746,-0.48313409534127827,0.3249390644908269,-0.7610468184786185,-1.4145421654694033,5.779873737601764,893 +MO,16.8790333747807,2.0894604280664,-0.5635338937508853,-2.0807892132970314,-3.09858691575122,0.5008278373317037,-1.0453410205131048,-0.46633687717875333,0.8146177755943498,-1.2279111021235483,11.801440393158607,1020 +MS,14.105518602471296,1.8853361678812939,-0.6135467631692619,-3.6718577403469355,-3.006202471230139,2.1741648854005673,-0.5181611998641756,-0.8795917920841775,1.122328330722684,0.1316732121813198,10.729661231962472,1009 +MT,9.133076176406796,1.555191965670735,0.19999860674652659,-0.5845829477058022,-1.7099068388856653,0.8330891027164951,-0.7782135139757395,0.16241343397729083,-0.22729102833629944,-1.7555340537225133,6.828240902891822,914 +NC,18.450418595265443,2.2012040759359075,1.7392418168084298,-6.2937611735720775,-2.00445508826334,0.5736632387392314,-1.3469716040838562,0.9625440775014215,0.572613104701771,-1.2233299761105187,13.631167066922412,1615 +ND,6.8948106751926534,1.5928405417811051,-0.1502565390136953,0.3625483636143692,-1.6539048993121535,0.8971647915504567,-0.4907155953698441,2.501050648588718,0.1458455351739905,1.345937801375873,11.445321323581474,841 +NE,10.645896015083856,1.5764669799475763,-0.9459208352753898,2.531074802385975,-4.115184192373769,0.019900420549241106,-1.1911246599541436,1.0388597201841907,0.04426199166755829,-2.5937693821891963,7.010460860025898,853 +NH,5.987631889308515,1.2843175873329673,1.0516069102116945,0.9817938983136678,-0.09439355328167362,0.9583306335394607,-0.4992881452060073,-0.847498958307679,-0.3285299521535524,-0.609606251186817,7.8843640585705765,583 +NJ,13.008321208916271,3.2131654349417236,-0.9389595004333757,0.04023957549600682,-2.220923418398446,1.300696330287473,-0.6948751709710722,1.19862243259178,1.256578016187722,-1.0007561056607117,15.162108802957372,1342 +NM,12.128052178796537,2.3169083124817536,0.6806155107162153,-9.713374481838663,-2.8262905469006068,0.7801765916814659,-0.7626157082042924,0.8024594306037369,1.0147753776533341,-0.10875269235614007,4.311953972633347,947 +NV,13.214603067516443,3.003287039094163,0.712763446732049,-3.125045031166663,-2.565814770131384,1.59166254017908,-0.6393626496449424,1.7305022863643502,-0.017928149684271977,-0.5877934777614153,13.316874301497409,887 +NY,17.370136726573676,3.7467853185634477,2.326859568425156,-5.20842910646358,-2.446027820431124,2.5178092024917484,-1.127161866884757,1.3586327820256405,0.2700597613285878,0.9598261825608139,19.768490748189606,2355 +OH,15.935133877726205,1.943200378112918,0.5833545708767969,-5.4680211877674125,-2.355406150549508,0.8854519343966075,-0.3467523502626423,0.053792127110553783,0.6615890702387623,0.4549566155611441,12.347298885443422,1547 +OK,13.630717916204171,2.8280306036969276,-0.11738708194471675,-4.217808364529176,-4.222496921369108,0.5909792653026166,-0.8692931657268915,0.763268050418738,0.5433996551603344,-0.10733141713691384,8.822078540075976,1019 +OR,18.370431336401047,2.654332943900721,0.4182140825021766,-4.445493684073722,-3.412729688910497,0.45287528094730123,-1.3425049505394744,1.01546241110396,0.9163086926014031,-1.0429728995262235,13.583923524406691,988 +PA,12.263133300004347,1.577444449609313,0.9528214119361513,-5.533038170393371,-3.0206996823421286,0.8695979843780789,-0.8862975598988713,1.387663948575128,0.9548318749592248,-0.6582016452915709,7.907255911536297,1690 +RI,6.318302767898383,2.572788851018951,0.0370577683353924,2.1275612336731538,-2.6798838231484536,1.5784203856750298,-0.4371475062518358,0.2691841234048253,0.6365386017577584,-1.4368470152489072,8.985975387114298,447 +SC,14.325546388450249,2.0470344887356196,0.1561175828997119,-3.908963433880441,-3.8039339942339296,1.4282922442159909,-1.249388854208616,0.06821945837341872,0.7847740637000353,-0.7294432046455036,9.118254739406533,1202 +SD,6.280016633643705,1.627084071101904,0.16463618668407126,1.2656348952385024,-0.21449174078919658,1.5003643209199602,-0.6577758822873427,0.8854084563160444,-0.02669019129668515,-1.1615329912073584,9.662653758323607,635 +TN,12.929020871895855,2.0562827985295447,0.1724675140108285,-1.6787266522670594,-2.632491799124197,1.1089025823529044,-1.056711172052446,0.3727288801652794,0.058790190426747505,-1.2887736258884417,10.041489588049016,1187 +TX,16.42162414136915,3.244178825480658,1.0834168153794592,-2.318063062741226,-3.3423412660109912,1.0369608970020978,-0.9550258927656257,0.3900308989503851,0.09835691826626063,-0.8063086340971445,14.852829640833024,4275 +UT,4.760347589591571,1.585760349929546,0.8798719698344453,1.957254534662047,-0.9113837772870126,0.1725612142102284,-0.34665780584246475,2.4198342652615517,0.5238768631477314,-0.23383919803371633,10.807626005473926,1296 +VA,14.625826118105948,2.52430123223372,-0.14727037965040699,0.0004990054489441426,-1.5347099080006874,0.7495597412740433,-0.45052798571031266,-0.5199245484367119,0.1783970126715766,-0.3237248857557208,15.102425402180394,1297 +VT,10.206933969587748,1.176100953879996,0.6020288072471227,-3.1897001924205806,-1.0598627110808942,1.6808675187143756,-0.47813350557570383,2.3107880170328525,0.3933272293118399,-2.4394583145058233,9.202891772190934,659 +WA,10.077917374702064,1.7344405907010534,1.3188653837274809,-1.691185676886763,-1.2648303318787661,0.9934406299812046,-0.35355441318147673,0.5619969118409744,-0.020043595154593877,-0.3649547979122877,10.99209207593889,1303 +WI,9.48720494744526,2.3470278023930407,-0.2569119744996079,1.3091177350068357,-2.4107197798488103,0.3865572484984156,-1.0225644198827646,0.5926558986687712,0.6438943128252342,-1.1017904128392275,9.974471357767147,966 +WV,12.29561515743451,1.3300763298092322,0.5031782353567452,-4.747023414123689,-1.8486425170743348,0.9781955098715682,-0.40277465553906966,-0.5651643075749889,0.5198039883822569,0.23847235048465548,8.301736677026888,1099 +WY,9.441276080524554,0.7147144705507386,-0.08141827970103785,-3.180760446544684,-0.4224555439915952,0.20554799539114296,-0.22769206501646566,2.926210959576269,-0.1247398355306642,-1.0183077416740183,8.232375593584239,804 +US,14.410297979936143,2.6619713397618128,0.7284862130856842,-2.548794064350264,-2.582290567738281,1.2423153131795353,-0.7994733899634815,0.49958949194234015,0.4024459380518315,-0.38074136749493204,13.633806886410389,63644 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/dense_steps.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/dense_steps.csv new file mode 100644 index 0000000000..87586a37b4 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/dense_steps.csv @@ -0,0 +1,52 @@ +,period_and_sample,selection,calibration,priceyear,threshold_rest,cash,snap,housing,otherkind,fed,payst,exp,year,gap +AK,0.1372735094198898,0.49450740922540604,5.0627753749669235,2.71866196019763,-0.32093367176381377,-1.5068331381829543,-4.833673603280663,0.2598748341102783,-1.3341990699572577,0.6041163004262421,0.04566889641419246,-1.2890531538549765,0.4815269889968139,0.5197126367177081 +AL,-0.9783274772582207,-0.17232628503876413,2.4638184621488985,2.158951576792022,0.7730329577434732,-1.7460449744220574,-3.9320762821834396,0.6662981592370404,-0.5411836770872899,0.9733026518317576,0.7443017211415683,-0.018024583549605358,0.7692386167782974,1.1609608661336779 +AR,1.2047432367556379,-0.22829879227587035,-1.3642900430007838,2.313460863688776,0.020394382766567,-1.7855151241820444,-2.5731173517706507,0.8309644920824051,-0.4361506065113112,-0.7511889518179442,0.4378330643726564,0.4436333053703032,1.0412378963656703,-0.8462936281565856 +AZ,1.1099909946713087,0.5388610431310425,3.7258640472790407,2.9915837195438075,3.1278154922813632,-1.7578675656429166,-3.735128068829323,0.9474744182723106,-1.0525796472094207,0.6448571358252446,0.14989758737265804,-0.6242615452451072,3.3212871327132234,9.387794744163234 +CA,0.2854939042872289,0.05000955300037546,2.4794505601767654,3.326002407246919,1.7157921390847166,-2.5543026056350304,-2.508922733179521,2.4099901162830313,-0.6934289488474904,-0.03184987552643538,0.873493964514487,-0.3340041983192301,1.203566342882258,6.221290625968074 +CO,0.08082522874506815,0.21600613518553136,6.489705186924423,2.482606839971652,-0.16400128595102934,2.086095533707234,-1.981076982317328,1.4324730197781823,-0.9601836225485461,1.2077288630975742,-3.033423258757376,-0.4524500263469231,1.275378813497401,8.679684444985867 +CT,-1.1399183068825263,0.04141039263434543,3.9286067602564767,4.089068595005958,-0.916674639373182,0.13019589199315657,-3.530378077602963,3.1038123082021563,-1.8091272286281317,-0.27546693118284005,0.3797081502484655,-1.7626760147308442,1.5217321160244754,3.760293015964546 +DC,-1.6543198814524978,-1.2264808000560627,8.77288577640143,3.902800855529356,-1.1851156032867234,-1.8186854683869287,-3.8776095682280443,4.613045976195367,-1.8039619066021504,1.1371711855918991,-1.0805681939869412,-1.2198051970734536,1.242945735736157,5.802302910381407 +DE,1.5052293285338383,0.12061043589967291,4.818771680615697,3.2613155219112904,-0.019594432967253994,0.9583118277740151,-2.020451461017884,2.711793920723213,-0.43501481809467824,-0.5402695206622841,0.8374875050828081,-1.230767824365332,3.0263784163980176,12.99380057983112 +FL,-0.8291422909987638,0.029908728158645204,6.51093627522949,4.454828424016027,1.413816123599702,0.22013097513437768,-4.109485872369869,1.5578081121505551,-1.2390652969480147,0.18912216737383675,0.13751970380717296,0.01092008350211214,3.2809822674796365,11.628279400134907 +GA,-1.0435136448358016,-0.022450177805479754,3.5898175820322287,4.0313929601288745,3.1033392127890616,1.670394393098989,-2.330920744265918,0.4737245563832444,-0.939057712785559,-0.8644842833110585,0.01931373537382776,-0.7543418532531232,1.5936510190107782,8.526865042560066 +HI,-0.8383347024904513,0.4134805570741822,-0.8009566879238523,2.752763388932524,-0.11829484262610993,-1.7808656749742866,-5.670732838583083,2.416652394196368,-0.961126357744381,-0.5608838243867964,-0.013166486104898088,0.4602714333643821,0.4653120204016723,-4.235881620864731 +IA,-1.5028167505320882,0.5595503214096205,1.740758986148264,1.5371301876861274,0.2921811151513376,-0.5946035124423423,-1.8607275525964817,1.1125535299046523,-0.3982472963637732,0.2581457788393737,0.10944506676413578,-1.1654106003880125,0.34341624746150856,0.4313755210423196 +ID,-0.7286548952619798,-0.048024435424066425,1.2331757104998937,1.508869868196068,0.632668534364302,1.589611156804889,-1.1081749420225298,0.23384686651007164,-0.542745780883554,0.3265355970115974,0.45952481369052545,-0.10241231456252656,0.43832582651480045,3.89254600543749 +IL,-1.3588788415045805,0.5170530249317355,1.5395520053302558,2.810271362751979,-1.1070071564197808,-0.7318484948663373,-3.6671559243170857,2.113632774420737,-0.7569394878543756,-0.17356912211751813,-0.34959439944818993,0.043884079917540626,1.5159304798227904,0.3953303006471671 +IN,-1.3735662238142368,-0.38235576315982023,2.2820974359797326,1.9141804247204153,-0.36561119094177885,2.408370502084657,-1.5569869619044878,0.3372469385982215,-0.3739092512858912,0.5862353443614028,0.5057072984835426,-0.5185083590783636,0.2932104034463041,3.7561105974897 +KS,-0.5812367263953657,0.48092572921360954,1.420885578127633,2.779245696900656,0.5601206046935338,-1.6612206278231167,-2.1088551745130824,1.5984963063211495,-0.8956836631017183,0.41148062523448825,0.23335228819171777,-0.3227723868758749,1.6497369677015108,3.56447521767514 +KY,1.686227051381513,-0.054187806571317054,-0.11398935044533154,1.880623555176888,0.8828890594992,-0.38959180236706037,-3.2146839797183664,0.368569012928745,-1.257493550897208,0.9029200221643228,0.4611875944698639,-0.28980152199941756,-0.46739750145865244,0.3952707821631787 +LA,-1.726275992228036,-0.35227433967799726,2.300452877733157,2.350635661784006,0.0015611715936659915,-4.682422839125824,-6.326777678203214,1.7050842560408195,-0.3638763683208612,-0.8980618753904231,0.8152634653007718,0.12282707561500836,0.07385288928968414,-6.980011695589244 +MA,-1.178424866615325,-0.08470361391364634,4.12228720319222,3.1934354507235883,0.8385204259226893,-1.2528944108317839,-2.254676006630583,3.0997241296319435,-0.43489735073342395,1.032438055091605,-0.04078953557337278,-0.5545018661656564,1.3689680953867835,7.85448570948504 +MD,1.5087169979796844,-0.1398717764230888,3.6979932877622534,3.021583674291604,-0.7905794245130124,0.6025181914933172,-3.5263197043714354,2.376627540352959,-0.9235032961456159,0.8944439764799174,-0.009783093798916148,0.3354295051133209,1.4853342897916946,8.532590168012678 +ME,-1.2779709847740648,-0.0651582660154455,0.47018834604658544,2.5827463043187224,1.428493449237844,-0.5059297199066843,-0.30422431262418087,0.6757270986697911,-0.4610888555607676,0.7138499367875119,0.49304509149267445,-0.7654753136586863,1.1485690697450703,4.132771843758372 +MI,-0.1455382342009237,-0.45332718682435136,2.1295625193653294,2.2177205224247882,-0.19631850545574026,-3.1179809865696684,-2.4576295263150216,1.9205680364603683,-1.2391068312981763,-0.016567558169384086,-0.8951492659389321,-0.47151786661565687,2.321266685202997,-0.40401819793437 +MN,-0.32035431340551934,0.6477326274985948,0.9802279238371847,1.534469639319314,-0.5990060585019021,0.6811554109092218,-2.4062932208640033,0.9388661228469637,-0.7781193834709197,0.3140635105729924,-1.0220389889912396,-0.8704102785618706,0.9389711716757176,0.039264162864531826 +MO,1.1337708888353042,0.1879909419708241,4.095716866191406,2.1572394414777603,-0.04243875111257005,-0.9234340548111658,-2.269432843575055,0.7479656024632587,-1.2135775253125944,-0.488631017938318,0.47761656874563724,-0.8589498208959411,1.3847434311717617,4.388579727210308 +MS,-1.8273889459409745,-0.7203613097234935,-0.7102642223480409,2.0791070593948406,-0.6528259278599021,-1.6422303267753469,-2.916010273735125,1.6746631026807972,-0.6355947880433991,-0.47585108592714437,0.5815954128301101,-0.1605910555154028,1.432316253623842,-3.973436107339241 +MT,-1.237448768141693,-0.4728302873395043,3.665523328646189,1.7395039525786558,0.16043003439677944,-0.3112318208177855,-2.586582759743257,1.1950090975548244,-0.9567752586811099,0.08329087067565255,-0.30379241369349963,-1.3111943844820737,1.2939255573443802,0.9578271482975573 +NC,0.7267214342637374,-0.0016630151643219904,3.692642275240109,2.6447612262471685,1.7839622703485847,-3.206032241524513,-2.547036448472587,0.6932904358320964,-1.4318645804308443,0.3732605568028304,0.31177388003677126,-0.8999442771100048,1.0081036419013323,3.147975157970359 +ND,-1.039056134989524,0.22851072655297777,-1.858669101608732,1.317413351838657,-0.13735930548479772,0.4084703720905263,-1.6784600473162257,0.8370625985759592,-0.5179348661939053,1.5007950941438792,0.07926161076880844,0.6852873214608891,-0.16497863372270238,-0.3396570138841888 +NE,-0.32822572153377916,0.20532521179764007,2.4402148899982734,1.3699671743513826,-0.47861553784246125,1.8354653810894987,-2.7374208844787917,0.02370347915105968,-1.0321991208693304,0.6484102495249386,-0.18988901804112593,-1.5820417929609587,0.7057030869659124,0.8803973971522545 +NH,-0.5107149675280569,0.3761159024994569,0.12827466441178448,1.5030672896330088,0.6446983684753749,0.5550855331008488,0.041084136316570305,1.211881693054455,-0.47188413312978383,-0.6222491819633841,-0.17862957053239822,-0.40539227093672914,0.9437993924841468,3.2151368558852944 +NJ,0.728221053513888,-0.5060752134946931,2.3040259351528842,3.484684855689268,-1.1358907884785365,0.8439971768617951,-3.023266125422199,1.4492669812442236,-0.8244994228448979,1.1636587608884554,0.8851113278623407,-0.7065733467792916,2.4016434880018913,7.064304682195129 +NM,-0.19220096048421453,0.38553610820327044,1.8764006781466769,2.6353716105032863,1.2509283445608677,-5.293936015609651,-4.368156949408208,0.6296499757204201,-0.6921542041904558,0.6017775592807292,0.608266289151282,-0.0578154609162026,1.2183402952626547,-1.3979927297795456 +NV,0.048839431902843344,0.7022415671980955,-0.3941393203034469,3.2221579013983304,0.613269817890106,-1.4481919802841587,-2.588558369391596,2.111159441784918,-0.9692841329101578,1.1798032769789009,-0.010714523273544864,-0.4590010513515692,3.2588142679723653,5.266396327611087 +NY,-0.7253208893575724,-0.16346112414820269,3.0136803950629307,3.923507722839161,1.2767785965366452,-2.7933967598078446,-2.9080372802456917,2.588259294787781,-1.1000370062145293,1.1496077554245374,0.277866314950477,0.30636473114810486,0.7302950469919018,5.5761067979677 +OH,-2.357853217994329,0.13980229530998933,4.923151111648632,1.9384226602276802,0.713600069159434,-3.0251816435686596,-3.656597260199124,0.985455521474583,-0.43819827201390815,0.16612162252870402,0.39025533971969034,0.16627877982861686,0.030782105751249844,-0.023960888127444235 +OK,1.3148484110440428,-0.18237273616556315,4.2986597112048734,3.190333843709743,-0.18888912591814597,-1.863877749657363,-4.859744481370419,0.6266102353186688,-0.8179353231334469,0.5506675765153212,0.30073522879948744,-0.5454742057556384,2.09658236726408,3.920143751855637 +OR,0.08598620860695227,0.2784371644435524,8.329526033211783,2.9909572918148712,-0.171398578062909,-1.3158314323901983,-3.116219088529963,0.6030363893190769,-1.4339162085379145,1.8870108757948982,1.059316975072444,-1.0654045372702974,2.3958943237780908,10.52739541725039 +PA,-0.1581301731134559,-0.09358383957235361,3.5488159421851133,2.424802143163591,1.2260782818516671,-2.623250706855687,-4.196093586039303,1.3883544634291953,-1.1693932990678975,0.6689692505188263,0.4884824506068484,-0.5929169753847998,1.4634668565138487,2.3756008082355944 +RI,-0.3234983415204127,-0.28717307676131565,1.937805040450736,2.6396859777402377,0.07854440756754262,0.0200725069591364,-2.7847132620971453,1.6419065198174043,-0.4163663187194871,0.5381904436393696,0.6023535248687678,-0.9133589988964692,0.6204570855502265,3.353905508598592 +SC,1.7689341438564519,-0.4518862205150871,2.5228659966565328,2.2309769719863297,1.0435444823423075,-1.670681403133339,-3.6693167546425483,1.3410452491215226,-1.1617883239774303,-0.116441019427999,0.4648885434074789,-0.6172390179283864,2.5672517741977074,4.252154421943537 +SD,-0.5414491393907319,-0.06668743987356329,0.0024912425813408134,1.4873455639917283,0.1351982744369538,1.2136115875153743,-0.14568985885777644,2.455495630104436,-0.4739481894828875,0.5979712795731693,-0.0188330600900707,-0.9230842505577582,-0.4215925836849319,3.3008290562652833 +TN,-1.6535349871175935,-0.3448642762723484,6.056411779005606,2.2462267979724753,0.1782805593310441,-0.5889066478588711,-2.307305228187497,1.680275888276134,-0.9814708820266507,-0.0972469996432782,0.03322444985794527,-0.9976322348046619,2.048092802050375,5.271551020582677 +TX,-0.2753238101806037,-0.07540595844396947,2.5773723080916344,3.5519969606213664,1.7464462711926059,-1.1676411540185003,-3.7035671228744156,1.0553695028387076,-1.0001319144411427,0.31025514039605157,0.054372230792141235,-0.853214982489122,2.4352962686284734,4.655823740113224 +UT,-1.467232520776622,-0.10275838088736045,0.20721457575968927,1.8666216771102133,1.1323725832637468,1.2926737119608231,-0.748775562963725,0.18540258149564867,-0.4267493886706081,1.3086708614420604,0.43029197020971266,-0.2984848904820887,0.46713939236232527,3.846386609823816 +VA,0.04849955799713612,0.08981041617506769,4.640947524466277,2.7396133375315634,-0.020552713637381717,0.9530451809424505,-1.7983725723582424,1.5828961333339118,-0.6266887977105274,-0.7540582603546304,0.08117311959161982,-0.4520301489476725,1.2641837728062448,7.7484665498358165 +VT,0.21346822404733068,0.45321317621058554,0.38153068042996985,1.033437057849599,0.2486713193497076,-0.7612343362294189,-1.195334436053119,1.9001706228169062,-0.529442401879718,1.244093419067633,0.1970233095378137,-1.4153297648193637,0.9490224847733302,2.7192893551012567 +WA,0.5605808059915827,-0.1964824443727462,4.632621086228937,2.3577107659152134,1.040598401921276,-0.9341693028032517,-1.8454003893028346,1.485958387297078,-0.26221409056273165,0.5837656781469343,-0.17336165183888755,-0.39670285491754476,2.2364802970536353,9.08938468875666 +WI,-0.7824910869438337,-0.13071937492935515,2.920602140969452,2.151656530459219,-0.32363270766260044,1.0515109375552643,-1.9204355031461366,0.3606012533100677,-0.871767090497722,0.2805132166264326,0.22324202796707976,-0.738259503009445,2.0543726806011833,4.275193521299605 +WV,-0.99985457757594,-0.1284032303746354,3.9780012460088656,1.84698271538852,0.7975197882833301,-1.3187442385304728,-1.9978287623285185,1.2865292690448535,-0.45714835378751617,-0.3526892367177443,0.2570210507762587,-0.2648148641429089,0.7176538554248619,3.3642246614689544 +WY,-0.42828271925623884,0.035383501632024306,3.2838979414461766,1.0511106054699346,-0.06867300364088334,-2.0332734516356274,-0.7787493296624265,0.13576731838586042,-0.2929615494869785,1.2431244807501032,-0.07404619742258432,-0.35174442691424135,0.05197127946829738,1.7735244491334168 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/state_baseline.json b/docs/evidence/us-state-child-spm-2026-11/outputs/state_baseline.json new file mode 100644 index 0000000000..c0927771c4 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/state_baseline.json @@ -0,0 +1,417 @@ +{ + "policyengine_us_version": "2.90.2", + "policyengine_us_commit": "469ad12cb957a1b3eaedf9e6dd3e4c69194bba26", + "dataset": "Populace US", + "year": 2025, + "census_source": "U.S. Census Bureau, Poverty in the United States: 2025 (P60-290), Table 18: SPM percent and margin of error for people under 18, three-year average 2023 to 2025", + "rows": [ + { + "state": "AL", + "records": 1061, + "effective_households": 236.55107295398253, + "child_spm_percent": 16.98715636912008, + "census_percent": 15.5, + "census_margin": 2.4 + }, + { + "state": "AK", + "records": 826, + "effective_households": 133.0980287754569, + "child_spm_percent": 11.644426986408602, + "census_percent": 10.5, + "census_margin": 2.1 + }, + { + "state": "AZ", + "records": 1164, + "effective_households": 189.9592179909452, + "child_spm_percent": 16.951186258024865, + "census_percent": 13.3, + "census_margin": 2.3 + }, + { + "state": "AR", + "records": 952, + "effective_households": 205.80839413217132, + "child_spm_percent": 8.12845772011748, + "census_percent": 13.3, + "census_margin": 2.7 + }, + { + "state": "CA", + "records": 2659, + "effective_households": 964.8602098319376, + "child_spm_percent": 24.41650645326989, + "census_percent": 17.9, + "census_margin": 1.0 + }, + { + "state": "CO", + "records": 1164, + "effective_households": 145.44069860124233, + "child_spm_percent": 10.352503836811634, + "census_percent": 7.7, + "census_margin": 1.8 + }, + { + "state": "CT", + "records": 908, + "effective_households": 135.72407262331754, + "child_spm_percent": 13.371307682492237, + "census_percent": 12.8, + "census_margin": 3.2 + }, + { + "state": "DE", + "records": 1068, + "effective_households": 138.95841498485564, + "child_spm_percent": 22.429186288025384, + "census_percent": 8.7, + "census_margin": 2.6 + }, + { + "state": "DC", + "records": 551, + "effective_households": 175.55582420499337, + "child_spm_percent": 34.365303438733925, + "census_percent": 20.3, + "census_margin": 3.7 + }, + { + "state": "FL", + "records": 1642, + "effective_households": 561.268792979642, + "child_spm_percent": 28.15649890233655, + "census_percent": 18.4, + "census_margin": 1.8 + }, + { + "state": "GA", + "records": 1215, + "effective_households": 256.7233149102064, + "child_spm_percent": 18.428986738455304, + "census_percent": 15.1, + "census_margin": 2.2 + }, + { + "state": "HI", + "records": 838, + "effective_households": 197.42767357826924, + "child_spm_percent": 7.019040438905304, + "census_percent": 13.0, + "census_margin": 2.6 + }, + { + "state": "ID", + "records": 746, + "effective_households": 185.13141304399971, + "child_spm_percent": 6.957827284586571, + "census_percent": 6.5, + "census_margin": 1.3 + }, + { + "state": "IL", + "records": 1668, + "effective_households": 276.7964053720248, + "child_spm_percent": 14.678691391590323, + "census_percent": 12.4, + "census_margin": 1.6 + }, + { + "state": "IN", + "records": 1141, + "effective_households": 177.01966623060613, + "child_spm_percent": 12.73434830167166, + "census_percent": 10.6, + "census_margin": 2.2 + }, + { + "state": "IA", + "records": 973, + "effective_households": 138.47468952101661, + "child_spm_percent": 8.80898267607782, + "census_percent": 8.2, + "census_margin": 1.9 + }, + { + "state": "KS", + "records": 921, + "effective_households": 148.60541081180202, + "child_spm_percent": 9.659862214627816, + "census_percent": 9.7, + "census_margin": 2.5 + }, + { + "state": "KY", + "records": 776, + "effective_households": 129.5204444710968, + "child_spm_percent": 18.5371736654285, + "census_percent": 13.3, + "census_margin": 2.9 + }, + { + "state": "LA", + "records": 1000, + "effective_households": 260.9008626497421, + "child_spm_percent": 12.087426626104243, + "census_percent": 20.7, + "census_margin": 3.0 + }, + { + "state": "ME", + "records": 785, + "effective_households": 98.94461653737365, + "child_spm_percent": 12.449100684445808, + "census_percent": 6.5, + "census_margin": 2.3 + }, + { + "state": "MD", + "records": 1091, + "effective_households": 142.97248422508488, + "child_spm_percent": 23.16543402488221, + "census_percent": 10.7, + "census_margin": 2.5 + }, + { + "state": "MA", + "records": 1522, + "effective_households": 254.60923432676174, + "child_spm_percent": 20.202673816573878, + "census_percent": 12.8, + "census_margin": 2.0 + }, + { + "state": "MI", + "records": 1478, + "effective_households": 244.58680980543457, + "child_spm_percent": 14.518361699859508, + "census_percent": 10.3, + "census_margin": 1.9 + }, + { + "state": "MN", + "records": 1166, + "effective_households": 151.4108590065156, + "child_spm_percent": 8.431428192061507, + "census_percent": 6.9, + "census_margin": 1.9 + }, + { + "state": "MS", + "records": 882, + "effective_households": 217.18543375057635, + "child_spm_percent": 12.942211004413902, + "census_percent": 19.1, + "census_margin": 2.6 + }, + { + "state": "MO", + "records": 1013, + "effective_households": 158.23194095106248, + "child_spm_percent": 18.479794697686096, + "census_percent": 9.7, + "census_margin": 2.3 + }, + { + "state": "MT", + "records": 744, + "effective_households": 189.76250281214456, + "child_spm_percent": 2.5309436062772113, + "census_percent": 9.3, + "census_margin": 2.3 + }, + { + "state": "NE", + "records": 884, + "effective_households": 145.9510957065784, + "child_spm_percent": 10.711871752578398, + "census_percent": 7.1, + "census_margin": 1.9 + }, + { + "state": "NV", + "records": 952, + "effective_households": 153.2144593141471, + "child_spm_percent": 19.070065323872694, + "census_percent": 15.0, + "census_margin": 2.5 + }, + { + "state": "NH", + "records": 840, + "effective_households": 140.8689123605408, + "child_spm_percent": 10.516178219256554, + "census_percent": 7.5, + "census_margin": 2.4 + }, + { + "state": "NJ", + "records": 1651, + "effective_households": 214.92794398401983, + "child_spm_percent": 10.924964312878116, + "census_percent": 13.3, + "census_margin": 1.9 + }, + { + "state": "NM", + "records": 902, + "effective_households": 197.2115814203346, + "child_spm_percent": 10.15133671821333, + "census_percent": 10.9, + "census_margin": 2.1 + }, + { + "state": "NY", + "records": 2166, + "effective_households": 431.1950455090738, + "child_spm_percent": 17.727116992316713, + "census_percent": 16.2, + "census_margin": 1.9 + }, + { + "state": "NC", + "records": 1337, + "effective_households": 278.97265851969934, + "child_spm_percent": 18.100974612766848, + "census_percent": 14.4, + "census_margin": 2.2 + }, + { + "state": "ND", + "records": 682, + "effective_households": 154.69431784251822, + "child_spm_percent": 11.13047533590008, + "census_percent": 10.3, + "census_margin": 2.1 + }, + { + "state": "OH", + "records": 1531, + "effective_households": 259.8938711270293, + "child_spm_percent": 9.813281022726176, + "census_percent": 12.3, + "census_margin": 2.1 + }, + { + "state": "OK", + "records": 918, + "effective_households": 184.88950295988414, + "child_spm_percent": 17.21439734214549, + "census_percent": 9.9, + "census_margin": 2.0 + }, + { + "state": "OR", + "records": 1152, + "effective_households": 174.20405203877138, + "child_spm_percent": 16.2870253593211, + "census_percent": 11.0, + "census_margin": 2.4 + }, + { + "state": "PA", + "records": 1999, + "effective_households": 313.940721037965, + "child_spm_percent": 14.135315201475251, + "census_percent": 11.1, + "census_margin": 2.0 + }, + { + "state": "RI", + "records": 804, + "effective_households": 115.36121530553025, + "child_spm_percent": 17.87488315880047, + "census_percent": 8.4, + "census_margin": 2.3 + }, + { + "state": "SC", + "records": 955, + "effective_households": 198.5735582254525, + "child_spm_percent": 9.884637976608813, + "census_percent": 11.1, + "census_margin": 2.1 + }, + { + "state": "SD", + "records": 866, + "effective_households": 140.02483747681345, + "child_spm_percent": 11.33898407217388, + "census_percent": 7.8, + "census_margin": 2.2 + }, + { + "state": "TN", + "records": 1082, + "effective_households": 213.46111672978205, + "child_spm_percent": 23.237084061349254, + "census_percent": 10.0, + "census_margin": 1.7 + }, + { + "state": "TX", + "records": 1875, + "effective_households": 671.2372652446592, + "child_spm_percent": 19.24437100079317, + "census_percent": 16.1, + "census_margin": 1.3 + }, + { + "state": "UT", + "records": 861, + "effective_households": 182.57153738948298, + "child_spm_percent": 13.211297432608319, + "census_percent": 7.3, + "census_margin": 1.6 + }, + { + "state": "VT", + "records": 496, + "effective_households": 155.57089637922203, + "child_spm_percent": 17.678699918725112, + "census_percent": 8.3, + "census_margin": 2.5 + }, + { + "state": "VA", + "records": 1394, + "effective_households": 215.49254142849716, + "child_spm_percent": 18.12834306934188, + "census_percent": 12.1, + "census_margin": 2.4 + }, + { + "state": "WA", + "records": 1305, + "effective_households": 217.79313567185002, + "child_spm_percent": 14.206930139564697, + "census_percent": 9.3, + "census_margin": 1.9 + }, + { + "state": "WV", + "records": 845, + "effective_households": 220.3992065891528, + "child_spm_percent": 17.93170551281414, + "census_percent": 11.3, + "census_margin": 2.4 + }, + { + "state": "WI", + "records": 1232, + "effective_households": 168.63884893953457, + "child_spm_percent": 7.034634564819478, + "census_percent": 7.3, + "census_margin": 1.7 + }, + { + "state": "WY", + "records": 557, + "effective_households": 157.08532758317563, + "child_spm_percent": 8.787559212429837, + "census_percent": 6.5, + "census_margin": 1.4 + } + ] +} diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/waterfall.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/waterfall.csv new file mode 100644 index 0000000000..722e69ab1f --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/waterfall.csv @@ -0,0 +1,52 @@ +,census,pool,D,E,priceyear,threshold_rest,resources,year,model,se_model_rep,se_model_lin,rep_bias,se_E_rep,se_D_rep,se_weights_step,se_priceyear,se_threshold_rest,se_resources,se_year +AK,10.5,10.63727350941989,11.254415609256204,9.02435136344812,3.1898069439473566,-5.183687052791e-07,-0.5697322022690545,1.4433570902785972e-06,11.644427030114809,3.928977062730973,6.332772219323601,-0.9453503305887843,3.7276000489550967,2.241137654723953,3.5040638164930535,2.0521126603577247,0.03298215228155097,4.372699145343724,0.6817792425845245 +AL,15.5,14.52167252274178,17.205738947748628,16.607525526139906,0.735650177580986,1.07987188520942,-1.9091439477247165,0.4732525632909845,16.987156204496582,3.484833374151784,4.77804546692084,-2.7205560965121567,3.5223174566455087,2.6388374629376745,4.06983208728635,0.6673715249789512,0.8836050580573147,4.571534812434057,0.5484052071465303 +AR,13.3,14.504743236755639,12.289322385665901,11.98402738530483,2.5438532189463925,0.5509963901858228,-6.952257927424799,0.0018386149419821196,8.128457681954226,3.0274434908359176,3.501990871084489,-0.22079540730315372,3.1112916661144547,2.2768987052797764,3.4929107627372145,1.6035057602867053,1.2099009504853768,3.013988116186622,1.719967063496961 +AZ,13.3,14.40999099467131,21.57817380236773,22.48985489458919,0.8415248560925294,-1.898300809585276,-6.149879415780821,1.6679867655022111,16.951186290817848,5.358818375942788,4.931830911917693,0.5044988155656078,5.090503828221521,3.2261278430584177,5.829270705029427,1.321820056134109,3.238740273889147,3.3094471744594864,2.8071339390814134 +CA,17.9,18.185493904287227,14.206351955773918,17.979249773877193,3.589052135299837,4.137246287163656,-3.498818200037505,2.2097765111547916,24.416506507457974,2.3311938117816187,2.653037840146489,-2.683603197976119,2.0831537317663544,1.4573480578170288,1.9968815685623331,0.8559752319422981,1.3744373390997158,1.71664341047004,0.9153536269164999 +CO,7.7,7.780825228745068,10.429439428326537,10.858414646733076,2.902252581725811,1.8731911274186421,-4.7942480914129835,-0.4871066810740884,10.352503583390458,3.574357278097987,3.820461090793149,3.2896622437398975,3.8360471968486682,1.8359252840594014,3.4595368031425653,1.6759678649000591,2.259132132610083,3.512544325169379,1.620277272543282 +CT,12.8,11.660081693117474,12.712232820324148,13.00382336387795,1.8704195493681957,1.3103294625190745,-2.813325222140334,6.009815177856899e-05,13.371307251776667,3.8331970400943,5.002325263747212,1.413916389975535,4.14655386444604,2.2383237812416095,4.313974838291013,1.3367070007855022,1.3914640973588457,4.09068898455831,0.9267388649671894 +DC,20.3,18.645680118547503,25.107467339097347,52.7023873632267,5.662351291853067,-3.1562244924176386,-28.338777845152215,7.49556700101781,34.36530331852772,6.134790145191017,10.601939242811653,-1.1142316546901228,9.568992481343626,4.363165545752258,8.829601903655249,2.540200990736752,2.151851212932877,8.810793247133432,6.433538266568686 +DE,8.7,10.205229328533838,13.714216479420614,12.957297100970527,4.485978471644713,4.62797345603598,-2.5538185921803658,2.9117556386974814,22.42918607516834,4.399237582955547,6.87057378619714,-1.6136130313625578,5.194004068848529,2.779774261846404,5.292509162871452,1.70034740830493,2.2678923336164654,5.242385613700745,1.994528806438215 +FL,18.4,17.570857709001235,29.9268735112755,30.877687609630797,2.7521252440818014,1.4754781780255646,-7.463552167058546,0.5147601852730457,28.15649904995266,2.806107561890349,3.962926881590984,-2.652189827442136,3.6779600839690194,2.9679135547959112,2.516264926093402,0.9426372624080697,1.1708790731485545,3.442483125317551,1.4169560358267157 +GA,15.1,14.056486355164198,19.17256511081263,14.40095932417362,3.917789502858997,6.093229346817254,-7.297018232925403,1.3140269457817368,18.4289868867062,3.42227452529315,3.973453086314512,0.3878016486722622,3.4716237015916667,2.5846241771191787,3.994848904264801,1.3835394369165557,1.5031103054468928,2.798323445396722,0.8409443835967764 +HI,13.0,12.161665297509549,12.015548988928836,17.244110656462926,2.876299926989625,-1.412715332529407,-9.805988586604661,-1.8826662300416017,7.01904043427688,2.392571950332229,2.7805868848504707,-1.2865087775896953,3.938121123322486,2.993954610001291,3.7827697380520076,1.2833137210004646,1.011625230789409,4.207160199824383,1.7568596674608261 +IA,8.2,6.697183249467911,10.242234105123712,13.196425186307868,0.848782132355609,-2.1371656196566198,-3.9737753854080746,0.8747162837289741,8.808982597327756,3.488385258421658,3.639254429438333,1.3631199584187552,3.8593788617587537,1.7343918794883244,3.9785312107700133,0.7537441631238818,1.4114359032957051,3.052342995567047,2.6927488390888916 +ID,6.5,5.77134510473802,7.336601852578507,8.131051782451719,0.5776354543891171,0.002669721844990734,-0.44395285547268276,-1.3095767890729308,6.957827314140214,2.480744708886921,2.7396037844431986,-1.229859840657264,2.305527076494853,1.782887939592469,2.5563673088807417,0.4673099197842873,0.5105540919691416,3.0901675260826313,1.1390851446966053 +IL,12.4,11.04112115849542,13.743942334352635,14.164989188467374,4.548007033530531,0.3432968237622625,-5.007118515286787,0.6295170070361129,14.678691537509492,3.8341879094211824,3.8382020965079566,0.17902207673549775,3.6453137514261944,2.38645888883482,3.324716337876345,1.460436075498678,1.3181379143857843,3.131214087127066,0.4545650768490769 +IN,10.6,9.226433776185763,10.788234383701983,10.352642869057034,0.602055347955241,0.5532410041324016,0.9728449894247563,0.25356408294003857,12.734348293509466,4.115777622105123,3.915265266967416,0.6473483081855544,4.1243859844731405,1.7721030830717754,4.03647535947549,0.6255774422686202,1.2210062529980918,3.2244592060024875,0.7911581519537505 +KS,9.7,9.118763273604634,14.943223558144949,9.962971000843254,1.36023629581015,0.7968142699460571,-2.6140191849553798,0.15385973283228638,9.659862114476367,5.442906829832116,4.696231456905677,2.872410402341302,5.05964256765671,3.035819094060608,4.86232040411013,0.8448509903263256,1.6717591592396335,4.1656667438728645,0.7719955175921962 +KY,13.3,14.986227051381514,13.828225052270886,18.59272575763501,3.3191932641850337,-0.37817688957243417,-3.800489240394616,0.8039206687830227,18.53717356063602,4.246948679188216,6.281260601560727,-0.11831392287465547,5.083807360327852,2.504101652253541,4.833218523456394,1.9873402272872671,0.5867344143238985,4.86764855471277,0.8617311471607421 +LA,20.7,18.973724007771963,22.085137122858175,20.194580933906202,1.8009311684830003,1.0128831891794419,-10.447433021844533,-0.47353549296651887,12.087426776757594,3.3275134849654067,3.536744221066976,1.8410481394220763,3.8751536920799188,3.563965118320924,4.866607045650779,0.7863394640215646,1.4383148006214228,3.965515382858741,0.42125273333344254 +MA,12.8,11.621575133384676,14.675608124097288,15.432276127472953,2.885559877630787,0.920575336387358,0.6297899494198473,0.3344724425382287,20.202673733449178,3.281678114588457,5.082037498794953,-1.295798523339581,3.399364828068076,2.0807444189269706,3.490466300740068,1.6098969766212647,1.4883184778270246,2.489924666079278,1.2924400382090875 +MD,10.7,12.208716997979684,16.713304998145013,23.30634250404891,1.3029691235966592,-4.250024549800891,-9.348051363323398,12.154198342699742,23.165434057221034,4.744898883592186,6.042028256286184,0.27917571990234435,5.501162038291503,2.886101209401398,5.4922581998624596,1.093269613648241,3.7984204860238635,6.552849713124022,4.066750719389642 +ME,6.5,5.222029015225935,6.088127903206726,5.7274088844251825,1.1333615210908512,1.1333291778829289,4.454816367831994,0.00018485306289219377,12.449100804293845,6.011362550339514,6.13486277739015,-0.3579982368061039,5.21541786793628,2.4696085483482033,5.217193823227869,1.5197292530579605,1.4988752279475543,3.9348006791061065,1.422242250222687 +MI,10.3,10.154461765799077,12.622334376667215,17.304622119910103,1.4652668879640012,-0.3753686729074265,-7.542845978738848,3.6666874506174674,14.518361806845297,2.8614213068828036,4.000674369632836,-3.0348447662324354,3.616325554225706,1.7140223059423305,3.523882207441459,0.9583713169242002,0.790023143125122,2.6507304733986943,1.5272217132309276 +MN,6.9,6.579645686594481,9.05168677283318,12.552582952572402,0.5139850087825858,-3.211969633922287,-1.4231644816645135,-5.496316555419705e-06,8.431428349451636,4.586538754968796,3.7306098701724806,2.2404337574329,3.173885444704299,1.7343507951530286,3.288010078075562,1.1212720244572387,2.7901684719731725,2.547956318516481,0.29775014349969975 +MO,9.7,10.833770888835303,15.165567534031462,15.310910601606178,2.6962035912078512,-0.516252679637457,-2.745961168279829,3.7348940013530743,18.47979434624981,6.969264747492686,5.195454214849073,-1.469695046235703,4.199961209281888,2.863676886627684,4.012802361394138,1.4291827076627783,1.7419434071197835,8.34938182806869,2.693892525256746 +MS,19.1,17.272611054059027,16.533001143395506,11.967844917314164,3.9697642054789206,-0.9679654802673876,-2.027358863281261,-7.379536808029246e-05,12.942210983876352,2.9790069289119265,3.985885849068236,-1.3176744308811799,3.3895764807828495,2.6443185867566976,3.9856314497984804,1.489098666543192,1.121531921059422,3.549381492477235,0.7023034605484136 +MT,9.3,8.062551231858308,13.034331765361456,17.493919205009178,0.0009337441466020712,5.736212780706202e-06,-14.963915455834387,3.4111003134414946e-07,2.530943570644207,3.435645732336951,1.5861244617479786,4.921677352283282,3.84314438926078,3.271818530813151,3.5942924952974202,0.9076837885311919,0.49284435436215696,4.130645584466395,5.140793239058473e-05 +NC,14.4,15.126721434263738,16.89322219458003,15.755931785462824,2.2819924298081515,1.8735790073312164,-5.029175615445633,3.2186469995470914,18.100974606703645,3.1120495099094923,4.667944264996081,-1.0083139705611188,3.7468038480185673,2.478776597499296,3.7975074005465865,1.2127359433766638,1.9783423927267865,3.052564517234256,1.4983130543700471 +ND,10.3,9.260943865010477,10.488822804193942,5.963289575658015,1.942443617198626e-05,0.0,4.695159022898769,0.47200735101754165,11.130475374010494,3.692103262671444,4.0410378809574645,-0.18201541671212418,2.221705823099878,3.5441556998596315,3.841129578408441,0.7899961997941357,0.0,3.6676535280211784,0.8717499376968371 +NE,7.1,6.7717742784662205,7.595127929561853,8.83763897918886,1.8390467725929285,-0.1803102153155985,0.21297095713536382,0.0025252456722147784,10.711871739273768,4.838732233130637,4.344057457416736,1.5750679973983868,3.1417608490891706,2.13135400728497,3.154614608758861,1.3640639424545469,1.740004915305002,3.6785684349119605,2.039671564493155 +NH,7.5,6.989285032471943,7.264752309850343,9.20042154145905,3.5787298836221897,2.0064587135810363,-6.195114756869195,1.9256828545514821,10.516178236344562,3.2065948453888495,4.614807837439194,0.2649433931486769,4.406233708380433,1.7343402655618676,4.014279663407359,1.4372064494218737,2.047175575621925,3.7838373406242094,1.3712506584341244 +NJ,13.3,14.028221053513889,15.111919351810647,14.122366700093766,1.8116941452660216,0.686477370785178,-5.695553815879603,-2.018635040472387e-05,10.924964213914961,3.379110811323347,3.6050731998973897,3.4155393570330776,4.928030720074722,2.484775629446164,4.8094817437292035,1.2467915279604997,1.0972701062297683,3.664529298328276,0.8906208458868823 +NM,10.9,10.707799039515786,8.458222023113722,9.179683456657026,1.1813433657950931,1.8832908817365503,-2.0929826072801023,1.4725049489480722e-06,10.15133656941352,3.583547022740094,3.9062252843191314,1.3186205179159955,3.992018867935037,1.9044796122382441,3.5165627813003812,1.1358465411688938,2.0163284366285725,3.594937804116573,8.717411240251262e-06 +NV,15.0,15.048839431902843,16.61295815574025,19.623393902835147,1.5214006813870655,0.32479556027285233,-5.292905656179716,2.893380893690036,19.07006538200539,4.319085296508975,5.8055135948679,1.2570587130422268,4.443548954404509,2.8135590655720786,4.647712413393321,1.2550826087479254,1.0576447550127785,3.6017072056835424,2.2029308624086106 +NY,16.2,15.474679110642427,21.247277713032833,16.35358569469744,3.803824405816576,3.016176156988289,-5.629769252933308,0.1833000649559898,17.727117069524983,2.875781716873627,3.5698850096921197,-0.5536587468784901,3.580194440080854,2.164935690010083,3.7361308360910868,1.3219584242906282,1.4395379778768507,3.4204767366371787,1.110003159247747 +OH,12.3,9.942146782005672,12.125989312775257,9.176284846402721,3.2467348046911466,0.22048778306286662,-2.830226965361261,5.429032029621929e-07,9.813281011698678,1.8671208005111162,2.909392463247397,-0.2810378186974525,1.9502170830179841,2.094524886205143,2.599305975747064,1.124814387935008,1.0893084251957805,2.2868879473279455,3.959393649454523e-05 +OK,9.9,11.214848411044043,12.517779785809234,14.08291218503201,2.3458814317410934,-0.19677776310363018,-2.4789482794080246,3.4613298028153245,17.21439737707678,4.089869383458009,4.784835016565054,-0.6091972953695901,3.4860026093879566,2.3211442880178232,3.5637753482363186,1.606503492185805,0.6540762789893155,3.849929456270366,2.3961321575099213 +OR,11.0,11.085986208606952,14.735407120410825,19.664250906649187,0.6792755055554962,0.018270451502414985,-6.830951929233322,2.756180438925191,16.287025373398972,4.419927485268072,5.206864576296931,2.8274103235693566,4.506817187529944,2.2513642584862628,4.432612096397848,1.1539804089458952,2.038571464740183,3.394875164601997,2.3471166364843374 +PA,11.1,10.941869826886544,13.215526922514002,12.767784123857524,1.7873006658944444,0.08805498506003952,-2.987167118607895,2.479342519801338,14.135315176005458,2.8133696851903927,3.248356681256722,-2.601320496316694,2.969743982196118,1.9054635315101007,3.3455671004511927,0.8377476727637634,1.0398051126024697,2.7352902658539793,1.1915761649857752 +RI,8.4,8.076501658479588,8.976898416653531,19.33281244458234,3.3895465844070807,1.19006553539349,-6.18928488131511,0.1517437271640382,17.874883410231835,5.529672101056756,7.039949763613315,-5.760450773377322,5.567025846099409,1.900087660615112,5.330720803858343,1.350401832535097,1.1451623279871543,6.518990324992517,2.286945886328793 +SC,11.1,12.868934143856452,13.126431926501285,16.065761649922184,1.5796134095546182,-2.148468541802648,-6.609484710155482,0.9972159016502958,9.884637709168969,3.4207999101280673,3.5625308459596647,1.4431346129201987,4.310726210598687,2.3122221840217296,4.005392745342135,0.9215177339197754,1.8066577528255836,3.787594627615244,1.0702716521980604 +SD,7.8,7.258550860609268,7.545697095129562,8.962036651115069,1.108583218501344,-0.2681060448253556,0.7227820134058565,0.8136882553939919,11.338984093590906,5.2634290299995135,4.7545850659567925,1.2873089660433923,3.9668329226287264,1.879317163148604,3.524846230158049,1.1755462386706623,0.562657424094816,6.111841911425095,0.6992385966058686 +TN,10.0,8.346465012882406,12.57204900388962,11.157478600297567,2.656749883212562,1.8215655813653728,5.444933489577721,2.156356427475789,23.237083981929022,3.906686326755696,5.143819316231732,-6.927953788689663,2.9856453509324816,2.3253286183225192,3.5209582604153637,0.8438052736971025,1.373432795494584,3.7716959252596394,1.4898929436578594 +TX,16.1,15.824676189819398,17.729657601322778,19.423503557645457,4.365704347902535,0.33777750499630954,-7.485342002839279,2.6027274739073887,19.2443708816124,2.5708785076367486,2.651235362434403,1.370179908942955,2.1745031946259807,1.570053265837349,2.175600002683725,1.2177926958185112,1.2859390249513867,1.6955810556764113,1.2197875718859852 +UT,7.3,5.832767479223378,7.393320952153149,9.80353100440673,3.2920880021385095,0.4653621772785486,-1.622939226230534,1.273255616068242,13.2112975736615,2.9785149106747224,3.6996600431023254,-2.7272800329325104,2.751887705760448,1.912333254843988,2.9466497520225015,0.9339116749804481,1.023945400496479,2.198183859553673,1.0307751736211541 +VA,12.1,12.148499557997136,18.802346087664425,21.46223470703344,1.6263232734734958,-3.095722258749838,-1.864471871498282,-2.0749780399810553e-05,18.128343100478418,2.901130668178834,4.435237116964007,-0.7775240082651393,4.221840394319258,2.8953247542060696,4.746288199717671,0.9050145413098978,2.3175776199324045,3.248685691389076,1.0656948328650433 +VT,8.3,8.513468224047331,10.197888340394691,17.300133702601787,0.8260306069714426,0.12622248311514456,-1.8309535712369052,1.25726699112276,17.678700212574228,4.1639070724950455,7.094454518557269,-3.428126236304866,4.149809629703144,3.6426588461380542,3.9885718993698736,0.48294037479306534,0.9355267680105603,4.230368471092992,0.835726263104853 +WA,9.3,9.860580805991583,11.108326891761413,12.491540240583936,2.6338892278369013,1.540015576250147,-1.9392041336886645,-0.5193108551276688,14.206930055854652,3.6147767420943744,4.267283147442617,1.032910783909779,3.5693503813797935,1.982686325281928,3.181728799792755,1.1650377153536455,2.588995887397309,2.7770364762478463,1.0396942039299841 +WI,7.3,6.517508913056166,10.404423491398974,9.744145371069516,0.5468975444964648,-2.5587729240191175,-0.6976406489618137,5.31192845928086e-06,7.034634654513508,3.9297119831557286,3.08294960963598,3.566309337218512,2.997717948141898,2.471135776504944,2.8742233910351076,0.5709351068405699,1.046675047077838,3.121923603583834,0.09218343778316075 +WV,11.3,10.30014542242406,10.969674553034986,14.862075940319254,1.661377491473943,-0.21102110087279863,1.61928660365896,-1.351907882549874e-05,17.93170541550053,3.137463236331653,5.962326417829841,-4.190579827087916,4.074502165862821,3.021278468253669,3.564707025782738,1.1133765530644797,0.7468515151479515,3.4782349058369255,0.14200344381758134 +WY,6.5,6.071717280743761,5.775446188189179,8.723064218446828,0.7611396798742308,-8.584912097893036e-07,-0.6964848058489868,-0.00015908255439566466,8.787559151426468,3.565728619489772,3.416415435764844,2.876768559116556,3.082804897013115,1.5695453266127821,2.4535888604713216,1.5615364294637295,0.2341596718628397,2.7258217407372336,0.9694772896564248 diff --git a/docs/evidence/us-state-child-spm-2026-11/receipts.json b/docs/evidence/us-state-child-spm-2026-11/receipts.json new file mode 100644 index 0000000000..a1f8d76434 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/receipts.json @@ -0,0 +1,352 @@ +{ + "purpose": "Receipts for the state child SPM diagnosis. Aggregates by state and national totals only; no household rows.", + "date": "2026-11-01", + "model": { + "policyengine_us": "2.90.2", + "policyengine_us_commit": "469ad12cb957", + "policyengine_core": "3.34.2" + }, + "benchmark": "Census P60-290 Table 18, 2023 to 2025 average, under 18", + "data": { + "default": { + "repo": "policyengine/populace-us", + "revision": "9a814a3b3b53c0ecd6e1737b6ec862c31300ef6f", + "file": "populace_us_2024.h5", + "sha256": "62b51ad7f37d5fcc3a7393a0ce284eee5972033885af1c823dcef05d3d947c6e", + "bytes": 826917837 + }, + "dense": { + "repo": "policyengine/populace-us", + "revision": "15cefac484174ae0ee11a82b164f58023ad05c84", + "file": "populace_us_2024.h5", + "sha256": "a7cca5d157ac11f451629d81e2e638ac0e1dd464f59264bbdb3c8f64e6c76f31", + "bytes": 2509287855 + }, + "acs_local": { + "repo": "policyengine/populace-us", + "revision": "725d89993f6b2dc4821fd5c3620f0f3d4d630102", + "file": "populace_us_2024_acs_local.h5", + "sha256": "f6e23235d4fd233bd69bcf8875ccaa1144abfde58e769cee930658535092237a", + "bytes": 9819603807 + } + }, + "note": "Poverty rates stay holdouts: nothing here entered a calibration target.", + "files": { + "outputs/ablate_eval.csv": { + "sha256": "c577c66835b8a8c740b1507d6559ad0fbd8ec3ac672841ccefd420e3bacb7012", + "bytes": 10183 + }, + "outputs/acs_eval.csv": { + "sha256": "5e63003e507b7c3c39303dc2d95bbda805ef39c4b50d539cc61430dc0ac6a2bc", + "bytes": 12176 + }, + "outputs/acs_solves.csv": { + "sha256": "ec5de235e8542d8e1cc7757864550eff8079664e5e65205de23981eb3fe7dcca", + "bytes": 3421 + }, + "outputs/acs_stored.csv": { + "sha256": "f0ae96174457e002a14d0108ffa33483d7557c539ccefb467bba58a559fe9b61", + "bytes": 9218 + }, + "outputs/asec_state_raw.csv": { + "sha256": "5e28ec94ce143145bd3d8335d2820a90aab8ca9ecb9ebf43e996690a3eab5a5c", + "bytes": 8183 + }, + "outputs/census_child_spm.json": { + "sha256": "8ad84ee50d588e94b904e057b684b43e3ddbb543998ebe6988e9d9a3985632e7", + "bytes": 3130 + }, + "outputs/census_flags_by_file.csv": { + "sha256": "ebc854c4a6ebacc9110db0165fe8abf33ca09598d00121007513b792f19cbdac", + "bytes": 12847 + }, + "outputs/cf_state.csv": { + "sha256": "36d2936dd31e544fb48750fb2dfeaf7375bc1388587bd676a6d8419bd7dc9f4c", + "bytes": 7147 + }, + "outputs/chi_eval.csv": { + "sha256": "dbda58f521648d94b599d2315a3d84464dcfe2f32e8aa1b00e4281b0c6302ba5", + "bytes": 1399 + }, + "outputs/dash_swing.csv": { + "sha256": "40ba1f728b3ab518c3d636a60db34840739b08f0151370f7ab930a9ca6bd4d7d", + "bytes": 4135 + }, + "outputs/default_noise.csv": { + "sha256": "97aee00d5f5cae2d2012dbebffcc9f4f1af86cb6d088b642b40386a497633621", + "bytes": 16058 + }, + "outputs/default_noise_raw.csv": { + "sha256": "6d3fa726accad54acf10ebdc012c619f199cf1a6b9b9ea721a0b2c1f2fb421d7", + "bytes": 9922 + }, + "outputs/default_paired.csv": { + "sha256": "06b31f6d1b20951f7aac802202497251c0171524189de3d9c0bd17b30fc3641d", + "bytes": 18543 + }, + "outputs/default_rentfix_states.csv": { + "sha256": "957627507472c67fdff1d31f3592c4bec867ca57eebb41d2eac7e0d1aed0977d", + "bytes": 3425 + }, + "outputs/default_shapley.csv": { + "sha256": "544a35e0865f5e7e10bc1b83a0a936cb20e4bb8f19d353bbbae344c917f27262", + "bytes": 11951 + }, + "outputs/default_shapley9_all.csv": { + "sha256": "8a2481000413fca2a6d7237d616a278536db779594bba42dc7b1eb0a309f2d46", + "bytes": 11402 + }, + "outputs/default_shapley9_asec.csv": { + "sha256": "50f6b75ff018af8a26de5e47e48c8823e5e8ee743128522af64e375c29d4ae58", + "bytes": 11358 + }, + "outputs/default_steps.csv": { + "sha256": "7d6601ac269da3167355ec86a062491fd873207696472a4e378fe00a01d5ce0a", + "bytes": 14027 + }, + "outputs/dense_fit.csv": { + "sha256": "f4c45b99e13c3f6cd1f5acb2cc53d8c0934fa3fbff559dd5515e3f5e176af66c", + "bytes": 14125 + }, + "outputs/dense_rentfix_states.csv": { + "sha256": "1adc01ba7ba15a3828d43afa7c970a8e059e04926f8b66267fafcd36987f48da", + "bytes": 3470 + }, + "outputs/dense_shapley.csv": { + "sha256": "9cc6cb668d8fa8b0a1c2f8a36fd1ae9b3d82bbc7a819cf68622173c815a36981", + "bytes": 11976 + }, + "outputs/dense_shapley9_all.csv": { + "sha256": "5cd58e15cd6b81bf6c8dfa571592d1be519c261e1d2714a04771874d1f5d184c", + "bytes": 11541 + }, + "outputs/dense_shapley9_asec.csv": { + "sha256": "58b4c9e759bb63caf2f46c6d4a063d4d08e6ef1b69cbbe797cd78f803bfcc802", + "bytes": 11429 + }, + "outputs/dense_shapley9_puf_tax_detail.csv": { + "sha256": "f42376f6ae5aad6ba82c62119d3341c2e379b6c43254f6105720768982b90a33", + "bytes": 11446 + }, + "outputs/dense_steps.csv": { + "sha256": "6e1d4a6f7b8aee03362d9c023a4e35943a8f5264472e739aaf64deb0db1bafbb", + "bytes": 14122 + }, + "outputs/state_baseline.json": { + "sha256": "9568c0a09d19eba4a61115f37237200fb76abe960264894931722a2f45f7bf95", + "bytes": 9894 + }, + "outputs/waterfall.csv": { + "sha256": "75aa3c1eec097056ce342aa28e43bcd4431c726cd8eab56bc806c9f03af0cc56", + "bytes": 17743 + }, + "scripts/ablate_eval.py": { + "sha256": "63dde2a90127448fdf9c9f87ff62e9b86ca2367edf0c83074892c49f66f84ecd", + "bytes": 2893 + }, + "scripts/ablate_noise.py": { + "sha256": "fd583fa116ec7a0084707c1f5ec2cdc2b308702bd0552262584000c6268f9d32", + "bytes": 4093 + }, + "scripts/acs_eval.py": { + "sha256": "c4da02e2d95e757227152b599020abe38dfea0662697dfd1cfae1217136266f1", + "bytes": 6719 + }, + "scripts/acs_hh.py": { + "sha256": "bf827c705569556dcda37ed1e5f7902da82ae716378059396ea84618cc0978f6", + "bytes": 696 + }, + "scripts/acs_more.sh": { + "sha256": "a03cab963b266f9e194a87ef21d969f65b4a61ec91a5ac93e01f660ef94380ae", + "bytes": 1101 + }, + "scripts/acs_one.py": { + "sha256": "0c2e412601d63ece6b20c2829331501d8f127bd4e7a8043209239531776e77d7", + "bytes": 2484 + }, + "scripts/acs_rent_run.py": { + "sha256": "da787ccc5de771fbfa5735f16b15589e284a18fc0483726ff8ccaa3608b784bc", + "bytes": 5340 + }, + "scripts/acs_stored.py": { + "sha256": "08176ca7c7b701aa70419c2fc126febe742fb1f7d1984c25da358ec998043dda", + "bytes": 2673 + }, + "scripts/acs_w.py": { + "sha256": "e0066deb8f5a08ff8e62391e85105fb8de116612814d6a07881f5c126b7007c2", + "bytes": 989 + }, + "scripts/acsrent.py": { + "sha256": "43e3c6a8d02ad2f91dd352f7491304a9213ed40931defe47dc97e33383892c40", + "bytes": 2655 + }, + "scripts/asec_extract.py": { + "sha256": "f5889656172550ba6f8c3bfb7efc17cf6780d723a0cca0811851043155805423", + "bytes": 2932 + }, + "scripts/assemble.py": { + "sha256": "d47696c0bdbaaf9cdbbb807b0b40af6d6d8a0ff0c1645ae4d38acd7cdf834c23", + "bytes": 3824 + }, + "scripts/assemble_dense.py": { + "sha256": "68f06f83297c449de20c5ae7429b29c06f70e5ea0ba715fe749af4b207f240e9", + "bytes": 861 + }, + "scripts/cf_eval.py": { + "sha256": "1283c70c81115bb310e4f5d96c7f429864e6211c641ae1bb1e63bbc63b1dbda9", + "bytes": 3633 + }, + "scripts/chi_eval.py": { + "sha256": "25e0a8b2b1b108452c6d0f5b0e54504c943432f7e09a3f3159dc5f208eef1b39", + "bytes": 2536 + }, + "scripts/chi_solve.py": { + "sha256": "df4ef2190d5e60d57c409aad93d1c27a6cd901196c269350b04210737843df22", + "bytes": 2664 + }, + "scripts/cols.py": { + "sha256": "1a7b8260e77c6b35f93fd6953556f7e1cfb69cc3d8b9cd652cdc4d17fd067831", + "bytes": 1977 + }, + "scripts/ctc_ssn.py": { + "sha256": "4a7f41c62ef6d708c0492607e19b5308489c01a9434b8d2a5b2e868be8191248", + "bytes": 2659 + }, + "scripts/cutrun.py": { + "sha256": "ee4e16c1bd8a58f91bd5ad19c3b57b9b7e0ee1b920a2098725682b92e88e66b6", + "bytes": 3517 + }, + "scripts/dash_swing.py": { + "sha256": "0e1aa5ab23a673d0053e22705909237bbd953edd9dc5ce496f587c896b85a6c2", + "bytes": 1772 + }, + "scripts/decomp.py": { + "sha256": "4102acc5cffd7549374f16aaa6af8fe9b8a7f9d12e5316eb7965478ce704d717", + "bytes": 4705 + }, + "scripts/decomp2.py": { + "sha256": "014c5f3c1e1933e3bff5de68e4ed54331d09e106288dc2331827545d10475e45", + "bytes": 3792 + }, + "scripts/dense_fit.py": { + "sha256": "2a8295ec0827e8b028612c3d0ff14b67439b6dcf458a0d62f35c83eadb43c322", + "bytes": 4336 + }, + "scripts/dense_rent.py": { + "sha256": "6a349b344c2998d88918d8a80e1b8f9cf3436c35984314a918cdc338a13906fb", + "bytes": 1779 + }, + "scripts/dl.py": { + "sha256": "593a8cad1f7dac25b4a77e75de2716325146a1e51f54437d24ecf390c0581de6", + "bytes": 705 + }, + "scripts/dmiss.py": { + "sha256": "e41260102cf2341c9c16c20df7eca701d7505c82a0c908c4e95648d97ca1f290", + "bytes": 1284 + }, + "scripts/extract_state.py": { + "sha256": "3ef27f227d73a65c0b5a6ccadabf713671c3c474ddd7e206cc03de13251e7b5e", + "bytes": 4852 + }, + "scripts/fam.py": { + "sha256": "20cf8033ae5044e7ccf1fb1678679ddcd01befbfbc7b5a39fb3f4ddc07670660", + "bytes": 1273 + }, + "scripts/flip.py": { + "sha256": "90a35ab5c4d615a387738ebb5f6a71f7ef0d0b3c96f77f7f1ab7ea6d3f0b4ee6", + "bytes": 2264 + }, + "scripts/house.py": { + "sha256": "9572cbc303793e4d5851ba70d06ca622a26a8902c0a1c1a2a56aeb2cb0442f8e", + "bytes": 2530 + }, + "scripts/house_sim.py": { + "sha256": "d3991eae455e07329d4337d7f5f8067de7d2cb8946c638d8754f98b1b280f4dd", + "bytes": 2970 + }, + "scripts/idcheck.py": { + "sha256": "adf41abfc238dc4759eb93b76079f24a4232cd099c26394076392ee886667124", + "bytes": 1336 + }, + "scripts/kish.py": { + "sha256": "b51daf44b5b1d5b4429142cf4b61c5bd7b644242fe7f6684e5c1f8e2a530af54", + "bytes": 982 + }, + "scripts/national_cf.py": { + "sha256": "3512de45b6642176ce0949a2f51810903893c2a26355b13737bd937a312c2588", + "bytes": 3450 + }, + "scripts/noise.py": { + "sha256": "9da43627c8426549b002267d22793f1df10f805bfade5d78f037a840c31ee2d7", + "bytes": 2253 + }, + "scripts/paired.py": { + "sha256": "a4461b5e7b31e37386daa9c14d67dda7607e2b93ddda04e09d2c513e6bb9ca77", + "bytes": 3068 + }, + "scripts/part.py": { + "sha256": "fff80ba67a0b9d9cf1efe1228d9521dda26a7463c3a66bda950464965c9bbdc8", + "bytes": 2463 + }, + "scripts/puf_house.py": { + "sha256": "f7055e02c3dfee9d4e2654a60db0754138f76a04a127e0adcd3b6fcc184d7224", + "bytes": 1789 + }, + "scripts/rent2.py": { + "sha256": "4bc02b7765cd72883e1cd76b9a84c06ff913afa71b1561cf2bc9bab86d5b99e9", + "bytes": 1866 + }, + "scripts/rent3.py": { + "sha256": "600c2edd7db6fcc8d7d4503a33997ce50e341d0b815b8cb9925fc9b0c66b4a61", + "bytes": 1509 + }, + "scripts/rent4.py": { + "sha256": "b26e172b7a994a0ff978d502d3b656a310a9d487a12f1ffc7cf24043ae59974f", + "bytes": 2612 + }, + "scripts/rent5.py": { + "sha256": "fcf8e20954a01630c917ceac604d3fe8deaf9e5ad2e7ff26580410311735d6b8", + "bytes": 2149 + }, + "scripts/rent_eval.py": { + "sha256": "0dc77b80f336a9491214f607137024d8a94052d89cfd10ff36927a11c5ca05f2", + "bytes": 5158 + }, + "scripts/rentfix.py": { + "sha256": "4e68da53964d75f3586d2cd281113291ab76383d3f34657984f9ac9d0c00d962", + "bytes": 2672 + }, + "scripts/rep_boot.py": { + "sha256": "87f5956a4af4f08c3ec3e4193cc720878ebc37d81406ac7aad9a371c4160681e", + "bytes": 1707 + }, + "scripts/rep_eval.py": { + "sha256": "20f56043fcc618b04951b08f6e0850a73441326027a87650bae1bee033a7a603", + "bytes": 7266 + }, + "scripts/runcuts.py": { + "sha256": "4154018a33e122496edaf0dc74bc6947f5b1ccf3d867c7678fbb819d2a3b88d1", + "bytes": 725 + }, + "scripts/sparse_rent.py": { + "sha256": "b8265899609939684777d746f35cceca2bad5377fc10eb21dc87b08148476c69", + "bytes": 2311 + }, + "scripts/steps.py": { + "sha256": "616c0550ccc8cef2ae3235d2a555407d55ed047a22113c24d4854f6f41f227d8", + "bytes": 2178 + }, + "scripts/thr.py": { + "sha256": "7e5de78ec8313f2ba9cb7b10a849eb1c375944b690f33afa7cae9c963396dcf2", + "bytes": 795 + }, + "scripts/vardec.py": { + "sha256": "735c8c54eed72a8004657e5f6ff38269771a7d99a76ee2d14614b6bf63e802e7", + "bytes": 6350 + }, + "scripts/year.py": { + "sha256": "ca35dc3ba29b95abe4e07a5921a70ad4b4099cadf7ff35ca4ccca9fe67846986", + "bytes": 4304 + } + } +} diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py index b6855efd5f..190c4c58de 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py @@ -77,6 +77,16 @@ stored = pd.read_csv(f"{SP}/run/acs_stored.csv", index_col=0) fs = sorted(glob.glob(f"{SP}/run/{TAG}/*.parquet")) u = pd.concat([pd.read_parquet(f) for f in fs], ignore_index=True) +rf = sorted(glob.glob(f"{SP}/run/{TAG}_r/*.parquet")) +if rf: + u = u.drop(columns=[c for c in ("poor_r",) if c in u]).merge( + pd.concat([pd.read_parquet(f) for f in rf], ignore_index=True), + on="spm_unit_id", + how="left", + ) +if "poor_r" not in u: + u["poor_r"] = np.nan +u["poor_r"] = u.poor_r.fillna(u.poor) # acsrent_r covers the top-gap states only u = ( u[u.kids > 0] .merge(uh, left_on="spm_unit_id", right_on="person_spm_unit_id") @@ -191,6 +201,7 @@ def lin(g, w, f): pos = pd.Series(np.arange(len(key)), index=key.household_id.values) ix = pos.reindex(u.household_id.values).values.astype(int) out = [] +u = u.copy() names = [ "dup_release_repro", "proj_chi_s050_0.03", @@ -214,9 +225,10 @@ def lin(g, w, f): R = [] for s, g in u.groupby("state"): r, se = lin(g, "w", g.poor) + dd, dse = lin(g, "w", g.poor_r - g.poor) W = g.w * g.kids a = W[g.household_support_channel == "acs_2024_1yr"].sum() / W.sum() - R.append(dict(state=s, r=r, se=se, a=a)) + R.append(dict(state=s, r=r, se=se, a=a, dd=dd, dse=dse)) R = pd.DataFrame(R).set_index("state") g_ = R.r - c.rate.reindex(R.index) out.append( @@ -227,6 +239,8 @@ def lin(g, w, f): beyond=int((g_.abs() > c.moe.reindex(R.index)).sum()), corr=np.corrcoef(R.r, c.rate.reindex(R.index))[0, 1], med_se=R.se.median(), + med_delta=R.dd.median(), + med_delta_se=R.dse.median(), acs_share=R.a.mean(), DE=R.r["DE"], DC=R.r["DC"], diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent.sh b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent.sh deleted file mode 100755 index 93e232fc46..0000000000 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/zsh -SP=${0:a:h}; cd $SP -while [ $(ls run/acs | wc -l) -lt 51 ]; do /bin/sleep 30; done -OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 env/.venv/bin/python acs_rent_cut.py 2>&1 | tail -3 | cut -c1-200 -ls -Sr run/acsrent_cuts | sed 's/.pkl//' | ACS_TAG=acsrent OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=2 xargs -P 3 -I{} sh -c 'env/.venv/bin/python acs_one.py {} >> run/acsrent.log 2>&1 && [ -f run/acsrent/{}.parquet ] && rm -f run/acsrent_cuts/{}.pkl' -echo done $(ls run/acsrent | wc -l) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_cut.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_cut.py deleted file mode 100644 index c90f795f75..0000000000 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_cut.py +++ /dev/null @@ -1,66 +0,0 @@ -"""ACS-local file with rent on the right households: donors take the base record's right rent, ACS renter heads take twelve times native monthly contract rent. Weights unchanged.""" - -import glob -import os -import sys - -import numpy as np -import pandas as pd - -SP = os.path.dirname(os.path.abspath(__file__)) -sys.path.insert(0, SP) -from pathlib import Path - -import extract_state as ex - -S = os.path.expanduser( - "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" -) -ex.load(S + "725d89993f6b2dc4821fd5c3620f0f3d4d630102/populace_us_2024_acs_local.h5") -d = Path(SP) / "run/acsrent_cuts" -d.mkdir(parents=True, exist_ok=True) -(Path(SP) / "run/acsrent").mkdir(exist_ok=True) -de = pd.read_hdf( - [x for x in glob.glob(S + "15cefac4*/*.h5") if "calib" not in x][0], "household" -)[["household_id", "household_source_id"]] -right = ( - pd.read_parquet(f"{SP}/run/rentfix_dense.parquet") - .merge(de, on="household_id") - .drop_duplicates("household_source_id") - .set_index("household_source_id") - .rent_right -) -h = ex.tables["household"] -p = ex.tables["person"] -acs = h.household_support_channel.astype(str).str.startswith("acs").values -hr = np.where( - acs, - 12 * pd.to_numeric(h.acs_monthly_contract_rent, errors="coerce").fillna(0).values, - h.household_source_id.map(right).values, -) -hr = pd.Series(hr, index=h.household_id.values) -assert hr.notna().all() -head = p.is_household_head.astype(bool).values -rent = np.zeros(len(p)) -rent[head] = p.person_household_id[head].map(hr).values -print( - "acs renters with no head", - int( - ( - (hr.values > 0) - & ~pd.Series(hr.index).isin(p.person_household_id[head]).values - ).sum() - ), - "rent was", - round(p.pre_subsidy_rent.sum() / 1e9, 2), - "now", - round(rent.sum() / 1e9, 2), - flush=True, -) -p["pre_subsidy_rent"] = rent -ex.tables["person"] = p -for f in sorted(int(v) for v in h["state_fips"].unique()): - q = d / f"{f:02d}.pkl" - if not q.exists(): - ex.state_file(f).to_pickle(q) -print("cut", flush=True) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_run.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_run.py new file mode 100644 index 0000000000..609a72b541 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_run.py @@ -0,0 +1,166 @@ +"""ACS-local file with rent on the right households, one state at a time, simulated in memory so no cut reaches disk. +Donors take the base record's right rent; ACS renter heads take twelve times native monthly contract rent. Weights unchanged. +Base simulations for all 51 first; then the 2021 CTC reform for the top-gap states. Pauses while free space reads under 30 GB.""" + +import gc +import glob +import os +import subprocess +import sys +import time +import warnings + +import numpy as np +import pandas as pd + +warnings.filterwarnings("ignore") +SP = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, SP) +import extract_state as ex +from policyengine_core.data import Dataset +from policyengine_core.reforms import Reform +from policyengine_us import Microsimulation + +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +FREE = os.path.expanduser("~/reviews/us-hub/scripts/free_gb.py") +Y = 2025 +TOP = [11, 10, 47, 24, 12, 44, 50, 29, 22, 30, 28, 15, 5, 25, 23] + + +def wait_for_space(): + while True: + gb = float( + subprocess.run( + ["python3", FREE], capture_output=True, text=True + ).stdout.split()[0] + ) + if gb >= 30: + return gb + print("pause, free", gb, flush=True) + time.sleep(120) + + +ex.load(S + "725d89993f6b2dc4821fd5c3620f0f3d4d630102/populace_us_2024_acs_local.h5") +de = pd.read_hdf( + [x for x in glob.glob(S + "15cefac4*/*.h5") if "calib" not in x][0], "household" +)[["household_id", "household_source_id"]] +right = ( + pd.read_parquet(f"{SP}/run/rentfix_dense.parquet") + .merge(de, on="household_id") + .drop_duplicates("household_source_id") + .set_index("household_source_id") + .rent_right +) +h = ex.tables["household"] +p = ex.tables["person"] +acs = h.household_support_channel.astype(str).str.startswith("acs").values +hr = pd.Series( + np.where( + acs, + 12 + * pd.to_numeric(h.acs_monthly_contract_rent, errors="coerce").fillna(0).values, + h.household_source_id.map(right).values, + ), + index=h.household_id.values, +) +assert hr.notna().all() +head = p.is_household_head.astype(bool).values +rent = np.zeros(len(p)) +rent[head] = p.person_household_id[head].map(hr).values +print( + "rent was", + round(p.pre_subsidy_rent.sum() / 1e9, 2), + "now", + round(rent.sum() / 1e9, 2), + flush=True, +) +p["pre_subsidy_rent"] = rent +ex.tables["person"] = p +sizes = h.groupby("state_fips").size().sort_values() +order = TOP + [int(f) for f in sizes.index if int(f) not in TOP] +os.makedirs(f"{SP}/run/acsrent", exist_ok=True) +os.makedirs(f"{SP}/run/acsrent_r", exist_ok=True) + + +def frame_for(fips): + frame = ex.state_file(fips) + for c in frame.columns: + if c.startswith("parent_") and c.endswith("_id__2024"): + frame[c] = frame[c].fillna(-1).astype(np.int64) + if "spm_unit_spm_universe_status__2024" not in frame: + frame["spm_unit_spm_universe_status__2024"] = "INCLUDED" + return frame + + +for fips in order: + f = f"{SP}/run/acsrent/{fips:02d}.parquet" + if os.path.exists(f): + continue + gb = wait_for_space() + t0 = time.time() + sim = Microsimulation(dataset=Dataset.from_dataframe(frame_for(fips), 2024)) + ids = sim.calculate("spm_unit_id", 2024).values + age = sim.calculate("age", 2024).values + pu = sim.calculate("person_spm_unit_id", 2024).values + res = { + "spm_unit_id": ids, + "kids": pd.Series(age < 18).groupby(pu).sum().reindex(ids).values, + } + res["poor"] = np.asarray( + sim.calculate("spm_unit_is_in_spm_poverty", Y, map_to="spm_unit").values, float + ) + res["net"] = np.asarray( + sim.calculate("spm_unit_net_income", Y, map_to="spm_unit").values, float + ) + res["thr"] = np.asarray( + sim.calculate("spm_unit_spm_threshold", Y, map_to="spm_unit").values, float + ) + res["snap"] = np.asarray( + sim.calculate("snap", 2024, map_to="spm_unit").values, float + ) + res["house"] = np.asarray( + sim.calculate( + "spm_unit_capped_housing_subsidy", 2024, map_to="spm_unit" + ).values, + float, + ) + pd.DataFrame(res).to_parquet(f) + del sim + gc.collect() + print(fips, round(time.time() - t0), "free", gb, flush=True) +d = "2025-01-01.2025-12-31" +ref = Reform.from_dict( + { + "gov.irs.credits.ctc.amount.arpa[0].amount": {d: 3600}, + "gov.irs.credits.ctc.amount.arpa[1].amount": {d: 3000}, + "gov.irs.credits.ctc.refundable.fully_refundable": {d: True}, + "gov.irs.credits.ctc.phase_out.arpa.in_effect": {d: True}, + }, + country_id="us", +) +for fips in TOP: + f = f"{SP}/run/acsrent_r/{fips:02d}.parquet" + if os.path.exists(f): + continue + wait_for_space() + t0 = time.time() + sim = Microsimulation( + dataset=Dataset.from_dataframe(frame_for(fips), 2024), reform=ref + ) + pd.DataFrame( + { + "spm_unit_id": sim.calculate("spm_unit_id", 2024).values, + "poor_r": np.asarray( + sim.calculate( + "spm_unit_is_in_spm_poverty", Y, map_to="spm_unit" + ).values, + float, + ), + } + ).to_parquet(f) + del sim + gc.collect() + print("reform", fips, round(time.time() - t0), flush=True) +print("done", flush=True) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/dash_swing.py b/docs/evidence/us-state-child-spm-2026-11/scripts/dash_swing.py new file mode 100644 index 0000000000..30f30f152a --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/dash_swing.py @@ -0,0 +1,59 @@ +"""How far the stored dashboard audits move each state's 2021 CTC effect between builds, against the sampling error of one build.""" + +import json +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +pd.set_option("display.width", 200) +d = {} +for tag, f in ( + ("p24", "state_audit_buildp_v2_2024_raw.json"), + ("p25", "state_audit_buildp_v2_y25_2025_raw.json"), + ("o24", "state_audit_o1017_2301_2024_raw.json"), + ("o25", "state_audit_o1017_2301_y25_2025_raw.json"), +): + x = json.load(open(f"{SP}/dash/{f}")) + if tag == "p24": + print(list(x[0].keys())[:20]) + key = [k for k in x[0] if k in ("state", "state_code", "state_abbr")][0] + d[tag] = pd.Series( + {r[key]: r.get("ref_ctc2021_child_pov_change_pp_measured") for r in x}, + dtype=float, + ) +t = pd.DataFrame(d) +print(t.isna().sum().to_dict(), len(t)) +for a, b in (("p24", "o24"), ("p25", "o25")): + e = (t[a] - t[b]).dropna() + print( + a, + b, + "states", + len(e), + "mean abs swing", + round(e.abs().mean(), 2), + "sd", + round(e.std(), 2), + "max", + round(e.abs().max(), 2), + e.abs().idxmax(), + "corr", + round(np.corrcoef(t.loc[e.index, a], t.loc[e.index, b])[0, 1], 3), + ) +a = pd.read_csv(f"{SP}/run/acs_eval.csv", index_col=0) +print( + "this run vs stored o25, mean abs", + round((a.delta - t.o25.reindex(a.index)).abs().mean(), 3), +) +e = (t.p25 - t.o25).reindex(a.index) +print( + "implied sd of between-build noise per build", + round(e.std() / np.sqrt(2), 2), + "median delta se", + round(a.delta_se.median(), 2), + "rms delta se", + round(np.sqrt((a.delta_se**2).mean()), 2), +) +t.to_csv(f"{SP}/run/dash_swing.csv") diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/kish.py b/docs/evidence/us-state-child-spm-2026-11/scripts/kish.py new file mode 100644 index 0000000000..efa6d93abe --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/kish.py @@ -0,0 +1,41 @@ +"""Child-weighted Kish effective sample by state, clustered on source household, on each file.""" + +import os + +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +for tag in ("default", "dense"): + u = pd.read_parquet( + f"{SP}/run/{tag}_units.parquet", + columns=[ + "kids", + "w1", + "state", + "household_support_channel", + "source_household_id", + ], + ) + u = u[u.kids > 0].copy() + u["W"] = u.w1 * u.kids + u["src"] = ( + u.household_support_channel.astype(str).str[:4] + + ":" + + u.source_household_id.astype(str) + ) + k = {} + for s, g in u.groupby("state"): + v = g.W.groupby(g.src).sum() + k[s] = v.sum() ** 2 / (v**2).sum() + k = pd.Series(k) + print( + tag, + "median", + round(k.median()), + "min", + k.idxmin(), + round(k.min()), + "max", + k.idxmax(), + round(k.max()), + ) From 8139b49002c4da4fbfd9bf3943846e884c3c8cd5 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 1 Nov 2026 19:11:24 -0500 Subject: [PATCH 3/9] Rework the state child SPM diagnosis after independent review The review found the dense pool at initial weights fits Census far better than at published weights, so weights, not missing records, carry most of the systematic error. The note now leads with that, reports noise's share with its interval, and reorders the fixes. It also corrects the ablation labels, the null-test intervals, the dashboard's build comparison, the PUF housing mechanism and the ACS rent path. Clusters now merge an ASEC record with its PUF clone on every file, and receipts pin input contents. Co-Authored-By: Claude Opus 5.5 --- .../us-state-child-spm-2026-11/README.md | 249 +++++++++++------- .../outputs/acs_eval.csv | 102 +++---- .../outputs/acs_solves.csv | 22 +- .../outputs/acsrent_eval.csv | 52 ++++ .../outputs/acsrent_solves.csv | 12 + .../outputs/calibration_step.csv | 7 + .../outputs/dash_swing.csv | 104 ++++---- .../outputs/initial_fit.csv | 13 + .../outputs/initial_fit_states.csv | 52 ++++ .../outputs/kish.csv | 52 ++++ .../outputs/logs/acs_eval.txt | 71 +++++ .../outputs/logs/acsrent_eval.txt | 71 +++++ .../outputs/logs/ctc_ssn.txt | 7 + .../outputs/logs/dmiss.txt | 24 ++ .../outputs/logs/house.txt | 8 + .../outputs/logs/noise_ci.txt | 12 + .../outputs/logs/part.txt | 8 + .../outputs/logs/puf_house.txt | 8 + .../outputs/logs/rent4.txt | 19 ++ .../outputs/logs/rent5.txt | 16 ++ .../outputs/noise_ci.json | 186 +++++++++++++ .../outputs/resource_growth.csv | 8 + .../us-state-child-spm-2026-11/receipts.json | 229 ++++++++++++++-- .../scripts/acs_eval.py | 9 +- .../scripts/dash_swing.py | 25 ++ .../scripts/initial_fit.py | 169 ++++++++++++ .../scripts/kish.py | 35 +-- .../scripts/noise_ci.py | 133 ++++++++++ .../scripts/resource_growth.py | 81 ++++++ 29 files changed, 1537 insertions(+), 247 deletions(-) create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_solves.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/calibration_step.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/initial_fit.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/initial_fit_states.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/kish.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_eval.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/acsrent_eval.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/ctc_ssn.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/dmiss.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/house.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/noise_ci.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/part.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/puf_house.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/rent4.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/rent5.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/noise_ci.json create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/resource_growth.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/initial_fit.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/noise_ci.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/resource_growth.py diff --git a/docs/evidence/us-state-child-spm-2026-11/README.md b/docs/evidence/us-state-child-spm-2026-11/README.md index 92030c28d9..8dcaea04df 100644 --- a/docs/evidence/us-state-child-spm-2026-11/README.md +++ b/docs/evidence/us-state-child-spm-2026-11/README.md @@ -2,49 +2,87 @@ State child SPM poverty on the default Populace US file misses Census P60-290 Table 18 by 4.8 points on average, and 38 of 51 jurisdictions fall outside Census's margin. This note splits that miss into sampling noise, weight concentration and systematic error, decomposes the largest gaps, and lists what would close them. -Model figures come from real PolicyEngine US simulations at 2.90.2 (`469ad12cb957`), one state cut at a time as `slideshows/appam-2026/analysis/state_baseline.py` on PolicyEngine/policyengine-slides#95 does. Lines marked arithmetic are not re-simulations. No poverty rate entered a calibration target: these comparisons are holdouts. +Model figures come from real PolicyEngine US simulations at 2.90.2 (`469ad12cb957`), one state cut at a time as `slideshows/appam-2026/analysis/state_baseline.py` on PolicyEngine/policyengine-slides#95 does. Differences, standard errors and fits are arithmetic on those runs' output, and the one figure that adds income without re-simulating says so. No poverty rate entered a calibration target: the dense file's 6,102 target names include none, and these comparisons are holdouts. ## What we found -1. **Noise drives most of the state-to-state scatter on the default file.** A state rate carries a replicate standard error of about 3.6 points, so a 90% interval runs about ±6 points. Child-weighted effective samples run from 26 in Maine to 301 in California. Noise accounts for about 60% of the cross-state variance in the gaps. -2. **A common upward shift of about 3 points sits underneath it.** On the dense file, which halves the noise, the mean gap stays at +3.6. -3. **State-specific error with a standard deviation of about 3 points survives more data.** Delaware, Florida, Maryland, Massachusetts, Louisiana, Mississippi and Hawaii keep at least two-thirds of their gaps on the dense file. Tennessee, Rhode Island, Vermont, Missouri, DC and Montana lose at least half of theirs. -4. **The rent imputation puts rent on the wrong households.** About 91% of base households carry another household's rent, in every Populace US file we checked, including the local-area file. PolicyEngine/microcosm#1444 fixes it. With published weights held fixed, the fix nearly doubles modelled housing subsidies on the dense file, from $7.3bn to $13.9bn, and lowers the 2025 child rate 0.7 points, from 18.19 to 17.49. It lifts SNAP by less than 1%, so it does not explain the benefit shortfall below. -5. **The default file is not the state path.** `policyengine.py` routes state regions to the ACS-local file. On that file the mean gap falls to +0.88 and the mean absolute gap to 3.18, yet 29 jurisdictions still fall outside Census's margin, because 23,407 donor households hold 68% of child weight. ACS rows alone reach a mean absolute gap of 2.46 and a correlation of .69 with a median standard error of 1.06, which points to the largest available fix. +1. **Noise accounts for roughly half of the default file's state scatter, and the data pin that share down poorly.** A state rate carries a replicate standard error of about 3.6 points, or about ±6 at 90%, and that error runs low because it ignores CPS design. Child-weighted effective samples run from 19 in DC to 277 in California. The point estimate puts noise at 60% of the cross-state variance, with a 95% interval of about 10% to 89%. +2. **Weights create most of the systematic error.** On the dense pool at initial weights, the mean gap reads 0.00, the mean absolute gap 1.78, and 16 jurisdictions fall outside Census's margin. At published weights those read +3.62, 4.33 and 38, and state-specific error doubles from 1.50 to 3.07 points. On the default file, support selection puts the shift in place before calibration starts (+3.27 at initial weights). The zero nets +2.20 on ASEC rows against -2.20 on PUF rows, and initial weights miss the administrative targets, so this result locates the problem and does not recommend skipping calibration. +3. **A smaller error survives without calibration.** Delaware, Louisiana and Mississippi miss the same way at dense initial weights and on ACS rows, which share no households with them. That points to the model or the benchmark. Florida, Massachusetts and Maryland sit within 3 points at dense initial weights and mostly miss after calibration. +4. **The rent imputation puts rent on the wrong households.** Of records that should carry rent, 89% do not hold their own, in every Populace US file we checked, including the local-area file. PolicyEngine/microcosm#1444 carries the fix. With published weights held fixed, the fix nearly doubles modelled housing subsidies on the dense file, from $7.3bn to $13.9bn, and lowers the 2025 child rate 0.7 points. It barely moves state fit: the mean absolute gap goes from 4.33 to 4.13 on dense, 4.80 to 4.71 on default and 3.18 to 3.21 on ACS-local. It lifts SNAP by less than 1%. +5. **The default file is not the state path.** `policyengine.py` routes state regions to the ACS-local file. There the mean gap falls to +0.88 and the mean absolute gap to 3.18, 29 jurisdictions fall outside Census's margin, and 23,407 donor households hold 68% of child weight. ACS rows alone reach a mean absolute gap of 2.46 and a correlation of .69 with a median standard error of 1.06, and still leave 22 outside. Raising the ACS share of the mass gives the largest measured improvement a release could use: 2.79 to 2.16, with the median error on a state's reform effect falling from 1.30 to 0.56. ## What the comparison measures -Table 18 averages income years 2023 to 2025 and carries a margin of 1.0 to 3.7 points. The model column is PolicyEngine's 2025 rate. +Table 18 averages income years 2023 to 2025 and carries a margin of 1.0 to 3.7 points. The model column is PolicyEngine's 2025 rate. Standard errors below linearize the ratio and cluster on source household, counting an ASEC record and its PUF clone as one cluster, so the columns compare like with like. -| Measure | Default (Build P) | Dense (`b5db384`) | ACS-local (Build O 10/17) | -| --- | --- | --- | --- | -| Household records | 57,240 | 352,932 | 1,586,908 | -| Mean gap | +3.24 | +3.62 | +0.88 | -| Standard deviation of gaps | 5.11 | 4.02 | 4.12 | -| Mean absolute gap | 4.80 | 4.33 | 3.18 | -| Correlation with Census | .52 | .65 | .54 | -| Outside Census's margin, of 51 | 38 | 38 | 29 | -| Median state standard error | 3.57 | 1.86 | 2.86 | -| Median child-weighted Kish sample | 59 | 425 | 100 | -| State-specific standard deviation τ | 3.25 | 3.07 | not fitted | - -The default file's standard error comes from 80 replicate calibrations: a Poisson bootstrap of source households, then a full re-solve. The linearized standard error, 4.04, runs a little higher. The dense and ACS-local standard errors linearize the ratio and cluster on source household. Census's own root-mean-square standard error is 1.35. +| Measure | Default, initial | Default, published | Dense, initial | Dense, published | ACS-local (Build O 10/17) | +| --- | --- | --- | --- | --- | --- | +| Household records | 57,240 | 57,240 | 352,932 | 352,932 | 1,586,908 | +| Mean gap | +3.27 | +3.24 | 0.00 | +3.62 | +0.88 | +| Standard deviation of gaps | 4.01 | 5.11 | 2.40 | 4.02 | 4.12 | +| Mean absolute gap | 4.21 | 4.80 | 1.78 | 4.33 | 3.18 | +| Correlation with Census | .65 | .52 | .78 | .65 | .54 | +| Outside Census's margin, of 51 | 36 | 38 | 16 | 38 | 29 | +| Median state standard error | 2.20 | 4.04 | 1.07 | 1.86 | 2.98 | +| Median child-weighted Kish sample | 211 | 51 | 635 | 305 | 88 | +| Q on 50 degrees of freedom | 109.5 | 71.5 | 94.4 | 147.8 | 73.3 | +| State-specific standard deviation τ | 2.74 | 2.73 | 1.50 | 3.07 | 2.02 | + +Default is Build P; dense is `b5db384`. The published snapshot does not store ACS-local initial weights, so that column has no initial counterpart. The default file also has a replicate standard error from 80 replicate calibrations: a Poisson bootstrap of source households, then a full re-solve. Its median reads 3.57, and its ratio to the linearized error runs from .53 in West Virginia to 2.17 in Montana. Census's own root-mean-square standard error is 1.35. ## Noise and weight concentration -Calibration nearly doubles the default file's noise. Initial weights give a median state standard error of 2.20 and a Kish sample of 42,355; published weights give 4.04 and 9,174. In Massachusetts, 1,279 of 1,684 SPM units carry weights below 1, so a few records set the state's rate. +Calibration nearly doubles the default file's noise. Initial weights give a median state standard error of 2.20 and a national Kish sample of 42,355; published weights give 4.04 and 9,174. In Massachusetts, 1,279 of 1,684 SPM units carry weights below 1, so a few records set the state's rate. + +We tested whether noise alone could produce the pattern, using a common shift plus replicate noise: + +| Statistic | Observed | Null median | Null central 95% | One-sided p | +| --- | --- | --- | --- | --- | +| Mean absolute gap | 4.80 | 4.25 | 3.44 to 5.13 | .10 | +| Standard deviation of gaps | 5.11 | 4.12 | 3.27 to 5.12 | .03 | +| Outside Census's margin | 38 | 36 | 30 to 42 | .31 | + +Only the standard deviation rejects, and adding a state-specific τ of 3.25 lifts the null medians to 4.94 and 5.23, just past the observed values. A DerSimonian-Laird fit gives Q = 88.4 and τ = 3.25, with a Q-profile 95% interval of 1.71 to 4.84. That interval puts noise's share of the variance anywhere from about 10% to 89%. Replicates also centre away from the published values, by 1.83 points on average and by -6.93 in Tennessee, -5.76 in Rhode Island and +4.92 in Montana. Measuring error around the published values gives Q = 64.8 (p = .08) and τ = 2.28, so the default file alone barely separates noise from state-specific error. + +These standard errors run low. Replicates hold support, the target matrix and imputations fixed, and source-household clusters ignore CPS strata, primary sampling units and rotation overlap. τ absorbs that, along with the mismatch between one model year and a three-year Census average. + +Firmer evidence comes from the dense file (Q = 147.8, τ = 3.07, 95% interval 2.33 to 4.34) and ACS rows (Q = 131.6, τ = 2.08, 95% interval 1.62 to 3.22). The dense file adds records, not surveys: every channel maps to the same ASEC households, so its .65 gap correlation with the default file partly reflects shared sample noise. ACS rows give the only independent sample. Their gaps correlate .30 with the dense file's at initial weights and .42 at published weights. -We tested whether noise alone could produce the pattern. A null with a common shift plus replicate noise gives a mean absolute gap of 4.25 (95% range 3.56 to 4.98) and a gap standard deviation of 4.12 (3.40 to 4.95). The observed 5.11 falls outside that range. Adding a state-specific τ of 3.25 reproduces the observed 4.94 and 5.23. A DerSimonian-Laird fit on the replicate standard errors gives Q = 88.4 on 50 degrees of freedom. So noise is necessary to explain the table, and it is not sufficient. +## Where the error enters + +Calibration moves both halves of the dense pool up: + +| Dense file, 2025 | Initial weights | Published weights | +| --- | --- | --- | +| All rows, child rate | 13.86 | 18.19 | +| ASEC rows, child rate | 16.38 | 22.13 | +| ASEC rows, mean gap | +2.20 | +6.98 | +| ASEC rows, correlation with Census | .88 | .68 | +| ASEC rows, τ | 1.28 | 4.55 | +| PUF rows, child rate | 11.34 | 15.16 | +| PUF rows, mean gap | -2.20 | +0.98 | +| PUF rows, correlation with Census | .55 | .52 | +| PUF rows, τ | 2.43 | 2.82 | + +ASEC rows at initial weights hold the tightest state pattern in this note, with a +2.20 shift. PUF rows start 5 points below them, so the dense pool's zero comes from two offsetting gaps. + +The calibration step differs by flag and by file: + +| Calibration step, state mean | Census's flag | PE 2024 | PE 2025 | Largest state moves, PE 2025 | +| --- | --- | --- | --- | --- | +| Dense | +2.74 | +3.33 | +3.62 | -2.06 to +10.75 | +| Default | +1.58 | -0.05 | -0.03 | -10.31 to +8.36 | -The dense file confirms the split. It halves the standard error and leaves τ at 3.07, and its gaps correlate .65 with the default file's. +On the default file, calibration nets to nothing on PolicyEngine's flag and still moves a typical state 3 points. The shift arrives earlier: selecting 57,240 records from the pool moves Census's flag from 13.03 to 15.06 at initial weights. ## Decomposition of the largest gaps -Each row adds up to the gap on the dense file, at its own weights and records: +Each column adds up to the gap on the dense file, at its own weights and records: | Step | DC | DE | TN | MD | FL | LA | MT | State mean | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| ASEC period and sample | -2.9 | 1.6 | -2.0 | 1.4 | -0.8 | -2.1 | -1.7 | -0.34 | +| ASEC period, sample and selection | -2.9 | 1.6 | -2.0 | 1.4 | -0.8 | -2.1 | -1.7 | -0.34 | | Calibration | 8.8 | 4.8 | 6.1 | 3.7 | 6.5 | 2.3 | 3.7 | 2.74 | | Thresholds | 2.7 | 3.2 | 2.4 | 2.2 | 5.9 | 2.4 | 1.9 | 2.89 | | Cash income | -1.8 | 1.0 | -0.6 | 0.6 | 0.2 | -4.7 | -0.3 | -0.79 | @@ -53,38 +91,52 @@ Each row adds up to the gap on the dense file, at its own weights and records: | 2024 to 2025 | 1.2 | 3.0 | 2.0 | 1.5 | 3.3 | 0.1 | 1.3 | 1.28 | | **Gap** | **5.8** | **13.0** | **5.3** | **8.5** | **11.6** | **-7.0** | **1.0** | **3.62** | -The steps run in order. The first compares Table 18 with the ASEC 2022 to 2024 pool at survey weights. Calibration compares Census's own poverty flag at initial and final weights. An exact Shapley over nine swapped components then moves from Census's resources and thresholds to PolicyEngine's for 2024, and the last step moves the model to 2025. `outputs/dense_steps.csv` and `outputs/default_steps.csv` hold all 51 states and the nine components. +The steps run in order. The first compares Table 18 with the ASEC 2022 to 2024 pool at survey weights, and includes record selection. Calibration compares Census's own poverty flag at initial and final weights. An exact Shapley over nine swapped components then moves from Census's resources and thresholds to PolicyEngine's for 2024, and the last step moves the model to 2025. `outputs/dense_steps.csv` and `outputs/default_steps.csv` hold all 51 states and the nine components. -Three readings follow from the state table: +The order matters. The Shapley runs at final weights only, so it says nothing about how weights interact with the swapped components, and the table above shows the calibration step changing with the flag. -| State | Census | Default gap (SE) | Dense gap (SE) | ACS-local gap (SE) | Reading | -| --- | --- | --- | --- | --- | --- | -| DC | 20.3 | +14.1 (6.1) | +5.8 (3.4) | +0.9 (4.5) | Mostly noise | -| DE | 8.7 | +13.7 (4.4) | +13.0 (3.2) | +13.5 (5.6) | Persists; donors hold 25.4, ACS rows 15.0 | -| TN | 10.0 | +13.2 (3.9) | +5.3 (1.8) | +6.6 (3.0) | Half noise, half systematic | -| MD | 10.7 | +12.5 (4.7) | +8.5 (2.8) | +6.9 (4.3) | Persists at a lower level | -| FL | 18.4 | +9.8 (2.8) | +11.6 (1.7) | +4.3 (3.2) | Persists on the donors; ACS rows sit at 13.3 | -| LA | 20.7 | -8.6 (3.3) | -7.0 (1.7) | -9.0 (2.2) | Persists; cash and SNAP run high | -| MT | 9.3 | -6.8 (3.4) | +1.0 (1.5) | -4.5 (1.3) | Noise on the default file | +Ten states read this way, with standard errors in brackets: + +| State | Census | Default gap | Dense, initial | Dense, published | ACS-local | ACS rows | ACS-local donors | Reading | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | +| DC | 20.3 | +14.1 (6.1) | -4.9 | +5.8 (3.4) | +0.9 (5.3) | +1.8 (5.5) | +0.3 | Too noisy to read on any file | +| DE | 8.7 | +13.7 (4.4) | +5.3 | +13.0 (3.2) | +13.5 (6.9) | +6.3 (2.9) | +16.7 | High everywhere, and donors widen it | +| TN | 10.0 | +13.2 (3.9) | -0.1 | +5.3 (1.8) | +6.6 (3.1) | +8.3 (1.4) | +5.7 | High on ACS rows, fine on the initial pool | +| MD | 10.7 | +12.5 (4.7) | +2.7 | +8.5 (2.8) | +6.9 (4.2) | +0.7 (1.2) | +9.8 | Calibration and donors | +| FL | 18.4 | +9.8 (2.8) | +0.9 | +11.6 (1.7) | +4.3 (3.5) | -5.1 (0.6) | +8.7 | Calibration and donors; ACS rows read low | +| MA | 12.8 | +7.4 (3.3) | +0.5 | +7.9 (1.9) | +8.6 (4.6) | +2.5 (1.2) | +11.7 | Calibration and donors | +| LA | 20.7 | -8.6 (3.3) | -7.0 | -7.0 (1.7) | -9.0 (2.3) | -6.4 (1.4) | -10.1 | Low everywhere; cash and SNAP run high | +| MS | 19.1 | -6.2 (3.0) | -5.2 | -4.0 (1.7) | -5.3 (2.9) | -3.2 (1.7) | -6.4 | Low everywhere | +| HI | 13.0 | -6.0 (2.4) | -2.2 | -4.2 (1.3) | -7.1 (2.0) | -7.9 (0.8) | -6.7 | Low, and lowest on ACS rows | +| MT | 9.3 | -6.8 (3.4) | -1.1 | +1.0 (1.5) | -4.5 (1.3) | +1.2 (2.7) | -7.4 | Low on donors only | ## The common shift -**Calibration moves weight toward poorer households.** Census's flag reads 13.03 at dense initial weights and 16.31 at final weights. On the default file, re-solves that drop one target family at a time show the balance: +**Calibration moves weight toward poorer households on the dense file.** Census's flag reads 13.03 at dense initial weights and 16.31 at final weights. On the default file, re-solves that keep one target family at a time show the families pulling apart: -| Targets kept | Census-flag rate | PE 2025 rate | -| --- | --- | --- | -| Population only | 15.01 | 16.43 | -| Population plus SNAP, SSI and ACA | 19.06 | 20.97 | -| Population plus Medicaid | 18.65 | 20.65 | -| Population plus all SOI tax targets | 6.87 | 6.69 | -| Population plus CTC only | 11.88 | 12.57 | -| All, as published | 16.50 | 17.17 | +| Targets kept, default pipeline | Census's flag | PE 2025 | State correlation | +| --- | --- | --- | --- | +| Initial weights, no solve | 15.06 | 16.70 | .65 | +| Population only | 15.01 | 16.43 | .60 | +| Population plus SNAP, SSI and ACA | 19.06 | 20.97 | .64 | +| Population plus Medicaid | 18.65 | 20.65 | .52 | +| Population plus EITC | 17.15 | 18.55 | .60 | +| Population plus all SOI | 13.69 | 14.41 | .53 | +| Population plus CTC only | 11.88 | 12.57 | .65 | +| All targets, same pipeline | 15.92 | 16.23 | .42 | +| All targets, as published | 16.50 | 17.17 | .52 | + +Benefit targets and the EITC pull the rate up, and CTC and joint SOI targets pull it down. With every family in, the national rate lands near population-only, at 16.23 against 16.43, while the state correlation falls from .60 to .42. The last two rows use the same targets, so solver path alone moves the national rate about a point. `outputs/ablate_eval.csv` holds the drop-one runs too. + +On the dense file, benefit receipt starts far below target. Summing each family's cells, which mixes dollars and counts where a family holds both, SNAP starts 37.8% short, Medicaid 26.2%, EITC 50.8% and ACA 43.9%, while AGI starts 4.2% short. Those misses line up with the +3.3 point rise, though we ran the ablations on the default file only. + +A chi-square anchor to the default file's initial weights lowers noise and worsens the fit: at λ = .03 the median standard error falls to 2.78, the mean gap rises to 4.77, and the mean absolute gap rises to 5.66. That anchor pulls toward a selected support that already carries the shift. We did not test an anchor on the dense pool. -Benefit administrative targets pull poverty up, tax targets pull it down, and no target anchors a state, child and income cell. On the dense file, income targets start within 10% (AGI -4.2%) while benefit receipt starts far below target (SNAP -37.8%, Medicaid -26.2%, EITC -50.8%, ACA -43.9%). Those misses line up with the +3.3 point rise, though we ran the ablations on the default file only. A chi-square anchor to design weights lowers noise and leaves the shift alone: at λ = .03 the median standard error falls to 2.78, and the mean gap rises to 4.77. +**Pooled records keep nominal income from their source year.** PolicyEngine holds every record to a 2024 threshold, while a 2022 record's market income keeps its nominal 2022 value. That accounts for 2.3 to 2.5 points of the thresholds step. Aging 2022 and 2023 ASEC records by Census's growth in 20th-percentile child resources (a real national simulation on the default file) lowers the national 2025 rate from 17.17 to 16.29, the mean gap from 3.24 to 2.45, and the mean absolute gap from 4.80 to 4.05, with 33 jurisdictions outside the margin rather than 38. `outputs/cf_state.csv` holds each state. -**Pooled records keep nominal income from their source year.** PolicyEngine holds every record to a 2024 threshold, while a 2022 record's market income keeps its nominal 2022 value. That accounts for 2.3 to 2.5 points of the thresholds step. Aging 2022 and 2023 ASEC records by Census's growth in 20th-percentile child resources (a real national simulation on the default file) lowers the national 2025 rate from 17.17 to 16.29, the mean gap from 3.24 to 2.45, and the mean absolute gap from 4.80 to 4.05, with 33 states outside the margin rather than 38. `outputs/cf_state.csv` holds each state. +**The model overshoots from 2024 to 2025.** PolicyEngine rises 1.48 points while Census holds at 13.4. Reference thresholds match Census for 2025, and Census's 2024 thresholds move PolicyEngine's 2024 rate only from 15.69 to 15.72, so the difference sits in resources. Between the 10th and 30th percentiles, child SPM resources grew 3.6% to 5.7% in Census's data, against 1.6% to 2.8% on the default file and 2.5% to 3.2% on dense (`outputs/resource_growth.csv`). -**The model overshoots from 2024 to 2025.** PolicyEngine rises 1.48 points while Census holds at 13.4. Reference thresholds match Census exactly for 2025, so the difference sits in resources. Census's child resources grew 4.2% to 6.1% across the 10th to 50th percentiles, and PolicyEngine's employment income grew 3.97%. The adult SSN requirement in `gov.irs.credits.ctc.adult_ssn_requirement_applies` starts in 2025 and removes refundable CTC from units holding 2.48% of child weight; 83% of that weight has no adult with an eligible SSN card. It explains only 11% of the movement into poverty. +The CTC's adult SSN requirement explains little of this. `gov.irs.credits.ctc.adult_ssn_requirement_applies` starts in 2025. Units whose refundable CTC falls to zero that year hold 2.48% of child weight, and 83% of that weight has no adult in the SPM unit with an eligible SSN card. Those units hold 11% of the child weight moving into poverty, so the rule can account for at most that share through this channel. **Partnership and S-corp income stays out of SPM resources** (PolicyEngine/policyengine-us#9919). Adding it before tax lowers the 2024 rate from 16.62 to 15.29 on the dense file, all of it on PUF records. This line is arithmetic on simulation output. @@ -92,16 +144,18 @@ Benefit administrative targets pull poverty up, tax targets pull it down, and no ## The rent bug -`impute_us_pre_subsidy_rent` draws rent for households in table order, and `person_rent[head_mask] = predicted` writes those draws to heads in person order. The two orders agree for 9.15% of households. +`impute_us_pre_subsidy_rent` draws rent for households in table order, and `person_rent[head_mask] = predicted` writes those draws to heads in person order. The two orders agree for 9.15% of households. On the dense file, 46.4% of records hold the wrong rent, and 89% of records that should carry rent do not hold their own. | Pairing, 168,852 base households | Rented | Owned with mortgage | None | | --- | --- | --- | --- | | Rent on the household's own head, as published | 40.8% | 27.1% | 25.1% | | The n-th head's rent with the n-th household's tenure | 100% | 0% | 0% | -The second row is the test: it restores the link exactly, so the draws are right and only their destination is wrong. The default, dense and ACS-local files all carry the same draws. ACS rows inherit the problem through the gap fill: 39.6% of ACS renters carry rent, and so do 30% of ACS owners, even though the file stores native `RNTP` for every renter. The build's `positive_rent_nonrenter` receipt recorded 30,838 such heads, and `test_signal_gate_preserves_archived_qrf_rent_outside_renter_household` allowed them. +The second row is the test: it restores the link exactly, so the draws are right and only their destination is wrong. The default and dense files carry the same draws, and so do ACS-local donors. -The harm reaches poverty through `hud_gross_rent`. `hud_hap` takes the lesser of the maximum subsidy and gross rent less tenant payment, so a Census recipient with no rent gets nothing. On the default file, 74% of Census housing recipients among child units on ASEC rows get no model subsidy. Moving rent back onto the right households, with published weights held fixed, gives: +ACS rows inherit the problem. `build_optional_acs_multispine` passes the base to `transfer_acs_inputs` as its donor, and `pre_subsidy_rent` sits among the transfer targets, so ACS rows learned from misplaced rent: 39.6% of ACS renters carry rent, and so do 30% of ACS owners. The file stores native `RNTP` for all 336,110 renter households, and `acs_transfer.py` leaves it out of this path because contract rent differs from pre-subsidy rent. The build's `positive_rent_nonrenter` receipt recorded 30,838 such heads in `experiments/us-asec-2025-source/receipts/pipeline_smoke_2023_2025.json`, and `test_signal_gate_preserves_archived_qrf_rent_outside_renter_household` allowed them. + +The harm reaches poverty through `hud_gross_rent`. `hud_hap` takes the lesser of the maximum subsidy and gross rent less tenant payment, so a recipient whose rent and utility allowance fall short of the tenant payment gets nothing. On the default file, 74% of Census housing recipients among child units on ASEC rows get no model subsidy. Moving rent back onto the right households, with published weights held fixed, gives: | All 51 states | Dense, as published | Dense, corrected | Default, as published | Default, corrected | | --- | --- | --- | --- | --- | @@ -115,62 +169,79 @@ The harm reaches poverty through `hud_gross_rent`. `hud_hap` takes the lesser of | Mean absolute gap | 4.33 | 4.13 | 4.80 | 4.71 | | Outside Census's margin, of 51 | 38 | 36 | 38 | 34 | -The state step runs from -2.93 to +0.40 on the dense file. The fix explains a real part of the housing shortfall and about a sixth of the dense file's mean gap. It does not explain the SNAP miss at initial weights. +The fix closes 0.56 of the dense file's 3.62 mean gap and 0.21 of the default file's 3.24. State steps run from -2.93 to +0.40 on dense and from -5.38 to +3.02 on default. It leaves the SNAP miss at initial weights in place. + +On the ACS-local file, the same exercise moves the mean gap from +0.88 to +0.49, the mean absolute gap from 3.18 to 3.21, and the correlation from .54 to .51, with 29 jurisdictions outside Census's margin both ways. ACS rows go from a mean absolute gap of 2.46 to 2.53. So rent matters here for getting housing right, not for state fit at published weights. -A second cause sits on the PUF half. `impute_us_housing_assistance_to_puf_support` thresholds a person-level QRF at 0.5, which leaves 2.05% of PUF-half units as recipients against 3.73% on the ASEC half (2.82% against 7.75% on low-income child units), and only 9.6% of ASEC recipients keep the flag on their PUF clone. +A separate gap sits on the PUF half. `impute_us_housing_assistance_to_puf_support` replaces each PUF-half person's receipt with a QRF draw, and the unit takes its first person's draw. Unweighted, 2.05% of PUF-half units receive assistance against 3.73% on the ASEC half (2.82% against 7.75% among low-income child units), and 9.6% of ASEC recipients keep the flag on their PUF clone. ## What this means for the Child Poverty Impact Dashboard The dashboard reads ACS-local slices, not the default file. Master serves Build P's August 19 slices under policyengine-us 1.825.2. PolicyEngine/child-poverty-impact-dashboard#127, still a draft, moves it to Build O 10/17 through `policyengine.py` 6.11.1. -At 2.90.2, the 10/17 file gives a mean gap of +0.88, a mean absolute gap of 3.18, and 29 of 51 jurisdictions outside Census's margin. Its median state standard error of 2.86 means a 90% interval of about ±4.7 points on a state baseline. Census's own error would give a mean absolute gap of about 1.05, so about two points of the 3.18 come from the model. +**Baselines.** At 2.90.2, the 10/17 file gives a mean gap of +0.88, a mean absolute gap of 3.18, and 29 of 51 jurisdictions outside Census's margin. Its median state standard error of 2.98 means about ±4.9 points at 90%. A common shift plus model and Census noise gives a mean absolute gap of 2.79 (central 95% 2.22 to 3.43), so noise can carry most of the 3.18. The dashboard's stored audits show Build P fitting better than Build O at the same model: at 1.825.2 the mean absolute gap reads 2.78 against 3.13, with 23 jurisdictions outside the margin against 31. So PR #127's move costs some baseline fit. -State reform effects hold up better, because a reform changes the same households in both runs. The 2021 CTC reform lowers the median state's 2025 child rate 2.97 points, with a median standard error of 1.28, or about ±2.1 at 90%. The largest effects carry the largest errors: West Virginia at -11.85 (4.58), Missouri at -8.96 (3.72) and DC at -8.65 (3.52). +**Reform effects.** The 2021 CTC reform lowers the median state's 2025 child rate 2.97 points, with a median standard error of 1.29, or about ±2.1 at 90%. That error runs smaller in points than a baseline's, and larger for its size: the median ratio of standard error to effect reads .45, against .24 for baselines. The largest effects carry the largest errors: West Virginia at -11.85 (4.61), Missouri at -8.96 (3.70) and DC at -8.65 (4.34). -The dashboard's stored audits give a second measure of the same size. Between Build P and Build O, a state's 2025 effect moves 1.16 points on average with a standard deviation of 1.63, which implies 1.15 per build. Single states swing further at 2024: Arizona from -10.3 to -3.8, DC from -1.3 to -8.1, North Carolina from -2.9 to -6.3. Those builds also differ in model version, so this measure runs high if anything. +The stored audits give a second reading. At 1.825.2, Build P and Build O differ on a state's 2025 effect by 0.55 on average (standard deviation 0.83, or 0.59 per build), about half the clustered error. Those builds share source records, so that comparison understates sampling noise. Model version moves effects further: the same 10/17 file at 1.825.2 and 2.30.1 differs by 1.11 on average (standard deviation 1.72), and Arizona goes from -11.92 to -6.37. -So state baselines and state reform effects on the dashboard both need a stated uncertainty, and neither should read as a point estimate to the tenth. The legacy `backend/` and `cpid_calc/` paths read `enhanced_cps_2024`, and PR #127 says the frontend no longer calls them. +So state baselines and state reform effects on the dashboard both need a stated uncertainty, and neither should read as a point estimate to the tenth. Every dashboard file carries the rent bug. The legacy `backend/` and `cpid_calc/` paths read `enhanced_cps_2024`, and PR #127 says the frontend no longer calls them. ## What would fix it -In order of evidence and reach: - -1. **Put rent back and rebuild.** PolicyEngine/microcosm#1444 fixes the assignment. After a rebuild, tighten `us_housing_inputs_signal_gate` so positive rent outside renter households fails the build, and re-run this note. Calibration then fits to corrected housing, which the fixed-weight runs here cannot show. -2. **Give ACS records more of the state mass.** `--acs-share` raises the weight on real state samples. On all 51 states, against the release-like solve: - - | Solve | Mean absolute gap | Correlation | Median state SE | Median reform SE | - | --- | --- | --- | --- | --- | - | Share 0.5, as released | 2.79 | .56 | 2.62 | 1.29 | - | Share 0.7, λ = .03 | 2.40 | .64 | 1.82 | 0.88 | - | Share 0.9, λ = .03 | 2.16 | .75 | 1.06 | 0.56 | - | Share 0.964, λ = .03 | 2.14 | .77 | 0.87 | 0.47 | - - The #1078 sweep puts the cost at about 40% more held-out target error at share 0.9, mostly on SOI cells, so the share needs a methodology decision. It more than halves the error on a state's reform effect. -3. **Age pooled incomes** (microcosm#944). A crude single-factor run removes 0.88 points nationally and 0.75 from the mean absolute gap. A real fix ages each income source and draws the pool from 2023 to 2025 to match Table 18. -4. **Close benefit receipt before calibration.** SNAP, Medicaid, EITC and ACA start 26% to 51% below target on the dense file, and calibration closes those gaps by moving weight. Better take-up and receipt inputs should reduce the tilt. Rent does not close the SNAP gap. -5. **Keep measured housing receipt on the PUF half.** Replace the 0.5 threshold in `impute_us_housing_assistance_to_puf_support`, or carry the ASEC flag to its clone. -6. **Reconcile 2025 resources near the line.** The model's child rate rises 1.48 points while Census's holds. Census's child resources grew 4.2% to 6.1% and PolicyEngine's employment income grew 3.97%, so start with the uprating series for low earners. -7. **Count partnership and S-corp income** (PolicyEngine/policyengine-us#9919; PolicyEngine/policyengine-us#10573 partly addresses it). -8. **Report state child rates as a standing holdout** with replicate standard errors, in every release's receipts. Poverty stays a comparison and never a target. +| Change | Measured on | Mean absolute gap | Mean gap | +| --- | --- | --- | --- | +| No calibration (diagnostic only) | Dense | 4.33 to 1.78 | +3.62 to 0.00 | +| Rent fix, weights fixed | Dense | 4.33 to 4.13 | +3.62 to +3.06 | +| Rent fix, weights fixed | Default | 4.80 to 4.71 | +3.24 to +3.03 | +| Rent fix, weights fixed | ACS-local | 3.18 to 3.21 | +0.88 to +0.49 | +| ACS share 0.5 to 0.9, λ = .03 | ACS-local solves | 2.79 to 2.16 | +0.54 to -0.45 | +| Single-factor income aging | Default | 4.80 to 4.05 | +3.24 to +2.45 | + +The order below puts prerequisites first and then follows the measured reach: + +1. **Put rent back and rebuild.** PolicyEngine/microcosm#1444 carries the assignment fix. It comes first because it corrects a bug and every later step should run on the rebuilt base, not because it closes the largest gap. After a rebuild, tighten `us_housing_inputs_signal_gate` so positive rent outside renter households fails the build, confirm ACS rows pick up the corrected link through the donor transfer, and re-run this note. Calibration then fits to corrected housing, which the fixed-weight runs here cannot show. +2. **Limit what calibration does to states.** Two levers apply: + + - Give ACS records more of the state mass. `--acs-share` raises the weight on real state samples. On all 51 states: + + | Solve | Mean absolute gap | Correlation | Outside margin | Median state SE | Median reform SE | + | --- | --- | --- | --- | --- | --- | + | Share 0.5, release-like | 2.79 | .56 | 27 | 2.82 | 1.30 | + | Share 0.7, λ = .03 | 2.40 | .64 | 23 | 1.86 | 0.88 | + | Share 0.9, λ = .03 | 2.16 | .75 | 22 | 1.09 | 0.56 | + | Share 0.964, λ = .03 | 2.14 | .77 | 22 | 0.87 | 0.47 | + + These standard errors fall, and bias remains: at share 0.9, DC reads 24.47 against Census's 20.3. PolicyEngine/microcosm#1078 puts the cost at 36% and 43% more held-out target error on its two folds at share 0.9 with no penalty, mostly on SOI cells, so the share needs a methodology decision. + - Test an anchor on the dense pool. Initial weights there carry a mean absolute gap of 1.78, against 4.21 on the default file, so an anchor could keep more of that pattern. This needs a solve; we have not run one. +3. **Close benefit receipt before calibration.** Better take-up and receipt inputs should reduce the tilt, because calibration then has less to do. Rent does not close the SNAP gap. +4. **Age pooled incomes** (microcosm#944). A crude single-factor run removes 0.88 points nationally. A real fix ages each income source and draws the pool from 2023 to 2025 to match Table 18. +5. **Close the gap between ASEC and PUF rows.** They start 5 points apart at initial weights, and the dense pool's zero depends on that offset. Carrying the ASEC housing flag to its PUF clone helps with one piece. Partnership and S-corp income (PolicyEngine/policyengine-us#9919; PolicyEngine/policyengine-us#10573 partly addresses it) would widen the gap, because all of it lands on PUF rows. +6. **Reconcile 2025 resources near the line.** Compare PolicyEngine's and Census's child resource growth by income source, starting with the uprating series for low earners. +7. **Check the states that miss everywhere.** Delaware, Louisiana and Mississippi point past sampling and calibration, so start with state tax and benefit rules, and with Census's state estimates. +8. **Report state child rates as a standing holdout** with standard errors, in every release's receipts. Poverty stays a comparison and never a target. ## Limits - Corrected-rent runs keep the published weights. Calibration fit those weights to outcomes that used misplaced rent, so a rebuild can move results further. -- The #1078 solves come from the 2026-09-23 Build O checkpoint. We applied them to outcomes from the 10/17 file, which shares its household ids, and that mismatch alone moves the mean absolute gap: 2.79 for the release-like solve against 3.18 for the 10/17 weights. -- The aged run scales 42 income columns on 2022 and 2023 ASEC records by a single child-resource factor. PUF records stay as they are, and a real fix would age each income source separately. -- ACS-local cuts add `spm_unit_spm_universe_status` as `INCLUDED` everywhere, because the release predates that input. The dashboard's audit found masking moves child rates by a negligible amount. +- The ACS-local corrected-rent run gives donors their base record's rent and gives ACS renter heads twelve times `RNTP`. Contract rent stands in for pre-subsidy rent there, and a rebuild would transfer rent from corrected donors instead. +- The #1078 solves come from the 2026-09-23 Build O checkpoint. We applied them to outcomes from the 10/17 file, which shares its household ids, and that mismatch alone moves the mean absolute gap: 2.79 for the release-like solve against 3.18 for the 10/17 weights. The cost figures come from share 0.9 with no penalty, not from the λ = .03 rows. +- The aged run scales 42 income columns on 2022 and 2023 ASEC records by a single child-resource factor. PUF records stay as they are, the weights stay fit to unaged income, and it tests 0.88 of the 2.3 to 2.5 points the Shapley assigns. +- policyengine-us 2.90.2 has no `spm_unit_spm_universe_status`, so it ignores that column and these runs measure every SPM unit, group quarters included. That choice matters at state level: PR #127's comparison of the August 19 release moves from -15.9% with all SPM units to -18.2% with group quarters excluded. - The ablations ran on Build P, not the dense file. +- Initial weights miss the administrative targets, so the initial-weight columns diagnose where error enters. They do not describe a usable file. - We did not verify why Census records less SNAP than administrative totals imply. ## Reproduction -Scripts sit in `scripts/` and write beside themselves under `run/` and `asec/`. `outputs/` holds the tables behind this note, and `receipts.json` pins the inputs. - -1. `extract_state.py`, `assemble.py`, `cutrun.py`, `assemble_dense.py`: state cuts of each file. -2. `noise.py`, `vardec.py`, `rep_boot.py`, `rep_eval.py`, `dl.py`, `dense_fit.py`: noise. -3. `decomp.py`, `decomp2.py`, `steps.py`, `year.py`, `paired.py`, `thr.py`: decomposition. -4. `ablate_eval.py`, `ablate_noise.py`, `fam.py`, `chi_solve.py`, `chi_eval.py`, `dmiss.py`: calibration. -5. `national_cf.py`, `cf_eval.py`, `ctc_ssn.py`, `part.py`: aged incomes, the CTC reform and partnership income. -6. `rent2.py` to `rent5.py`, `rentfix.py`, `dense_rent.py`, `sparse_rent.py`, `runcuts.py`, `rent_eval.py`, `house.py`, `house_sim.py`, `puf_house.py`: rent and housing. -7. `acs_hh.py`, `acs_more.sh`, `acs_one.py`, `acs_eval.py`, `acs_rent_run.py`, `acs_stored.py`, `kish.py`: the ACS-local path. -8. `dash_swing.py`: the dashboard's stored audits. +Scripts sit in `scripts/` and write beside themselves under `run/` and `asec/`. `outputs/` holds the tables behind this note, `outputs/logs/` holds the printed output of scripts that write no table, and `receipts.json` pins the inputs, including paths outside this repository. + +1. `dl.py`, `extract_state.py`, `assemble.py`, `cutrun.py`, `assemble_dense.py`: downloads and state cuts of each file. +2. `noise.py`, `vardec.py`, `rep_boot.py`, `rep_eval.py`, `noise_ci.py`, `dense_fit.py`, `kish.py`: noise. +3. `initial_fit.py`: initial and published weights, by channel. +4. `decomp.py`, `decomp2.py`, `steps.py`, `year.py`, `paired.py`, `thr.py`, `resource_growth.py`: decomposition. +5. `ablate_eval.py`, `ablate_noise.py`, `fam.py`, `chi_solve.py`, `chi_eval.py`, `dmiss.py`: calibration. +6. `national_cf.py`, `cf_eval.py`, `ctc_ssn.py`, `part.py`: aged incomes, the CTC reform and partnership income. +7. `rent2.py` to `rent5.py`, `rentfix.py`, `dense_rent.py`, `sparse_rent.py`, `runcuts.py`, `rent_eval.py`, `house.py`, `house_sim.py`, `puf_house.py`: rent and housing. +8. `acs_hh.py`, `acs_more.sh`, `acs_one.py`, `acs_eval.py`, `acs_rent_run.py`, `acs_stored.py`: the ACS-local path. +9. `dash_swing.py`: the dashboard's stored audits. diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval.csv index 59e021a220..45270d4260 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval.csv +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval.csv @@ -1,52 +1,52 @@ state,census,moe,acs_local,se,kish_src,acs_share,acs_only,acs_only_se,donor_only,donor_only_se,delta,delta_se,stored_2301,gap -AK,10.5,2.1,12.280018990905361,3.2515087080493936,99.51358381248738,0.41906561091719086,14.877056011665996,3.8674701569110397,10.406607937726202,4.8421060477273725,-1.7128711765052902,1.255587507448183,12.269848823547363,1.7800189909053614 -AL,15.5,2.4,15.097029105403672,2.9718369630821964,133.44722639909833,0.3080806998135229,15.013489562072616,1.3201238751499236,15.134225525513061,4.2590911210429265,-3.7065665355345523,1.8864143360004062,14.110982894897461,-0.4029708945963275 -AR,13.3,2.7,6.865179131445666,1.4277517420367007,138.2913051495604,0.3446122143394325,10.614289507353144,1.4069716796086178,4.893843600463475,1.9922624640006978,-1.9729223774049145,0.847577176741741,6.774383068084717,-6.434820868554334 -AZ,13.3,2.3,17.2274257709247,3.9824119226674144,95.44001901549503,0.32823023017732,15.422829288753853,1.1361190125873954,18.10916106972576,5.904781891308697,-6.409766223213803,3.185852094349919,17.127504348754883,3.9274257709246996 -CA,17.9,1.0,19.81299229330585,1.9180899658407171,422.7751271596843,0.2837607789085938,17.18181747772617,0.44765749055376786,20.855415261955702,2.675217434299166,-4.3311474346083285,1.0100990700622332,20.379192352294922,1.9129922933058516 -CO,7.7,1.8,9.444477925729958,2.7007539129759284,84.16336691356992,0.3167165607859737,8.126498611394895,0.714650612194822,10.055389666988338,3.955798901807002,-0.7445325358294997,0.24294375820384187,9.367508888244629,1.7444779257299574 -CT,12.8,3.2,12.639491386601781,2.9545836509146484,109.13395509892804,0.35243678570098613,14.997664995927149,1.6303966945262747,11.356053555910302,4.46854567162926,-2.0892910893802488,0.6372033696864737,12.430046081542969,-0.16050861339821942 -DC,20.3,3.7,21.17762088880096,4.4701322503635375,61.08743705414466,0.4034754527762713,22.09693661968139,5.492706307713332,20.5558169203178,6.4729839790652735,-8.648974183112678,3.516566041632336,20.46465492248535,0.8776208888009585 -DE,8.7,2.6,22.214556265883786,5.602961251401652,64.69160861915779,0.30803265271757674,14.964556458685824,2.865571367630918,25.4419291781805,7.9508134389185345,-2.9691945909874917,1.6724748973047714,22.213157653808594,13.514556265883787 -FL,18.4,1.8,22.716581875939795,3.1759971844812482,188.57166282880516,0.31737704011827417,13.309764442599114,0.5823985920811567,27.090164438184587,4.641358293823405,-3.529584484380603,1.1074842163816723,22.613277435302734,4.3165818759397965 -GA,15.1,2.2,17.43337014267132,2.9220203367320376,136.74989678955393,0.3146201235481187,12.365941406152075,0.7861697616877288,19.75954736195083,4.2966217600223375,-3.4609575448229744,1.3240145036166515,17.39934539794922,2.3333701426713187 -HI,13.0,2.6,5.857583818085909,1.9924154571434063,121.88136839074532,0.37760164062764257,5.072886842676986,0.8403045589641391,6.333650087940408,3.1646961400793523,-1.5974204310103088,0.7037351939528196,5.165446758270264,-7.142416181914091 -IA,8.2,1.9,5.3913265527436955,1.7485583365884696,90.868623455542,0.3464490034124007,5.438172692878637,0.8378005928894581,5.366493297728849,2.6407115517483755,-0.7506708887596472,0.20370448393538723,5.389122486114502,-2.8086734472563037 -ID,6.5,1.3,6.8832216559761825,1.6198373655121179,110.00111474292255,0.33214753479536296,9.519825758051493,1.536874895172609,5.571941697658865,2.2714500189212745,-1.7885081332636041,0.9779700333034664,6.954473495483398,0.3832216559761825 -IL,12.4,1.6,13.732748462967361,3.188524839830753,99.64157317458911,0.2965816587151526,9.11322317159108,0.7046820523010107,15.680474862723223,4.555283003881556,-4.427158137239671,1.8697292092442803,18.092145919799805,1.332748462967361 -IN,10.6,2.2,9.223448046626508,2.1304367963241537,143.41747358369312,0.35487947569914285,9.880223739963972,0.8067320680282937,8.862157086373566,3.271524311124084,-2.170078429848301,1.1944609728937645,9.129535675048828,-1.3765519533734913 -KS,9.7,2.5,11.586384567718781,4.682058023618752,100.24803097551683,0.3334748697513686,8.619343508755703,1.157438878904149,13.070850172662428,6.938308560293711,-5.5529596017194836,4.510245888964424,10.451759338378906,1.8863845677187818 -KY,13.3,2.9,9.689846323973743,2.7045401368097894,86.7299805225745,0.3957257386758641,7.453986059465105,0.6847411421861506,11.154061352444216,4.496155378456515,-2.5243584152065885,1.2141501106276622,9.635833740234375,-3.6101536760262576 -LA,20.7,3.0,11.730880540483419,2.1602498486130592,135.98266446398628,0.3111933330719865,14.302598248238658,1.3818096828258386,10.569014020279953,3.0474358140102185,-1.6161803656670206,0.35380373025382233,11.565276145935059,-8.96911945951658 -MA,12.8,2.0,21.445487004357428,3.7873564269488145,142.59135649775865,0.32989952283900936,15.29427219951415,1.1885725905269742,24.473813200445946,5.584053451433311,-3.438875768601351,1.6580263748064328,20.928058624267578,8.645487004357427 -MD,10.7,2.5,17.594849581875806,4.2786987984134255,68.35673639862648,0.32215088761216787,11.384224840576135,1.1754050446097233,20.546477365215054,6.361925729175259,-3.413791655908443,2.1376792390671855,17.483667373657227,6.894849581875807 -ME,6.5,2.3,7.341376743429005,3.004786485774932,41.96489704646121,0.3333179546821343,4.66433020068298,1.0427753176758428,8.679807385867475,4.547443563654665,-2.6266704709698754,1.5680031208324663,7.270956039428711,0.8413767434290049 -MI,10.3,1.9,9.518321082342105,2.688194473081669,107.99600603956145,0.3203877234279062,6.846850836223199,0.5731837064265984,10.777724862798427,3.9594785796878003,-3.506682134099301,1.6387990819136933,9.475631713867188,-0.7816789176578958 -MN,6.9,1.9,5.148035849588164,1.4201569766760287,73.68080788806905,0.34048793553809076,5.546916997173596,0.7187904123890178,4.942104486411001,2.112153494310965,-0.9536367002109238,0.5389159550862128,5.14799690246582,-1.751964150411836 -MO,9.7,2.3,16.712115012858845,4.128411239978734,83.50267716273419,0.33222332397483334,10.966752143597944,0.998952501067569,19.57047113459243,6.180935610841163,-8.959376509915272,3.71805967482898,16.677257537841797,7.012115012858846 -MS,19.1,2.6,13.834987455238846,2.8630327922771452,145.0004798994927,0.34971731263512185,15.918161912032344,1.681247230773782,12.714671342054093,4.3159608466529615,-3.394959085138506,1.5588895786278296,12.927408218383789,-5.265012544761156 -MT,9.3,2.3,4.762273156353108,1.2631907201580235,77.32609423665268,0.32933782545962187,10.54391779607155,2.746637529267138,1.923117549388858,1.0592414015685152,-0.6722671920587023,0.23095341412744352,4.747105598449707,-4.537726843646893 -NC,14.4,2.2,11.995112092574214,2.436251526440106,148.92635928209822,0.3136719210648219,10.355041646555073,0.7418068425966107,12.744672052706704,3.5445117002334965,-5.352585782229246,1.8981625872267058,11.701009750366211,-2.4048879074257865 -ND,10.3,2.1,10.77332600550937,3.442629648631427,71.26795320565108,0.33186741866405767,5.077876834056866,1.4567092582961796,13.602306461578337,5.14314936813182,-1.2256245427537,0.5680947013226061,10.772493362426758,0.4733260055093691 -NE,7.1,1.9,9.449340085155248,4.204702751257847,89.81299216631996,0.3063484897355067,6.616695179849248,1.4327432632288672,10.70036668259837,5.993988593123991,-2.773364941208342,2.04436491124329,9.424169540405273,2.349340085155248 -NH,7.5,2.4,7.341353766570573,2.4133327789181878,78.1245591530323,0.3519654122706294,5.426856408706541,1.0410016798293962,8.381169950167626,3.710256303932428,-1.7440078720187737,1.1466799134944343,7.5636773109436035,-0.15864623342942696 -NJ,13.3,1.9,9.557043381747203,1.897321401265812,133.2332237876243,0.33625390236036024,11.961959528060447,0.7749380283485001,8.33871239355312,2.802524845161197,-1.8300351640183579,0.523337571902647,9.367637634277344,-3.742956618252798 -NM,10.9,2.1,14.01167154192929,3.6218680380495374,101.89929991180674,0.3715312357460946,14.845410948645391,2.5727440555716186,13.518790670697477,5.566234603240514,-3.660158217562636,1.131823165638872,14.007346153259277,3.11167154192929 -NV,15.0,2.5,13.468276340728854,2.8448332242995376,94.78167841738083,0.3410867850150841,15.56302854546373,1.4699101327703195,12.383926719766048,4.222778531117257,-1.7376207562912138,0.627204265198586,13.599339485168457,-1.5317236592711456 -NY,16.2,1.9,16.438761395241823,2.343798019106511,206.3385164184602,0.3282953526362707,14.640476182044296,0.8125413850408143,17.31767250673155,3.479738382344976,-3.1739864748408753,0.7858351554970053,16.431594848632812,0.2387613952418235 -OH,12.3,2.1,9.090849449499077,1.8148204442785203,150.5748237609115,0.3594694685405358,10.263074274729792,0.707324640545021,8.43299004352262,2.793027179390088,-3.8587554469843512,1.4557292641982924,9.078166961669922,-3.209150550500924 -OK,9.9,2.0,13.83283197089369,4.084103267465708,90.37723579179182,0.30082612879830045,7.473084378961515,0.6936697180268595,16.56917314011818,5.806288395797654,-2.8990779051992153,1.2847313395227358,13.372641563415527,3.932831970893689 -OR,11.0,2.4,14.960178635932131,3.8329077560982148,90.57209608006168,0.3868748897063032,9.96236498527892,0.9391047234304888,18.113741542437342,6.235615770472673,-2.1027433074865645,1.4104331982528935,14.899346351623535,3.960178635932131 -PA,11.1,2.0,13.904691968664487,2.821035187081575,173.62005580154482,0.346456113240414,11.128527656204925,0.9551151036763976,15.376389764171986,4.281592179548099,-2.1674883896829673,0.7008161263853433,13.813882827758789,2.8046919686644873 -RI,8.4,2.3,13.60351363660979,3.7744287273928645,58.0512003578863,0.2638155685183552,12.630687973641486,2.1865267072560863,13.952130836825097,5.084017230649946,-7.082426369729525,2.9604813725566546,10.114660263061523,5.20351363660979 -SC,11.1,2.1,10.810091607299103,2.213361527230768,126.28476681888931,0.3736839049269087,12.129888503293133,1.220142342915903,10.022650789978407,3.4424994407736964,-4.377230751356924,1.5151733806703083,9.70772647857666,-0.2899083927008963 -SD,7.8,2.2,6.7334030791646615,2.32364806600712,56.458835601021825,0.26912123840231045,6.7068360049000635,1.5212604403340164,6.743185500412182,3.1335961856246137,-3.8757962438048383,1.8512021312782982,6.721802234649658,-1.0665969208353383 -TN,10.0,1.7,16.56342989643172,2.9691597078939376,108.01722037300557,0.3282847810394231,18.32285828603685,1.3583296773440554,15.703551264338433,4.348695188218484,-5.4719950504883315,2.092924270925401,15.603744506835938,6.563429896431721 -TX,16.1,1.3,14.56129472980773,1.6461007405757648,344.2831892907306,0.3083157384243811,15.448597880836138,0.5091761389700658,14.165782584436048,2.366103530975708,-3.2431418088928776,0.9339374602177575,14.510196685791016,-1.5387052701922705 -UT,7.3,1.6,8.396840398155128,2.103323261796674,108.1806419862176,0.29356651846541537,5.3493391276149715,0.7200935582967108,9.66326443013613,2.997569027198019,-0.9210572651019494,0.39799265987206806,8.38582706451416,1.0968403981551278 -VA,12.1,2.4,15.480344613972704,3.568543765129185,144.61271966502778,0.3120242155444285,10.43654201641124,0.7417936207780743,17.76790848529483,5.136568707470384,-4.143535467007477,2.4537166573058573,15.400092124938965,3.3803446139727047 -VT,8.3,2.5,10.308498569173608,4.077020640484767,79.55381568655247,0.3813777601649377,5.468605036993444,1.7524339067205175,13.292270628890982,6.444382063588592,-0.17161126906749033,0.08026389915938878,10.242634773254395,2.0084985691736073 -WA,9.3,1.9,14.191340763191679,3.4701090743188856,115.52322401443288,0.3410985566238413,11.36195810226469,1.0626012254042743,15.656048955108263,5.234133950704177,-2.8903319465027324,1.4112503830036995,14.172506332397461,4.891340763191678 -WI,7.3,1.7,5.888274576437183,1.6534623534195003,88.35058103331907,0.33178902497349727,7.594207048513189,0.9840981041263285,5.041222234086362,2.3991460653326406,-3.2429978446197953,1.3266675291907528,5.814634799957275,-1.4117254235628165 -WV,11.3,2.4,16.406165852468614,4.5967941361012805,88.00715193392061,0.3651987935901132,11.229932548243433,1.9972605412849338,19.384033788062002,7.091073090936904,-11.847910332700181,4.584928140436288,16.38048553466797,5.106165852468614 -WY,6.5,1.4,7.401438055757387,2.4969548232434695,80.91998182442593,0.3319623870118944,5.339602776175029,1.469142581544115,8.426008750173787,3.6864669776928496,-1.6214124288534664,0.9933258041620445,7.408247947692871,0.9014380557573869 +AK,10.5,2.1,12.280018990905361,3.7429945829727433,81.68256219816811,0.41906561091719086,14.877056011665996,3.8674701569110397,10.406607937726202,5.820215767713671,-1.7128711765052902,1.2581818899101276,12.269848823547363,1.7800189909053614 +AL,15.5,2.4,15.097029105403672,3.714754421094721,114.89369341824126,0.3080806998135229,15.013489562072616,1.3201238751499236,15.134225525513061,5.34267960480369,-3.7065665355345523,1.8243214373931491,14.110982894897461,-0.4029708945963275 +AR,13.3,2.7,6.865179131445666,1.5082223057994428,115.11649934358303,0.3446122143394325,10.614289507353144,1.4069716796086178,4.893843600463475,2.1126039715893956,-1.9729223774049145,0.8486357725649586,6.774383068084717,-6.434820868554334 +AZ,13.3,2.3,17.2274257709247,4.036185043556269,74.97248693960735,0.32823023017732,15.422829288753853,1.1361190125873954,18.10916106972576,5.964356353114199,-6.409766223213803,3.1723381851552177,17.127504348754883,3.9274257709246996 +CA,17.9,1.0,19.81299229330585,1.9590157540054765,385.6580886961881,0.2837607789085938,17.18181747772617,0.44765749055376786,20.855415261955702,2.732515975286605,-4.3311474346083285,1.008919083209612,20.379192352294922,1.9129922933058516 +CO,7.7,1.8,9.444477925729958,2.7918367533710695,65.42288079603081,0.3167165607859737,8.126498611394895,0.714650612194822,10.055389666988338,4.092871284920891,-0.7445325358294997,0.2448312330320677,9.367508888244629,1.7444779257299574 +CT,12.8,3.2,12.639491386601781,2.976592910506625,100.20771420344856,0.35243678570098613,14.997664995927149,1.6303966945262747,11.356053555910302,4.498691455689171,-2.0892910893802488,0.6399943235425594,12.430046081542969,-0.16050861339821942 +DC,20.3,3.7,21.17762088880096,5.263356667774975,47.067422820631876,0.4034754527762713,22.09693661968139,5.492706307713332,20.5558169203178,7.985315315053287,-8.648974183112678,4.339825412853922,20.46465492248535,0.8776208888009585 +DE,8.7,2.6,22.214556265883786,6.8988397316513765,50.95816913382481,0.30803265271757674,14.964556458685824,2.865571367630918,25.4419291781805,9.750038330015922,-2.9691945909874917,1.6834766244883417,22.213157653808594,13.514556265883787 +FL,18.4,1.8,22.716581875939795,3.450752003739791,135.20425539702788,0.31737704011827417,13.309764442599114,0.5823985920811567,27.090164438184587,5.105259969012908,-3.529584484380603,1.1124732966522155,22.613277435302734,4.3165818759397965 +GA,15.1,2.2,17.43337014267132,2.957265204862554,121.17506625331394,0.3146201235481187,12.365941406152075,0.7861697616877288,19.75954736195083,4.3244730263696685,-3.4609575448229744,1.308112138441585,17.39934539794922,2.3333701426713187 +HI,13.0,2.6,5.857583818085909,1.9889760415112085,118.52750117470644,0.37760164062764257,5.072886842676986,0.8403045589641391,6.333650087940408,3.1596897479879456,-1.5974204310103088,0.7041621558092247,5.165446758270264,-7.142416181914091 +IA,8.2,1.9,5.3913265527436955,1.7684275375401726,74.5874438402306,0.3464490034124007,5.438172692878637,0.8378005928894581,5.366493297728849,2.6722934528230895,-0.7506708887596472,0.20700191879052138,5.389122486114502,-2.8086734472563037 +ID,6.5,1.3,6.8832216559761825,1.652010165863833,88.40879016819349,0.33214753479536296,9.519825758051493,1.536874895172609,5.571941697658865,2.305972755027926,-1.7885081332636041,0.9816030370166006,6.954473495483398,0.3832216559761825 +IL,12.4,1.6,13.732748462967361,3.3490960514359984,93.91544229009794,0.2965816587151526,9.11322317159108,0.7046820523010107,15.680474862723223,4.780003805114391,-4.427158137239671,2.0181302276137845,18.092145919799805,1.332748462967361 +IN,10.6,2.2,9.223448046626508,2.154468976525361,120.14005678566079,0.35487947569914285,9.880223739963972,0.8067320680282937,8.862157086373566,3.307091171465403,-2.170078429848301,1.19712258605729,9.129535675048828,-1.3765519533734913 +KS,9.7,2.5,11.586384567718781,4.696788420846965,87.66666433303108,0.3334748697513686,8.619343508755703,1.157438878904149,13.070850172662428,6.970213903172144,-5.5529596017194836,4.512273328741079,10.451759338378906,1.8863845677187818 +KY,13.3,2.9,9.689846323973743,2.9483317956973827,79.96088420874483,0.3957257386758641,7.453986059465105,0.6847411421861506,11.154061352444216,4.895395778032309,-2.5243584152065885,1.1998687175740188,9.635833740234375,-3.6101536760262576 +LA,20.7,3.0,11.730880540483419,2.2898751366337846,125.90331436963336,0.3111933330719865,14.302598248238658,1.3818096828258386,10.569014020279953,3.250604115565913,-1.6161803656670206,0.3522690221840859,11.565276145935059,-8.96911945951658 +MA,12.8,2.0,21.445487004357428,4.583912196904784,102.5908356155141,0.32989952283900936,15.29427219951415,1.1885725905269742,24.473813200445946,6.714566475961021,-3.438875768601351,1.6663025426707383,20.928058624267578,8.645487004357427 +MD,10.7,2.5,17.594849581875806,4.219468499518609,61.88106431360571,0.32215088761216787,11.384224840576135,1.1754050446097233,20.546477365215054,6.250901315946282,-3.413791655908443,2.109547341096508,17.483667373657227,6.894849581875807 +ME,6.5,2.3,7.341376743429005,3.023967157684075,38.50834478575946,0.3333179546821343,4.66433020068298,1.0427753176758428,8.679807385867475,4.590385414016676,-2.6266704709698754,1.5727339170258277,7.270956039428711,0.8413767434290049 +MI,10.3,1.9,9.518321082342105,2.7161230473664943,91.52893167205437,0.3203877234279062,6.846850836223199,0.5731837064265984,10.777724862798427,4.013116917840977,-3.506682134099301,1.645038820193314,9.475631713867188,-0.7816789176578958 +MN,6.9,1.9,5.148035849588164,1.6628146141935474,52.54399261696906,0.34048793553809076,5.546916997173596,0.7187904123890178,4.942104486411001,2.4835678014049756,-0.9536367002109238,0.5435043713052599,5.14799690246582,-1.751964150411836 +MO,9.7,2.3,16.712115012858845,3.972621557470334,64.86277090035392,0.33222332397483334,10.966752143597944,0.998952501067569,19.57047113459243,5.8720546862765035,-8.959376509915272,3.695574848895399,16.677257537841797,7.012115012858846 +MS,19.1,2.6,13.834987455238846,2.905001549407161,120.09612336052896,0.34971731263512185,15.918161912032344,1.681247230773782,12.714671342054093,4.372497038093584,-3.394959085138506,1.561580138172457,12.927408218383789,-5.265012544761156 +MT,9.3,2.3,4.762273156353108,1.3444919982053272,51.16610302382995,0.32933782545962187,10.54391779607155,2.746637529267138,1.923117549388858,1.1550900948238008,-0.6722671920587023,0.23826363983213664,4.747105598449707,-4.537726843646893 +NC,14.4,2.2,11.995112092574214,2.5342962431195852,123.95133566758639,0.3136719210648219,10.355041646555073,0.7418068425966107,12.744672052706704,3.6836405937100336,-5.352585782229246,1.8840570016606637,11.701009750366211,-2.4048879074257865 +ND,10.3,2.1,10.77332600550937,3.453878669263689,67.67907793489668,0.33186741866405767,5.077876834056866,1.4567092582961796,13.602306461578337,5.152722089063701,-1.2256245427537,0.5560134505331789,10.772493362426758,0.4733260055093691 +NE,7.1,1.9,9.449340085155248,4.219964071949956,79.73182955023789,0.3063484897355067,6.616695179849248,1.4327432632288672,10.70036668259837,6.024229239646368,-2.773364941208342,2.0470255282972625,9.424169540405273,2.349340085155248 +NH,7.5,2.4,7.341353766570573,3.0325569332572875,73.11100560293525,0.3519654122706294,5.426856408706541,1.0410016798293962,8.381169950167626,4.65576880909591,-1.7440078720187737,1.1478460185223052,7.5636773109436035,-0.15864623342942696 +NJ,13.3,1.9,9.557043381747203,1.9162624371592416,117.661096080773,0.33625390236036024,11.961959528060447,0.7749380283485001,8.33871239355312,2.8245204958290597,-1.8300351640183579,0.5244118016918777,9.367637634277344,-3.742956618252798 +NM,10.9,2.1,14.01167154192929,3.7994548780123316,90.34932912736528,0.3715312357460946,14.845410948645391,2.5727440555716186,13.518790670697477,5.861090460434442,-3.660158217562636,1.1255688052699755,14.007346153259277,3.11167154192929 +NV,15.0,2.5,13.468276340728854,3.0753002518416257,85.62569767303911,0.3410867850150841,15.56302854546373,1.4699101327703195,12.383926719766048,4.583093785704573,-1.7376207562912138,0.629917069409643,13.599339485168457,-1.5317236592711456 +NY,16.2,1.9,16.438761395241823,2.6761162776778433,174.20366464173924,0.3282953526362707,14.640476182044296,0.8125413850408143,17.31767250673155,3.9709324760353133,-3.1739864748408753,0.8278323796866007,16.431594848632812,0.2387613952418235 +OH,12.3,2.1,9.090849449499077,1.8533750618063252,136.868774475337,0.3594694685405358,10.263074274729792,0.707324640545021,8.43299004352262,2.853453360507819,-3.8587554469843512,1.4539869880448621,9.078166961669922,-3.209150550500924 +OK,9.9,2.0,13.83283197089369,4.169261159568695,72.68188683082842,0.30082612879830045,7.473084378961515,0.6936697180268595,16.56917314011818,5.9636832440681475,-2.8990779051992153,1.2894681243110515,13.372641563415527,3.932831970893689 +OR,11.0,2.4,14.960178635932131,3.5949311943496207,80.00122144021869,0.3868748897063032,9.96236498527892,0.9391047234304888,18.113741542437342,5.78101162715257,-2.1027433074865645,1.412721803429275,14.899346351623535,3.960178635932131 +PA,11.1,2.0,13.904691968664487,2.87649779986758,152.97423864359848,0.346456113240414,11.128527656204925,0.9551151036763976,15.376389764171986,4.369408281439186,-2.1674883896829673,0.879027961867837,13.813882827758789,2.8046919686644873 +RI,8.4,2.3,13.60351363660979,4.009385868577048,47.716257082316176,0.2638155685183552,12.630687973641486,2.1865267072560863,13.952130836825097,5.411007448316621,-7.082426369729525,3.2725430726119247,10.114660263061523,5.20351363660979 +SC,11.1,2.1,10.810091607299103,2.4552497356178207,115.26644659001987,0.3736839049269087,12.129888503293133,1.220142342915903,10.022650789978407,3.846932271101733,-4.377230751356924,1.8470338585513792,9.70772647857666,-0.2899083927008963 +SD,7.8,2.2,6.7334030791646615,2.327494107437512,55.2407957270471,0.26912123840231045,6.7068360049000635,1.5212604403340164,6.743185500412182,3.1399701067480654,-3.8757962438048383,1.8528175080764355,6.721802234649658,-1.0665969208353383 +TN,10.0,1.7,16.56342989643172,3.0750103992829754,89.2695834668554,0.3282847810394231,18.32285828603685,1.3583296773440554,15.703551264338433,4.498916992179288,-5.4719950504883315,2.1036927030836683,15.603744506835938,6.563429896431721 +TX,16.1,1.3,14.56129472980773,1.7099791037316212,294.32648200901883,0.3083157384243811,15.448597880836138,0.5091761389700658,14.165782584436048,2.4589102342382105,-3.2431418088928776,0.9309326462236662,14.510196685791016,-1.5387052701922705 +UT,7.3,1.6,8.396840398155128,2.099223154592061,88.5556251779635,0.29356651846541537,5.3493391276149715,0.7200935582967108,9.66326443013613,3.000050993855462,-0.9210572651019494,0.40017105080632065,8.38582706451416,1.0968403981551278 +VA,12.1,2.4,15.480344613972704,3.640112088292969,135.12178712944925,0.3120242155444285,10.43654201641124,0.7417936207780743,17.76790848529483,5.242359875269632,-4.143535467007477,2.455084414660597,15.400092124938965,3.3803446139727047 +VT,8.3,2.5,10.308498569173608,4.103266497775551,68.58960036751176,0.3813777601649377,5.468605036993444,1.7524339067205175,13.292270628890982,6.521284444046136,-0.17161126906749033,0.08063431563089071,10.242634773254395,2.0084985691736073 +WA,9.3,1.9,14.191340763191679,3.429843009071,104.56017409766304,0.3410985566238413,11.36195810226469,1.0626012254042743,15.656048955108263,5.171935724813351,-2.8903319465027324,1.4107232418371332,14.172506332397461,4.891340763191678 +WI,7.3,1.7,5.888274576437183,1.672271817496593,76.2063037717102,0.33178902497349727,7.594207048513189,0.9840981041263285,5.041222234086362,2.4212066330916575,-3.2429978446197953,1.3338005589292077,5.814634799957275,-1.4117254235628165 +WV,11.3,2.4,16.406165852468614,4.6685814591830095,78.48511051927737,0.3651987935901132,11.229932548243433,1.9972605412849338,19.384033788062002,7.229452995913754,-11.847910332700181,4.606019524846844,16.38048553466797,5.106165852468614 +WY,6.5,1.4,7.401438055757387,2.4967406866678012,75.3355320006355,0.3319623870118944,5.339602776175029,1.469142581544115,8.426008750173787,3.689705821181645,-1.6214124288534664,0.994557781496175,7.408247947692871,0.9014380557573869 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves.csv index 99972470e9..eb2a138c3c 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves.csv +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves.csv @@ -1,12 +1,12 @@ run,mean_gap,mad,beyond,corr,med_se,med_delta,med_delta_se,acs_share,DE,DC,TN,MD,LA,MT,HI,MA -dup_release_repro,0.544647278204183,2.7886350939161892,27,0.5563910628408775,2.615637095279978,-2.994076890617613,1.292256962440916,0.3481740564228461,19.72096757153362,19.40304497242515,16.043549040971147,17.176587822918897,12.027706493180412,4.534327158576392,5.722639757413111,19.183838317977454 -proj_chi_s050_0.03,0.27806832715569085,2.734114031625438,21,0.5737793903816584,2.357436908512107,-2.935075411873965,1.210184271957055,0.35381870008679583,19.25305735633003,20.27839942917138,15.505442086850039,17.29785999996839,12.009270456475054,4.850919824134285,5.84242605135861,19.48690654141444 -soft_chi_s050_0.1,0.03666643819765543,2.585351625532392,20,0.5849139132710077,2.402630453569502,-2.9684169114554586,1.1627641419402723,0.36703387978463625,18.936399489435015,20.17727139468469,15.61138420080497,16.927392662743056,11.961887482184487,4.264553919675482,5.931090315761128,19.48056369601165 -soft_chi_s700_0,0.2722806136794624,2.5233981395409657,24,0.6278832481244133,1.8825631654345845,-2.7789980387905118,0.9719246794509924,0.5323355514970661,19.88375465080892,21.656603520349034,15.708753888451223,17.01329819148205,12.659494932239813,5.41516099491029,5.827740027731627,19.402471728689115 -soft_chi_s700_0.03,-0.026580847142335953,2.4029499593356385,23,0.6445210236966457,1.823368625116039,-2.7935298326396705,0.8817559474634424,0.5383162332537033,19.3847160463197,21.3545841952864,14.861625854049299,16.39005279126511,12.679167173634717,5.263917143048904,6.0828375088813775,18.774519297731846 -soft_chi_s700_0.1,-0.2268683703569958,2.3270703876421392,20,0.6559213735996077,1.8471575980594037,-2.810431756156195,0.8313090532329959,0.5550259489828211,18.370862852135303,21.484361595602966,14.77507615043668,15.960596320168857,12.534100659393891,5.127223108726691,6.230713167299212,18.142961948312763 -soft_chi_s900_0,-0.1458447478736399,2.2741066175605353,24,0.7240547027895161,1.151117080796917,-3.1618756258319074,0.5927852681302287,0.7881426593725687,16.551442408397687,25.254609984652674,14.983840708120976,14.789207931718328,12.887580827632778,6.656828980913233,6.2263335410973815,17.719514820330552 -soft_chi_s900_0.03,-0.4548573249034494,2.162521439016692,22,0.7459660446918597,1.056820726700587,-3.0133436473419537,0.5640830863687071,0.8010793832198903,16.207791050183783,24.471418485651192,14.345915241704857,14.628241020762575,13.472252578365584,6.425878798418147,6.440864594444196,16.636697208774066 -soft_chi_s900_0.1,-0.7011707000588694,2.1286033403021016,21,0.7453267387500889,0.9879625361307123,-2.8858168495464054,0.5419403294710926,0.8173361826685147,15.799735925878519,23.776175717795308,14.456171557236855,14.22147052432781,12.974062901653799,6.241481658245595,6.404087629779315,15.499720474386635 -soft_chi_s964_0,-0.42384078940653297,2.2335587346009715,23,0.7538343494808044,0.9147166874640632,-3.037816703365899,0.5240280882310927,0.9130730706856416,14.94317731051859,26.635829758432187,14.49617354576192,13.399849982968556,12.918120474714872,7.208015099913618,6.2708673010172244,16.406922667181373 -soft_chi_s964_0.03,-0.6451740708461082,2.139972983678509,22,0.7719873950319354,0.8683681739745109,-3.108520441224063,0.4692140607191504,0.9201088941650787,15.020227309790263,25.732826885357802,14.182538067759129,13.645269605994729,13.626317180920186,7.0742738192143,6.495613719807099,15.594008303464898 +dup_release_repro,0.544647278204183,2.7886350939161892,27,0.5563910628408775,2.8184831455867525,-2.994076890617613,1.2969962750907356,0.3481740564228461,19.72096757153362,19.40304497242515,16.043549040971147,17.176587822918897,12.027706493180412,4.534327158576392,5.722639757413111,19.183838317977454 +proj_chi_s050_0.03,0.27806832715569085,2.734114031625438,21,0.5737793903816584,2.6074687904558633,-2.935075411873965,1.208306785739919,0.35381870008679583,19.25305735633003,20.27839942917138,15.505442086850039,17.29785999996839,12.009270456475054,4.850919824134285,5.84242605135861,19.48690654141444 +soft_chi_s050_0.1,0.03666643819765543,2.585351625532392,20,0.5849139132710077,2.4699320361689416,-2.9684169114554586,1.1638352769950655,0.36703387978463625,18.936399489435015,20.17727139468469,15.61138420080497,16.927392662743056,11.961887482184487,4.264553919675482,5.931090315761128,19.48056369601165 +soft_chi_s700_0,0.2722806136794624,2.5233981395409657,24,0.6278832481244133,2.0877454471177903,-2.7789980387905118,0.9726157164287281,0.5323355514970661,19.88375465080892,21.656603520349034,15.708753888451223,17.01329819148205,12.659494932239813,5.41516099491029,5.827740027731627,19.402471728689115 +soft_chi_s700_0.03,-0.026580847142335953,2.4029499593356385,23,0.6445210236966457,1.8594830396623332,-2.7935298326396705,0.8816671070254242,0.5383162332537033,19.3847160463197,21.3545841952864,14.861625854049299,16.39005279126511,12.679167173634717,5.263917143048904,6.0828375088813775,18.774519297731846 +soft_chi_s700_0.1,-0.2268683703569958,2.3270703876421392,20,0.6559213735996077,1.8729659228708382,-2.810431756156195,0.8322699529518508,0.5550259489828211,18.370862852135303,21.484361595602966,14.77507615043668,15.960596320168857,12.534100659393891,5.127223108726691,6.230713167299212,18.142961948312763 +soft_chi_s900_0,-0.1458447478736399,2.2741066175605353,24,0.7240547027895161,1.1751406139019414,-3.1618756258319074,0.5905712018478149,0.7881426593725687,16.551442408397687,25.254609984652674,14.983840708120976,14.789207931718328,12.887580827632778,6.656828980913233,6.2263335410973815,17.719514820330552 +soft_chi_s900_0.03,-0.4548573249034494,2.162521439016692,22,0.7459660446918597,1.087381605704914,-3.0133436473419537,0.5631251504333945,0.8010793832198903,16.207791050183783,24.471418485651192,14.345915241704857,14.628241020762575,13.472252578365584,6.425878798418147,6.440864594444196,16.636697208774066 +soft_chi_s900_0.1,-0.7011707000588694,2.1286033403021016,21,0.7453267387500889,1.0073573546132972,-2.8858168495464054,0.5421863929032062,0.8173361826685147,15.799735925878519,23.776175717795308,14.456171557236855,14.22147052432781,12.974062901653799,6.241481658245595,6.404087629779315,15.499720474386635 +soft_chi_s964_0,-0.42384078940653297,2.2335587346009715,23,0.7538343494808044,0.9191862374643311,-3.037816703365899,0.5240750345547482,0.9130730706856416,14.94317731051859,26.635829758432187,14.49617354576192,13.399849982968556,12.918120474714872,7.208015099913618,6.2708673010172244,16.406922667181373 +soft_chi_s964_0.03,-0.6451740708461082,2.139972983678509,22,0.7719873950319354,0.8719371038082558,-3.108520441224063,0.4717886030660438,0.9201088941650787,15.020227309790263,25.732826885357802,14.182538067759129,13.645269605994729,13.626317180920186,7.0742738192143,6.495613719807099,15.594008303464898 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval.csv new file mode 100644 index 0000000000..87c9964f7b --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval.csv @@ -0,0 +1,52 @@ +state,census,moe,acs_local,se,kish_src,acs_share,acs_only,acs_only_se,donor_only,donor_only_se,delta,delta_se,stored_2301,gap +AK,10.5,2.1,12.321393723762833,3.743008462683068,81.68256219816811,0.41906561091719086,14.975786930595175,3.8676548692424246,10.406607937726202,5.820215767713671,0.0,0.0,12.269848823547363,1.8213937237628333 +AL,15.5,2.4,15.059623085010573,3.71513486095829,114.89369341824126,0.3080806998135229,14.892073453526683,1.3194281070236962,15.13422543778082,5.3426796061957385,0.0,0.0,14.110982894897461,-0.440376914989427 +AR,13.3,2.7,6.68559611243325,1.412017057266769,115.11649934358303,0.3446122143394325,11.042644416698813,1.42850530885576,4.394598176602837,1.936397291167434,0.0,0.0,6.774383068084717,-6.614403887566751 +AZ,13.3,2.3,16.387800058721087,4.013061222603815,74.97248693960735,0.32823023017732,15.018313873111348,1.1326133634347828,17.056938186276298,5.934075982139015,0.0,0.0,17.127504348754883,3.0878000587210863 +CA,17.9,1.0,19.49647303904357,1.9618571163684015,385.6580886961881,0.2837607789085938,16.420939875952424,0.4373798484726286,20.714942595329678,2.73651623800518,0.0,0.0,20.379192352294922,1.5964730390435697 +CO,7.7,1.8,9.110107226754993,2.6867568457632443,65.42288079603081,0.3167165607859737,7.9850533379350015,0.7117317734873981,9.631593886487048,3.9361017947397423,0.0,0.0,9.367508888244629,1.4101072267549926 +CT,12.8,3.2,12.142036383928177,2.9672756914200895,100.20771420344856,0.35243678570098613,14.00938323881125,1.6105276066320198,11.125731398111077,4.491962098359044,0.0,0.0,12.430046081542969,-0.6579636160718234 +DC,20.3,3.7,20.063349097499845,5.20282053054896,47.067422820631876,0.4034754527762713,19.335252399157124,5.356380553227544,20.5558169203178,7.985315315053287,-7.870994797687709,4.297309466732037,20.46465492248535,-0.23665090250015552 +DE,8.7,2.6,21.36348047305636,6.900153737516051,50.95816913382481,0.30803265271757674,14.964556458685824,2.865571367630918,24.211992829059593,9.76218621056253,-1.7609609623206675,1.0538508926782648,22.213157653808594,12.66348047305636 +FL,18.4,1.8,21.68189087324703,3.3801514517694407,135.20425539702788,0.31737704011827417,12.769262957482017,0.5701023800605056,25.825706176604402,4.994668761011213,0.0,0.0,22.613277435302734,3.2818908732470327 +GA,15.1,2.2,17.239208888854364,2.956386357383339,121.17506625331394,0.3146201235481187,11.748828880220028,0.7688862484597994,19.759539724339476,4.324472924638935,0.0,0.0,17.39934539794922,2.1392088888543643 +HI,13.0,2.6,5.5836079655769995,1.9850974448778431,118.52750117470644,0.37760164062764257,4.347321396550311,0.7711046293327893,6.33364824078138,3.159689737354891,0.0,0.0,5.165446758270264,-7.4163920344230005 +IA,8.2,1.9,5.330152234800179,1.7664517911964994,74.5874438402306,0.3464490034124007,5.261597365688324,0.8275805028634736,5.366493340860581,2.672293454377221,0.0,0.0,5.389122486114502,-2.86984776519982 +ID,6.5,1.3,6.012080047447186,1.42519466267205,88.40879016819349,0.33214753479536296,9.443553261930685,1.5355785927140133,4.305482515374321,1.9269207054839907,0.0,0.0,6.954473495483398,-0.4879199525528142 +IL,12.4,1.6,12.71448215138427,3.1317881946460764,93.91544229009794,0.2965816587151526,8.568452112115834,0.6881257126289709,14.462569162995395,4.474926628051286,0.0,0.0,18.092145919799805,0.3144821513842704 +IN,10.6,2.2,9.211095507958051,2.1542988135484107,120.14005678566079,0.35487947569914285,9.845417850190314,0.8064774659615725,8.862156090041381,3.3070911534768737,0.0,0.0,9.129535675048828,-1.3889044920419487 +KS,9.7,2.5,10.902563094311668,4.684481608328661,87.66666433303108,0.3334748697513686,8.436703092478703,1.1318599589725764,12.136278532212144,6.9611728444568906,0.0,0.0,10.451759338378906,1.2025630943116692 +KY,13.3,2.9,9.654856568587451,2.9479167492889964,79.96088420874483,0.3957257386758641,7.365566854024051,0.681608750432868,11.154061352444216,4.895395778032309,0.0,0.0,9.635833740234375,-3.6451434314125493 +LA,20.7,3.0,10.577721322368049,2.169661638275234,125.90331436963336,0.3111933330719865,14.035915825132383,1.379637552034913,9.01535683695153,3.059664339475643,0.0,0.0,11.565276145935059,-10.12227867763195 +MA,12.8,2.0,20.79441634009795,4.5906754055484145,102.5908356155141,0.32989952283900936,14.581028749350434,1.1815662741599873,23.85335103909379,6.719603254416517,0.0,0.0,20.928058624267578,7.994416340097949 +MD,10.7,2.5,17.433348552027496,4.218598298707564,61.88106431360571,0.32215088761216787,10.882903843821252,1.1661503288439126,20.546477327204965,6.250901315095014,0.0,0.0,17.483667373657227,6.733348552027497 +ME,6.5,2.3,7.234934576863685,3.0188402223230515,38.50834478575946,0.3333179546821343,4.3449891810992485,0.9941392526276736,8.679807279262587,4.590385407059264,0.0,0.0,7.270956039428711,0.7349345768636848 +MI,10.3,1.9,8.256835401770765,2.6392600139180917,91.52893167205437,0.3203877234279062,6.374426473590426,0.5284478115219912,9.144254201946136,3.8895688869749265,0.0,0.0,9.475631713867188,-2.043164598229236 +MN,6.9,1.9,5.0987592257530725,1.6601981302059463,52.54399261696906,0.34048793553809076,5.402193447224024,0.7088069591670008,4.942104484759751,2.483567801299805,0.0,0.0,5.14799690246582,-1.8012407742469279 +MO,9.7,2.3,16.636921591015795,3.9740672672287634,64.86277090035392,0.33222332397483334,10.740424063041209,0.9951810542894202,19.57046820754853,5.872054728479625,0.0,0.0,16.677257537841797,6.936921591015796 +MS,19.1,2.6,12.989889728210732,2.8237984652354777,120.09612336052896,0.34971731263512185,15.700236078466064,1.6775597911491218,11.532285119724733,4.2438683774562,0.0,0.0,12.927408218383789,-6.110110271789269 +MT,9.3,2.3,4.617522603187462,1.3314483779387705,51.16610302382995,0.32933782545962187,10.14388019073906,2.7341405641298953,1.9037291917074668,1.1533784757098104,0.0,0.0,4.747105598449707,-4.682477396812539 +NC,14.4,2.2,11.383821595734682,2.483166642776731,123.95133566758639,0.3136719210648219,10.238524145357312,0.739669148907255,11.907255886821646,3.607282095198393,0.0,0.0,11.701009750366211,-3.016178404265318 +ND,10.3,2.1,10.66569031081114,3.4523999116526567,67.67907793489668,0.33186741866405767,4.753541889405907,1.4266527330488992,13.602307219160961,5.152722104643105,0.0,0.0,10.772493362426758,0.36569031081113934 +NE,7.1,1.9,9.500128835226924,4.219029473139932,79.73182955023789,0.3063484897355067,6.782482728016978,1.4360419013860366,10.700366661079695,6.024229240183856,0.0,0.0,9.424169540405273,2.4001288352269246 +NH,7.5,2.4,7.202220806202033,3.0310963062993195,73.11100560293525,0.3519654122706294,5.031553444271825,1.0025476199774568,8.381169966340414,4.655768809209172,0.0,0.0,7.5636773109436035,-0.29777919379796725 +NJ,13.3,1.9,10.344787674648451,2.1644162242310285,117.661096080773,0.33625390236036024,11.51591545214037,0.7799682979651915,9.751494114438215,3.2241722472278846,0.0,0.0,9.367637634277344,-2.9552123253515497 +NM,10.9,2.1,15.651364184838581,3.9665352308487023,90.34932912736528,0.3715312357460946,16.15041492874158,2.7362366212931093,15.356340867645713,6.108821740813408,0.0,0.0,14.007346153259277,4.751364184838581 +NV,15.0,2.5,13.340620434521295,3.0735370383923444,85.62569767303911,0.3410867850150841,15.18876643034991,1.4799985740382124,12.383926652062984,4.583093784184722,0.0,0.0,13.599339485168457,-1.6593795654787051 +NY,16.2,1.9,15.066423654405913,2.6438820237960234,174.20366464173924,0.3282953526362707,13.13919751949797,0.6933476291376823,16.008354584990695,3.925321020419153,0.0,0.0,16.431594848632812,-1.1335763455940864 +OH,12.3,2.1,7.433844095393124,1.4405859525265752,136.868774475337,0.3594694685405358,10.082734325411032,0.6687530286491925,5.947271455308107,2.170314537212024,0.0,0.0,9.078166961669922,-4.8661559046068765 +OK,9.9,2.0,13.731178131074726,4.169544904780285,72.68188683082842,0.30082612879830045,7.135168863816389,0.6797946636539011,16.569173106454205,5.963683235099995,0.0,0.0,13.372641563415527,3.8311781310747257 +OR,11.0,2.4,15.223837236720705,3.6042301094674607,80.00122144021869,0.3868748897063032,9.686660958198624,0.9417384902858613,18.71773175526594,5.796223839892173,0.0,0.0,14.899346351623535,4.223837236720705 +PA,11.1,2.0,13.637911018385992,2.8762102777615794,152.97423864359848,0.346456113240414,10.358501019361265,0.9133835774870138,15.376388976794027,4.369408282978113,0.0,0.0,13.813882827758789,2.5379110183859925 +RI,8.4,2.3,13.35977181953176,4.002107274233144,47.716257082316176,0.2638155685183552,11.706778067766948,2.1389775521649073,13.952130836825097,5.411007448316621,0.0,0.0,10.114660263061523,4.95977181953176 +SC,11.1,2.1,10.59473085687635,2.4520723216335494,115.26644659001987,0.3736839049269087,11.553570544719635,1.2024288422176759,10.022650781702227,3.8469322710165352,0.0,0.0,9.70772647857666,-0.50526914312365 +SD,7.8,2.2,6.726459502632879,2.3272798467048927,55.2407957270471,0.26912123840231045,6.7068360049000635,1.5212604403340164,6.733685188053119,3.1395687931209575,0.0,0.0,6.721802234649658,-1.0735404973671212 +TN,10.0,1.7,16.42325489667534,3.0669705013054744,89.2695834668554,0.3282847810394231,17.970609097212844,1.351825751368199,15.667022462787758,4.491841348158154,0.0,0.0,15.603744506835938,6.423254896675338 +TX,16.1,1.3,14.045259064593418,1.685678655696754,294.32648200901883,0.3083157384243811,15.264531260011097,0.5128349830310771,13.501772927704614,2.4211407892896815,0.0,0.0,14.510196685791016,-2.054740935406583 +UT,7.3,1.6,8.359499249071256,2.0982139808994016,88.5556251779635,0.29356651846541537,5.222133569445866,0.7089311662182424,9.663267464756284,3.0000511031115513,0.0,0.0,8.38582706451416,1.0594992490712558 +VA,12.1,2.4,14.131721562535965,3.4974094202644177,135.12178712944925,0.3120242155444285,10.222161875261767,0.7379258638542938,15.904861434764465,5.046324742621825,0.0,0.0,15.400092124938965,2.0317215625359655 +VT,8.3,2.5,10.308498555295754,4.103266497917791,68.58960036751176,0.3813777601649377,5.468605036993444,1.7524339067205175,13.292270606457496,6.521284444131556,0.0,0.0,10.242634773254395,2.0084985552957537 +WA,9.3,1.9,14.144094797845291,3.5056242790878342,104.56017409766304,0.3410985566238413,10.824512336178158,1.0575867773948409,15.862568474980742,5.285650433207835,0.0,0.0,14.172506332397461,4.84409479784529 +WI,7.3,1.7,4.205482205184001,1.1851299579185464,76.2063037717102,0.33178902497349727,7.339248739090038,0.9754240295726758,2.64946265202114,1.6371265070652459,0.0,0.0,5.814634799957275,-3.0945177948159985 +WV,11.3,2.4,15.269485131709581,4.591939630665602,78.48511051927737,0.3651987935901132,11.56747752398947,2.007798430035103,17.39923645944705,7.11376741088013,0.0,0.0,16.38048553466797,3.9694851317095807 +WY,6.5,1.4,7.519438350406651,2.499776130679871,75.3355320006355,0.3319623870118944,5.695065621563699,1.4991725822046913,8.426008750173787,3.689705821181645,0.0,0.0,7.408247947692871,1.0194383504066513 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_solves.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_solves.csv new file mode 100644 index 0000000000..69ffcc9190 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_solves.csv @@ -0,0 +1,12 @@ +run,mean_gap,mad,beyond,corr,med_se,med_delta,med_delta_se,acs_share,DE,DC,TN,MD,LA,MT,HI,MA +dup_release_repro,0.16471878949910754,2.8784570859033294,25,0.5204181912988358,2.8131967154228144,0.0,0.0,0.3481740564228461,19.01044496068104,18.264029155223753,15.815895611578442,17.00087539326369,11.026638688928166,4.395263513849296,5.366033904684012,18.391250624530855 +proj_chi_s050_0.03,-0.05092398622014013,2.8449219346098764,24,0.5393663326162758,2.6185470876334023,0.0,0.0,0.35381870008679583,18.65311820464982,19.22251450220031,15.20116770075214,17.12435546653622,10.978118011917076,4.706749920569699,5.5226938114629585,19.05416501157363 +soft_chi_s050_0.1,-0.2881451454796224,2.695072847083243,23,0.5523490782633917,2.4930566590515215,0.0,0.0,0.36703387978463625,18.219334945572307,18.87468437048897,15.22343160103723,16.750802371268357,11.041182497223607,4.197386843784524,5.600783666145576,19.0898877180207 +soft_chi_s700_0,-0.09243136054026196,2.5540732660539924,25,0.5942995177277677,2.0071287637313175,0.0,0.0,0.5323355514970661,19.36414505762124,20.1506881234464,15.510926025059696,16.75356217154926,11.508350076539335,5.31058340265146,5.299461689742384,18.598756395092067 +soft_chi_s700_0.03,-0.34916656095672133,2.465707794838541,24,0.6155211035405689,1.8404570230874595,0.0,0.0,0.5383162332537033,18.86773487462509,19.884284419829086,14.539619686401428,16.133805504277344,11.864488002505711,5.183291978929374,5.57460030335686,18.289204391811964 +soft_chi_s700_0.1,-0.5461299171657797,2.425932440215807,21,0.6281060966915968,1.8761451309974668,0.0,0.0,0.5550259489828211,17.83754923558953,19.97895900597697,14.410949721304988,15.695055654568485,11.787298649888283,5.063141838936079,5.742688008531674,17.714678347057735 +soft_chi_s900_0,-0.4898594897594518,2.270162958508696,22,0.7069119781335766,1.1699043997935354,0.0,0.0,0.7881426593725687,16.297709125418635,23.404550734238775,14.620544855172495,14.357091615000172,12.322483147860545,6.599965335193645,5.462347511867982,17.05436499241893 +soft_chi_s900_0.03,-0.7760268124432347,2.2344476062581227,23,0.730041522365349,1.0681072947623282,0.0,0.0,0.8010793832198903,15.958221403904174,22.663002485998664,13.984234626292814,14.236688507906479,12.997697567195463,6.356789549057919,5.7284856768958745,16.12167486720437 +soft_chi_s900_0.1,-1.0193024698269493,2.202791438427394,25,0.7299229819712859,0.9855704097592791,0.0,0.0,0.8173361826685147,15.547316914656143,21.95311398406457,14.056083521457458,13.795253491871517,12.527441621132631,6.1711300712092045,5.730222328877324,14.991445238160638 +soft_chi_s964_0,-0.7637952950596579,2.2414974839062483,21,0.744359093174314,0.9199117098312307,0.0,0.0,0.9130730706856416,14.831228681671039,24.64042114992082,14.079795144858076,12.901114422537784,12.559100453333539,7.204443327333171,5.432189772145475,15.790087705871422 +soft_chi_s964_0.03,-0.9749631474613972,2.202741501985428,22,0.7622988995188572,0.8573150404361539,0.0,0.0,0.9201088941650787,14.91088302641012,23.75088218085383,13.772862252678022,13.180510927310312,13.309275794355951,7.046273291735259,5.7176987513529625,15.06874085201589 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/calibration_step.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/calibration_step.csv new file mode 100644 index 0000000000..caf0e6faaa --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/calibration_step.csv @@ -0,0 +1,7 @@ +file,flag,state_mean,sd,mad,lo,hi,nat0,nat1 +dense,E,2.7446254558356746,2.311749768033538,2.950206190174111,-1.8586691016087276,8.77288577640143,13.026570368816854,16.310518582644047 +dense,P24,3.3275919093191497,2.577445198834858,3.4591933544584097,-1.23633359047282,10.220851602573347,12.63757118670643,16.62485941023528 +dense,P25,3.618045475172117,2.7730276620413616,3.728954384484352,-2.0617749572391553,10.746199826624167,13.85927993180634,18.189540502544496 +default,E,1.579289632318173,4.890845231348732,3.0660636493881506,-4.980252557301684,27.594920024129348,15.0620764477773,16.502406199878294 +default,P24,-0.04760032894573479,3.867933516069185,2.9057038622883824,-9.95904891623367,10.034501005574803,15.347836112351281,15.688595607597467 +default,P25,-0.030965633449412864,3.9801525261120236,2.991129896216945,-10.30849681189191,8.35697210640871,16.69840528239648,17.16724469444985 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/dash_swing.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/dash_swing.csv index 6f3313f5dd..7b69566383 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/dash_swing.csv +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/dash_swing.csv @@ -1,52 +1,52 @@ -,p24,p25,o24,o25 -AK,-4.189894676208496,-5.673839092254639,-4.373375415802002,-1.7095413208007812 -AL,-5.012664794921875,-4.470902442932129,-2.8875207901000977,-2.7333478927612305 -AR,-1.5955448150634766,-2.695366144180298,-1.4236054420471191,-1.9772796630859375 -AZ,-10.281723976135254,-9.662915229797363,-3.781346321105957,-6.3656511306762695 -CA,-3.736156463623047,-3.880396842956543,-4.793203353881836,-5.535208702087402 -CO,-0.6606168746948242,-0.8275508880615234,-0.8121490478515625,-0.9536361694335938 -CT,-1.7586374282836914,-1.7703189849853516,-2.002377510070801,-2.030771255493164 -DC,-1.3295745849609375,-2.9570493698120117,-8.179778099060059,-7.9533491134643555 -DE,-2.33499813079834,-2.279691696166992,-5.36961555480957,-5.435258865356445 -FL,-3.865865707397461,-3.357553482055664,-5.740966796875,-3.9676551818847656 -GA,-3.080746650695801,-2.6071701049804688,-4.445429801940918,-3.4896020889282227 -HI,-3.5331966876983643,-2.710688829421997,-2.608574390411377,-2.785074472427368 -IA,-1.2073469161987305,-1.085604190826416,-0.9085164070129395,-0.8048229217529297 -ID,-1.167829990386963,-1.0795774459838867,-1.1714277267456055,-1.901484489440918 -IL,-7.139523506164551,-6.458962440490723,-4.282228469848633,-8.83888053894043 -IN,-3.4897637367248535,-3.511981964111328,-2.219841957092285,-2.1886167526245117 -KS,-4.764968395233154,-4.5028886795043945,-6.837752819061279,-5.541018486022949 -KY,-3.459348201751709,-3.3902740478515625,-2.6096558570861816,-2.5431671142578125 -LA,-5.638120174407959,-4.8973894119262695,-3.1079702377319336,-1.4829511642456055 -MA,-4.3399858474731445,-3.395580291748047,-3.340383529663086,-3.3914051055908203 -MD,-0.8330593109130859,-7.321868896484375,-1.5074882507324219,-9.015921592712402 -ME,-2.779177188873291,-2.7190308570861816,-2.5734190940856934,-2.655895233154297 -MI,-2.7965292930603027,-4.478377103805542,-2.080575466156006,-3.4591875076293945 -MN,-0.5588521957397461,-0.5429868698120117,-1.079054832458496,-0.9754786491394043 -MO,-5.693965435028076,-6.024465084075928,-6.493651390075684,-8.944635391235352 -MS,-4.121949672698975,-4.28740119934082,-5.5541839599609375,-4.007966995239258 -MT,-0.7315001487731934,-0.6603364944458008,-0.8444640636444092,-0.768653154373169 -NC,-2.9216790199279785,-2.721771240234375,-4.820042610168457,-4.398758888244629 -ND,-1.095254898071289,-1.1478958129882812,-0.9279356002807617,-1.2256460189819336 -NE,-5.928585529327393,-4.526432991027832,-6.791402339935303,-6.594109296798706 -NH,-3.1012496948242188,-1.7489027976989746,-1.7163872718811035,-1.8274922370910645 -NJ,-1.2045764923095703,-1.0750389099121094,-1.1831417083740234,-1.7260732650756836 -NM,-5.908068656921387,-5.670726776123047,-6.657066345214844,-5.910312652587891 -NV,-2.995401382446289,-2.899956703186035,-2.7631330490112305,-1.9952678680419922 -NY,-3.84584903717041,-3.301645278930664,-3.8091773986816406,-3.3273448944091797 -OH,-4.279670238494873,-3.564304828643799,-2.4238171577453613,-3.895282745361328 -OK,-0.9729490280151367,-1.6426286697387695,-1.3617620468139648,-2.4307985305786133 -OR,-0.7172441482543945,-3.117441177368164,-1.4312019348144531,-4.85249137878418 -PA,-2.39363956451416,-1.8110342025756836,-3.553032875061035,-2.6409196853637695 -RI,-10.134502410888672,-7.170621871948242,-7.31915807723999,-5.006382942199707 -SC,-3.361548900604248,-3.2307605743408203,-3.2702345848083496,-3.384464740753174 -SD,-4.291806697845459,-3.8360729217529297,-1.7623538970947266,-2.543172836303711 -TN,-4.139863014221191,-5.404635429382324,-4.014834403991699,-4.543438911437988 -TX,-3.4791202545166016,-3.509881019592285,-3.225029945373535,-3.6476917266845703 -UT,-1.6343493461608887,-2.336082935333252,-1.6495895385742188,-0.9567546844482422 -VA,-5.260139465332031,-5.2570648193359375,-2.962580680847168,-4.125798225402832 -VT,-0.4380931854248047,-0.2148294448852539,-0.7923793792724609,-0.10500144958496094 -WA,-2.850407600402832,-1.7509937286376953,-3.2660112380981445,-2.919992446899414 -WI,-2.336136817932129,-2.9149160385131836,-2.6450157165527344,-3.169431209564209 -WV,-9.820388793945312,-9.350496768951416,-9.833352088928223,-11.881651878356934 -WY,-1.9863653182983398,-1.8889093399047852,-1.3712310791015625,-1.6214418411254883 +,p24,p25,o24,o25,o25_18252,o24_221 +AK,-4.189894676208496,-5.673839092254639,-4.373375415802002,-1.7095413208007812,-6.640180587768555,-4.373375415802002 +AL,-5.012664794921875,-4.470902442932129,-2.8875207901000977,-2.7333478927612305,-4.968289375305176,-3.838292121887207 +AR,-1.5955448150634766,-2.695366144180298,-1.4236054420471191,-1.9772796630859375,-2.3963615894317627,-1.4233779907226562 +AZ,-10.281723976135254,-9.662915229797363,-3.781346321105957,-6.3656511306762695,-11.923871517181396,-3.8333358764648438 +CA,-3.736156463623047,-3.880396842956543,-4.793203353881836,-5.535208702087402,-3.742342948913574,-4.8096923828125 +CO,-0.6606168746948242,-0.8275508880615234,-0.8121490478515625,-0.9536361694335938,-0.925776481628418,-0.7850923538208008 +CT,-1.7586374282836914,-1.7703189849853516,-2.002377510070801,-2.030771255493164,-1.9308042526245117,-2.0001754760742188 +DC,-1.3295745849609375,-2.9570493698120117,-8.179778099060059,-7.9533491134643555,-2.8667736053466797,-8.129595756530762 +DE,-2.33499813079834,-2.279691696166992,-5.36961555480957,-5.435258865356445,-2.457225799560547,-5.36961555480957 +FL,-3.865865707397461,-3.357553482055664,-5.740966796875,-3.9676551818847656,-6.100198745727539,-5.701401710510254 +GA,-3.080746650695801,-2.6071701049804688,-4.445429801940918,-3.4896020889282227,-2.86575984954834,-4.791293144226074 +HI,-3.5331966876983643,-2.710688829421997,-2.608574390411377,-2.785074472427368,-3.5598132610321045,-2.608574390411377 +IA,-1.2073469161987305,-1.085604190826416,-0.9085164070129395,-0.8048229217529297,-0.7547454833984375,-0.9023137092590332 +ID,-1.167829990386963,-1.0795774459838867,-1.1714277267456055,-1.901484489440918,-1.0411276817321777,-1.097053050994873 +IL,-7.139523506164551,-6.458962440490723,-4.282228469848633,-8.83888053894043,-8.613019943237305,-4.282962799072266 +IN,-3.4897637367248535,-3.511981964111328,-2.219841957092285,-2.1886167526245117,-3.0147900581359863,-2.1482343673706055 +KS,-4.764968395233154,-4.5028886795043945,-6.837752819061279,-5.541018486022949,-6.498903751373291,-6.973252773284912 +KY,-3.459348201751709,-3.3902740478515625,-2.6096558570861816,-2.5431671142578125,-3.135756015777588,-2.5220632553100586 +LA,-5.638120174407959,-4.8973894119262695,-3.1079702377319336,-1.4829511642456055,-4.254573822021484,-3.1211328506469727 +MA,-4.3399858474731445,-3.395580291748047,-3.340383529663086,-3.3914051055908203,-3.1008968353271484,-2.5382080078125 +MD,-0.8330593109130859,-7.321868896484375,-1.5074882507324219,-9.015921592712402,-6.742190361022949,-1.5407180786132812 +ME,-2.779177188873291,-2.7190308570861816,-2.5734190940856934,-2.655895233154297,-2.7348837852478027,-2.570552349090576 +MI,-2.7965292930603027,-4.478377103805542,-2.080575466156006,-3.4591875076293945,-4.55608344078064,-2.118161678314209 +MN,-0.5588521957397461,-0.5429868698120117,-1.079054832458496,-0.9754786491394043,-0.8658616542816162,-1.0532169342041016 +MO,-5.693965435028076,-6.024465084075928,-6.493651390075684,-8.944635391235352,-6.490201950073242,-6.476726531982422 +MS,-4.121949672698975,-4.28740119934082,-5.5541839599609375,-4.007966995239258,-4.833344459533691,-5.625495433807373 +MT,-0.7315001487731934,-0.6603364944458008,-0.8444640636444092,-0.768653154373169,-0.6661734580993652,-0.9424371719360352 +NC,-2.9216790199279785,-2.721771240234375,-4.820042610168457,-4.398758888244629,-3.844996452331543,-6.247556209564209 +ND,-1.095254898071289,-1.1478958129882812,-0.9279356002807617,-1.2256460189819336,-0.6770458221435547,-0.9017829895019531 +NE,-5.928585529327393,-4.526432991027832,-6.791402339935303,-6.594109296798706,-4.920290470123291,-6.791403293609619 +NH,-3.1012496948242188,-1.7489027976989746,-1.7163872718811035,-1.8274922370910645,-1.6276025772094727,-1.695164680480957 +NJ,-1.2045764923095703,-1.0750389099121094,-1.1831417083740234,-1.7260732650756836,-1.1427698135375977,-1.0962090492248535 +NM,-5.908068656921387,-5.670726776123047,-6.657066345214844,-5.910312652587891,-6.02302360534668,-6.644031524658203 +NV,-2.995401382446289,-2.899956703186035,-2.7631330490112305,-1.9952678680419922,-2.785487174987793,-2.719846725463867 +NY,-3.84584903717041,-3.301645278930664,-3.8091773986816406,-3.3273448944091797,-3.8251752853393555,-3.8059425354003906 +OH,-4.279670238494873,-3.564304828643799,-2.4238171577453613,-3.895282745361328,-3.468106746673584,-2.383358955383301 +OK,-0.9729490280151367,-1.6426286697387695,-1.3617620468139648,-2.4307985305786133,-1.3856840133666992,-1.3995094299316406 +OR,-0.7172441482543945,-3.117441177368164,-1.4312019348144531,-4.85249137878418,-3.511751174926758,-1.4312057495117188 +PA,-2.39363956451416,-1.8110342025756836,-3.553032875061035,-2.6409196853637695,-1.8544549942016602,-3.545027732849121 +RI,-10.134502410888672,-7.170621871948242,-7.31915807723999,-5.006382942199707,-5.057307720184326,-7.4494616985321045 +SC,-3.361548900604248,-3.2307605743408203,-3.2702345848083496,-3.384464740753174,-3.2846899032592773,-3.1891674995422363 +SD,-4.291806697845459,-3.8360729217529297,-1.7623538970947266,-2.543172836303711,-3.000764846801758,-1.7623538970947266 +TN,-4.139863014221191,-5.404635429382324,-4.014834403991699,-4.543438911437988,-5.95438289642334,-4.050980567932129 +TX,-3.4791202545166016,-3.509881019592285,-3.225029945373535,-3.6476917266845703,-3.0690717697143555,-3.3291406631469727 +UT,-1.6343493461608887,-2.336082935333252,-1.6495895385742188,-0.9567546844482422,-1.2125139236450195,-1.5026459693908691 +VA,-5.260139465332031,-5.2570648193359375,-2.962580680847168,-4.125798225402832,-5.877525329589844,-2.9812583923339844 +VT,-0.4380931854248047,-0.2148294448852539,-0.7923793792724609,-0.10500144958496094,-0.12960052490234375,-0.7923784255981445 +WA,-2.850407600402832,-1.7509937286376953,-3.2660112380981445,-2.919992446899414,-2.915656089782715,-3.282376289367676 +WI,-2.336136817932129,-2.9149160385131836,-2.6450157165527344,-3.169431209564209,-2.734252452850342,-2.645015239715576 +WV,-9.820388793945312,-9.350496768951416,-9.833352088928223,-11.881651878356934,-9.517368793487549,-9.776033878326416 +WY,-1.9863653182983398,-1.8889093399047852,-1.3712310791015625,-1.6214418411254883,-1.880359172821045,-1.4958949089050293 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/initial_fit.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/initial_fit.csv new file mode 100644 index 0000000000..ce04a4ecea --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/initial_fit.csv @@ -0,0 +1,13 @@ +file,weights,rows,natP25,natP24,natE,mean_gap,sd,mad,corr,beyond,med_se,Q,tau +dense,initial,all,13.85927993180634,12.63757118670643,13.026570368816854,-0.001485664421234055,2.401768157800883,1.7773673200189648,0.78249885718214,16,1.065153573230338,94.38816375676222,1.4981896401073471 +dense,initial,asec,16.378098183022704,15.1297363208212,13.026570368816854,2.1977575948480275,2.0552966659760705,2.441136389113498,0.8841869150864864,24,1.3392507601914343,76.18947443874463,1.2795745878346338 +dense,initial,puf,11.34046168058997,10.145406052591662,13.026570368816854,-2.200728923690496,3.290512374078523,2.949396727153323,0.5481156062782906,28,1.1397202030841675,158.46097721004148,2.4293558675328066 +dense,published,all,18.189540502544496,16.62485941023528,16.310518582644047,3.616559810750883,4.024412399687628,4.330334394345995,0.6516849315773395,38,1.858778239894062,147.79926318354475,3.0713486973806456 +dense,published,asec,22.131077488065547,20.518525149122176,18.78417084991661,6.982733594095503,5.453481107828123,7.296849036483564,0.6785997333034373,41,2.615919955892499,191.51013989355582,4.554789907611826 +dense,published,puf,15.161714043136564,13.633806886410387,14.410297979936145,0.9807824083344956,3.998941095462292,3.1574409368028937,0.5173108943077441,29,2.109848481005,118.33166678036947,2.8190251775533812 +default,initial,all,16.69840528239648,15.347836112351281,15.0620764477773,3.2677686242522026,4.012696814911332,4.20659998326037,0.6516693967552849,36,2.2024435353488827,109.4562592585745,2.7380054458133998 +default,initial,asec,20.606498874305604,18.95926523765957,17.142522099845845,6.076979383072434,6.1639343482500895,6.59743081080723,0.6316819431764917,39,3.172961136644513,137.99694307172962,4.541881622967363 +default,initial,puf,13.986721885925148,12.841997353293447,13.618531200126434,1.3102549030607025,3.506021473208886,2.9967115571121656,0.601867374806683,30,2.533607233264508,76.27191009109612,1.972958917287952 +default,published,all,17.16724469444985,15.688595607597467,16.502406199878294,3.2368029908027895,5.110599853784951,4.798497276265718,0.5168815743952837,38,4.0410378809574645,71.54752778678412,2.731850116733383 +default,published,asec,21.676441442126162,19.835090257528233,20.059535128913083,5.503075106578072,8.438904010002904,7.719150151456018,0.5466800598623964,43,6.2935567191859425,142.0134792113985,6.281909049638035 +default,published,puf,13.983209513243018,12.760671726061569,13.990645394592537,1.719295512445197,6.482195630336743,4.79807745444391,0.18433666486976186,31,5.052536014898803,77.62672715775881,3.1591500410110402 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/initial_fit_states.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/initial_fit_states.csv new file mode 100644 index 0000000000..5e5d0adb0a --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/initial_fit_states.csv @@ -0,0 +1,52 @@ +,dense_W0,dense_W0_se,dense_W1,dense_W1_se,default_W0,default_W0_se,default_W1,default_W1_se +AK,-4.048191684830667,0.8970697523813582,0.5197126367177081,2.0902693233049265,-1.6399159020717846,1.9033865987621277,1.1444270301148034,6.332772219323601 +AL,-2.9051191319952174,1.2167865033734007,1.1609608661336779,2.1821275071382527,1.7206064552216418,2.9278200599082784,1.4871562044965856,4.77804546692084 +AR,-0.405416993411583,1.0680665554684374,-0.8462936281565856,1.5095049912955576,-2.7556006956347048,1.8465155065323007,-5.171542318045768,3.501990871084489 +AZ,3.843807491659291,1.4151817786418597,9.387794744163234,2.447357721159525,13.959683102709729,2.912925930057936,3.6511862908178223,4.931830911917693 +CA,2.9225878233527354,0.5906538721222633,6.221290625968074,1.0526517298935083,0.22792380213209285,1.4909092972366156,6.516506507457979,2.653037840146489 +CO,0.8809674492820898,0.98023045849131,8.679684444985867,2.3517278780979,3.264709177117422,1.831766013634992,2.652503583390458,3.820461090793149 +CT,-0.13712000829784188,1.3514663470288042,3.760293015964546,2.437327640174254,5.643354583239329,2.8039197668273697,0.5713072517766609,5.002325263747212 +DC,-4.908187992412584,1.7332714466392853,5.802302910381407,3.371388674899598,7.631329752449545,6.081223223852068,14.065303318527729,10.601939242811651 +DE,5.348836874890656,1.7284089111684748,12.99380057983112,3.1552325459483437,10.388945839939865,3.0999870355420365,13.72918607516834,6.87057378619714 +FL,0.8820795735107438,0.8641410736104425,11.628279400134907,1.664972951960285,9.101868287909866,2.393075976067206,9.756499049952641,3.962926881590984 +GA,0.30313021997410416,1.0105650010031857,8.526865042560066,2.1702861910188473,8.729770779516597,2.541327303203916,3.328986886706188,3.9734530863145108 +HI,-2.1741066636255777,1.189593256244055,-4.235881620864731,1.3243186870946742,-5.617299624868915,1.6074186946745144,-5.980959565723118,2.780586884850471 +IA,-0.1910881107042499,1.0302147409877493,0.4313755210423196,1.5207588606634646,1.2948823830079714,1.8497227263336529,0.6089825973277545,3.639254429438333 +ID,1.3600598093768292,0.7702050770913274,3.89254600543749,1.3907731273949004,2.0700320637250105,1.9272031090630704,0.4578273141402125,2.7396037844431986 +IL,-1.843685938735339,0.9046266224655412,0.3953303006471671,1.452777923618364,0.9699123425469072,1.8050578940927975,2.278691537509486,3.8382020965079566 +IN,-1.7791617280917489,0.9182951944068689,3.7561105974897,2.016853296071454,4.031586068930789,2.2024435353488827,2.1343482935094684,3.915265266967416 +KS,-0.4309381665855412,1.1584834581138819,3.56447521767514,1.812787663620715,2.571589133777758,2.3673194145277043,-0.040137885523622074,4.696231456905677 +KY,-0.6799984024050012,1.3078335639693612,0.3952707821631787,1.9887119385700365,0.010594912451452387,2.3210096570093453,5.237173560636016,6.281260601560729 +LA,-6.953546326214388,0.9426938569090801,-6.980011695589244,1.7098316395891382,-2.2924161614317775,2.585914784846116,-8.612573223242395,3.5367442210669764 +MA,0.5168209664075327,0.9707370775457278,7.85448570948504,1.9391771916242613,6.67719918156839,2.0678971210045476,7.402673733449152,5.082037498794953 +MD,2.7331982207459458,1.52483546515642,8.532590168012678,2.8070523469419375,10.383811979602118,2.9379175682226477,12.465434057221028,6.042028256286184 +ME,1.8938908269031831,1.5624716696092156,4.132771843758372,2.2315467430125446,3.4200411913888757,2.453551780510519,5.949100804293858,6.134862777390149 +MI,-0.5356881311881168,0.8929469923563752,-0.40401819793437,1.4150770820670229,3.281161796624211,1.9882750914258642,4.218361806845275,4.000674369632836 +MN,0.3383243889675063,1.1314076107969406,0.039264162864531826,1.3424798444336863,1.769077864312635,1.625655933411751,1.5314283494516392,3.7306098701724806 +MO,1.176259191428846,1.2562727455111249,4.388579727210308,2.6161484306629017,6.125623616296487,2.5710722114306432,8.779794346249819,5.195454214849073 +MS,-5.187023305908539,1.0710544124515464,-3.973436107339241,1.7165166836169314,-6.866533651804,2.2385013941964598,-6.157789016123633,3.985885849068236 +MT,-1.0769657021501455,0.9179118368740706,0.9578271482975573,1.507455171886924,-0.2507447465739556,2.520733230724989,-6.769056429355793,1.586124461747979 +NC,0.8027108858098835,1.0363589519098417,3.147975157970359,1.7783903123627331,2.991987592995981,2.1851834759539575,3.7009746067036335,4.667944264996081 +ND,-1.3217134847564989,1.065153573230338,-0.3396570138841888,1.6093527149199909,0.3096638536493259,2.1894415961211107,0.8304753740104971,4.0410378809574645 +NE,0.5040752165037379,1.0813801338253826,0.8803973971522545,1.4228721900641035,5.354216044511643,2.481869686188575,3.6118717392737647,4.344057457416736 +NH,1.319164712169039,1.1636661380842388,3.2151368558852944,2.175994911449899,4.175384914386667,2.1958907900885714,3.016178236344569,4.614807837439195 +NJ,2.484714563234924,1.1785255823433625,7.064304682195129,2.13978591248263,3.0153279954259204,1.8411052832740458,-2.375035786085032,3.6050731998973897 +NM,-2.1588910024270103,0.8404096281278046,-1.3979927297795456,1.5282509723766522,-1.9878012803718672,1.8487090582631711,-0.7486634305864808,3.9062252843191323 +NV,2.186974911831971,1.4152803262295193,5.266396327611087,2.451905215723719,5.870136343388637,2.8195467394663827,4.070065382005382,5.805513594867899 +NY,0.16519433294321217,0.8557782267478902,5.5761067979677,1.7056988460768048,6.951955818525519,1.8572869794307476,1.527117069525012,3.5698850096921197 +OH,-4.414638037113752,0.9017002738500705,-0.023960888127444235,1.905393480013562,-0.8315314899397936,1.8979901253482585,-2.486718988301323,2.9093924632473964 +OK,0.9786331524418372,1.0789085656476076,3.920143751855637,1.858778239894062,2.909093672764703,2.234603280806525,7.3143973770767925,4.784835016565054 +OR,1.8222706670173245,1.187209714047027,10.52739541725039,2.3738615646672985,5.435697936341825,2.368042960664089,5.287025373398983,5.206864576296931 +PA,-1.3986727320868546,0.7842558907975117,2.3756008082355944,1.4735686584020704,2.1677691116158275,1.626584103963343,3.0353151760054526,3.248356681256722 +RI,1.7450337389071908,1.3492141439481007,3.353905508598592,2.414949971177963,1.1179113038231279,2.309970029742756,9.474883410231838,7.039949763613315 +SC,1.2193141213236807,0.9678664500462015,4.252154421943537,1.8482040752589861,1.5502815668494954,1.825524399952079,-1.2153622908310275,3.5625308459596647 +SD,0.590922603699604,1.107164333996254,3.3008290562652833,2.4053917891002627,2.7755638608627224,2.1978448470296574,3.538984093590906,4.7545850659567925 +TN,-0.090195062325229,0.8943761694642755,5.271551020582677,1.840774666594892,4.905268708031125,2.025152082956196,13.237083981929004,5.143819316231732 +TX,1.7761378050437813,0.7023965138228362,4.655823740113224,1.2680807014118707,6.428526544978087,1.9896652214788721,3.1443708816123674,2.651235362434403 +UT,1.324245539246065,0.8895961091223195,3.846386609823816,1.5931046031919944,4.059435855706863,2.171159354380407,5.91129757366149,3.6996600431023254 +VA,1.4623248641093678,1.0806928115922467,7.7484665498358165,2.2955027674320765,7.06930222894694,2.3301807065346294,6.028343100478422,4.435237116964008 +VT,-0.16659645768994125,1.1869199980582361,2.7192893551012567,2.0472828246898356,4.943828175327971,3.4387682705270364,9.37870021257423,7.094454518557269 +WA,4.703302266961051,1.1008135417936376,9.08938468875666,1.9206426301159434,5.783621241089129,2.1113163234656183,4.906930055854657,4.267283147442617 +WI,-0.37300815558169464,0.8832832840706177,4.275193521299605,2.09560363367793,5.431151623336478,2.2485698421198803,-0.2653653454864866,3.0829496096359805 +WV,-1.2377078313141308,1.01660909678896,3.3642246614689544,1.8526319418737804,-1.6983561020114752,2.280308781949286,6.631705415500541,5.962326417829841 +WY,-0.9430900533734183,0.703878331506253,1.7735244491334168,1.5373550511058878,4.076570784543879,2.3452024842416366,2.2875591514264713,3.4164154357648435 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/kish.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/kish.csv new file mode 100644 index 0000000000..5dd8d2179d --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/kish.csv @@ -0,0 +1,52 @@ +,default,dense,acs_local +AK,37.98471782713533,270.77150015627655,81.68256219816811 +AL,68.58779990580473,302.1225190773023,114.89369341824126 +AR,62.105094021855884,340.8662484933955,115.11649934358303 +AZ,45.3284963055765,296.27404735040426,74.97248693960735 +CA,277.08738654108777,1571.984374501322,385.6580886961881 +CO,38.510189710362155,239.16896520980544,65.42288079603081 +CT,49.5349789411142,180.5316229527832,100.20771420344856 +DC,19.03272731145116,151.55028324914818,47.067422820631876 +DE,37.12606982158454,199.45531593242546,50.95816913382481 +FL,119.93288241090772,680.5172484470773,135.20425539702788 +GA,71.2010943685851,336.5775462207633,121.17506625331394 +HI,58.51650866276973,315.04884644114907,118.52750117470644 +IA,41.81425292673476,248.87914343785573,74.5874438402306 +ID,54.59837354512303,412.7402722405761,88.40879016819349 +IL,77.31565547770447,488.02407228200747,93.91544229009794 +IN,54.856248082255256,328.39335261640383,120.14005678566079 +KS,50.07299188694024,238.16662445033077,87.66666433303108 +KY,39.4390871820677,242.94924785422788,79.96088420874483 +LA,74.8147207314998,357.42522918734693,125.90331436963336 +MA,63.90054606623205,432.2779144396734,102.5908356155141 +MD,38.20362601166963,197.83070984087192,61.88106431360571 +ME,24.34994377274881,137.77424978153465,38.50834478575946 +MI,57.63202405362826,370.6413999162929,91.52893167205437 +MN,34.41797497157772,271.54651648227104,52.54399261696906 +MO,37.47299325842981,286.3754657950601,64.86277090035392 +MS,65.1592648114706,299.10670521027674,120.09612336052896 +MT,36.240991831947994,307.79544519159174,51.16610302382995 +NC,64.29252344351819,390.4904245076151,123.95133566758639 +ND,34.81082873025876,301.4267517946344,67.67907793489668 +NE,45.72247722942102,281.3067879221785,79.73182955023789 +NH,40.26227980094306,229.25765799638356,73.11100560293525 +NJ,61.915033896035,380.83081418269023,117.661096080773 +NM,50.83647659675805,329.9824113304191,90.34932912736528 +NV,44.3078778768284,263.85137487538793,85.62569767303911 +NY,110.80839106635864,525.8436288368683,174.20366464173924 +OH,70.15899268859908,409.7973160507123,136.868774475337 +OK,51.04119939077659,305.0616233774748,72.68188683082842 +OR,42.58183012576952,255.10068940140434,80.00122144021869 +PA,80.33797119132167,484.9549020616078,152.97423864359848 +RI,32.44104383646585,165.17111040093312,47.716257082316176 +SC,57.759130789909484,312.52952107298916,115.26644659001987 +SD,46.28145794319663,214.6810302293172,55.2407957270471 +TN,63.24513212545799,327.37855426628516,89.2695834668554 +TX,191.9565111320922,1101.5878734075197,294.32648200901883 +UT,67.83407114015975,363.0981758388387,88.5556251779635 +VA,73.11447903359787,333.23855259844123,135.12178712944925 +VT,36.56208754920278,295.25429070942306,68.58960036751176 +WA,63.10633166802377,413.42315881804,104.56017409766304 +WI,42.755161250901196,242.72152410910903,76.2063037717102 +WV,47.62918753183299,339.02582501747304,78.48511051927737 +WY,50.57422117899524,239.50162862168793,75.3355320006355 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_eval.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_eval.txt new file mode 100644 index 0000000000..3e2826992f --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_eval.txt @@ -0,0 +1,71 @@ + census moe acs_local se kish_src acs_share acs_only acs_only_se donor_only donor_only_se delta delta_se stored_2301 gap +state +AK 10.5 2.1 12.28 3.74 81.68 0.42 14.88 3.87 10.41 5.82 -1.71 1.26 12.27 1.78 +AL 15.5 2.4 15.10 3.71 114.89 0.31 15.01 1.32 15.13 5.34 -3.71 1.82 14.11 -0.40 +AR 13.3 2.7 6.87 1.51 115.12 0.34 10.61 1.41 4.89 2.11 -1.97 0.85 6.77 -6.43 +AZ 13.3 2.3 17.23 4.04 74.97 0.33 15.42 1.14 18.11 5.96 -6.41 3.17 17.13 3.93 +CA 17.9 1.0 19.81 1.96 385.66 0.28 17.18 0.45 20.86 2.73 -4.33 1.01 20.38 1.91 +CO 7.7 1.8 9.44 2.79 65.42 0.32 8.13 0.71 10.06 4.09 -0.74 0.24 9.37 1.74 +CT 12.8 3.2 12.64 2.98 100.21 0.35 15.00 1.63 11.36 4.50 -2.09 0.64 12.43 -0.16 +DC 20.3 3.7 21.18 5.26 47.07 0.40 22.10 5.49 20.56 7.99 -8.65 4.34 20.46 0.88 +DE 8.7 2.6 22.21 6.90 50.96 0.31 14.96 2.87 25.44 9.75 -2.97 1.68 22.21 13.51 +FL 18.4 1.8 22.72 3.45 135.20 0.32 13.31 0.58 27.09 5.11 -3.53 1.11 22.61 4.32 +GA 15.1 2.2 17.43 2.96 121.18 0.31 12.37 0.79 19.76 4.32 -3.46 1.31 17.40 2.33 +HI 13.0 2.6 5.86 1.99 118.53 0.38 5.07 0.84 6.33 3.16 -1.60 0.70 5.17 -7.14 +IA 8.2 1.9 5.39 1.77 74.59 0.35 5.44 0.84 5.37 2.67 -0.75 0.21 5.39 -2.81 +ID 6.5 1.3 6.88 1.65 88.41 0.33 9.52 1.54 5.57 2.31 -1.79 0.98 6.95 0.38 +IL 12.4 1.6 13.73 3.35 93.92 0.30 9.11 0.70 15.68 4.78 -4.43 2.02 18.09 1.33 +IN 10.6 2.2 9.22 2.15 120.14 0.35 9.88 0.81 8.86 3.31 -2.17 1.20 9.13 -1.38 +KS 9.7 2.5 11.59 4.70 87.67 0.33 8.62 1.16 13.07 6.97 -5.55 4.51 10.45 1.89 +KY 13.3 2.9 9.69 2.95 79.96 0.40 7.45 0.68 11.15 4.90 -2.52 1.20 9.64 -3.61 +LA 20.7 3.0 11.73 2.29 125.90 0.31 14.30 1.38 10.57 3.25 -1.62 0.35 11.57 -8.97 +MA 12.8 2.0 21.45 4.58 102.59 0.33 15.29 1.19 24.47 6.71 -3.44 1.67 20.93 8.65 +MD 10.7 2.5 17.59 4.22 61.88 0.32 11.38 1.18 20.55 6.25 -3.41 2.11 17.48 6.89 +ME 6.5 2.3 7.34 3.02 38.51 0.33 4.66 1.04 8.68 4.59 -2.63 1.57 7.27 0.84 +MI 10.3 1.9 9.52 2.72 91.53 0.32 6.85 0.57 10.78 4.01 -3.51 1.65 9.48 -0.78 +MN 6.9 1.9 5.15 1.66 52.54 0.34 5.55 0.72 4.94 2.48 -0.95 0.54 5.15 -1.75 +MO 9.7 2.3 16.71 3.97 64.86 0.33 10.97 1.00 19.57 5.87 -8.96 3.70 16.68 7.01 +MS 19.1 2.6 13.83 2.91 120.10 0.35 15.92 1.68 12.71 4.37 -3.39 1.56 12.93 -5.27 +MT 9.3 2.3 4.76 1.34 51.17 0.33 10.54 2.75 1.92 1.16 -0.67 0.24 4.75 -4.54 +NC 14.4 2.2 12.00 2.53 123.95 0.31 10.36 0.74 12.74 3.68 -5.35 1.88 11.70 -2.40 +ND 10.3 2.1 10.77 3.45 67.68 0.33 5.08 1.46 13.60 5.15 -1.23 0.56 10.77 0.47 +NE 7.1 1.9 9.45 4.22 79.73 0.31 6.62 1.43 10.70 6.02 -2.77 2.05 9.42 2.35 +NH 7.5 2.4 7.34 3.03 73.11 0.35 5.43 1.04 8.38 4.66 -1.74 1.15 7.56 -0.16 +NJ 13.3 1.9 9.56 1.92 117.66 0.34 11.96 0.77 8.34 2.82 -1.83 0.52 9.37 -3.74 +NM 10.9 2.1 14.01 3.80 90.35 0.37 14.85 2.57 13.52 5.86 -3.66 1.13 14.01 3.11 +NV 15.0 2.5 13.47 3.08 85.63 0.34 15.56 1.47 12.38 4.58 -1.74 0.63 13.60 -1.53 +NY 16.2 1.9 16.44 2.68 174.20 0.33 14.64 0.81 17.32 3.97 -3.17 0.83 16.43 0.24 +OH 12.3 2.1 9.09 1.85 136.87 0.36 10.26 0.71 8.43 2.85 -3.86 1.45 9.08 -3.21 +OK 9.9 2.0 13.83 4.17 72.68 0.30 7.47 0.69 16.57 5.96 -2.90 1.29 13.37 3.93 +OR 11.0 2.4 14.96 3.59 80.00 0.39 9.96 0.94 18.11 5.78 -2.10 1.41 14.90 3.96 +PA 11.1 2.0 13.90 2.88 152.97 0.35 11.13 0.96 15.38 4.37 -2.17 0.88 13.81 2.80 +RI 8.4 2.3 13.60 4.01 47.72 0.26 12.63 2.19 13.95 5.41 -7.08 3.27 10.11 5.20 +SC 11.1 2.1 10.81 2.46 115.27 0.37 12.13 1.22 10.02 3.85 -4.38 1.85 9.71 -0.29 +SD 7.8 2.2 6.73 2.33 55.24 0.27 6.71 1.52 6.74 3.14 -3.88 1.85 6.72 -1.07 +TN 10.0 1.7 16.56 3.08 89.27 0.33 18.32 1.36 15.70 4.50 -5.47 2.10 15.60 6.56 +TX 16.1 1.3 14.56 1.71 294.33 0.31 15.45 0.51 14.17 2.46 -3.24 0.93 14.51 -1.54 +UT 7.3 1.6 8.40 2.10 88.56 0.29 5.35 0.72 9.66 3.00 -0.92 0.40 8.39 1.10 +VA 12.1 2.4 15.48 3.64 135.12 0.31 10.44 0.74 17.77 5.24 -4.14 2.46 15.40 3.38 +VT 8.3 2.5 10.31 4.10 68.59 0.38 5.47 1.75 13.29 6.52 -0.17 0.08 10.24 2.01 +WA 9.3 1.9 14.19 3.43 104.56 0.34 11.36 1.06 15.66 5.17 -2.89 1.41 14.17 4.89 +WI 7.3 1.7 5.89 1.67 76.21 0.33 7.59 0.98 5.04 2.42 -3.24 1.33 5.81 -1.41 +WV 11.3 2.4 16.41 4.67 78.49 0.37 11.23 2.00 19.38 7.23 -11.85 4.61 16.38 5.11 +WY 6.5 1.4 7.40 2.50 75.34 0.33 5.34 1.47 8.43 3.69 -1.62 0.99 7.41 0.90 +median se 2.98 median delta se 1.29 current vs stored 2.30.1 mean abs 0.36 +all rows states 51 mean gap 0.88 sd 4.12 MAD 3.18 corr 0.542 beyond 29 median se 2.98 +ACS rows states 51 mean gap -0.64 sd 3.11 MAD 2.46 corr 0.686 beyond 22 median se 1.06 +donor rows states 51 mean gap 1.6 sd 5.33 MAD 4.34 corr 0.421 beyond 37 median se 4.5 +reform delta median -2.97 min -11.85 max -0.17 median se 1.29 + mean_gap mad beyond corr med_se med_delta med_delta_se acs_share DE DC TN MD LA MT HI MA +run +dup_release_repro 0.54 2.79 27 0.56 2.82 -2.99 1.30 0.35 19.72 19.40 16.04 17.18 12.03 4.53 5.72 19.18 +proj_chi_s050_0.03 0.28 2.73 21 0.57 2.61 -2.94 1.21 0.35 19.25 20.28 15.51 17.30 12.01 4.85 5.84 19.49 +soft_chi_s050_0.1 0.04 2.59 20 0.58 2.47 -2.97 1.16 0.37 18.94 20.18 15.61 16.93 11.96 4.26 5.93 19.48 +soft_chi_s700_0 0.27 2.52 24 0.63 2.09 -2.78 0.97 0.53 19.88 21.66 15.71 17.01 12.66 5.42 5.83 19.40 +soft_chi_s700_0.03 -0.03 2.40 23 0.64 1.86 -2.79 0.88 0.54 19.38 21.35 14.86 16.39 12.68 5.26 6.08 18.77 +soft_chi_s700_0.1 -0.23 2.33 20 0.66 1.87 -2.81 0.83 0.56 18.37 21.48 14.78 15.96 12.53 5.13 6.23 18.14 +soft_chi_s900_0 -0.15 2.27 24 0.72 1.18 -3.16 0.59 0.79 16.55 25.25 14.98 14.79 12.89 6.66 6.23 17.72 +soft_chi_s900_0.03 -0.45 2.16 22 0.75 1.09 -3.01 0.56 0.80 16.21 24.47 14.35 14.63 13.47 6.43 6.44 16.64 +soft_chi_s900_0.1 -0.70 2.13 21 0.75 1.01 -2.89 0.54 0.82 15.80 23.78 14.46 14.22 12.97 6.24 6.40 15.50 +soft_chi_s964_0 -0.42 2.23 23 0.75 0.92 -3.04 0.52 0.91 14.94 26.64 14.50 13.40 12.92 7.21 6.27 16.41 +soft_chi_s964_0.03 -0.65 2.14 22 0.77 0.87 -3.11 0.47 0.92 15.02 25.73 14.18 13.65 13.63 7.07 6.50 15.59 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acsrent_eval.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acsrent_eval.txt new file mode 100644 index 0000000000..0ebedcbfb3 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acsrent_eval.txt @@ -0,0 +1,71 @@ + census moe acs_local se kish_src acs_share acs_only acs_only_se donor_only donor_only_se delta delta_se stored_2301 gap +state +AK 10.5 2.1 12.32 3.74 81.68 0.42 14.98 3.87 10.41 5.82 0.00 0.00 12.27 1.82 +AL 15.5 2.4 15.06 3.72 114.89 0.31 14.89 1.32 15.13 5.34 0.00 0.00 14.11 -0.44 +AR 13.3 2.7 6.69 1.41 115.12 0.34 11.04 1.43 4.39 1.94 0.00 0.00 6.77 -6.61 +AZ 13.3 2.3 16.39 4.01 74.97 0.33 15.02 1.13 17.06 5.93 0.00 0.00 17.13 3.09 +CA 17.9 1.0 19.50 1.96 385.66 0.28 16.42 0.44 20.71 2.74 0.00 0.00 20.38 1.60 +CO 7.7 1.8 9.11 2.69 65.42 0.32 7.99 0.71 9.63 3.94 0.00 0.00 9.37 1.41 +CT 12.8 3.2 12.14 2.97 100.21 0.35 14.01 1.61 11.13 4.49 0.00 0.00 12.43 -0.66 +DC 20.3 3.7 20.06 5.20 47.07 0.40 19.34 5.36 20.56 7.99 -7.87 4.30 20.46 -0.24 +DE 8.7 2.6 21.36 6.90 50.96 0.31 14.96 2.87 24.21 9.76 -1.76 1.05 22.21 12.66 +FL 18.4 1.8 21.68 3.38 135.20 0.32 12.77 0.57 25.83 4.99 0.00 0.00 22.61 3.28 +GA 15.1 2.2 17.24 2.96 121.18 0.31 11.75 0.77 19.76 4.32 0.00 0.00 17.40 2.14 +HI 13.0 2.6 5.58 1.99 118.53 0.38 4.35 0.77 6.33 3.16 0.00 0.00 5.17 -7.42 +IA 8.2 1.9 5.33 1.77 74.59 0.35 5.26 0.83 5.37 2.67 0.00 0.00 5.39 -2.87 +ID 6.5 1.3 6.01 1.43 88.41 0.33 9.44 1.54 4.31 1.93 0.00 0.00 6.95 -0.49 +IL 12.4 1.6 12.71 3.13 93.92 0.30 8.57 0.69 14.46 4.47 0.00 0.00 18.09 0.31 +IN 10.6 2.2 9.21 2.15 120.14 0.35 9.85 0.81 8.86 3.31 0.00 0.00 9.13 -1.39 +KS 9.7 2.5 10.90 4.68 87.67 0.33 8.44 1.13 12.14 6.96 0.00 0.00 10.45 1.20 +KY 13.3 2.9 9.65 2.95 79.96 0.40 7.37 0.68 11.15 4.90 0.00 0.00 9.64 -3.65 +LA 20.7 3.0 10.58 2.17 125.90 0.31 14.04 1.38 9.02 3.06 0.00 0.00 11.57 -10.12 +MA 12.8 2.0 20.79 4.59 102.59 0.33 14.58 1.18 23.85 6.72 0.00 0.00 20.93 7.99 +MD 10.7 2.5 17.43 4.22 61.88 0.32 10.88 1.17 20.55 6.25 0.00 0.00 17.48 6.73 +ME 6.5 2.3 7.23 3.02 38.51 0.33 4.34 0.99 8.68 4.59 0.00 0.00 7.27 0.73 +MI 10.3 1.9 8.26 2.64 91.53 0.32 6.37 0.53 9.14 3.89 0.00 0.00 9.48 -2.04 +MN 6.9 1.9 5.10 1.66 52.54 0.34 5.40 0.71 4.94 2.48 0.00 0.00 5.15 -1.80 +MO 9.7 2.3 16.64 3.97 64.86 0.33 10.74 1.00 19.57 5.87 0.00 0.00 16.68 6.94 +MS 19.1 2.6 12.99 2.82 120.10 0.35 15.70 1.68 11.53 4.24 0.00 0.00 12.93 -6.11 +MT 9.3 2.3 4.62 1.33 51.17 0.33 10.14 2.73 1.90 1.15 0.00 0.00 4.75 -4.68 +NC 14.4 2.2 11.38 2.48 123.95 0.31 10.24 0.74 11.91 3.61 0.00 0.00 11.70 -3.02 +ND 10.3 2.1 10.67 3.45 67.68 0.33 4.75 1.43 13.60 5.15 0.00 0.00 10.77 0.37 +NE 7.1 1.9 9.50 4.22 79.73 0.31 6.78 1.44 10.70 6.02 0.00 0.00 9.42 2.40 +NH 7.5 2.4 7.20 3.03 73.11 0.35 5.03 1.00 8.38 4.66 0.00 0.00 7.56 -0.30 +NJ 13.3 1.9 10.34 2.16 117.66 0.34 11.52 0.78 9.75 3.22 0.00 0.00 9.37 -2.96 +NM 10.9 2.1 15.65 3.97 90.35 0.37 16.15 2.74 15.36 6.11 0.00 0.00 14.01 4.75 +NV 15.0 2.5 13.34 3.07 85.63 0.34 15.19 1.48 12.38 4.58 0.00 0.00 13.60 -1.66 +NY 16.2 1.9 15.07 2.64 174.20 0.33 13.14 0.69 16.01 3.93 0.00 0.00 16.43 -1.13 +OH 12.3 2.1 7.43 1.44 136.87 0.36 10.08 0.67 5.95 2.17 0.00 0.00 9.08 -4.87 +OK 9.9 2.0 13.73 4.17 72.68 0.30 7.14 0.68 16.57 5.96 0.00 0.00 13.37 3.83 +OR 11.0 2.4 15.22 3.60 80.00 0.39 9.69 0.94 18.72 5.80 0.00 0.00 14.90 4.22 +PA 11.1 2.0 13.64 2.88 152.97 0.35 10.36 0.91 15.38 4.37 0.00 0.00 13.81 2.54 +RI 8.4 2.3 13.36 4.00 47.72 0.26 11.71 2.14 13.95 5.41 0.00 0.00 10.11 4.96 +SC 11.1 2.1 10.59 2.45 115.27 0.37 11.55 1.20 10.02 3.85 0.00 0.00 9.71 -0.51 +SD 7.8 2.2 6.73 2.33 55.24 0.27 6.71 1.52 6.73 3.14 0.00 0.00 6.72 -1.07 +TN 10.0 1.7 16.42 3.07 89.27 0.33 17.97 1.35 15.67 4.49 0.00 0.00 15.60 6.42 +TX 16.1 1.3 14.05 1.69 294.33 0.31 15.26 0.51 13.50 2.42 0.00 0.00 14.51 -2.05 +UT 7.3 1.6 8.36 2.10 88.56 0.29 5.22 0.71 9.66 3.00 0.00 0.00 8.39 1.06 +VA 12.1 2.4 14.13 3.50 135.12 0.31 10.22 0.74 15.90 5.05 0.00 0.00 15.40 2.03 +VT 8.3 2.5 10.31 4.10 68.59 0.38 5.47 1.75 13.29 6.52 0.00 0.00 10.24 2.01 +WA 9.3 1.9 14.14 3.51 104.56 0.34 10.82 1.06 15.86 5.29 0.00 0.00 14.17 4.84 +WI 7.3 1.7 4.21 1.19 76.21 0.33 7.34 0.98 2.65 1.64 0.00 0.00 5.81 -3.09 +WV 11.3 2.4 15.27 4.59 78.49 0.37 11.57 2.01 17.40 7.11 0.00 0.00 16.38 3.97 +WY 6.5 1.4 7.52 2.50 75.34 0.33 5.70 1.50 8.43 3.69 0.00 0.00 7.41 1.02 +median se 2.97 median delta se 0.0 current vs stored 2.30.1 mean abs 0.65 +all rows states 51 mean gap 0.49 sd 4.19 MAD 3.21 corr 0.513 beyond 29 median se 2.97 +ACS rows states 51 mean gap -0.97 sd 3.16 MAD 2.53 corr 0.658 beyond 24 median se 1.06 +donor rows states 51 mean gap 1.19 sd 5.4 MAD 4.37 corr 0.398 beyond 38 median se 4.49 +reform delta median 0.0 min -7.87 max 0.0 median se 0.0 + mean_gap mad beyond corr med_se med_delta med_delta_se acs_share DE DC TN MD LA MT HI MA +run +dup_release_repro 0.16 2.88 25 0.52 2.81 0.0 0.0 0.35 19.01 18.26 15.82 17.00 11.03 4.40 5.37 18.39 +proj_chi_s050_0.03 -0.05 2.84 24 0.54 2.62 0.0 0.0 0.35 18.65 19.22 15.20 17.12 10.98 4.71 5.52 19.05 +soft_chi_s050_0.1 -0.29 2.70 23 0.55 2.49 0.0 0.0 0.37 18.22 18.87 15.22 16.75 11.04 4.20 5.60 19.09 +soft_chi_s700_0 -0.09 2.55 25 0.59 2.01 0.0 0.0 0.53 19.36 20.15 15.51 16.75 11.51 5.31 5.30 18.60 +soft_chi_s700_0.03 -0.35 2.47 24 0.62 1.84 0.0 0.0 0.54 18.87 19.88 14.54 16.13 11.86 5.18 5.57 18.29 +soft_chi_s700_0.1 -0.55 2.43 21 0.63 1.88 0.0 0.0 0.56 17.84 19.98 14.41 15.70 11.79 5.06 5.74 17.71 +soft_chi_s900_0 -0.49 2.27 22 0.71 1.17 0.0 0.0 0.79 16.30 23.40 14.62 14.36 12.32 6.60 5.46 17.05 +soft_chi_s900_0.03 -0.78 2.23 23 0.73 1.07 0.0 0.0 0.80 15.96 22.66 13.98 14.24 13.00 6.36 5.73 16.12 +soft_chi_s900_0.1 -1.02 2.20 25 0.73 0.99 0.0 0.0 0.82 15.55 21.95 14.06 13.80 12.53 6.17 5.73 14.99 +soft_chi_s964_0 -0.76 2.24 21 0.74 0.92 0.0 0.0 0.91 14.83 24.64 14.08 12.90 12.56 7.20 5.43 15.79 +soft_chi_s964_0.03 -0.97 2.20 22 0.76 0.86 0.0 0.0 0.92 14.91 23.75 13.77 13.18 13.31 7.05 5.72 15.07 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/ctc_ssn.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/ctc_ssn.txt new file mode 100644 index 0000000000..aaead1ede4 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/ctc_ssn.txt @@ -0,0 +1,7 @@ +['ssn_card_type', 'immigration_status_str'] +{'CITIZEN': 0.9229, 'NONE': 0.0402, 'OTHER_NON_CITIZEN': 0.0252, 'NON_CITIZEN_VALID_EAD': 0.0118} +lost share of child weight 2.48 units 1058 +lost units with no adult holding a valid card, share of lost child weight 0.834 +all child units with no valid-card adult, share of child weight 4.58 +{'asec': 0.377, 'puf_tax_detail': 0.623} +flips into poverty, child weight share 1.58 of which lost CTC 0.11 of which lost and no valid adult 0.09 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/dmiss.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/dmiss.txt new file mode 100644 index 0000000000..7063faf1eb --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/dmiss.txt @@ -0,0 +1,24 @@ +['household_weight', 'initial_household_weight', 'target_names', 'target_values', 'initial_estimates', 'final_estimates', 'relative_errors', 'registry_version'] +1242 irs_soi.ty2022.historic_table_2.state_eitc.az.... +2941 irs_soi.ty2022.historic_table_2.state_agi.ar.5... +3803 census_pep.v2024.cy2024.state_resident_populat... +1513 irs_soi.ty2022.historic_table_2.state_broad.mn... +3502 irs_soi.ty2022.historic_table_2.state_broad.ms... +1817 irs_soi.ty2022.historic_table_2.state_broad.sd... +745 irs_soi.ty2022.historic_table_2.state_broad.dc... +4520 irs_soi.ty2023.historic_table_2.state_agi.de.1... +5254 irs_soi.ty2022.historic_table_2.state_agi.tx.2... +4934 irs_soi.ty2022.historic_table_2.state_agi.ca.1... +2067 hhs_acf_tanf.fy2024.cash_assistance.oh.basic_a... +1914 irs_soi.ty2024.filing_season_week47.eitc_by_ag... +snap_spend 53 agg init miss -0.378 agg final -0.022 median rel init -0.383 +snap 104 agg init miss -0.378 agg final -0.022 median rel init -0.241 +medicaid 135 agg init miss -0.262 agg final -0.034 median rel init -0.285 +chip 83 agg init miss -0.31 agg final -0.076 median rel init -0.382 +eitc 782 agg init miss -0.508 agg final -0.026 median rel init -0.518 +aca 102 agg init miss -0.439 agg final -0.102 median rel init -0.333 +ctc 104 agg init miss -0.021 agg final -0.077 median rel init -0.022 +wages 108 agg init miss -0.033 agg final -0.03 median rel init -0.002 +agi 262 agg init miss -0.042 agg final 0.002 median rel init 0.002 +income_tax 252 agg init miss -0.093 agg final -0.004 median rel init 0.07 +pop 1102 agg init miss -0.034 agg final -0.03 median rel init -0.009 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/house.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/house.txt new file mode 100644 index 0000000000..cb77b1e707 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/house.txt @@ -0,0 +1,8 @@ +['receives_housing_assistance', 'takes_up_housing_assistance_if_eligible', 'takes_up_tanf_if_eligible', 'takes_up_snap_if_eligible'] +{'receives_housing_assistance': 0.0207, 'takes_up_housing_assistance_if_eligible': 0.0207} +census recipient share of child weight 0.0623 PE subsidy>0 share 0.0161 +receives_housing_assistance among census recipients 1.0 among others 0.0 +takes_up_housing_assistance_if_eligible among census recipients 1.0 among others 0.0 +census recipients with PE subsidy>0 0.259 +mean subsidy among census recipients: census 8614 PE 1704 +mean among both: census 8083 PE 6579 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/noise_ci.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/noise_ci.txt new file mode 100644 index 0000000000..29d8532aa3 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/noise_ci.txt @@ -0,0 +1,12 @@ +default_replicate {'Q': np.float64(88.406), 'df': 50, 'p': 0.001, 'tau': np.float64(3.247), 'tau_lo': np.float64(1.712), 'tau_hi': np.float64(4.841), 'var': np.float64(26.118), 'noise_share': np.float64(0.596), 'noise_share_lo': np.float64(0.103), 'noise_share_hi': np.float64(0.888), 'mean_v': 17.326} +default_replicate_rmse {'Q': np.float64(64.789), 'df': 50, 'p': 0.078, 'tau': np.float64(2.283), 'tau_lo': np.float64(0.0), 'tau_hi': np.float64(4.147), 'var': np.float64(26.118), 'noise_share': np.float64(0.801), 'noise_share_lo': np.float64(0.342), 'noise_share_hi': np.float64(1.0), 'mean_v': 22.842} +default_linearized {'Q': np.float64(71.548), 'df': 50, 'p': 0.024, 'tau': np.float64(2.732), 'tau_lo': np.float64(0.138), 'tau_hi': np.float64(4.147), 'var': np.float64(26.118), 'noise_share': np.float64(0.714), 'noise_share_lo': np.float64(0.342), 'noise_share_hi': np.float64(0.999), 'mean_v': 24.256} +replicate over linearized: median 0.86 range 0.53 2.17 +mean abs replicate bias 1.83 largest {'MT': 4.92, 'RI': 5.76, 'TN': 6.93} +dense_published {'Q': np.float64(147.799), 'df': 50, 'p': 0.0, 'tau': np.float64(3.071), 'tau_lo': np.float64(2.329), 'tau_hi': np.float64(4.344), 'var': np.float64(16.196), 'noise_share': np.float64(0.418), 'noise_share_lo': np.float64(-0.165), 'noise_share_hi': np.float64(0.665), 'mean_v': 5.798} +acs_local_all {'Q': np.float64(73.284), 'df': 50, 'p': 0.018, 'tau': np.float64(2.015), 'tau_lo': np.float64(0.467), 'tau_hi': np.float64(3.496), 'var': np.float64(16.981), 'noise_share': np.float64(0.761), 'noise_share_lo': np.float64(0.28), 'noise_share_hi': np.float64(0.987), 'mean_v': 12.562} +acs_rows {'Q': np.float64(131.574), 'df': 50, 'p': 0.0, 'tau': np.float64(2.078), 'tau_lo': np.float64(1.625), 'tau_hi': np.float64(3.215), 'var': np.float64(9.703), 'noise_share': np.float64(0.555), 'noise_share_lo': np.float64(-0.065), 'noise_share_hi': np.float64(0.728), 'mean_v': 4.354} +acs_local_donors {'Q': np.float64(74.386), 'df': 50, 'p': 0.014, 'tau': np.float64(2.786), 'tau_lo': np.float64(0.648), 'tau_hi': np.float64(4.315), 'var': np.float64(28.398), 'noise_share': np.float64(0.727), 'noise_share_lo': np.float64(0.344), 'noise_share_hi': np.float64(0.985), 'mean_v': 25.419} +null shift+noise {'mad': [3.44, 3.56, 4.25, 4.98, 5.13], 'sd': [3.27, 3.4, 4.12, 4.95, 5.12], 'beyond': [30.0, 31.0, 36.0, 41.0, 42.0], 'obs': {'mad': 4.79849727626572, 'sd': 5.1105998537849535, 'beyond': 38}, 'p_mad': 0.1035, 'p_sd': 0.0259, 'p_beyond': 0.3107} +null shift+noise+tau {'mad': [3.97, 4.12, 4.94, 5.82, 6.0], 'sd': [4.21, 4.37, 5.23, 6.18, 6.38], 'beyond': [31.0, 32.0, 37.0, 42.0, 43.0], 'obs': {'mad': 4.79849727626572, 'sd': 5.1105998537849535, 'beyond': 38}, 'p_mad': 0.6065, 'p_sd': 0.58635, 'p_beyond': 0.49405} +ACS-local null {'mad': [2.22, 2.3, 2.79, 3.32, 3.43], 'sd': [2.75, 2.86, 3.5, 4.24, 4.4], 'beyond': [20.0, 21.0, 27.0, 32.0, 34.0], 'obs': {'mad': 3.176892139210129, 'sd': 4.120827319858382, 'beyond': 29}, 'p_mad': 0.11205, 'p_sd': 0.0818, 'p_beyond': 0.2998} diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/part.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/part.txt new file mode 100644 index 0000000000..b73b7c7f22 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/part.txt @@ -0,0 +1,8 @@ +dense ['partnership_income', 's_corp_income'] {'partnership_income': 1.7, 's_corp_income': 0.0} + check identity 1.0 share child units with nonzero 0.0881 + child rate was 16.62 with income added 15.29 + by channel {'asec': (np.float64(20.52), np.float64(20.52)), 'puf_tax_detail': (np.float64(13.63), np.float64(11.27))} +default ['partnership_income', 's_corp_income'] {'partnership_income': 0.7, 's_corp_income': 0.0} + check identity 1.0 share child units with nonzero 0.111 + child rate was 15.69 with income added 14.65 + by channel {'asec': (np.float64(19.84), np.float64(19.84)), 'puf_tax_detail': (np.float64(12.76), np.float64(10.99))} diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/puf_house.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/puf_house.txt new file mode 100644 index 0000000000..26e3abbbc2 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/puf_house.txt @@ -0,0 +1,8 @@ +['spm_unit_source_id', 'spm_unit_support_channel', 'spm_unit_support_clone_index'] +unweighted rate asec 0.0373 puf clone 0.0205 units 176039 176039 +puf False True +asec +False 0.982 0.018 +True 0.904 0.096 +rate of puf given asec=1 0.096 given asec=0 0.018 +{('asec', False): 0.0005, ('asec', True): 0.0775, ('puf_tax_detail', False): 0.0039, ('puf_tax_detail', True): 0.0282} diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/rent4.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/rent4.txt new file mode 100644 index 0000000000..97ec630105 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/rent4.txt @@ -0,0 +1,19 @@ +['household_id', 'household_source_id', 'household_support_channel', 'household_support_clone_index'] +['source_year', 'source_household_id', 'source_person_id', 'source_row_id', 'child_support_received', 'child_support_expense', 'person_source_id', 'person_support_channel', 'person_support_clone_index'] +first household ids [1, 2, 3, 4] monotone hh True monotone person hh False +heads 352932 households 352932 same position share 0.0926 +asec 0 heads 168852 hh 168852 + same position 0.0915 + own row {'RENTED': 0.408, 'OWNED_WITH_MORTGAGE': 0.271, 'NONE': 0.251} + nth household {'RENTED': 1.0, 'OWNED_WITH_MORTGAGE': 0.0, 'NONE': 0.0} +asec 1 heads 0 hh 0 +asec 2 heads 0 hh 0 +puf_tax_detail 0 heads 0 hh 0 +puf_tax_detail 1 heads 168852 hh 168852 + same position 0.0915 + own row {'RENTED': 0.408, 'OWNED_WITH_MORTGAGE': 0.271, 'NONE': 0.251} + nth household {'RENTED': 1.0, 'OWNED_WITH_MORTGAGE': 0.0, 'NONE': 0.0} +puf_tax_detail 2 heads 15228 hh 15228 + same position 0.1186 + own row {'RENTED': 0.41, 'OWNED_WITH_MORTGAGE': 0.302, 'NONE': 0.429} + nth household {'RENTED': 0.411, 'OWNED_WITH_MORTGAGE': 0.302, 'NONE': 0.31} diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/rent5.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/rent5.txt new file mode 100644 index 0000000000..1bb4fcd45c --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/rent5.txt @@ -0,0 +1,16 @@ +rent cols ['SPM_WNEWPARENT', 'rental_income', 'pre_subsidy_rent', 'farm_rent_income', 'farm_rent_income_would_be_qualified', 'rental_income_would_be_qualified', 'acs_interest_dividend_rental_income'] ['H_TENURE', 'tenure_type', 'RNTP', 'GRNTP', 'acs_monthly_contract_rent', 'acs_monthly_gross_rent'] +hh tenure {'OWNED_WITH_MORTGAGE': 0.371, 'OWNED_OUTRIGHT': 0.277, 'RENTED': 0.222, 'NONE': 0.129} + w any_rent mean_pos any_ret n +household_support_channel tenure_type +acs_2024_1yr NONE 1.287 0.130 14765.803 0.000 204874.0 + OWNED_OUTRIGHT 10.345 0.300 14843.534 0.939 440126.0 + OWNED_WITH_MORTGAGE 15.305 0.299 15142.983 0.964 548558.0 + RENTED 11.746 0.396 15073.924 0.000 336110.0 +asec NONE 0.326 0.327 12393.766 0.000 237.0 + OWNED_WITH_MORTGAGE 23.651 0.285 13839.141 0.000 15407.0 + RENTED 12.740 0.431 14457.648 0.000 6556.0 +puf_tax_detail NONE 0.439 0.426 12868.287 0.312 330.0 + OWNED_WITH_MORTGAGE 33.105 0.312 14183.404 0.513 25180.0 + RENTED 13.593 0.394 14713.438 0.328 9530.0 +same position household/head (1405648, 1586908) +{'receives_housing_assistance': 0.0008, 'takes_up_housing_assistance_if_eligible': 0.0252} diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/noise_ci.json b/docs/evidence/us-state-child-spm-2026-11/outputs/noise_ci.json new file mode 100644 index 0000000000..aad2f3a899 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/noise_ci.json @@ -0,0 +1,186 @@ +{ + "default_replicate": { + "Q": 88.40618049421572, + "df": 50, + "p": 0.0006606953818153031, + "tau": 3.2465694661482893, + "tau_lo": 1.7122878484524746, + "tau_hi": 4.840911706611139, + "var": 26.118230865506785, + "noise_share": 0.5964422953146344, + "noise_share_lo": 0.10275599171023486, + "noise_share_hi": 0.8877439405809803, + "mean_v": 17.326059541770654 + }, + "default_replicate_rmse": { + "Q": 64.78855186048433, + "df": 50, + "p": 0.07791977349463591, + "tau": 2.2826487494363596, + "tau_lo": 0.0, + "tau_hi": 4.1468010853791135, + "var": 26.118230865506785, + "noise_share": 0.8005038955305108, + "noise_share_lo": 0.34161087210499586, + "noise_share_hi": 1.0, + "mean_v": 22.84239401986353 + }, + "default_linearized": { + "Q": 71.54752778678422, + "df": 50, + "p": 0.024417951201096147, + "tau": 2.7318501167333893, + "tau_lo": 0.13774138913839723, + "tau_hi": 4.146775759450035, + "var": 26.118230865506785, + "noise_share": 0.7142606978732124, + "noise_share_lo": 0.3416189140945187, + "noise_share_hi": 0.9992735844024248, + "mean_v": 24.25633958471365 + }, + "dense_published": { + "Q": 147.79926318354475, + "df": 50, + "p": 1.3400118212676642e-11, + "tau": 3.0713486973806456, + "tau_lo": 2.3294462752155356, + "tau_hi": 4.343865613386318, + "var": 16.19589516275953, + "noise_share": 0.41755718185974466, + "noise_share_lo": -0.16505869404164986, + "noise_share_hi": 0.6649570835953119, + "mean_v": 5.79846072243994 + }, + "acs_local_all": { + "Q": 73.28394711139177, + "df": 50, + "p": 0.017600667293570144, + "tau": 2.0152989229220633, + "tau_lo": 0.46677414231140657, + "tau_hi": 3.4958661033570277, + "var": 16.981217800091212, + "noise_share": 0.7608281221910355, + "noise_share_lo": 0.2803178219329473, + "noise_share_hi": 0.9871694655533257, + "mean_v": 12.56197920084301 + }, + "acs_rows": { + "Q": 131.573636682349, + "df": 50, + "p": 2.906283832072266e-09, + "tau": 2.078444059024237, + "tau_lo": 1.6247665391479142, + "tau_hi": 3.215085974576774, + "var": 9.702983308697004, + "noise_share": 0.5547833517737689, + "noise_share_lo": -0.06531955122041655, + "noise_share_hi": 0.7279325107806256, + "mean_v": 4.354307742910868 + }, + "acs_local_donors": { + "Q": 74.38600098457465, + "df": 50, + "p": 0.01421571165194804, + "tau": 2.786391456644747, + "tau_lo": 0.6482180731228857, + "tau_hi": 4.314776890702981, + "var": 28.397890778366232, + "noise_share": 0.7266002109009624, + "noise_share_lo": 0.3444125917010953, + "noise_share_hi": 0.9852035958021484, + "mean_v": 25.419275862349163 + }, + "null_shift_noise": { + "mad": [ + 3.44, + 3.56, + 4.25, + 4.98, + 5.13 + ], + "sd": [ + 3.27, + 3.4, + 4.12, + 4.95, + 5.12 + ], + "beyond": [ + 30.0, + 31.0, + 36.0, + 41.0, + 42.0 + ], + "obs": { + "mad": 4.79849727626572, + "sd": 5.1105998537849535, + "beyond": 38 + }, + "p_mad": 0.1035, + "p_sd": 0.0259, + "p_beyond": 0.3107 + }, + "null_shift_noise_tau": { + "mad": [ + 3.97, + 4.12, + 4.94, + 5.82, + 6.0 + ], + "sd": [ + 4.21, + 4.37, + 5.23, + 6.18, + 6.38 + ], + "beyond": [ + 31.0, + 32.0, + 37.0, + 42.0, + 43.0 + ], + "obs": { + "mad": 4.79849727626572, + "sd": 5.1105998537849535, + "beyond": 38 + }, + "p_mad": 0.6065, + "p_sd": 0.58635, + "p_beyond": 0.49405 + }, + "acs_null_shift_noise": { + "mad": [ + 2.22, + 2.3, + 2.79, + 3.32, + 3.43 + ], + "sd": [ + 2.75, + 2.86, + 3.5, + 4.24, + 4.4 + ], + "beyond": [ + 20.0, + 21.0, + 27.0, + 32.0, + 34.0 + ], + "obs": { + "mad": 3.176892139210129, + "sd": 4.120827319858382, + "beyond": 29 + }, + "p_mad": 0.11205, + "p_sd": 0.0818, + "p_beyond": 0.2998 + } +} \ No newline at end of file diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/resource_growth.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/resource_growth.csv new file mode 100644 index 0000000000..cf4951fec8 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/resource_growth.csv @@ -0,0 +1,8 @@ +,census_resources,census_ratio,default_resources,default_ratio,dense_resources,dense_ratio +p10,5.572992528286336,-0.6628556264017593,1.9593121394547275,-3.379441128325922,2.461736563431005,-3.1682503171614362 +p15,5.6941245651002115,-0.47809280809800736,1.5705957590850472,-3.1612198740720077,2.5789728175627413,-3.093012945307272 +p20,5.10029964646439,0.8951255529286106,2.767501174728748,-2.9139083808101818,2.967156024120987,-2.691061834311659 +p25,3.61727109393597,-0.012706043451604643,2.8136635457423953,-2.725075401091881,3.0745873065608054,-2.064967390677064 +p30,4.204651807688298,-0.014600381143525798,2.7913913186986106,-2.0917520689309743,3.164202872783406,-1.9759396022205222 +p40,6.17948033252691,1.0409208805201686,3.080334916550087,-1.7668139481831546,3.816697941310787,-1.059424246097418 +p50,6.155863984200649,0.39919344212298036,3.945784267751029,-0.8181434451128178,4.556583582205476,-0.35012710057588103 diff --git a/docs/evidence/us-state-child-spm-2026-11/receipts.json b/docs/evidence/us-state-child-spm-2026-11/receipts.json index a1f8d76434..b5d0cbc8cb 100644 --- a/docs/evidence/us-state-child-spm-2026-11/receipts.json +++ b/docs/evidence/us-state-child-spm-2026-11/receipts.json @@ -12,24 +12,139 @@ "repo": "policyengine/populace-us", "revision": "9a814a3b3b53c0ecd6e1737b6ec862c31300ef6f", "file": "populace_us_2024.h5", - "sha256": "62b51ad7f37d5fcc3a7393a0ce284eee5972033885af1c823dcef05d3d947c6e", + "sha256": "6496cc4393d4d3c6574f76eca231de5898c803b9067645591fd5c4d3e65aee84", "bytes": 826917837 }, "dense": { "repo": "policyengine/populace-us", "revision": "15cefac484174ae0ee11a82b164f58023ad05c84", "file": "populace_us_2024.h5", - "sha256": "a7cca5d157ac11f451629d81e2e638ac0e1dd464f59264bbdb3c8f64e6c76f31", + "sha256": "2d9c8586c45c32e5ca27357317f4de93b526cc51dd28b15b71ed43e47e142e79", "bytes": 2509287855 }, "acs_local": { "repo": "policyengine/populace-us", "revision": "725d89993f6b2dc4821fd5c3620f0f3d4d630102", "file": "populace_us_2024_acs_local.h5", - "sha256": "f6e23235d4fd233bd69bcf8875ccaa1144abfde58e769cee930658535092237a", + "sha256": "3ce781c440a7f933b1d952ff4e9d9f65f4698c64b94d2fad165af0c662838d6c", "bytes": 9819603807 } }, + "external_inputs": { + "_build_artifacts/acs-local-l2-basis-20260928/runs/dup_release_repro/weights.npz": "e4210a98d415bcff95d57741730af5b657e7f280cea29f88fa50276927516ee6", + "_build_artifacts/acs-local-l2-basis-20260928/runs/proj_chi_s050_0.03/weights.npz": "afb966f4fc16d5c14f70d2ba3c643c63a675f6e6be89b5a07a0028d01b62dc45", + "_build_artifacts/acs-local-l2-basis-20260928/runs/soft_chi_s050_0.1/weights.npz": "b1d7b52a0ab9bbfedf309ca2972bb6b1ceba712da17b237c79983d73a63ce170", + "_build_artifacts/acs-local-l2-basis-20260928/runs/soft_chi_s700_0/weights.npz": "4bc4a1cdd751e24da32ceee757f1ee0e3c64cf3545f93f13e9a1b8a09e634e8a", + "_build_artifacts/acs-local-l2-basis-20260928/runs/soft_chi_s700_0.03/weights.npz": "25a3ecbd5f6ac31415974048350a48319f9f263a572a9e74243837e66c9cf419", + "_build_artifacts/acs-local-l2-basis-20260928/runs/soft_chi_s700_0.1/weights.npz": "4499a1cdf3da9778e1b0db990b0b7c32fd9ff9872517360a01d42e63c9b44936", + "_build_artifacts/acs-local-l2-basis-20260928/runs/soft_chi_s900_0/weights.npz": "1174bb737c327ced6dd07650cab9d6d437a9e2e076ea34c278d385c0b34dd4b2", + "_build_artifacts/acs-local-l2-basis-20260928/runs/soft_chi_s900_0.03/weights.npz": "f8e35eca816fa2e07edb217d78c05f9ad753543441de3d24d7e3a61756b0b8bf", + "_build_artifacts/acs-local-l2-basis-20260928/runs/soft_chi_s900_0.1/weights.npz": "d27fd2a230ae287b3c646c3341ec9a87afb703af2e2c3fef248f68eb62550ac4", + "_build_artifacts/acs-local-l2-basis-20260928/runs/soft_chi_s964_0/weights.npz": "77ae091001843f1d763131ea736d25736ded79fe35a4c44457bb8309222775cf", + "_build_artifacts/acs-local-l2-basis-20260928/runs/soft_chi_s964_0.03/weights.npz": "e22df339370b2e1d22876067542bba58fb4b1573456ebc2c6f80ddab8f15594e", + "reviews/pe30-population-2026-09-27/out/calib_resolve/R0_full.json": "24fe95ad9d0c6b9b8eac080b251411d50f35487ba816e89a12f8a85237e97e09", + "reviews/pe30-population-2026-09-27/out/calib_resolve/R0_full.npz": "de2f96125eae75a5a626351f4ff85390091dfda64226a32b9448975c70014371", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_aca.json": "89b7a5e4955bcbe44ab1a5b037244c932f906c8e7afdccfb23063fca66834869", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_aca.npz": "0018aa85295524055b85c2ea64c66b1fbc8e455fff879389849e7430111d075b", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_all_eitc.json": "f1a73d69bfd3fd3836b57ebffe2fb6f7f801ed0246a18da4a73898d9a3f4876e", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_all_eitc.npz": "0916eebc15b21b43b373bdbdfa5c1dca887aa9e4279a8d3959fd3f40df389dfb", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_all_eitc_ctc_actc.json": "a93cc6e919f602cc6e676a0655e7d0e6b7e179ecc306db18e1b885f839bbae81", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_all_eitc_ctc_actc.npz": "c8b6d18740bbdab373b5927e20403bd85e897527eb5a03049c0f90acac81ec48", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_count_eitc_ctc_actc.json": "bb3f72c1fd53d21af1bec2fd03d60713dd0cb8a07374acfe2d2918bbb261c49a", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_count_eitc_ctc_actc.npz": "cc8198bea293e0e65d2d87de0cb048c54dc37d4737471dcd25ac4ff62ba59416", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_ctc_actc.json": "e8dafa308ac214e828f71bf41cc66df8f4de10734a4c3b8ffedc7bbe094c915e", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_ctc_actc.npz": "1b77dedd2da04810530f71ecf6ebf24d40f24fce62778e2fd9c1b2f46053592d", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_ctc_actc_tax.json": "d97c75780bb30402a9cc5a151957e57d2924c1bf6b55cfa0f0e231e6c6094419", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_ctc_actc_tax.npz": "c26a54916896e654b44b624743eb066ad2928597d1c549ee928ee13c0dd94b31", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_ctc_actc_tax_count.json": "0f8e8d9772a21886a8cca7d6c73599d4a02281748a195411129ffbcc8c9b6ee2", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_ctc_actc_tax_count.npz": "ab5f3fda5b7ded14072727fd50a8f0cd9fd5a7ec3da4b245bd8263414e078f64", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_medicaid_chip.json": "3fd9b0b281ca9dd672b5312091f9b810148a5a7f5932a75c635509f517a43c2d", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_medicaid_chip.npz": "1d838b78aa9cde081ffc67c0249e2ff81a9f6a9e6aa93de9c5479442e1ece4f5", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_other_bea.json": "00b71dfbdd8544de40c45c2576aa3283f2c8dbe6cf4f8aa4770c07929da91bd3", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_other_bea.npz": "2e5381b889101eb1c9a2ec3f74c07cd9ea303c470a569f1105ed5a39860f0d40", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_other_cbo.json": "8dde58824fb4a179dec25a4b971209f876e73c461bea11330c77f446046f67b8", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_other_cbo.npz": "6adf64d7bf8b5677293bf0530aa12bbff7ebd9f93a4016a259973c036b581c8a", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_other_federal_reserve.json": "abf902b1b932aa3026c6bf10d5cbd1b62ae0ba4b7d4b487a82c0d2068bbf44bc", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_other_federal_reserve.npz": "c9fd8567900d4ae4dbda77575d4ca8ba98f804456ee8e2980474b5cd197ce7c3", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_other_hhs_acf_tanf.json": "5fdbb2847dd04caac539ac9aab3f087e4dd9683069e785e6e35e8bf618b74399", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_other_hhs_acf_tanf.npz": "cc3d615565bfa808d911ad88effba3a7c6cdd79cd617107b06759a08f876b3f2", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_other_ssa.json": "abbf4190d36bc435f0e67a34a57ed5e95de56d0e3c759ed2d0b5ae1942a4fb1c", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_other_ssa.npz": "17c9e9601eec8d36319ec7221e9a65b23355810ea1f30b0d4552f44ecf125d76", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_other_state_income_tax.json": "29b28acfa8d606af9ca4c53f972828a6ac7df1e21bb61fc062aa34cacb9479b0", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_other_state_income_tax.npz": "b9e38cbc14b98b5326970203746b257b65b44c74612e5510aa088d997f58b825", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_pep_national.json": "c2ff723358be09dc6a3ed607ecdc3a470c66af56f5fb0e6700a94a6803d02d74", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_pep_national.npz": "35fb8905dc676a6b63449223f4602d13acbced390aefcaca25085b2a4d66e09b", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_pep_state.json": "02ee16eebd0de24a178c04c3e1090397d992838dcbc4038a176e5b075878a24f", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_pep_state.npz": "de4f5c80e4c34c41b93035d69cf5bc81621681381885e2a0b2f07a3bc1fdc727", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_snap.json": "9f0236697cbc6844691ed9edcd39bc460652b6a11868e6ca4b90ac70261e2a13", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_snap.npz": "16dddaf7b493144e0545babe9bc05be151340da9e434a3b6f70410c1ef4a9d14", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_actc.json": "f8c4ead73d8725d3b597c6ab28feb11b4ef9641f8ff591008a4389a3fcf10007", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_actc.npz": "feec98b64b38cdc38e1041d83c7f9231b9f7bb3ca06921b433fc66c9fbc1fdc7", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_ctc.json": "feac6d11c081d2abb51190d59f00a588f38094a9b3b0dc20fa26241931fb1969", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_ctc.npz": "cd0d39f562e931f379df9ebfcc550bd372708bb17b9174016acc596f78d15ea1", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_eitc_other.json": "939bdbffef7eeaf87fea9f2c5cb4b0d3db57d05c4b2b8fc494c296b9b7894437", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_eitc_other.npz": "9841c6b7aab3a0abb28a3038f16911f29bf8775680912d33757e5cff6495772e", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_eitc_state.json": "d3d6ef6ee268f121437039d4963b13586819704dfa4cddf1ac42bca342977add", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_eitc_state.npz": "9b7a8794b415a0cdd0149b1ee8ba878994d85d048a1c9ee3144ee5c35dd8e02b", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_eitc_t25_by_agi_children.json": "1ae4eac907bcc7998cf35fbc60bff6345400aa733d99eacd6fd65ec62e379c6b", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_eitc_t25_by_agi_children.npz": "db635aa7ec3279e3631c4d8e1451e148c28571540b686a1e856d4b055b2a154b", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_eitc_t25_child_totals.json": "8117dd24ca92c36311d374bd6bcbd26c50c0cfc8fad8beb45d430e01c281ec72", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_eitc_t25_child_totals.npz": "c7622fcf49a5cfa8fa481e320e207b9ee69dbb43b2fdd5b7931f493a1b6e1100", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_other.json": "3bebad5f488738ab9ec5069155d33f6cfeee6414bdc44da7210b7f6b48ddebe1", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_other.npz": "2b394b4fb40930758e6442774bee98dc7067ddbbbae98511797006343112d1db", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_return_count.json": "d081062b07ee49af7714dc612979a643b1cf8087acfe6a1dc97e087921e52ba7", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_soi_return_count.npz": "a98c39ec62a5087e624152645321d1a5da84f17aecdceb9bc95502995585fafd", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_ssi.json": "b54ede42553a6ca111ae7143e3e3b2035a5a32dfc061cfe8204ee019ee146ee1", + "reviews/pe30-population-2026-09-27/out/calib_resolve/drop_ssi.npz": "335bfc687cdd51d18bb3481da59cf1ca531fd09528b10d52086823b32d36864f", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep.json": "14e27888cb93fb3bd75b8bb045d2f9967b235c85374e40da87b3f1ae71180207", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep.npz": "1e91de4b77f39eeac23260dec08215ff64701c3e7eea60556225d54f94fd6e09", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_actc_only.json": "165dc7a80379833e4041986557142b13147599a28963d79370c9e48f23ff8c7e", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_actc_only.npz": "6cb5b3a253fd543ec85926af4dc68a728aaeb131d0455f5eb3f1e9778e03c5bf", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_all_soi.json": "c8f45a7a2d0d536b54a9cc61aa930b5e3f0782754851ea4368e3318f38a7c6b4", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_all_soi.npz": "7b2084d2b467a5c7a3d2e35420f76f507f143299573b35739450950b5a80f3b6", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_count.json": "535a4c1366142a0c8e7587b7c609861d1d7019143349e26b7a8ce91c759d9b01", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_count.npz": "1be310e9f9f6881a33548718e4454e9f7853df014d519ccefd7df7e4325350c9", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_ctc_actc.json": "f9818a50362999dec718b93c90c874bf5a6f75c6721608922c5e728f080be1b3", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_ctc_actc.npz": "b8c25d6ba70873c09d09e32d807ff8f3ee2a7796e4d188ea8569155471cf6a07", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_ctc_actc_count.json": "56949015d782465f54f9982907477b9dbe8523cce523c7621937a682f29b5eec", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_ctc_actc_count.npz": "322bc476a1edf0f70e83f027591bf29cd1fcce004e6af2ace3ca513215c277bc", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_ctc_only.json": "c6ae3073339761e1c5dc3c7b56b47683edc738ea8db0d4e7431af334d330dcf1", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_ctc_only.npz": "9fb0b43917477a0bd562512111003999a0bbd953fc6027a57665043612f30705", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_eitc.json": "43ea9e7656dfde865ccdc9fee22d4927a6f209fc47f97b09aadc8c12f64dac3d", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_eitc.npz": "aaba08d6c09cbb7e81899b2e3b2f382f789a1443372b4ada0ad986a937a31fe9", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_medicaid.json": "42670755ddb575b52d7be4c4b34a76f81e78fa6715bbee68f99cc3b72e341b44", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_medicaid.npz": "92707af23b8205ef1c769c514420928816d3c1f72e7caf9a195f09a403e6d028", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_snap_ssi_aca.json": "c1e65dd64b36001fe190dd52fa303b1bdd9fbd4e2d78961a19ac4c97c4e96a2e", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_snap_ssi_aca.npz": "f170c0cf3266cb79a69dcf1c351e485932cc1f9b03a55f9893128b1de3692d5a", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_adjusted_gross_income.json": "eed984724ccd08ad4233a875a9d2ff8208f9d8a33da7c4e3d89d7bff69134100", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_adjusted_gross_income.npz": "26b61a6d9eab7f6d626574f49f052741a09fdbde4671aa03b5e839a82ba3edcc", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_employment_income.json": "cdc8c0c205e36c2bbe20f208e411d21705c9609413e0fefc29cd9796537bb243", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_employment_income.npz": "05fa2efe44ed6d7044dd488bdc7a93f8da93a8bc205d8a5c5ca729e1678e80c9", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_income_tax.json": "14d08274a006e31ff393184dda332a8eb48b6226899f5fddf60b1d6b9fde0c84", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_income_tax.npz": "63620a78a4281769670e94d8087cb65b509c8851df027323fa1e04e2762c3c09", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_income_tax_before_credits.json": "a20c14780f1099f7af2c112ef4ae292000558c15558c3e2dac934ad804de0fca", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_income_tax_before_credits.npz": "53206d68ee3cb1742cd0f37d94f9d1ce149b7db2fed0f2083a0a32b0a35c98d2", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_other.json": "d604ad711f2747146f25e7675447a53780f5d8e95859efffb0a47c1b05f73643", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_other.npz": "01d3d6925eaa4d4353126a0bbbee2eceb2af7a5cd99f4247900ebe0741a2a84e", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_tax_all.json": "432e579500f37a7c807b6c73f5c2de75649d7fdfdad35f0c4488b917e236b119", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_tax_all.npz": "a37417a7e440188e4668729fda35d8e1a10f9ecf4d64cb2b8c526f301a0c97e8", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_taxable_income.json": "b8a23a759914c50677cf899a9dae420af8c9aa5465f2a4510ef8d14681723699", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_taxable_income.npz": "11ab6191cb879d2c75f012d6aa09f983595d89e186443cb3d216ca355b49f433", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_taxable_interest_income.json": "196093441333cd5bb3ce1748ab540099c453195c959796c3b738f0d53f2bd727", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_taxable_interest_income.npz": "3866f4de1dcf5597140989fe28d61b383d711f3f210346f1839d04f1777ed701", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_taxable_pension_income.json": "acdd5f1e5c248f57a155dbd10f86b9998f08be5112ac0cfa9fd38b5c4645d297", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_taxable_pension_income.npz": "bfb662608e900dc29859a331185290733978843c3b0065a8b940bd14b019514f", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_taxable_social_security.json": "d90b581be96859e5efbd13daf805d9ee4585a4d0f42d3f26055a8d9d02e2acfb", + "reviews/pe30-population-2026-09-27/out/calib_resolve/keep_pep_soi_taxable_social_security.npz": "b70a4c67f53162fb0aa9ad0f25a2c1fe51196489559111f8b1b38318bfd36837", + "asec/raw_asec_2022_2025.parquet": "f6e2fc00990825c8e76c406877053971eb22198f88c741e18b448be9318fa209", + "dash/state_audit_buildp_v2_2024_raw.json": "6a33e0d744f416c97866f54c5c4bd65806cf490cbc0bc7b6c7a4c09323469327", + "dash/state_audit_buildp_v2_y25_2025_raw.json": "3e5cad7d417c29e0b443529d40f6a5c49dc346b45f4654e6ae5fc70ac743db0f", + "dash/state_audit_o1017_18252_2025_raw.json": "5ead79b6b35fae9eef8705982cd5475e44fd5ec8a3062ffb14e05522f34834e4", + "dash/state_audit_o1017_221_2024_raw.json": "4741ebee91556fb2f58f8e33db7f2b98042bbc2a0b95802e1b2f90a48f2dfd1d", + "dash/state_audit_o1017_2301_2024_raw.json": "0fd5b543c5464c6d4d60fb1170fdf31caaa381312b9efa3acc550f8cd87476eb", + "dash/state_audit_o1017_2301_y25_2025_raw.json": "aeabb5352dca1fe73c6870a7c880a6611b993e029be2db8c37c95d26b2d781d2", + "populace_us_2024_calibration.npz, revision 15cefac4": "bf4ce57ed14c6b7f47a601a9a35dc9ba85f52045b95ad1ef1ee2925f64bb272f" + }, "note": "Poverty rates stay holdouts: nothing here entered a calibration target.", "files": { "outputs/ablate_eval.csv": { @@ -37,21 +152,33 @@ "bytes": 10183 }, "outputs/acs_eval.csv": { - "sha256": "5e63003e507b7c3c39303dc2d95bbda805ef39c4b50d539cc61430dc0ac6a2bc", - "bytes": 12176 + "sha256": "376c147a3eda66adf5c5c91750f0e64845af8d628f5f22bbd49f755d7e04397e", + "bytes": 12153 }, "outputs/acs_solves.csv": { - "sha256": "ec5de235e8542d8e1cc7757864550eff8079664e5e65205de23981eb3fe7dcca", - "bytes": 3421 + "sha256": "52274cf8655c6958fbc0e3485b4d806b7e6f8a3bfa7a38a3e1c42cdab74e3a5c", + "bytes": 3427 }, "outputs/acs_stored.csv": { "sha256": "f0ae96174457e002a14d0108ffa33483d7557c539ccefb467bba58a559fe9b61", "bytes": 9218 }, + "outputs/acsrent_eval.csv": { + "sha256": "ea8ddcf88d88d70e7b4ac54f8dbfbe99c3b16a5febc09b4eaed5fa16ea0be3c7", + "bytes": 10679 + }, + "outputs/acsrent_solves.csv": { + "sha256": "6c6c991852c1259947339c85ab414a6687e37e6d1264218f1342975382b13d3f", + "bytes": 3090 + }, "outputs/asec_state_raw.csv": { "sha256": "5e28ec94ce143145bd3d8335d2820a90aab8ca9ecb9ebf43e996690a3eab5a5c", "bytes": 8183 }, + "outputs/calibration_step.csv": { + "sha256": "6b032159cfba7d90721ccb049b152a599c75e09b8b8d3c480b1f4c266ba9ab5e", + "bytes": 889 + }, "outputs/census_child_spm.json": { "sha256": "8ad84ee50d588e94b904e057b684b43e3ddbb543998ebe6988e9d9a3985632e7", "bytes": 3130 @@ -69,8 +196,8 @@ "bytes": 1399 }, "outputs/dash_swing.csv": { - "sha256": "40ba1f728b3ab518c3d636a60db34840739b08f0151370f7ab930a9ca6bd4d7d", - "bytes": 4135 + "sha256": "97dbc88024fa207f93df893057beb84dd356ad1f705e3bf1144afc6d1d49fb7a", + "bytes": 6129 }, "outputs/default_noise.csv": { "sha256": "97aee00d5f5cae2d2012dbebffcc9f4f1af86cb6d088b642b40386a497633621", @@ -132,6 +259,66 @@ "sha256": "6e1d4a6f7b8aee03362d9c023a4e35943a8f5264472e739aaf64deb0db1bafbb", "bytes": 14122 }, + "outputs/initial_fit.csv": { + "sha256": "120ce86c3602dbf68c32561bb544162f842ae123bda2ce74970e8e186becbd7d", + "bytes": 2578 + }, + "outputs/initial_fit_states.csv": { + "sha256": "403be3385bd260e3eb80c68e257e472188214e6199e02b3f85f15d1573b56180", + "bytes": 7856 + }, + "outputs/kish.csv": { + "sha256": "24c215d51c94d52fc8f9583ecd4b8da90da365a689b5f578fbc645697b99abb3", + "bytes": 2970 + }, + "outputs/logs/acs_eval.txt": { + "sha256": "b6f09dc0999a9c007574daeedb64bda4df33180278801af9c1c19f803ce58659", + "bytes": 9939 + }, + "outputs/logs/acsrent_eval.txt": { + "sha256": "c53150b7ba0842d0aeb6aa354d5a3c87491d9168e0532998c68bf882d0c3c901", + "bytes": 9933 + }, + "outputs/logs/ctc_ssn.txt": { + "sha256": "1d81a564a70fd2ad43424f5ff20d3d974e023ad4fc91ee56ebdfc6c2350142a3", + "bytes": 480 + }, + "outputs/logs/dmiss.txt": { + "sha256": "9349ae893019dd6700f544b1286479b2d01ac9b3b93392df807d61a2cc1b2d1b", + "bytes": 1632 + }, + "outputs/logs/house.txt": { + "sha256": "6ffde97ab4ad0fd8d62f08bd0aa64025f72af56b3ecc897ccb46164f33f29cab", + "bytes": 591 + }, + "outputs/logs/noise_ci.txt": { + "sha256": "171066f6260c026dc9e5e9a610facc65848187b77299a46557ac6a8e5768a307", + "bytes": 3024 + }, + "outputs/logs/part.txt": { + "sha256": "64776b5b610f49772f79f0fe31ae0fb75b1a6554458ba890f0da0af6cad03863", + "bytes": 645 + }, + "outputs/logs/puf_house.txt": { + "sha256": "3d321f44554801a3313860bbc8e81d02d713084d575618defb374af01d4021ff", + "bytes": 397 + }, + "outputs/logs/rent4.txt": { + "sha256": "ee426a0ad9721ec089320ff323f4923a227e6508dad3a9cf45135673f5fbeb4a", + "bytes": 1142 + }, + "outputs/logs/rent5.txt": { + "sha256": "2ff11104da0be2f826d2d72c7ad053e86c3d49c3c60f718b4cc489e84a18654e", + "bytes": 1665 + }, + "outputs/noise_ci.json": { + "sha256": "a378e76bf685a86e01e2071c8b4bbfc184e66d8c53dc2bfc309dddff94a612e6", + "bytes": 3587 + }, + "outputs/resource_growth.csv": { + "sha256": "49a62d42fe888a60d091730fe1fe13f0eaec754fe5504cae6e0885bf78d68b16", + "bytes": 919 + }, "outputs/state_baseline.json": { "sha256": "9568c0a09d19eba4a61115f37237200fb76abe960264894931722a2f45f7bf95", "bytes": 9894 @@ -149,8 +336,8 @@ "bytes": 4093 }, "scripts/acs_eval.py": { - "sha256": "c4da02e2d95e757227152b599020abe38dfea0662697dfd1cfae1217136266f1", - "bytes": 6719 + "sha256": "6336b8e205359e0baffb2a90f34c6fbd0889715554e513bebc6246b648b9b0a7", + "bytes": 6829 }, "scripts/acs_hh.py": { "sha256": "bf827c705569556dcda37ed1e5f7902da82ae716378059396ea84618cc0978f6", @@ -217,8 +404,8 @@ "bytes": 3517 }, "scripts/dash_swing.py": { - "sha256": "0e1aa5ab23a673d0053e22705909237bbd953edd9dc5ce496f587c896b85a6c2", - "bytes": 1772 + "sha256": "a52f2e2b1f09ec7c2f2e6a9408e84e4659a9c7559acbed61beffa78f5127cc56", + "bytes": 2487 }, "scripts/decomp.py": { "sha256": "4102acc5cffd7549374f16aaa6af8fe9b8a7f9d12e5316eb7965478ce704d717", @@ -268,9 +455,13 @@ "sha256": "adf41abfc238dc4759eb93b76079f24a4232cd099c26394076392ee886667124", "bytes": 1336 }, + "scripts/initial_fit.py": { + "sha256": "0592b83b45449d697dc567ea1928c9c71a72fa734dc99477c904f54eb438009d", + "bytes": 5619 + }, "scripts/kish.py": { - "sha256": "b51daf44b5b1d5b4429142cf4b61c5bd7b644242fe7f6684e5c1f8e2a530af54", - "bytes": 982 + "sha256": "bb2560c9c83d002cd2eb576d71fc39ca100ae86646fd7590376bd98952b92697", + "bytes": 1026 }, "scripts/national_cf.py": { "sha256": "3512de45b6642176ce0949a2f51810903893c2a26355b13737bd937a312c2588", @@ -280,6 +471,10 @@ "sha256": "9da43627c8426549b002267d22793f1df10f805bfade5d78f037a840c31ee2d7", "bytes": 2253 }, + "scripts/noise_ci.py": { + "sha256": "46dc322a34136e6714033a8db94273998649d9ed4656d4a944dcf30e62737360", + "bytes": 4119 + }, "scripts/paired.py": { "sha256": "a4461b5e7b31e37386daa9c14d67dda7607e2b93ddda04e09d2c513e6bb9ca77", "bytes": 3068 @@ -324,6 +519,10 @@ "sha256": "20f56043fcc618b04951b08f6e0850a73441326027a87650bae1bee033a7a603", "bytes": 7266 }, + "scripts/resource_growth.py": { + "sha256": "e5c0995cdd85a905865ef92bc9fa1cda2fe52a2541c058c209cbfd2cf219e5f9", + "bytes": 2339 + }, "scripts/runcuts.py": { "sha256": "4154018a33e122496edaf0dc74bc6947f5b1ccf3d867c7678fbb819d2a3b88d1", "bytes": 725 diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py index 190c4c58de..ff81199a10 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py @@ -93,11 +93,10 @@ .merge(h, left_on="person_household_id", right_on="household_id") ) u["state"] = u.state_fips.map(INV) -u["src"] = ( - u.household_support_channel.astype(str).str[:4] - + ":" - + u.household_source_id.astype(str) -) +# An ASEC donor and its PUF clone share one source household, so they form one cluster. +u["src"] = np.where( + u.household_support_channel.astype(str) == "acs_2024_1yr", "acs:", "donor:" +) + u.household_source_id.astype(str) def lin(g, w, f): diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/dash_swing.py b/docs/evidence/us-state-child-spm-2026-11/scripts/dash_swing.py index 30f30f152a..5656ad245e 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/dash_swing.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/dash_swing.py @@ -14,6 +14,8 @@ ("p25", "state_audit_buildp_v2_y25_2025_raw.json"), ("o24", "state_audit_o1017_2301_2024_raw.json"), ("o25", "state_audit_o1017_2301_y25_2025_raw.json"), + ("o25_18252", "state_audit_o1017_18252_2025_raw.json"), + ("o24_221", "state_audit_o1017_221_2024_raw.json"), ): x = json.load(open(f"{SP}/dash/{f}")) if tag == "p24": @@ -56,4 +58,27 @@ "rms delta se", round(np.sqrt((a.delta_se**2).mean()), 2), ) +same = (t.p25 - t.o25_18252).dropna() +print( + "same model 1.825.2, Build P against Build O, 2025: mean abs", + round(same.abs().mean(), 2), + "sd", + round(same.std(), 2), + "per build", + round(same.std() / np.sqrt(2), 2), + "max", + round(same.abs().max(), 2), + same.abs().idxmax(), +) +ver = (t.o25 - t.o25_18252).dropna() +print( + "same file across 1.825.2 and 2.30.1, 2025: mean abs", + round(ver.abs().mean(), 2), + "sd", + round(ver.std(), 2), + "max", + round(ver.abs().max(), 2), + ver.abs().idxmax(), +) +print(t.loc[["AZ", "DC", "NC"]].round(2).to_string()) t.to_csv(f"{SP}/run/dash_swing.csv") diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/initial_fit.py b/docs/evidence/us-state-child-spm-2026-11/scripts/initial_fit.py new file mode 100644 index 0000000000..4dbd0f9883 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/initial_fit.py @@ -0,0 +1,169 @@ +"""State fit at initial and published weights on the dense and default files, with clustered noise and a random-effects fit.""" + +import json +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +c = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +cse = c.moe / 1.645 + + +def lin(g, W, f): # noqa: N803 + T = g[W].sum() + r = (g[W] * g[f]).sum() / T + z = (g[W] * (g[f] - r) / T).values + cc = np.bincount(pd.factorize(g.clu)[0], weights=z) + n = len(cc) + return 100 * r, 100 * np.sqrt(n / (n - 1) * (cc**2).sum()) + + +def dl(g, se): + v = se**2 + cse.reindex(g.index) ** 2 + w = 1 / v + mu = (w * g).sum() / w.sum() + Q = (w * (g - mu) ** 2).sum() + k = len(g) + t2 = max(0, (Q - (k - 1)) / (w.sum() - (w**2).sum() / w.sum())) + return Q, np.sqrt(t2) + + +rows = [] +out = {} +for tag in ("dense", "default"): + u = pd.read_parquet(f"{SP}/run/{tag}_units.parquet") + u = u[u.kids > 0].copy() + u["clu"] = pd.factorize( + u.source_year.astype(str) + ":" + u.source_household_id.astype(str) + )[0] + u["P25"] = u["spm_unit_is_in_spm_poverty__2025"].astype(float) + u["P24"] = u["spm_unit_is_in_spm_poverty__2024"].astype(float) + u["E"] = (u.SPM_RESOURCES.fillna(0) < u.SPM_POVTHRESHOLD.fillna(0)).astype(float) + u["W1"] = u.w1 * u.kids + u["W0"] = u.w0 * u.kids + u["ch"] = np.where( + u.household_support_channel.astype(str).str.lower().str.contains("puf"), + "puf", + "asec", + ) + for W in ("W0", "W1"): + for ch in ("all", "asec", "puf"): + x = u if ch == "all" else u[u.ch == ch] + r = {} + for s, g in x.groupby("state"): + m, se = lin(g, W, "P25") + r[s] = (m, se) + d = pd.DataFrame(r, index=["model", "se"]).T + g = d.model - c.rate.reindex(d.index) + Q, t = dl(g, d.se) + k = x[W].groupby(x.clu).sum() + nat = lambda f: 100 * (x[W] * x[f]).sum() / x[W].sum() + rows.append( + dict( + file=tag, + weights={"W0": "initial", "W1": "published"}[W], + rows=ch, + natP25=nat("P25"), + natP24=nat("P24"), + natE=nat("E"), + mean_gap=g.mean(), + sd=g.std(), + mad=g.abs().mean(), + corr=np.corrcoef(d.model, c.rate.reindex(d.index))[0, 1], + beyond=int((g.abs() > c.moe.reindex(d.index)).sum()), + med_se=d.se.median(), + Q=Q, + tau=t, + ) + ) + if ch == "all": + out[f"{tag}_{W}"] = g + out[f"{tag}_{W}_se"] = d.se +r = pd.DataFrame(rows) +pd.set_option("display.width", 220) +print(r.round(2).to_string()) +s = pd.DataFrame(out) +s.to_csv(f"{SP}/run/initial_fit_states.csv") +r.to_csv(f"{SP}/run/initial_fit.csv", index=False) +print( + s.loc[ + ["DC", "DE", "TN", "MD", "FL", "MA", "LA", "MT", "MS", "HI", "RI", "VT", "MO"], + ["dense_W0", "dense_W1", "default_W0", "default_W1"], + ] + .round(1) + .to_string() +) +print( + "corr dense W0 gap vs W1 gap", round(np.corrcoef(s.dense_W0, s.dense_W1)[0, 1], 3) +) +# Independent check: ACS rows share no households with ASEC or PUF rows, so gaps they share point to the model or the benchmark. +e = pd.read_csv(f"{SP}/run/acs_eval.csv", index_col=0) +ag = (e.acs_only - e.census).reindex(s.index) +for tag in ("dense", "default"): + for W in ("W0", "W1"): + print( + "corr with ACS-row gaps", + tag, + W, + round(np.corrcoef(s[f"{tag}_{W}"], ag)[0, 1], 3), + ) +# Calibration step by flag, state means +rows = [] +for tag in ("dense", "default"): + u = pd.read_parquet(f"{SP}/run/{tag}_units.parquet") + u = u[u.kids > 0].copy() + u["P25"] = u["spm_unit_is_in_spm_poverty__2025"].astype(float) + u["P24"] = u["spm_unit_is_in_spm_poverty__2024"].astype(float) + u["E"] = (u.SPM_RESOURCES.fillna(0) < u.SPM_POVTHRESHOLD.fillna(0)).astype(float) + u["W1"] = u.w1 * u.kids + u["W0"] = u.w0 * u.kids + r = lambda W, f: ( # noqa: N803 + 100 * (u[W] * u[f]).groupby(u.state).sum() / u[W].groupby(u.state).sum() + ) + for f in ("E", "P24", "P25"): + d = r("W1", f) - r("W0", f) + rows.append( + dict( + file=tag, + flag=f, + state_mean=d.mean(), + sd=d.std(), + mad=d.abs().mean(), + lo=d.min(), + hi=d.max(), + nat0=100 * (u.W0 * u[f]).sum() / u.W0.sum(), + nat1=100 * (u.W1 * u[f]).sum() / u.W1.sum(), + ) + ) + k = lambda W: pd.Series( # noqa: N803 + { + st: g[W].sum() ** 2 / (g[W] ** 2).sum() + for st, g in u.assign( + src=u.source_year.astype(str) + ":" + u.source_household_id.astype(str) + ) + .groupby(["state", "src"])[["W0", "W1"]] + .sum() + .reset_index() + .groupby("state") + } + ) + print( + tag, + "median child Kish initial", + round(k("W0").median()), + "published", + round(k("W1").median()), + "initial min", + k("W0").idxmin(), + round(k("W0").min()), + "max", + k("W0").idxmax(), + round(k("W0").max()), + ) +c2 = pd.DataFrame(rows) +print(c2.round(2).to_string()) +c2.to_csv(f"{SP}/run/calibration_step.csv", index=False) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/kish.py b/docs/evidence/us-state-child-spm-2026-11/scripts/kish.py index efa6d93abe..a98969aaaa 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/kish.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/kish.py @@ -5,37 +5,24 @@ import pandas as pd SP = os.path.dirname(os.path.abspath(__file__)) +out = {} for tag in ("default", "dense"): u = pd.read_parquet( f"{SP}/run/{tag}_units.parquet", - columns=[ - "kids", - "w1", - "state", - "household_support_channel", - "source_household_id", - ], + columns=["kids", "w1", "state", "source_year", "source_household_id"], ) u = u[u.kids > 0].copy() u["W"] = u.w1 * u.kids - u["src"] = ( - u.household_support_channel.astype(str).str[:4] - + ":" - + u.source_household_id.astype(str) - ) + # An ASEC record and its PUF clone share one source household, so they form one cluster. + u["src"] = u.source_year.astype(str) + ":" + u.source_household_id.astype(str) k = {} for s, g in u.groupby("state"): v = g.W.groupby(g.src).sum() k[s] = v.sum() ** 2 / (v**2).sum() - k = pd.Series(k) - print( - tag, - "median", - round(k.median()), - "min", - k.idxmin(), - round(k.min()), - "max", - k.idxmax(), - round(k.max()), - ) + out[tag] = pd.Series(k) +out["acs_local"] = pd.read_csv(f"{SP}/run/acs_eval.csv", index_col=0).kish_src +t = pd.DataFrame(out) +t.to_csv(f"{SP}/run/kish.csv") +print(t.median().round(0).to_dict()) +print(t.agg(["min", "max"]).round(0).to_dict()) +print(t.idxmin().to_dict(), t.idxmax().to_dict()) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/noise_ci.py b/docs/evidence/us-state-child-spm-2026-11/scripts/noise_ci.py new file mode 100644 index 0000000000..88684ab6fd --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/noise_ci.py @@ -0,0 +1,133 @@ +"""How much of the state gap variance noise explains: null test with exact tail probabilities, a Q-profile interval on tau, and the same fits on the ACS-local file.""" + +import json +import os + +import numpy as np +import pandas as pd +from scipy import optimize, stats + +SP = os.path.dirname(os.path.abspath(__file__)) +cen = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +cse = cen.moe / 1.645 +T = pd.read_csv(f"{SP}/run/waterfall.csv", index_col=0) +out = {} + + +def fit(g, se, lab): + v = se**2 + cse.reindex(g.index) ** 2 + k = len(g) + + def Q(t2): # noqa: N802 + w = 1 / (v + t2) + m = (w * g).sum() / w.sum() + return (w * (g - m) ** 2).sum() + + Q0 = Q(0.0) + w = 1 / v + dl = max(0, (Q0 - (k - 1)) / (w.sum() - (w**2).sum() / w.sum())) + + def bound(p): + target = stats.chi2.ppf(p, k - 1) + if Q(0.0) < target: + return 0.0 + return optimize.brentq(lambda t: Q(t) - target, 0.0, 400.0) + + lo, hi = bound(0.975), bound(0.025) + var = g.var(ddof=1) + r = dict( + Q=Q0, + df=k - 1, + p=float(stats.chi2.sf(Q0, k - 1)), + tau=np.sqrt(dl), + tau_lo=np.sqrt(lo), + tau_hi=np.sqrt(hi), + var=var, + noise_share=1 - dl / var, + noise_share_lo=1 - hi / var, + noise_share_hi=1 - lo / var, + mean_v=float(v.mean()), + ) + out[lab] = r + print(lab, {a: round(b, 3) for a, b in r.items()}) + + +g = T.model - T.census +se = T.se_model_rep +fit(g, se, "default_replicate") +fit(g, np.sqrt(T.se_model_rep**2 + T.rep_bias**2), "default_replicate_rmse") +fit(g, T.se_model_lin, "default_linearized") +print( + "replicate over linearized: median", + round((T.se_model_rep / T.se_model_lin).median(), 2), + "range", + round((T.se_model_rep / T.se_model_lin).min(), 2), + round((T.se_model_rep / T.se_model_lin).max(), 2), +) +print( + "mean abs replicate bias", + round(T.rep_bias.abs().mean(), 2), + "largest", + T.rep_bias.abs().sort_values().tail(3).round(2).to_dict(), +) +d = pd.read_csv(f"{SP}/run/dense_fit.csv", index_col=0) +fit(d.model - d.rate, d.se, "dense_published") +e = pd.read_csv(f"{SP}/run/acs_eval.csv", index_col=0) +fit(e.acs_local - e.census, e.se, "acs_local_all") +fit(e.acs_only - e.census, e.acs_only_se, "acs_rows") +fit(e.donor_only - e.census, e.donor_only_se, "acs_local_donors") +# null test on the default file: common shift plus noise +rng = np.random.default_rng(1) +S = 20000 +sy = cen.rate.reindex(T.index) +cv = cse.reindex(T.index) ** 2 +w_ = 1 / cv +m0 = (w_ * sy).sum() / w_.sum() +q0 = (w_ * (sy - m0) ** 2).sum() +t0 = max(0, (q0 - 50) / (w_.sum() - (w_**2).sum() / w_.sum())) +Bc = t0 / (t0 + cv) +tr = m0 + Bc * (sy - m0) +ps = np.sqrt(Bc * cv) +moe = cen.moe.reindex(T.index).values + + +def null(se, sh, tx, obs_g): + Tr = tr.values + ps.values * rng.standard_normal((S, 51)) + C = Tr + np.sqrt(cv.values) * rng.standard_normal((S, 51)) + M = Tr + sh + tx * rng.standard_normal((S, 51)) + se * rng.standard_normal((S, 51)) + h = M - C + mad = np.abs(h).mean(1) + sd = h.std(1, ddof=1) + b = (np.abs(h) > moe).sum(1) + q = lambda a: [round(float(x), 2) for x in np.percentile(a, [2.5, 5, 50, 95, 97.5])] + ob = dict( + mad=float(obs_g.abs().mean()), + sd=float(obs_g.std()), + beyond=int((obs_g.abs() > moe).sum()), + ) + return dict( + mad=q(mad), + sd=q(sd), + beyond=q(b), + obs=ob, + p_mad=float((mad >= ob["mad"]).mean()), + p_sd=float((sd >= ob["sd"]).mean()), + p_beyond=float((b >= ob["beyond"]).mean()), + ) + + +n0 = null(T.se_model_rep.values, g.mean(), 0.0, g) +n1 = null(T.se_model_rep.values, g.mean(), out["default_replicate"]["tau"], g) +print("null shift+noise", n0) +print("null shift+noise+tau", n1) +out["null_shift_noise"] = n0 +out["null_shift_noise_tau"] = n1 +# the ACS-local file under the same null +ea = e.reindex(T.index) +ga = ea.acs_local - ea.census +na = null(ea.se.values, ga.mean(), 0.0, ga) +print("ACS-local null", na) +out["acs_null_shift_noise"] = na +json.dump(out, open(f"{SP}/run/noise_ci.json", "w"), indent=1) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/resource_growth.py b/docs/evidence/us-state-child-spm-2026-11/scripts/resource_growth.py new file mode 100644 index 0000000000..1e11086b8d --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/resource_growth.py @@ -0,0 +1,81 @@ +"""Growth in child SPM resources at fixed percentiles, 2024 to 2025: Census raw ASEC against PolicyEngine at published weights. Thresholds move too, so the table also compares resources over thresholds.""" + +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +PS = [10, 15, 20, 25, 30, 40, 50] + + +def wq(x, w, ps): + o = np.argsort(x) + c = np.cumsum(w[o]) + return np.interp(np.array(ps) / 100 * c[-1], c, x[o]) + + +a = pd.read_parquet(f"{SP}/asec/raw_asec_2022_2025.parquet") +Y = "income_year" if "income_year" in a else ("year" if "year" in a else "survey_year") +k = a[a.A_AGE < 18] +W = "MARSUPWT" if "MARSUPWT" in k else "A_FNLWGT" +rows = {} +yy = sorted(k[Y].unique()) +print(Y, yy) + + +def census(y): + g = k[k[Y] == y] + return wq(g.SPM_RESOURCES.values.astype(float), g[W].values.astype(float), PS), wq( + (g.SPM_RESOURCES / g.SPM_POVTHRESHOLD).values.astype(float), + g[W].values.astype(float), + PS, + ) + + +cy = [y for y in yy if y in (2024, 2025)] +sh = 2 if len(cy) == 2 else None +if len(cy) == 2: + r0, x0 = census(2024) + r1, x1 = census(2025) +else: + last = yy[-2:] + print("using", last) + r0, x0 = census(last[0]) + r1, x1 = census(last[1]) +rows["census_resources"] = 100 * (r1 / r0 - 1) +rows["census_ratio"] = 100 * (x1 / x0 - 1) +for tag in ("default", "dense"): + u = pd.read_parquet( + f"{SP}/run/{tag}_units.parquet", + columns=[ + "kids", + "w1", + "spm_unit_net_income__2024", + "spm_unit_net_income__2025", + "spm_unit_spm_threshold__2024", + "spm_unit_spm_threshold__2025", + ], + ) + u = u[u.kids > 0] + w = (u.w1 * u.kids).values + a0, a1 = [ + wq(u[f"spm_unit_net_income__{y}"].values.astype(float), w, PS) + for y in (2024, 2025) + ] + b0, b1 = [ + wq( + ( + u[f"spm_unit_net_income__{y}"] / u[f"spm_unit_spm_threshold__{y}"] + ).values.astype(float), + w, + PS, + ) + for y in (2024, 2025) + ] + rows[f"{tag}_resources"] = 100 * (a1 / a0 - 1) + rows[f"{tag}_ratio"] = 100 * (b1 / b0 - 1) +t = pd.DataFrame(rows, index=[f"p{p}" for p in PS]) +pd.set_option("display.width", 200) +print(t.round(2).to_string()) +t.to_csv(f"{SP}/run/resource_growth.csv") From 75ad54c043f8e6c671ddc2d4a53b064461c36613 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 1 Nov 2026 19:33:48 -0500 Subject: [PATCH 4/9] Correct the state child SPM diagnosis after a second review The initial-weight columns share households with Table 18, so state-specific error rises about 1.7 times, not double, and a test with no shared households keeps the direction. Scope the weights finding to the dense pool, name Louisiana alone among persistent misses, and call the fix order a judgement. Also corrects the ablation, anchor and ASEC-PUF claims, adds the corrected-rent reform pass, and stores the threshold swap and Kish figures. Co-Authored-By: Claude Opus 5.5 --- .../us-state-child-spm-2026-11/README.md | 112 ++++--- .../outputs/acsrent_eval.csv | 26 +- .../outputs/acsrent_reform.csv | 16 + .../outputs/kish.csv | 104 +++--- .../outputs/logs/acsrent_eval.txt | 28 +- .../outputs/logs/kish.txt | 3 + .../outputs/logs/overlap.txt | 35 ++ .../outputs/logs/thr_census.txt | 9 + .../outputs/overlap_benchmark.csv | 7 + .../outputs/overlap_fits.csv | 13 + .../outputs/state_persistence.csv | 52 +++ .../us-state-child-spm-2026-11/receipts.json | 66 +++- .../scripts/acs_one.py | 3 +- .../scripts/acs_reform_cmp.py | 42 +++ .../scripts/kish.py | 15 +- .../scripts/overlap.py | 302 ++++++++++++++++++ .../scripts/prep_evidence.py | 51 +++ .../scripts/receipts.py | 127 ++++++++ .../scripts/thr_census.py | 68 ++++ 19 files changed, 945 insertions(+), 134 deletions(-) create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_reform.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/kish.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/overlap.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/thr_census.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/overlap_benchmark.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/overlap_fits.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/state_persistence.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_reform_cmp.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/prep_evidence.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/receipts.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/thr_census.py diff --git a/docs/evidence/us-state-child-spm-2026-11/README.md b/docs/evidence/us-state-child-spm-2026-11/README.md index 8dcaea04df..3472b13ed7 100644 --- a/docs/evidence/us-state-child-spm-2026-11/README.md +++ b/docs/evidence/us-state-child-spm-2026-11/README.md @@ -2,19 +2,19 @@ State child SPM poverty on the default Populace US file misses Census P60-290 Table 18 by 4.8 points on average, and 38 of 51 jurisdictions fall outside Census's margin. This note splits that miss into sampling noise, weight concentration and systematic error, decomposes the largest gaps, and lists what would close them. -Model figures come from real PolicyEngine US simulations at 2.90.2 (`469ad12cb957`), one state cut at a time as `slideshows/appam-2026/analysis/state_baseline.py` on PolicyEngine/policyengine-slides#95 does. Differences, standard errors and fits are arithmetic on those runs' output, and the one figure that adds income without re-simulating says so. No poverty rate entered a calibration target: the dense file's 6,102 target names include none, and these comparisons are holdouts. +Model figures come from real PolicyEngine US simulations at 2.90.2 (`469ad12cb957`), one state cut at a time as `slideshows/appam-2026/analysis/state_baseline.py` on PolicyEngine/policyengine-slides#95 does. Differences, standard errors and fits are arithmetic on those runs' output, and the two figures that change an input without re-simulating say so. No poverty rate entered a calibration target: the dense file's 6,102 target names include none. That makes these comparisons holdouts of the target, not of the sample, because the ASEC pool and Table 18 share households. ## What we found -1. **Noise accounts for roughly half of the default file's state scatter, and the data pin that share down poorly.** A state rate carries a replicate standard error of about 3.6 points, or about ±6 at 90%, and that error runs low because it ignores CPS design. Child-weighted effective samples run from 19 in DC to 277 in California. The point estimate puts noise at 60% of the cross-state variance, with a 95% interval of about 10% to 89%. -2. **Weights create most of the systematic error.** On the dense pool at initial weights, the mean gap reads 0.00, the mean absolute gap 1.78, and 16 jurisdictions fall outside Census's margin. At published weights those read +3.62, 4.33 and 38, and state-specific error doubles from 1.50 to 3.07 points. On the default file, support selection puts the shift in place before calibration starts (+3.27 at initial weights). The zero nets +2.20 on ASEC rows against -2.20 on PUF rows, and initial weights miss the administrative targets, so this result locates the problem and does not recommend skipping calibration. -3. **A smaller error survives without calibration.** Delaware, Louisiana and Mississippi miss the same way at dense initial weights and on ACS rows, which share no households with them. That points to the model or the benchmark. Florida, Massachusetts and Maryland sit within 3 points at dense initial weights and mostly miss after calibration. -4. **The rent imputation puts rent on the wrong households.** Of records that should carry rent, 89% do not hold their own, in every Populace US file we checked, including the local-area file. PolicyEngine/microcosm#1444 carries the fix. With published weights held fixed, the fix nearly doubles modelled housing subsidies on the dense file, from $7.3bn to $13.9bn, and lowers the 2025 child rate 0.7 points. It barely moves state fit: the mean absolute gap goes from 4.33 to 4.13 on dense, 4.80 to 4.71 on default and 3.18 to 3.21 on ACS-local. It lifts SNAP by less than 1%. -5. **The default file is not the state path.** `policyengine.py` routes state regions to the ACS-local file. There the mean gap falls to +0.88 and the mean absolute gap to 3.18, 29 jurisdictions fall outside Census's margin, and 23,407 donor households hold 68% of child weight. ACS rows alone reach a mean absolute gap of 2.46 and a correlation of .69 with a median standard error of 1.06, and still leave 22 outside. Raising the ACS share of the mass gives the largest measured improvement a release could use: 2.79 to 2.16, with the median error on a state's reform effect falling from 1.30 to 0.56. +1. **Noise accounts for most of the default file's state scatter, and the data pin that share down poorly.** A state rate carries a replicate standard error of about 3.6 points, or about ±6 at 90%, and that error runs low because it ignores CPS design. Child-weighted effective samples run from 19 in DC to 277 in California. Three fits put noise at 60%, 71% and 80% of the cross-state variance, and the first carries a 95% interval of about 10% to 89%. +2. **On the dense pool, calibration creates most of the systematic error, and most of the damage lands on ASEC rows.** At initial weights, the mean gap reads 0.00, the mean absolute gap 1.78, and 16 jurisdictions fall outside Census's margin. At published weights those read +3.62, 4.33 and 38. ASEC rows go from a mean absolute gap of 2.44 to 7.30, and PUF rows from 2.95 to 3.16. State-specific error rises about 1.7 times, from 1.88 to 3.20 points, once we allow for households the pool shares with Table 18, and a test with no shared households keeps the direction. This result covers the dense pool only. On the default file, support selection puts the shift in place before calibration starts (+3.27 at initial weights) and state-specific error stays flat, and the ACS-local file stores no initial weights. The dense zero nets +2.20 on ASEC rows against -2.20 on PUF rows, and initial weights miss the administrative targets, so this result locates the problem and does not recommend skipping calibration. +3. **Some state error predates calibration, and Louisiana stands out.** At dense initial weights, state gaps still exceed their sampling noise (Q = 170.5 on 50 degrees of freedom after allowing for shared households). Louisiana alone misses the same way by more than 1.96 standard errors at dense initial weights and on ACS rows, which draw on another survey. Delaware and Mississippi come next, but the count of states that miss the same way on both barely beats chance. Florida, Massachusetts and Maryland sit within 3 points at dense initial weights and mostly miss after calibration. +4. **The rent imputation puts rent on the wrong households.** Of records that should carry rent, 89% do not hold their own, in every Populace US file we checked, including the local-area file. PolicyEngine/microcosm#1444 carries the fix. With published weights held fixed, the fix nearly doubles modelled housing subsidies on the dense file, from $7.3bn to $13.9bn, and lowers the 2025 child rate 0.7 points. It barely moves state fit: the mean absolute gap goes from 4.33 to 4.13 on dense, 4.80 to 4.71 on default and 3.18 to 3.21 on ACS-local, where contract rent stands in on ACS rows. It lifts SNAP by less than 1%, and it moves a state's 2021 CTC effect by 0.59 on average across 15 states. +5. **The default file is not the state path.** `policyengine.py` routes state regions to the ACS-local file. There the mean gap falls to +0.88 and the mean absolute gap to 3.18, 29 jurisdictions fall outside Census's margin, and 23,407 donor households hold 68% of child weight. ACS rows alone reach a mean absolute gap of 2.46 and a correlation of .69 with a median standard error of 1.06, and still leave 22 outside. Raising the ACS share of the mass does the most of any change we ran on this path: 2.79 to 2.16, or 2.88 to 2.23 with corrected rent, and the median error on a state's reform effect falls from 1.30 to 0.56. ## What the comparison measures -Table 18 averages income years 2023 to 2025 and carries a margin of 1.0 to 3.7 points. The model column is PolicyEngine's 2025 rate. Standard errors below linearize the ratio and cluster on source household, counting an ASEC record and its PUF clone as one cluster, so the columns compare like with like. +Table 18 averages income years 2023 to 2025 and carries a margin of 1.0 to 3.7 points. The model column is PolicyEngine's 2025 rate. Standard errors below linearize the ratio and cluster on source household, counting an ASEC record and its PUF clone as one cluster, so the columns compare like with like. Q and τ first treat model and Census as independent. The two rows after them subtract the covariance from households they share, as the section on where the error enters explains. | Measure | Default, initial | Default, published | Dense, initial | Dense, published | ACS-local (Build O 10/17) | | --- | --- | --- | --- | --- | --- | @@ -28,6 +28,8 @@ Table 18 averages income years 2023 to 2025 and carries a margin of 1.0 to 3.7 p | Median child-weighted Kish sample | 211 | 51 | 635 | 305 | 88 | | Q on 50 degrees of freedom | 109.5 | 71.5 | 94.4 | 147.8 | 73.3 | | State-specific standard deviation τ | 2.74 | 2.73 | 1.50 | 3.07 | 2.02 | +| Q, allowing for shared households | 139.5 | 76.0 | 170.5 | 188.4 | not run | +| τ, allowing for shared households | 2.95 | 2.90 | 1.88 | 3.20 | not run | Default is Build P; dense is `b5db384`. The published snapshot does not store ACS-local initial weights, so that column has no initial counterpart. The default file also has a replicate standard error from 80 replicate calibrations: a Poisson bootstrap of source households, then a full re-solve. Its median reads 3.57, and its ratio to the linearized error runs from .53 in West Virginia to 2.17 in Montana. Census's own root-mean-square standard error is 1.35. @@ -43,11 +45,11 @@ We tested whether noise alone could produce the pattern, using a common shift pl | Standard deviation of gaps | 5.11 | 4.12 | 3.27 to 5.12 | .03 | | Outside Census's margin | 38 | 36 | 30 to 42 | .31 | -Only the standard deviation rejects, and adding a state-specific τ of 3.25 lifts the null medians to 4.94 and 5.23, just past the observed values. A DerSimonian-Laird fit gives Q = 88.4 and τ = 3.25, with a Q-profile 95% interval of 1.71 to 4.84. That interval puts noise's share of the variance anywhere from about 10% to 89%. Replicates also centre away from the published values, by 1.83 points on average and by -6.93 in Tennessee, -5.76 in Rhode Island and +4.92 in Montana. Measuring error around the published values gives Q = 64.8 (p = .08) and τ = 2.28, so the default file alone barely separates noise from state-specific error. +Only the standard deviation rejects, and adding a state-specific τ of 3.25 lifts the null medians to 4.94 and 5.23, just past the observed values. A DerSimonian-Laird fit gives Q = 88.4 and τ = 3.25, with a Q-profile 95% interval of 1.71 to 4.84. That interval puts noise's share of the variance anywhere from about 10% to 89%, around a point estimate of 60%. Replicates also centre away from the published values, by 1.83 points on average and by -6.93 in Tennessee, -5.76 in Rhode Island and +4.92 in Montana. Measuring error around the published values gives Q = 64.8 (p = .08), τ = 2.28 and a noise share of 80%, and linearized errors give 71%, so the default file alone barely separates noise from state-specific error. These standard errors run low. Replicates hold support, the target matrix and imputations fixed, and source-household clusters ignore CPS strata, primary sampling units and rotation overlap. τ absorbs that, along with the mismatch between one model year and a three-year Census average. -Firmer evidence comes from the dense file (Q = 147.8, τ = 3.07, 95% interval 2.33 to 4.34) and ACS rows (Q = 131.6, τ = 2.08, 95% interval 1.62 to 3.22). The dense file adds records, not surveys: every channel maps to the same ASEC households, so its .65 gap correlation with the default file partly reflects shared sample noise. ACS rows give the only independent sample. Their gaps correlate .30 with the dense file's at initial weights and .42 at published weights. +Firmer evidence comes from the dense file (Q = 147.8, τ = 3.07, 95% interval 2.33 to 4.34) and ACS rows (Q = 131.6, τ = 2.08, 95% interval 1.62 to 3.22). The dense file adds records, not surveys: every channel maps to the same ASEC households, so its .65 gap correlation with the default file partly reflects shared sample noise. ACS rows give the only independent sample. Their gaps correlate .30 with the dense file's at initial weights and .42 at published weights, but both gaps subtract the same Census estimate, and that alone would give about .24 and .15. ACS rows also take tax and rent inputs from donors by QRF, so they can share model error, and they carry published weights. ## Where the error enters @@ -65,7 +67,24 @@ Calibration moves both halves of the dense pool up: | PUF rows, correlation with Census | .55 | .52 | | PUF rows, τ | 2.43 | 2.82 | -ASEC rows at initial weights hold the tightest state pattern in this note, with a +2.20 shift. PUF rows start 5 points below them, so the dense pool's zero comes from two offsetting gaps. +ASEC rows at initial weights hold the tightest state pattern in this note, with a +2.20 shift, partly because they compare the survey with itself. PUF rows start 5 points below them, so the dense pool's zero comes from two offsetting gaps. + +The initial-weight columns flatter the pool. The pool holds income years 2022 to 2024 and Table 18 averages 2023 to 2025, so they share households, and ASEC rows at initial weights reproduce Census's own state rates (correlation .98 or more in each year). In raw ASEC, the 2022 to 2024 average correlates .96 with Table 18, while 2022 and 2025 correlate .68. Subtracting the covariance from shared clusters moves τ from 1.50 to 1.88 (95% interval 1.41 to 2.59) at initial weights and from 3.07 to 3.20 (2.57 to 4.48) at published weights. So state-specific error rises about 1.7 times, not double, and the intervals nearly touch. That adjustment ignores rotation overlap and design effects, so it still understates the covariance. + +A stricter test uses records that share no household with their benchmark: dense 2022 records against Census's 2024 to 2025 average in raw ASEC. + +| 2022 records against Census 2024-25 | Initial weights | Published weights | +| --- | --- | --- | +| All rows, mean absolute gap | 2.47 | 6.08 | +| All rows, mean absolute gap around the column's mean | 2.33 | 4.36 | +| All rows, correlation | .67 | .58 | +| All rows, median state standard error | 1.78 | 3.13 | +| ASEC rows, mean absolute gap | 3.44 | 9.44 | +| ASEC rows, correlation | .80 | .60 | +| PUF rows, mean absolute gap | 3.13 | 4.72 | +| PUF rows, correlation | .41 | .42 | + +The direction survives. This test uses a third of the records, so both columns carry more noise, and calibration targets the pool rather than a single source year, so the published column may overstate the damage. Still, the 1.78 and .78 at initial weights overstate how well the pool fits, and calibration still adds state error. The calibration step differs by flag and by file: @@ -99,16 +118,16 @@ Ten states read this way, with standard errors in brackets: | State | Census | Default gap | Dense, initial | Dense, published | ACS-local | ACS rows | ACS-local donors | Reading | | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| DC | 20.3 | +14.1 (6.1) | -4.9 | +5.8 (3.4) | +0.9 (5.3) | +1.8 (5.5) | +0.3 | Too noisy to read on any file | -| DE | 8.7 | +13.7 (4.4) | +5.3 | +13.0 (3.2) | +13.5 (6.9) | +6.3 (2.9) | +16.7 | High everywhere, and donors widen it | -| TN | 10.0 | +13.2 (3.9) | -0.1 | +5.3 (1.8) | +6.6 (3.1) | +8.3 (1.4) | +5.7 | High on ACS rows, fine on the initial pool | -| MD | 10.7 | +12.5 (4.7) | +2.7 | +8.5 (2.8) | +6.9 (4.2) | +0.7 (1.2) | +9.8 | Calibration and donors | -| FL | 18.4 | +9.8 (2.8) | +0.9 | +11.6 (1.7) | +4.3 (3.5) | -5.1 (0.6) | +8.7 | Calibration and donors; ACS rows read low | -| MA | 12.8 | +7.4 (3.3) | +0.5 | +7.9 (1.9) | +8.6 (4.6) | +2.5 (1.2) | +11.7 | Calibration and donors | -| LA | 20.7 | -8.6 (3.3) | -7.0 | -7.0 (1.7) | -9.0 (2.3) | -6.4 (1.4) | -10.1 | Low everywhere; cash and SNAP run high | -| MS | 19.1 | -6.2 (3.0) | -5.2 | -4.0 (1.7) | -5.3 (2.9) | -3.2 (1.7) | -6.4 | Low everywhere | -| HI | 13.0 | -6.0 (2.4) | -2.2 | -4.2 (1.3) | -7.1 (2.0) | -7.9 (0.8) | -6.7 | Low, and lowest on ACS rows | -| MT | 9.3 | -6.8 (3.4) | -1.1 | +1.0 (1.5) | -4.5 (1.3) | +1.2 (2.7) | -7.4 | Low on donors only | +| DC | 20.3 | +14.1 (10.6) | -4.9 (1.7) | +5.8 (3.4) | +0.9 (5.3) | +1.8 (5.5) | +0.3 | Too noisy to read on any file | +| DE | 8.7 | +13.7 (6.9) | +5.3 (1.7) | +13.0 (3.2) | +13.5 (6.9) | +6.3 (2.9) | +16.7 | High everywhere, and donors widen it | +| TN | 10.0 | +13.2 (5.1) | -0.1 (0.9) | +5.3 (1.8) | +6.6 (3.1) | +8.3 (1.4) | +5.7 | High on ACS rows, fine on the initial pool | +| MD | 10.7 | +12.5 (6.0) | +2.7 (1.5) | +8.5 (2.8) | +6.9 (4.2) | +0.7 (1.2) | +9.8 | Calibration and donors | +| FL | 18.4 | +9.8 (4.0) | +0.9 (0.9) | +11.6 (1.7) | +4.3 (3.5) | -5.1 (0.6) | +8.7 | Calibration and donors; ACS rows read low | +| MA | 12.8 | +7.4 (5.1) | +0.5 (1.0) | +7.9 (1.9) | +8.6 (4.6) | +2.5 (1.2) | +11.7 | Calibration and donors | +| LA | 20.7 | -8.6 (3.5) | -7.0 (0.9) | -7.0 (1.7) | -9.0 (2.3) | -6.4 (1.4) | -10.1 | Low everywhere; cash and SNAP run high | +| MS | 19.1 | -6.2 (4.0) | -5.2 (1.1) | -4.0 (1.7) | -5.3 (2.9) | -3.2 (1.7) | -6.4 | Low everywhere | +| HI | 13.0 | -6.0 (2.8) | -2.2 (1.2) | -4.2 (1.3) | -7.1 (2.0) | -7.9 (0.8) | -6.7 | Low, and lowest on ACS rows | +| MT | 9.3 | -6.8 (1.6) | -1.1 (0.9) | +1.0 (1.5) | -4.5 (1.3) | +1.2 (2.7) | -7.4 | Low on donors only | ## The common shift @@ -126,15 +145,27 @@ Ten states read this way, with standard errors in brackets: | All targets, same pipeline | 15.92 | 16.23 | .42 | | All targets, as published | 16.50 | 17.17 | .52 | -Benefit targets and the EITC pull the rate up, and CTC and joint SOI targets pull it down. With every family in, the national rate lands near population-only, at 16.23 against 16.43, while the state correlation falls from .60 to .42. The last two rows use the same targets, so solver path alone moves the national rate about a point. `outputs/ablate_eval.csv` holds the drop-one runs too. +Benefit targets and the EITC pull the rate up, and CTC and joint SOI targets pull it down. With every family in, the national rate lands near population-only, at 16.23 against 16.43, while the state correlation falls from .60 to .42. The last two rows land about a point apart, and they differ in the 11 JCT rows the re-solves drop, the rebuilt matrix and the solver path. `outputs/ablate_eval.csv` holds the drop-one runs too. On the dense file, benefit receipt starts far below target. Summing each family's cells, which mixes dollars and counts where a family holds both, SNAP starts 37.8% short, Medicaid 26.2%, EITC 50.8% and ACA 43.9%, while AGI starts 4.2% short. Those misses line up with the +3.3 point rise, though we ran the ablations on the default file only. -A chi-square anchor to the default file's initial weights lowers noise and worsens the fit: at λ = .03 the median standard error falls to 2.78, the mean gap rises to 4.77, and the mean absolute gap rises to 5.66. That anchor pulls toward a selected support that already carries the shift. We did not test an anchor on the dense pool. +A chi-square anchor to the default file's initial weights lowers noise and overshoots on level: + +| Weights, default file | Mean gap | Correlation | Median state SE | Census's flag | +| --- | --- | --- | --- | --- | +| Published | 3.24 | .52 | 4.04 | 16.50 | +| λ = .003 | 3.07 | .45 | 3.72 | 16.09 | +| λ = .01 | 3.42 | .52 | 3.28 | 16.40 | +| λ = .03 | 4.77 | .57 | 2.78 | 17.34 | +| λ = .1 | 5.18 | .68 | 2.50 | 17.74 | +| λ = .3 | 4.55 | .69 | 2.38 | 16.90 | +| Initial | 3.27 | .65 | 2.20 | 15.06 | + +The mean gap rises above both endpoints, so a pull toward initial weights cannot explain it, and we do not know why it overshoots. Correlation improves as the penalty grows. We did not test an anchor on the dense pool. **Pooled records keep nominal income from their source year.** PolicyEngine holds every record to a 2024 threshold, while a 2022 record's market income keeps its nominal 2022 value. That accounts for 2.3 to 2.5 points of the thresholds step. Aging 2022 and 2023 ASEC records by Census's growth in 20th-percentile child resources (a real national simulation on the default file) lowers the national 2025 rate from 17.17 to 16.29, the mean gap from 3.24 to 2.45, and the mean absolute gap from 4.80 to 4.05, with 33 jurisdictions outside the margin rather than 38. `outputs/cf_state.csv` holds each state. -**The model overshoots from 2024 to 2025.** PolicyEngine rises 1.48 points while Census holds at 13.4. Reference thresholds match Census for 2025, and Census's 2024 thresholds move PolicyEngine's 2024 rate only from 15.69 to 15.72, so the difference sits in resources. Between the 10th and 30th percentiles, child SPM resources grew 3.6% to 5.7% in Census's data, against 1.6% to 2.8% on the default file and 2.5% to 3.2% on dense (`outputs/resource_growth.csv`). +**The model overshoots from 2024 to 2025.** PolicyEngine rises 1.48 points while Census holds at 13.4. Reference thresholds match Census for 2025, and swapping Census's 2024 thresholds into the test moves PolicyEngine's 2024 rate only from 15.69 to 15.72, so the difference sits in resources. That swap is arithmetic on simulated resources (`outputs/logs/thr_census.txt`). Between the 10th and 30th percentiles, child SPM resources grew 3.6% to 5.7% in Census's data, against 1.6% to 2.8% on the default file and 2.5% to 3.2% on dense (`outputs/resource_growth.csv`). The CTC's adult SSN requirement explains little of this. `gov.irs.credits.ctc.adult_ssn_requirement_applies` starts in 2025. Units whose refundable CTC falls to zero that year hold 2.48% of child weight, and 83% of that weight has no adult in the SPM unit with an eligible SSN card. Those units hold 11% of the child weight moving into poverty, so the rule can account for at most that share through this channel. @@ -153,9 +184,9 @@ The CTC's adult SSN requirement explains little of this. `gov.irs.credits.ctc.ad The second row is the test: it restores the link exactly, so the draws are right and only their destination is wrong. The default and dense files carry the same draws, and so do ACS-local donors. -ACS rows inherit the problem. `build_optional_acs_multispine` passes the base to `transfer_acs_inputs` as its donor, and `pre_subsidy_rent` sits among the transfer targets, so ACS rows learned from misplaced rent: 39.6% of ACS renters carry rent, and so do 30% of ACS owners. The file stores native `RNTP` for all 336,110 renter households, and `acs_transfer.py` leaves it out of this path because contract rent differs from pre-subsidy rent. The build's `positive_rent_nonrenter` receipt recorded 30,838 such heads in `experiments/us-asec-2025-source/receipts/pipeline_smoke_2023_2025.json`, and `test_signal_gate_preserves_archived_qrf_rent_outside_renter_household` allowed them. +ACS rows inherit the problem. `build_optional_acs_multispine` passes the base to `transfer_acs_inputs` as its donor, and `pre_subsidy_rent` sits among the transfer targets, so ACS rows learned from misplaced rent: 39.6% of ACS renters carry rent, and so do 30% of ACS owners. The file stores native `RNTP` for all 336,110 renter households, and `acs_transfer.py` leaves it out of this path because contract rent differs from pre-subsidy rent. A 2023 to 2025 pipeline smoke run recorded 30,838 such heads in its `positive_rent_nonrenter` receipt (`experiments/us-asec-2025-source/receipts/pipeline_smoke_2023_2025.json`), and `test_signal_gate_preserves_archived_qrf_rent_outside_renter_household` allowed them. -The harm reaches poverty through `hud_gross_rent`. `hud_hap` takes the lesser of the maximum subsidy and gross rent less tenant payment, so a recipient whose rent and utility allowance fall short of the tenant payment gets nothing. On the default file, 74% of Census housing recipients among child units on ASEC rows get no model subsidy. Moving rent back onto the right households, with published weights held fixed, gives: +Rent reaches poverty by several paths. SNAP's shelter deduction, some state TANF programs and state credits read it, and the largest path we measured runs through `hud_gross_rent`. `hud_hap` takes the lesser of the maximum subsidy and gross rent less tenant payment, so a recipient whose rent and utility allowance fall short of the tenant payment gets nothing. On the default file, 74% of Census housing recipients among child units on ASEC rows get no model subsidy. Moving rent back onto the right households, with published weights held fixed, gives: | All 51 states | Dense, as published | Dense, corrected | Default, as published | Default, corrected | | --- | --- | --- | --- | --- | @@ -171,7 +202,9 @@ The harm reaches poverty through `hud_gross_rent`. `hud_hap` takes the lesser of The fix closes 0.56 of the dense file's 3.62 mean gap and 0.21 of the default file's 3.24. State steps run from -2.93 to +0.40 on dense and from -5.38 to +3.02 on default. It leaves the SNAP miss at initial weights in place. -On the ACS-local file, the same exercise moves the mean gap from +0.88 to +0.49, the mean absolute gap from 3.18 to 3.21, and the correlation from .54 to .51, with 29 jurisdictions outside Census's margin both ways. ACS rows go from a mean absolute gap of 2.46 to 2.53. So rent matters here for getting housing right, not for state fit at published weights. +On the ACS-local file, a similar exercise, with contract rent standing in on ACS rows, moves the mean gap from +0.88 to +0.49, the mean absolute gap from 3.18 to 3.21, and the correlation from .54 to .51, with 29 jurisdictions outside Census's margin both ways. ACS rows go from a mean absolute gap of 2.46 to 2.53. So rent matters here for getting housing right, not for state fit at published weights. + +Rent moves reform effects more than it moves state fit. A reform pass on 15 states, drawn from the default file's large gaps (AR, DC, DE, FL, HI, LA, MA, MD, ME, MO, MS, MT, RI, TN, VT), moves a state's 2021 CTC effect by 0.59 on average, with published weights held fixed. The moves nearly cancel in the mean (-0.04), though the median of those 15 states goes from -3.39 to -2.59. Florida goes from -3.53 to -6.27 and Delaware from -2.97 to -1.76 (`acsrent_reform.csv`). That is a real microsimulation on stand-in ACS rent, so it shows sensitivity, not the rebuilt file's answer. A separate gap sits on the PUF half. `impute_us_housing_assistance_to_puf_support` replaces each PUF-half person's receipt with a QRF draw, and the unit takes its first person's draw. Unweighted, 2.05% of PUF-half units receive assistance against 3.73% on the ASEC half (2.82% against 7.75% among low-income child units), and 9.6% of ASEC recipients keep the flag on their PUF clone. @@ -185,7 +218,7 @@ The dashboard reads ACS-local slices, not the default file. Master serves Build The stored audits give a second reading. At 1.825.2, Build P and Build O differ on a state's 2025 effect by 0.55 on average (standard deviation 0.83, or 0.59 per build), about half the clustered error. Those builds share source records, so that comparison understates sampling noise. Model version moves effects further: the same 10/17 file at 1.825.2 and 2.30.1 differs by 1.11 on average (standard deviation 1.72), and Arizona goes from -11.92 to -6.37. -So state baselines and state reform effects on the dashboard both need a stated uncertainty, and neither should read as a point estimate to the tenth. Every dashboard file carries the rent bug. The legacy `backend/` and `cpid_calc/` paths read `enhanced_cps_2024`, and PR #127 says the frontend no longer calls them. +So state baselines and state reform effects on the dashboard both need a stated uncertainty, and neither should read as a point estimate to the tenth. The rent code predates the August 19 build, so those slices should carry the bug, though we did not test them, and the fix moves some state effects by more than a point. The legacy `backend/` and `cpid_calc/` paths read `enhanced_cps_2024`, and PR #127 says the frontend no longer calls them. ## What would fix it @@ -196,9 +229,13 @@ So state baselines and state reform effects on the dashboard both need a stated | Rent fix, weights fixed | Default | 4.80 to 4.71 | +3.24 to +3.03 | | Rent fix, weights fixed | ACS-local | 3.18 to 3.21 | +0.88 to +0.49 | | ACS share 0.5 to 0.9, λ = .03 | ACS-local solves | 2.79 to 2.16 | +0.54 to -0.45 | +| The same solves, corrected rent | ACS-local solves | 2.88 to 2.23 | +0.16 to -0.78 | | Single-factor income aging | Default | 4.80 to 4.05 | +3.24 to +2.45 | -The order below puts prerequisites first and then follows the measured reach: +This table cannot rank the changes, because its rows use different files, and benefit receipt, a dense anchor and the ASEC-PUF gap have no row. So the order below rests on judgement: prerequisites first, then the change we measured on the state path, then changes measured elsewhere or not at all. Aging reaches as far on the default file (0.75) as the ACS share does on ACS-local (0.63), so it could rank higher. + +One warning covers everything after step 2. Aging and better benefit receipt should lower rates, and we have not tested either on the ACS-local path. That path already reads +0.88, and -0.45 at share 0.9, or -0.78 with corrected rent, so changes sized on the default file could overshoot there. + 1. **Put rent back and rebuild.** PolicyEngine/microcosm#1444 carries the assignment fix. It comes first because it corrects a bug and every later step should run on the rebuilt base, not because it closes the largest gap. After a rebuild, tighten `us_housing_inputs_signal_gate` so positive rent outside renter households fails the build, confirm ACS rows pick up the corrected link through the donor transfer, and re-run this note. Calibration then fits to corrected housing, which the fixed-weight runs here cannot show. 2. **Limit what calibration does to states.** Two levers apply: @@ -212,13 +249,13 @@ The order below puts prerequisites first and then follows the measured reach: | Share 0.9, λ = .03 | 2.16 | .75 | 22 | 1.09 | 0.56 | | Share 0.964, λ = .03 | 2.14 | .77 | 22 | 0.87 | 0.47 | - These standard errors fall, and bias remains: at share 0.9, DC reads 24.47 against Census's 20.3. PolicyEngine/microcosm#1078 puts the cost at 36% and 43% more held-out target error on its two folds at share 0.9 with no penalty, mostly on SOI cells, so the share needs a methodology decision. + With corrected rent, the share 0.9 row reads 2.23, with 23 outside the margin (`outputs/acsrent_solves.csv`). These standard errors fall, and bias remains: at share 0.9, DC reads 24.47 against Census's 20.3. PolicyEngine/microcosm#1078 puts the cost at 36% and 43% more held-out target error on its two folds at share 0.9 with no penalty, mostly on SOI cells, so the share needs a methodology decision. - Test an anchor on the dense pool. Initial weights there carry a mean absolute gap of 1.78, against 4.21 on the default file, so an anchor could keep more of that pattern. This needs a solve; we have not run one. -3. **Close benefit receipt before calibration.** Better take-up and receipt inputs should reduce the tilt, because calibration then has less to do. Rent does not close the SNAP gap. +3. **Close benefit receipt before calibration.** Better take-up and receipt inputs should reduce the tilt, because calibration then has less to do, though we have not tested that. Rent does not close the SNAP gap. 4. **Age pooled incomes** (microcosm#944). A crude single-factor run removes 0.88 points nationally. A real fix ages each income source and draws the pool from 2023 to 2025 to match Table 18. -5. **Close the gap between ASEC and PUF rows.** They start 5 points apart at initial weights, and the dense pool's zero depends on that offset. Carrying the ASEC housing flag to its PUF clone helps with one piece. Partnership and S-corp income (PolicyEngine/policyengine-us#9919; PolicyEngine/policyengine-us#10573 partly addresses it) would widen the gap, because all of it lands on PUF rows. +5. **Close the gap between ASEC and PUF rows.** They start 5 points apart at initial weights, and the dense pool's zero depends on that offset. Start with cash income: at published weights, moving to PolicyEngine's cash income adds 0.75 points on ASEC rows and removes 2.06 on PUF rows, while housing adds 1.65 and 1.16 (`outputs/dense_shapley9_asec.csv`, `outputs/dense_shapley9_puf_tax_detail.csv`). Two known fixes should widen the gap. Carrying the ASEC housing flag to its PUF clone adds subsidy to PUF rows only, and partnership and S-corp income (PolicyEngine/policyengine-us#9919; PolicyEngine/policyengine-us#10573 partly addresses it) takes PUF rows from 13.63 to 11.27 and leaves ASEC rows at 20.52. Make those for their own reasons, not to close this gap. 6. **Reconcile 2025 resources near the line.** Compare PolicyEngine's and Census's child resource growth by income source, starting with the uprating series for low earners. -7. **Check the states that miss everywhere.** Delaware, Louisiana and Mississippi point past sampling and calibration, so start with state tax and benefit rules, and with Census's state estimates. +7. **Check the state misses that persist.** Start with Louisiana, the one state that misses the same way by more than 1.96 standard errors at dense initial weights and on ACS rows (`outputs/state_persistence.csv`). Delaware and Mississippi follow, though neither clears that bar on both. Look at state tax and benefit rules and at Census's state estimates. Six states miss the same way past 1.28 standard errors, against three by chance (p = .05), and two past 1.645, against 1.4 (p = .41), and shared Census noise feeds both counts. 8. **Report state child rates as a standing holdout** with standard errors, in every release's receipts. Poverty stays a comparison and never a target. ## Limits @@ -227,7 +264,7 @@ The order below puts prerequisites first and then follows the measured reach: - The ACS-local corrected-rent run gives donors their base record's rent and gives ACS renter heads twelve times `RNTP`. Contract rent stands in for pre-subsidy rent there, and a rebuild would transfer rent from corrected donors instead. - The #1078 solves come from the 2026-09-23 Build O checkpoint. We applied them to outcomes from the 10/17 file, which shares its household ids, and that mismatch alone moves the mean absolute gap: 2.79 for the release-like solve against 3.18 for the 10/17 weights. The cost figures come from share 0.9 with no penalty, not from the λ = .03 rows. - The aged run scales 42 income columns on 2022 and 2023 ASEC records by a single child-resource factor. PUF records stay as they are, the weights stay fit to unaged income, and it tests 0.88 of the 2.3 to 2.5 points the Shapley assigns. -- policyengine-us 2.90.2 has no `spm_unit_spm_universe_status`, so it ignores that column and these runs measure every SPM unit, group quarters included. That choice matters at state level: PR #127's comparison of the August 19 release moves from -15.9% with all SPM units to -18.2% with group quarters excluded. +- policyengine-us 2.90.2 has no `spm_unit_spm_universe_status`, so it ignores that column and these runs measure every SPM unit, group quarters included. That choice matters at state level: PR #127 puts the August 19 release's 2024 median relative gap against ACS 2023 at -15.9% with all SPM units and -18.2% with group quarters excluded. - The ablations ran on Build P, not the dense file. - Initial weights miss the administrative targets, so the initial-weight columns diagnose where error enters. They do not describe a usable file. - We did not verify why Census records less SNAP than administrative totals imply. @@ -236,12 +273,13 @@ The order below puts prerequisites first and then follows the measured reach: Scripts sit in `scripts/` and write beside themselves under `run/` and `asec/`. `outputs/` holds the tables behind this note, `outputs/logs/` holds the printed output of scripts that write no table, and `receipts.json` pins the inputs, including paths outside this repository. -1. `dl.py`, `extract_state.py`, `assemble.py`, `cutrun.py`, `assemble_dense.py`: downloads and state cuts of each file. +1. `dl.py`, `asec_extract.py`, `extract_state.py`, `assemble.py`, `cutrun.py`, `assemble_dense.py`, `cols.py`, `idcheck.py`: downloads, state cuts of each file and id checks. 2. `noise.py`, `vardec.py`, `rep_boot.py`, `rep_eval.py`, `noise_ci.py`, `dense_fit.py`, `kish.py`: noise. -3. `initial_fit.py`: initial and published weights, by channel. -4. `decomp.py`, `decomp2.py`, `steps.py`, `year.py`, `paired.py`, `thr.py`, `resource_growth.py`: decomposition. +3. `initial_fit.py`, `overlap.py`: initial and published weights by channel, sample overlap and persistent state misses. +4. `decomp.py`, `decomp2.py`, `steps.py`, `year.py`, `paired.py`, `thr.py`, `thr_census.py`, `flip.py`, `resource_growth.py`: decomposition. 5. `ablate_eval.py`, `ablate_noise.py`, `fam.py`, `chi_solve.py`, `chi_eval.py`, `dmiss.py`: calibration. 6. `national_cf.py`, `cf_eval.py`, `ctc_ssn.py`, `part.py`: aged incomes, the CTC reform and partnership income. 7. `rent2.py` to `rent5.py`, `rentfix.py`, `dense_rent.py`, `sparse_rent.py`, `runcuts.py`, `rent_eval.py`, `house.py`, `house_sim.py`, `puf_house.py`: rent and housing. -8. `acs_hh.py`, `acs_more.sh`, `acs_one.py`, `acs_eval.py`, `acs_rent_run.py`, `acs_stored.py`: the ACS-local path. +8. `acs_hh.py`, `acs_w.py`, `acs_more.sh`, `acs_one.py`, `acs_eval.py`, `acsrent.py`, `acs_rent_run.py`, `acs_reform_cmp.py`, `acs_stored.py`: the ACS-local path. 9. `dash_swing.py`: the dashboard's stored audits. +10. `prep_evidence.py`, `receipts.py`: package this folder and write `receipts.json`. diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval.csv index 87c9964f7b..de66243cf9 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval.csv +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval.csv @@ -1,31 +1,31 @@ state,census,moe,acs_local,se,kish_src,acs_share,acs_only,acs_only_se,donor_only,donor_only_se,delta,delta_se,stored_2301,gap AK,10.5,2.1,12.321393723762833,3.743008462683068,81.68256219816811,0.41906561091719086,14.975786930595175,3.8676548692424246,10.406607937726202,5.820215767713671,0.0,0.0,12.269848823547363,1.8213937237628333 AL,15.5,2.4,15.059623085010573,3.71513486095829,114.89369341824126,0.3080806998135229,14.892073453526683,1.3194281070236962,15.13422543778082,5.3426796061957385,0.0,0.0,14.110982894897461,-0.440376914989427 -AR,13.3,2.7,6.68559611243325,1.412017057266769,115.11649934358303,0.3446122143394325,11.042644416698813,1.42850530885576,4.394598176602837,1.936397291167434,0.0,0.0,6.774383068084717,-6.614403887566751 +AR,13.3,2.7,6.68559611243325,1.412017057266769,115.11649934358303,0.3446122143394325,11.042644416698813,1.42850530885576,4.394598176602837,1.936397291167434,-2.139452870894872,0.8489418874274481,6.774383068084717,-6.614403887566751 AZ,13.3,2.3,16.387800058721087,4.013061222603815,74.97248693960735,0.32823023017732,15.018313873111348,1.1326133634347828,17.056938186276298,5.934075982139015,0.0,0.0,17.127504348754883,3.0878000587210863 CA,17.9,1.0,19.49647303904357,1.9618571163684015,385.6580886961881,0.2837607789085938,16.420939875952424,0.4373798484726286,20.714942595329678,2.73651623800518,0.0,0.0,20.379192352294922,1.5964730390435697 CO,7.7,1.8,9.110107226754993,2.6867568457632443,65.42288079603081,0.3167165607859737,7.9850533379350015,0.7117317734873981,9.631593886487048,3.9361017947397423,0.0,0.0,9.367508888244629,1.4101072267549926 CT,12.8,3.2,12.142036383928177,2.9672756914200895,100.20771420344856,0.35243678570098613,14.00938323881125,1.6105276066320198,11.125731398111077,4.491962098359044,0.0,0.0,12.430046081542969,-0.6579636160718234 DC,20.3,3.7,20.063349097499845,5.20282053054896,47.067422820631876,0.4034754527762713,19.335252399157124,5.356380553227544,20.5558169203178,7.985315315053287,-7.870994797687709,4.297309466732037,20.46465492248535,-0.23665090250015552 DE,8.7,2.6,21.36348047305636,6.900153737516051,50.95816913382481,0.30803265271757674,14.964556458685824,2.865571367630918,24.211992829059593,9.76218621056253,-1.7609609623206675,1.0538508926782648,22.213157653808594,12.66348047305636 -FL,18.4,1.8,21.68189087324703,3.3801514517694407,135.20425539702788,0.31737704011827417,12.769262957482017,0.5701023800605056,25.825706176604402,4.994668761011213,0.0,0.0,22.613277435302734,3.2818908732470327 +FL,18.4,1.8,21.68189087324703,3.3801514517694407,135.20425539702788,0.31737704011827417,12.769262957482017,0.5701023800605056,25.825706176604402,4.994668761011213,-6.273629324412617,1.7434241849543939,22.613277435302734,3.2818908732470327 GA,15.1,2.2,17.239208888854364,2.956386357383339,121.17506625331394,0.3146201235481187,11.748828880220028,0.7688862484597994,19.759539724339476,4.324472924638935,0.0,0.0,17.39934539794922,2.1392088888543643 -HI,13.0,2.6,5.5836079655769995,1.9850974448778431,118.52750117470644,0.37760164062764257,4.347321396550311,0.7711046293327893,6.33364824078138,3.159689737354891,0.0,0.0,5.165446758270264,-7.4163920344230005 +HI,13.0,2.6,5.5836079655769995,1.9850974448778431,118.52750117470644,0.37760164062764257,4.347321396550311,0.7711046293327893,6.33364824078138,3.159689737354891,-1.3864993132186871,0.6926717710178918,5.165446758270264,-7.4163920344230005 IA,8.2,1.9,5.330152234800179,1.7664517911964994,74.5874438402306,0.3464490034124007,5.261597365688324,0.8275805028634736,5.366493340860581,2.672293454377221,0.0,0.0,5.389122486114502,-2.86984776519982 ID,6.5,1.3,6.012080047447186,1.42519466267205,88.40879016819349,0.33214753479536296,9.443553261930685,1.5355785927140133,4.305482515374321,1.9269207054839907,0.0,0.0,6.954473495483398,-0.4879199525528142 IL,12.4,1.6,12.71448215138427,3.1317881946460764,93.91544229009794,0.2965816587151526,8.568452112115834,0.6881257126289709,14.462569162995395,4.474926628051286,0.0,0.0,18.092145919799805,0.3144821513842704 IN,10.6,2.2,9.211095507958051,2.1542988135484107,120.14005678566079,0.35487947569914285,9.845417850190314,0.8064774659615725,8.862156090041381,3.3070911534768737,0.0,0.0,9.129535675048828,-1.3889044920419487 KS,9.7,2.5,10.902563094311668,4.684481608328661,87.66666433303108,0.3334748697513686,8.436703092478703,1.1318599589725764,12.136278532212144,6.9611728444568906,0.0,0.0,10.451759338378906,1.2025630943116692 KY,13.3,2.9,9.654856568587451,2.9479167492889964,79.96088420874483,0.3957257386758641,7.365566854024051,0.681608750432868,11.154061352444216,4.895395778032309,0.0,0.0,9.635833740234375,-3.6451434314125493 -LA,20.7,3.0,10.577721322368049,2.169661638275234,125.90331436963336,0.3111933330719865,14.035915825132383,1.379637552034913,9.01535683695153,3.059664339475643,0.0,0.0,11.565276145935059,-10.12227867763195 -MA,12.8,2.0,20.79441634009795,4.5906754055484145,102.5908356155141,0.32989952283900936,14.581028749350434,1.1815662741599873,23.85335103909379,6.719603254416517,0.0,0.0,20.928058624267578,7.994416340097949 -MD,10.7,2.5,17.433348552027496,4.218598298707564,61.88106431360571,0.32215088761216787,10.882903843821252,1.1661503288439126,20.546477327204965,6.250901315095014,0.0,0.0,17.483667373657227,6.733348552027497 -ME,6.5,2.3,7.234934576863685,3.0188402223230515,38.50834478575946,0.3333179546821343,4.3449891810992485,0.9941392526276736,8.679807279262587,4.590385407059264,0.0,0.0,7.270956039428711,0.7349345768636848 +LA,20.7,3.0,10.577721322368049,2.169661638275234,125.90331436963336,0.3111933330719865,14.035915825132383,1.379637552034913,9.01535683695153,3.059664339475643,-2.067415066350923,0.6135239140696926,11.565276145935059,-10.12227867763195 +MA,12.8,2.0,20.79441634009795,4.5906754055484145,102.5908356155141,0.32989952283900936,14.581028749350434,1.1815662741599873,23.85335103909379,6.719603254416517,-2.589970589476747,1.4597746702238246,20.928058624267578,7.994416340097949 +MD,10.7,2.5,17.433348552027496,4.218598298707564,61.88106431360571,0.32215088761216787,10.882903843821252,1.1661503288439126,20.546477327204965,6.250901315095014,-3.666427532075165,2.13973279189599,17.483667373657227,6.733348552027497 +ME,6.5,2.3,7.234934576863685,3.0188402223230515,38.50834478575946,0.3333179546821343,4.3449891810992485,0.9941392526276736,8.679807279262587,4.590385407059264,-2.565320115416996,1.5680089534063912,7.270956039428711,0.7349345768636848 MI,10.3,1.9,8.256835401770765,2.6392600139180917,91.52893167205437,0.3203877234279062,6.374426473590426,0.5284478115219912,9.144254201946136,3.8895688869749265,0.0,0.0,9.475631713867188,-2.043164598229236 MN,6.9,1.9,5.0987592257530725,1.6601981302059463,52.54399261696906,0.34048793553809076,5.402193447224024,0.7088069591670008,4.942104484759751,2.483567801299805,0.0,0.0,5.14799690246582,-1.8012407742469279 -MO,9.7,2.3,16.636921591015795,3.9740672672287634,64.86277090035392,0.33222332397483334,10.740424063041209,0.9951810542894202,19.57046820754853,5.872054728479625,0.0,0.0,16.677257537841797,6.936921591015796 -MS,19.1,2.6,12.989889728210732,2.8237984652354777,120.09612336052896,0.34971731263512185,15.700236078466064,1.6775597911491218,11.532285119724733,4.2438683774562,0.0,0.0,12.927408218383789,-6.110110271789269 -MT,9.3,2.3,4.617522603187462,1.3314483779387705,51.16610302382995,0.32933782545962187,10.14388019073906,2.7341405641298953,1.9037291917074668,1.1533784757098104,0.0,0.0,4.747105598449707,-4.682477396812539 +MO,9.7,2.3,16.636921591015795,3.9740672672287634,64.86277090035392,0.33222332397483334,10.740424063041209,0.9951810542894202,19.57046820754853,5.872054728479625,-8.24943192084599,3.6047902663083464,16.677257537841797,6.936921591015796 +MS,19.1,2.6,12.989889728210732,2.8237984652354777,120.09612336052896,0.34971731263512185,15.700236078466064,1.6775597911491218,11.532285119724733,4.2438683774562,-3.5702908131062463,1.5687673395260167,12.927408218383789,-6.110110271789269 +MT,9.3,2.3,4.617522603187462,1.3314483779387705,51.16610302382995,0.32933782545962187,10.14388019073906,2.7341405641298953,1.9037291917074668,1.1533784757098104,-0.6587857198038035,0.21640068702766152,4.747105598449707,-4.682477396812539 NC,14.4,2.2,11.383821595734682,2.483166642776731,123.95133566758639,0.3136719210648219,10.238524145357312,0.739669148907255,11.907255886821646,3.607282095198393,0.0,0.0,11.701009750366211,-3.016178404265318 ND,10.3,2.1,10.66569031081114,3.4523999116526567,67.67907793489668,0.33186741866405767,4.753541889405907,1.4266527330488992,13.602307219160961,5.152722104643105,0.0,0.0,10.772493362426758,0.36569031081113934 NE,7.1,1.9,9.500128835226924,4.219029473139932,79.73182955023789,0.3063484897355067,6.782482728016978,1.4360419013860366,10.700366661079695,6.024229240183856,0.0,0.0,9.424169540405273,2.4001288352269246 @@ -38,14 +38,14 @@ OH,12.3,2.1,7.433844095393124,1.4405859525265752,136.868774475337,0.359469468540 OK,9.9,2.0,13.731178131074726,4.169544904780285,72.68188683082842,0.30082612879830045,7.135168863816389,0.6797946636539011,16.569173106454205,5.963683235099995,0.0,0.0,13.372641563415527,3.8311781310747257 OR,11.0,2.4,15.223837236720705,3.6042301094674607,80.00122144021869,0.3868748897063032,9.686660958198624,0.9417384902858613,18.71773175526594,5.796223839892173,0.0,0.0,14.899346351623535,4.223837236720705 PA,11.1,2.0,13.637911018385992,2.8762102777615794,152.97423864359848,0.346456113240414,10.358501019361265,0.9133835774870138,15.376388976794027,4.369408282978113,0.0,0.0,13.813882827758789,2.5379110183859925 -RI,8.4,2.3,13.35977181953176,4.002107274233144,47.716257082316176,0.2638155685183552,11.706778067766948,2.1389775521649073,13.952130836825097,5.411007448316621,0.0,0.0,10.114660263061523,4.95977181953176 +RI,8.4,2.3,13.35977181953176,4.002107274233144,47.716257082316176,0.2638155685183552,11.706778067766948,2.1389775521649073,13.952130836825097,5.411007448316621,-6.84669058579203,3.2677596335297556,10.114660263061523,4.95977181953176 SC,11.1,2.1,10.59473085687635,2.4520723216335494,115.26644659001987,0.3736839049269087,11.553570544719635,1.2024288422176759,10.022650781702227,3.8469322710165352,0.0,0.0,9.70772647857666,-0.50526914312365 SD,7.8,2.2,6.726459502632879,2.3272798467048927,55.2407957270471,0.26912123840231045,6.7068360049000635,1.5212604403340164,6.733685188053119,3.1395687931209575,0.0,0.0,6.721802234649658,-1.0735404973671212 -TN,10.0,1.7,16.42325489667534,3.0669705013054744,89.2695834668554,0.3282847810394231,17.970609097212844,1.351825751368199,15.667022462787758,4.491841348158154,0.0,0.0,15.603744506835938,6.423254896675338 +TN,10.0,1.7,16.42325489667534,3.0669705013054744,89.2695834668554,0.3282847810394231,17.970609097212844,1.351825751368199,15.667022462787758,4.491841348158154,-5.76581519722165,2.1743474156596263,15.603744506835938,6.423254896675338 TX,16.1,1.3,14.045259064593418,1.685678655696754,294.32648200901883,0.3083157384243811,15.264531260011097,0.5128349830310771,13.501772927704614,2.4211407892896815,0.0,0.0,14.510196685791016,-2.054740935406583 UT,7.3,1.6,8.359499249071256,2.0982139808994016,88.5556251779635,0.29356651846541537,5.222133569445866,0.7089311662182424,9.663267464756284,3.0000511031115513,0.0,0.0,8.38582706451416,1.0594992490712558 VA,12.1,2.4,14.131721562535965,3.4974094202644177,135.12178712944925,0.3120242155444285,10.222161875261767,0.7379258638542938,15.904861434764465,5.046324742621825,0.0,0.0,15.400092124938965,2.0317215625359655 -VT,8.3,2.5,10.308498555295754,4.103266497917791,68.58960036751176,0.3813777601649377,5.468605036993444,1.7524339067205175,13.292270606457496,6.521284444131556,0.0,0.0,10.242634773254395,2.0084985552957537 +VT,8.3,2.5,10.308498555295754,4.103266497917791,68.58960036751176,0.3813777601649377,5.468605036993444,1.7524339067205175,13.292270606457496,6.521284444131556,-0.8198424878811376,0.5644160471313165,10.242634773254395,2.0084985552957537 WA,9.3,1.9,14.144094797845291,3.5056242790878342,104.56017409766304,0.3410985566238413,10.824512336178158,1.0575867773948409,15.862568474980742,5.285650433207835,0.0,0.0,14.172506332397461,4.84409479784529 WI,7.3,1.7,4.205482205184001,1.1851299579185464,76.2063037717102,0.33178902497349727,7.339248739090038,0.9754240295726758,2.64946265202114,1.6371265070652459,0.0,0.0,5.814634799957275,-3.0945177948159985 WV,11.3,2.4,15.269485131709581,4.591939630665602,78.48511051927737,0.3651987935901132,11.56747752398947,2.007798430035103,17.39923645944705,7.11376741088013,0.0,0.0,16.38048553466797,3.9694851317095807 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_reform.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_reform.csv new file mode 100644 index 0000000000..196935a43b --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_reform.csv @@ -0,0 +1,16 @@ +state,ctc_effect_published,ctc_effect_se_published,ctc_effect_corrected_rent,ctc_effect_se_corrected_rent,corrected_minus_published +AR,-1.9729223774049145,0.8486357725649586,-2.139452870894872,0.8489418874274481,-0.16653049348995763 +DC,-8.648974183112678,4.339825412853922,-7.870994797687709,4.297309466732037,0.7779793854249686 +DE,-2.9691945909874917,1.6834766244883417,-1.7609609623206675,1.0538508926782648,1.2082336286668243 +FL,-3.529584484380603,1.1124732966522155,-6.273629324412617,1.7434241849543939,-2.7440448400320143 +HI,-1.5974204310103088,0.7041621558092247,-1.3864993132186871,0.6926717710178918,0.2109211177916217 +LA,-1.6161803656670206,0.3522690221840859,-2.067415066350923,0.6135239140696926,-0.45123470068390237 +MA,-3.438875768601351,1.6663025426707383,-2.589970589476747,1.4597746702238246,0.8489051791246038 +MD,-3.413791655908443,2.109547341096508,-3.666427532075165,2.13973279189599,-0.252635876166722 +ME,-2.6266704709698754,1.5727339170258277,-2.565320115416996,1.5680089534063912,0.0613503555528796 +MO,-8.959376509915272,3.695574848895399,-8.24943192084599,3.6047902663083464,0.7099445890692824 +MS,-3.394959085138506,1.561580138172457,-3.5702908131062463,1.5687673395260167,-0.17533172796774021 +MT,-0.6722671920587023,0.23826363983213664,-0.6587857198038035,0.21640068702766152,0.013481472254898819 +RI,-7.082426369729525,3.2725430726119247,-6.84669058579203,3.2677596335297556,0.2357357839374954 +TN,-5.4719950504883315,2.1036927030836683,-5.76581519722165,2.1743474156596263,-0.29382014673331813 +VT,-0.17161126906749033,0.08063431563089071,-0.8198424878811376,0.5644160471313165,-0.6482312188136472 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/kish.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/kish.csv index 5dd8d2179d..1725cda4c2 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/kish.csv +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/kish.csv @@ -1,52 +1,52 @@ -,default,dense,acs_local -AK,37.98471782713533,270.77150015627655,81.68256219816811 -AL,68.58779990580473,302.1225190773023,114.89369341824126 -AR,62.105094021855884,340.8662484933955,115.11649934358303 -AZ,45.3284963055765,296.27404735040426,74.97248693960735 -CA,277.08738654108777,1571.984374501322,385.6580886961881 -CO,38.510189710362155,239.16896520980544,65.42288079603081 -CT,49.5349789411142,180.5316229527832,100.20771420344856 -DC,19.03272731145116,151.55028324914818,47.067422820631876 -DE,37.12606982158454,199.45531593242546,50.95816913382481 -FL,119.93288241090772,680.5172484470773,135.20425539702788 -GA,71.2010943685851,336.5775462207633,121.17506625331394 -HI,58.51650866276973,315.04884644114907,118.52750117470644 -IA,41.81425292673476,248.87914343785573,74.5874438402306 -ID,54.59837354512303,412.7402722405761,88.40879016819349 -IL,77.31565547770447,488.02407228200747,93.91544229009794 -IN,54.856248082255256,328.39335261640383,120.14005678566079 -KS,50.07299188694024,238.16662445033077,87.66666433303108 -KY,39.4390871820677,242.94924785422788,79.96088420874483 -LA,74.8147207314998,357.42522918734693,125.90331436963336 -MA,63.90054606623205,432.2779144396734,102.5908356155141 -MD,38.20362601166963,197.83070984087192,61.88106431360571 -ME,24.34994377274881,137.77424978153465,38.50834478575946 -MI,57.63202405362826,370.6413999162929,91.52893167205437 -MN,34.41797497157772,271.54651648227104,52.54399261696906 -MO,37.47299325842981,286.3754657950601,64.86277090035392 -MS,65.1592648114706,299.10670521027674,120.09612336052896 -MT,36.240991831947994,307.79544519159174,51.16610302382995 -NC,64.29252344351819,390.4904245076151,123.95133566758639 -ND,34.81082873025876,301.4267517946344,67.67907793489668 -NE,45.72247722942102,281.3067879221785,79.73182955023789 -NH,40.26227980094306,229.25765799638356,73.11100560293525 -NJ,61.915033896035,380.83081418269023,117.661096080773 -NM,50.83647659675805,329.9824113304191,90.34932912736528 -NV,44.3078778768284,263.85137487538793,85.62569767303911 -NY,110.80839106635864,525.8436288368683,174.20366464173924 -OH,70.15899268859908,409.7973160507123,136.868774475337 -OK,51.04119939077659,305.0616233774748,72.68188683082842 -OR,42.58183012576952,255.10068940140434,80.00122144021869 -PA,80.33797119132167,484.9549020616078,152.97423864359848 -RI,32.44104383646585,165.17111040093312,47.716257082316176 -SC,57.759130789909484,312.52952107298916,115.26644659001987 -SD,46.28145794319663,214.6810302293172,55.2407957270471 -TN,63.24513212545799,327.37855426628516,89.2695834668554 -TX,191.9565111320922,1101.5878734075197,294.32648200901883 -UT,67.83407114015975,363.0981758388387,88.5556251779635 -VA,73.11447903359787,333.23855259844123,135.12178712944925 -VT,36.56208754920278,295.25429070942306,68.58960036751176 -WA,63.10633166802377,413.42315881804,104.56017409766304 -WI,42.755161250901196,242.72152410910903,76.2063037717102 -WV,47.62918753183299,339.02582501747304,78.48511051927737 -WY,50.57422117899524,239.50162862168793,75.3355320006355 +,default,default_initial,dense,dense_initial,acs_local +AK,37.98471782713533,166.14594185539693,270.77150015627655,475.6220724531401,81.68256219816811 +AL,68.58779990580473,211.2123289483386,302.1225190773023,748.8143914471011,114.89369341824126 +AR,62.105094021855884,214.59223519983098,340.8662484933955,765.0739914486616,115.11649934358303 +AZ,45.3284963055765,240.80580307252134,296.27404735040426,634.7146886043861,74.97248693960735 +CA,277.08738654108777,644.8786520816968,1571.984374501322,3686.5194215678803,385.6580886961881 +CO,38.510189710362155,234.07741830561395,239.16896520980544,554.563608329069,65.42288079603081 +CT,49.5349789411142,164.28425682661518,180.5316229527832,424.4117681188062,100.20771420344856 +DC,19.03272731145116,64.94343425663871,151.55028324914818,386.37192679126804,47.067422820631876 +DE,37.12606982158454,191.46324642735715,199.45531593242546,415.9101156106166,50.95816913382481 +FL,119.93288241090772,317.70816716931716,680.5172484470773,1714.1258715228414,135.20425539702788 +GA,71.2010943685851,246.76439841462997,336.5775462207633,941.401960854563,121.17506625331394 +HI,58.51650866276973,191.96226381537295,315.04884644114907,581.1566922546888,118.52750117470644 +IA,41.81425292673476,207.0943151812749,248.87914343785573,538.1655405654224,74.5874438402306 +ID,54.59837354512303,203.33075253101458,412.7402722405761,809.68310682561,88.40879016819349 +IL,77.31565547770447,348.70157158934563,488.02407228200747,1066.6990189268608,93.91544229009794 +IN,54.856248082255256,254.11785696434617,328.39335261640383,738.2267635841208,120.14005678566079 +KS,50.07299188694024,155.93353793475464,238.16662445033077,495.9277469401204,87.66666433303108 +KY,39.4390871820677,174.46922012314803,242.94924785422788,450.5086876214915,79.96088420874483 +LA,74.8147207314998,189.92376175516853,357.42522918734693,890.3520152931574,125.90331436963336 +MA,63.90054606623205,334.93492974504403,432.2779144396734,952.8033345678602,102.5908356155141 +MD,38.20362601166963,192.35345415106138,197.83070984087192,477.331482557027,61.88106431360571 +ME,24.34994377274881,124.8140358968435,137.77424978153465,254.5079857298355,38.50834478575946 +MI,57.63202405362826,286.34053970688535,370.6413999162929,875.1719776731239,91.52893167205437 +MN,34.41797497157772,246.17109896764666,271.54651648227104,551.5372134683682,52.54399261696906 +MO,37.47299325842981,178.89455903907768,286.3754657950601,627.2616049265259,64.86277090035392 +MS,65.1592648114706,209.87185825579326,299.10670521027674,667.7990534911511,120.09612336052896 +MT,36.240991831947994,130.68950816427807,307.79544519159174,653.1095082250326,51.16610302382995 +NC,64.29252344351819,273.9435153642994,390.4904245076151,986.6197905206062,123.95133566758639 +ND,34.81082873025876,131.86946154324792,301.4267517946344,608.5975166682833,67.67907793489668 +NE,45.72247722942102,215.15354165447738,281.3067879221785,531.7865679026369,79.73182955023789 +NH,40.26227980094306,158.70868209591387,229.25765799638356,429.1660651283738,73.11100560293525 +NJ,61.915033896035,327.78340841991627,380.83081418269023,808.8938731515342,117.661096080773 +NM,50.83647659675805,198.88403822932614,329.9824113304191,571.4700035112004,90.34932912736528 +NV,44.3078778768284,200.47422793354863,263.85137487538793,564.1089914036241,85.62569767303911 +NY,110.80839106635864,381.4856793735303,525.8436288368683,1400.8605962159324,174.20366464173924 +OH,70.15899268859908,296.5631194314528,409.7973160507123,883.6344401027508,136.868774475337 +OK,51.04119939077659,203.43343124030378,305.0616233774748,634.2257064911608,72.68188683082842 +OR,42.58183012576952,234.3713649534103,255.10068940140434,634.1210607048457,80.00122144021869 +PA,80.33797119132167,388.7959935889939,484.9549020616078,1044.8266315591243,152.97423864359848 +RI,32.44104383646585,134.33730651640442,165.17111040093312,311.1806331615715,47.716257082316176 +SC,57.759130789909484,218.695414690068,312.52952107298916,776.96954775944,115.26644659001987 +SD,46.28145794319663,158.6158938017547,214.6810302293172,457.3520797631112,55.2407957270471 +TN,63.24513212545799,226.64601446599923,327.37855426628516,732.4640216039771,89.2695834668554 +TX,191.9565111320922,458.56900343433455,1101.5878734075197,2721.2221531012638,294.32648200901883 +UT,67.83407114015975,239.03266467701738,363.0981758388387,828.9660424611058,88.5556251779635 +VA,73.11447903359787,287.92441321794865,333.23855259844123,797.2230352218327,135.12178712944925 +VT,36.56208754920278,78.97003189127406,295.25429070942306,497.7407067268541,68.58960036751176 +WA,63.10633166802377,251.24795027071212,413.42315881804,767.4375170666112,104.56017409766304 +WI,42.755161250901196,237.06947592229523,242.72152410910903,589.464452636833,76.2063037717102 +WV,47.62918753183299,182.16196683436914,339.02582501747304,779.3940615403816,78.48511051927737 +WY,50.57422117899524,110.19064345564267,239.50162862168793,564.6479630863131,75.3355320006355 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acsrent_eval.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acsrent_eval.txt index 0ebedcbfb3..ff7f8cec37 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acsrent_eval.txt +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acsrent_eval.txt @@ -2,31 +2,31 @@ state AK 10.5 2.1 12.32 3.74 81.68 0.42 14.98 3.87 10.41 5.82 0.00 0.00 12.27 1.82 AL 15.5 2.4 15.06 3.72 114.89 0.31 14.89 1.32 15.13 5.34 0.00 0.00 14.11 -0.44 -AR 13.3 2.7 6.69 1.41 115.12 0.34 11.04 1.43 4.39 1.94 0.00 0.00 6.77 -6.61 +AR 13.3 2.7 6.69 1.41 115.12 0.34 11.04 1.43 4.39 1.94 -2.14 0.85 6.77 -6.61 AZ 13.3 2.3 16.39 4.01 74.97 0.33 15.02 1.13 17.06 5.93 0.00 0.00 17.13 3.09 CA 17.9 1.0 19.50 1.96 385.66 0.28 16.42 0.44 20.71 2.74 0.00 0.00 20.38 1.60 CO 7.7 1.8 9.11 2.69 65.42 0.32 7.99 0.71 9.63 3.94 0.00 0.00 9.37 1.41 CT 12.8 3.2 12.14 2.97 100.21 0.35 14.01 1.61 11.13 4.49 0.00 0.00 12.43 -0.66 DC 20.3 3.7 20.06 5.20 47.07 0.40 19.34 5.36 20.56 7.99 -7.87 4.30 20.46 -0.24 DE 8.7 2.6 21.36 6.90 50.96 0.31 14.96 2.87 24.21 9.76 -1.76 1.05 22.21 12.66 -FL 18.4 1.8 21.68 3.38 135.20 0.32 12.77 0.57 25.83 4.99 0.00 0.00 22.61 3.28 +FL 18.4 1.8 21.68 3.38 135.20 0.32 12.77 0.57 25.83 4.99 -6.27 1.74 22.61 3.28 GA 15.1 2.2 17.24 2.96 121.18 0.31 11.75 0.77 19.76 4.32 0.00 0.00 17.40 2.14 -HI 13.0 2.6 5.58 1.99 118.53 0.38 4.35 0.77 6.33 3.16 0.00 0.00 5.17 -7.42 +HI 13.0 2.6 5.58 1.99 118.53 0.38 4.35 0.77 6.33 3.16 -1.39 0.69 5.17 -7.42 IA 8.2 1.9 5.33 1.77 74.59 0.35 5.26 0.83 5.37 2.67 0.00 0.00 5.39 -2.87 ID 6.5 1.3 6.01 1.43 88.41 0.33 9.44 1.54 4.31 1.93 0.00 0.00 6.95 -0.49 IL 12.4 1.6 12.71 3.13 93.92 0.30 8.57 0.69 14.46 4.47 0.00 0.00 18.09 0.31 IN 10.6 2.2 9.21 2.15 120.14 0.35 9.85 0.81 8.86 3.31 0.00 0.00 9.13 -1.39 KS 9.7 2.5 10.90 4.68 87.67 0.33 8.44 1.13 12.14 6.96 0.00 0.00 10.45 1.20 KY 13.3 2.9 9.65 2.95 79.96 0.40 7.37 0.68 11.15 4.90 0.00 0.00 9.64 -3.65 -LA 20.7 3.0 10.58 2.17 125.90 0.31 14.04 1.38 9.02 3.06 0.00 0.00 11.57 -10.12 -MA 12.8 2.0 20.79 4.59 102.59 0.33 14.58 1.18 23.85 6.72 0.00 0.00 20.93 7.99 -MD 10.7 2.5 17.43 4.22 61.88 0.32 10.88 1.17 20.55 6.25 0.00 0.00 17.48 6.73 -ME 6.5 2.3 7.23 3.02 38.51 0.33 4.34 0.99 8.68 4.59 0.00 0.00 7.27 0.73 +LA 20.7 3.0 10.58 2.17 125.90 0.31 14.04 1.38 9.02 3.06 -2.07 0.61 11.57 -10.12 +MA 12.8 2.0 20.79 4.59 102.59 0.33 14.58 1.18 23.85 6.72 -2.59 1.46 20.93 7.99 +MD 10.7 2.5 17.43 4.22 61.88 0.32 10.88 1.17 20.55 6.25 -3.67 2.14 17.48 6.73 +ME 6.5 2.3 7.23 3.02 38.51 0.33 4.34 0.99 8.68 4.59 -2.57 1.57 7.27 0.73 MI 10.3 1.9 8.26 2.64 91.53 0.32 6.37 0.53 9.14 3.89 0.00 0.00 9.48 -2.04 MN 6.9 1.9 5.10 1.66 52.54 0.34 5.40 0.71 4.94 2.48 0.00 0.00 5.15 -1.80 -MO 9.7 2.3 16.64 3.97 64.86 0.33 10.74 1.00 19.57 5.87 0.00 0.00 16.68 6.94 -MS 19.1 2.6 12.99 2.82 120.10 0.35 15.70 1.68 11.53 4.24 0.00 0.00 12.93 -6.11 -MT 9.3 2.3 4.62 1.33 51.17 0.33 10.14 2.73 1.90 1.15 0.00 0.00 4.75 -4.68 +MO 9.7 2.3 16.64 3.97 64.86 0.33 10.74 1.00 19.57 5.87 -8.25 3.60 16.68 6.94 +MS 19.1 2.6 12.99 2.82 120.10 0.35 15.70 1.68 11.53 4.24 -3.57 1.57 12.93 -6.11 +MT 9.3 2.3 4.62 1.33 51.17 0.33 10.14 2.73 1.90 1.15 -0.66 0.22 4.75 -4.68 NC 14.4 2.2 11.38 2.48 123.95 0.31 10.24 0.74 11.91 3.61 0.00 0.00 11.70 -3.02 ND 10.3 2.1 10.67 3.45 67.68 0.33 4.75 1.43 13.60 5.15 0.00 0.00 10.77 0.37 NE 7.1 1.9 9.50 4.22 79.73 0.31 6.78 1.44 10.70 6.02 0.00 0.00 9.42 2.40 @@ -39,14 +39,14 @@ OH 12.3 2.1 7.43 1.44 136.87 0.36 10.08 0.67 OK 9.9 2.0 13.73 4.17 72.68 0.30 7.14 0.68 16.57 5.96 0.00 0.00 13.37 3.83 OR 11.0 2.4 15.22 3.60 80.00 0.39 9.69 0.94 18.72 5.80 0.00 0.00 14.90 4.22 PA 11.1 2.0 13.64 2.88 152.97 0.35 10.36 0.91 15.38 4.37 0.00 0.00 13.81 2.54 -RI 8.4 2.3 13.36 4.00 47.72 0.26 11.71 2.14 13.95 5.41 0.00 0.00 10.11 4.96 +RI 8.4 2.3 13.36 4.00 47.72 0.26 11.71 2.14 13.95 5.41 -6.85 3.27 10.11 4.96 SC 11.1 2.1 10.59 2.45 115.27 0.37 11.55 1.20 10.02 3.85 0.00 0.00 9.71 -0.51 SD 7.8 2.2 6.73 2.33 55.24 0.27 6.71 1.52 6.73 3.14 0.00 0.00 6.72 -1.07 -TN 10.0 1.7 16.42 3.07 89.27 0.33 17.97 1.35 15.67 4.49 0.00 0.00 15.60 6.42 +TN 10.0 1.7 16.42 3.07 89.27 0.33 17.97 1.35 15.67 4.49 -5.77 2.17 15.60 6.42 TX 16.1 1.3 14.05 1.69 294.33 0.31 15.26 0.51 13.50 2.42 0.00 0.00 14.51 -2.05 UT 7.3 1.6 8.36 2.10 88.56 0.29 5.22 0.71 9.66 3.00 0.00 0.00 8.39 1.06 VA 12.1 2.4 14.13 3.50 135.12 0.31 10.22 0.74 15.90 5.05 0.00 0.00 15.40 2.03 -VT 8.3 2.5 10.31 4.10 68.59 0.38 5.47 1.75 13.29 6.52 0.00 0.00 10.24 2.01 +VT 8.3 2.5 10.31 4.10 68.59 0.38 5.47 1.75 13.29 6.52 -0.82 0.56 10.24 2.01 WA 9.3 1.9 14.14 3.51 104.56 0.34 10.82 1.06 15.86 5.29 0.00 0.00 14.17 4.84 WI 7.3 1.7 4.21 1.19 76.21 0.33 7.34 0.98 2.65 1.64 0.00 0.00 5.81 -3.09 WV 11.3 2.4 15.27 4.59 78.49 0.37 11.57 2.01 17.40 7.11 0.00 0.00 16.38 3.97 @@ -55,7 +55,7 @@ median se 2.97 median delta se 0.0 current vs stored 2.30.1 mean abs 0.65 all rows states 51 mean gap 0.49 sd 4.19 MAD 3.21 corr 0.513 beyond 29 median se 2.97 ACS rows states 51 mean gap -0.97 sd 3.16 MAD 2.53 corr 0.658 beyond 24 median se 1.06 donor rows states 51 mean gap 1.19 sd 5.4 MAD 4.37 corr 0.398 beyond 38 median se 4.49 -reform delta median 0.0 min -7.87 max 0.0 median se 0.0 +reform delta median 0.0 min -8.25 max 0.0 median se 0.0 mean_gap mad beyond corr med_se med_delta med_delta_se acs_share DE DC TN MD LA MT HI MA run dup_release_repro 0.16 2.88 25 0.52 2.81 0.0 0.0 0.35 19.01 18.26 15.82 17.00 11.03 4.40 5.37 18.39 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/kish.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/kish.txt new file mode 100644 index 0000000000..647b7cda02 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/kish.txt @@ -0,0 +1,3 @@ +{'default': 51.0, 'default_initial': 211.0, 'dense': 305.0, 'dense_initial': 635.0, 'acs_local': 88.0} +{'default': {'min': 19.0, 'max': 277.0}, 'default_initial': {'min': 65.0, 'max': 645.0}, 'dense': {'min': 138.0, 'max': 1572.0}, 'dense_initial': {'min': 255.0, 'max': 3687.0}, 'acs_local': {'min': 39.0, 'max': 386.0}} +{'default': 'DC', 'default_initial': 'DC', 'dense': 'ME', 'dense_initial': 'ME', 'acs_local': 'ME'} {'default': 'CA', 'default_initial': 'CA', 'dense': 'CA', 'dense_initial': 'CA', 'acs_local': 'CA'} diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/overlap.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/overlap.txt new file mode 100644 index 0000000000..b14e860973 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/overlap.txt @@ -0,0 +1,35 @@ +raw ASEC against Table 18 + 2023-25, Table 18's window: corr 0.996, gap sd 0.32, mean abs gap 0.24 + 2022-24, the pool's window: corr 0.962, gap sd 1.02, mean abs gap 0.90 + 2022 against 2025, no shared income year: corr 0.68, difference sd 3.07 + file weights rows mean_cov median_rho Q tau tau_lo tau_hi Q_adj tau_adj tau_adj_lo tau_adj_hi + dense initial all 0.60 0.38 94.42 1.50 0.88 2.31 170.54 1.88 1.41 2.59 + dense initial asec 0.85 0.43 76.22 1.28 0.36 1.79 152.63 1.82 1.14 2.16 + dense initial puf 0.34 0.21 158.53 2.43 1.95 3.58 203.68 2.54 2.12 3.67 + dense published all 0.66 0.25 147.89 3.07 2.33 4.34 188.43 3.20 2.57 4.48 + dense published asec 0.96 0.25 191.65 4.56 3.41 6.01 244.76 4.72 3.65 6.17 + dense published puf 0.40 0.11 118.41 2.82 2.00 4.13 131.95 2.91 2.16 4.22 +default initial all 0.77 0.25 109.67 2.74 1.91 4.11 139.50 2.95 2.28 4.31 +default initial asec 1.03 0.21 138.62 4.55 3.50 6.63 167.16 4.75 3.82 6.81 +default initial puf 0.57 0.13 76.51 1.98 0.69 3.17 85.84 2.14 1.12 3.31 +default published all 0.72 0.11 71.74 2.74 0.22 4.15 76.02 2.90 0.83 4.29 +default published asec 0.84 0.09 142.57 6.29 3.32 7.76 147.05 6.33 3.43 7.84 +default published puf 0.61 0.05 77.91 3.17 0.79 4.56 79.41 3.22 0.89 4.64 +benchmark 2024-25 against Table 18: corr 0.969 +rows weights records mean_gap sd mad mad_demeaned corr median_se beyond_2se + all initial 40692 0.79 3.25 2.47 2.33 0.67 1.78 8 + all published 40692 5.41 5.47 6.08 4.36 0.58 3.13 18 +asec initial 19205 3.05 3.08 3.44 2.40 0.80 2.32 11 +asec published 19205 9.00 7.01 9.44 5.63 0.60 4.40 22 + puf initial 21487 -1.47 4.17 3.13 2.95 0.41 1.96 9 + puf published 21487 2.57 5.89 4.72 4.41 0.42 3.70 8 +gap corr dense initial, ACS rows 0.30; p 0.031 +shared Census noise alone would give about 0.24 +gap corr dense published, ACS rows 0.42; shared Census noise alone would give about 0.15 +|z|>1.28: 6 states ['DE', 'IL', 'LA', 'MS', 'OH', 'WA'], permutation mean 3.03, p 0.049 +|z|>1.645: 2 states ['DE', 'LA'], permutation mean 1.37, p 0.412 +|z|>1.96: 1 states ['LA'], permutation mean 0.68, p 0.533 + dense_initial acs_rows z_dense z_acs +DE 5.35 6.26 2.28 1.91 +LA -6.95 -6.40 -3.39 -2.80 +MS -5.19 -3.18 -2.72 -1.38 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/thr_census.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/thr_census.txt new file mode 100644 index 0000000000..de7f6db269 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/thr_census.txt @@ -0,0 +1,9 @@ +Census reference thresholds by tenure {1: 39068.0, 2: 32586.0, 3: 39430.0} +PolicyEngine reference thresholds [np.float64(32879.0), np.float64(39220.0), np.float64(39231.0)] +SPM_TENMORTSTATUS 1 2 3 +spm_unit_reference_spm_threshold__2024 +32879.0 0 4477 0 +39220.0 0 0 7617 +39231.0 11367 0 0 +pairs {32879.0: 32586, 39220.0: 39430, 39231.0: 39068} +child rate 2024: simulated 15.69, recomputed 15.69, with Census thresholds 15.72 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/overlap_benchmark.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/overlap_benchmark.csv new file mode 100644 index 0000000000..47fbce7c85 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/overlap_benchmark.csv @@ -0,0 +1,7 @@ +rows,weights,records,mean_gap,sd,mad,mad_demeaned,corr,median_se,beyond_2se +all,initial,40692,0.7867372891971931,3.248805981150784,2.468804328855891,2.3343685593110695,0.6690044721833458,1.7759986518198563,8 +all,published,40692,5.4064051259490675,5.474223029022839,6.078282858333024,4.357785355367064,0.5763359925051068,3.130750018155782,18 +asec,initial,19205,3.0476605400923567,3.0756222390034194,3.4390102900932127,2.4010326342111443,0.7953823897993006,2.32088160634177,11 +asec,published,19205,9.003883497149689,7.0060278380809695,9.437993149881747,5.625186803283967,0.6002030405081092,4.395317956212454,22 +puf,initial,21487,-1.4741859616979693,4.172050471176363,3.1305446407195237,2.946502418900436,0.4112895429223947,1.9565850424007294,9 +puf,published,21487,2.571506569034087,5.88605236751841,4.723268802435301,4.410151403717117,0.4224590436038589,3.704989378410522,8 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/overlap_fits.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/overlap_fits.csv new file mode 100644 index 0000000000..ed8df0e6be --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/overlap_fits.csv @@ -0,0 +1,13 @@ +file,weights,rows,mean_cov,median_rho,Q,tau,tau_lo,tau_hi,Q_adj,tau_adj,tau_adj_lo,tau_adj_hi +dense,initial,all,0.595543109238221,0.3778947544666261,94.42341961555938,1.4984727940360092,0.8825647592341488,2.3119248205641063,170.54109602618092,1.8755688332218294,1.4103840167964343,2.5881759037064493 +dense,initial,asec,0.8527396488286029,0.433831265244919,76.22151432219971,1.280018221026351,0.3580304273105931,1.7884770240872516,152.62894153566256,1.8245228111465517,1.1359047429114335,2.1649935408665373 +dense,initial,puf,0.3383465696478391,0.2139340304860209,158.53077164835463,2.429593296017989,1.9546102900450604,3.577542787288993,203.67660446416454,2.537153696557851,2.1231029929696836,3.6749167305949904 +dense,published,all,0.6582605677339217,0.2474896813207447,147.88891271598067,3.0717065318916488,2.3302500678368565,4.344365305004411,188.42743074183704,3.200907590987537,2.5673713162898406,4.482641157124921 +dense,published,asec,0.9567971403817802,0.2542350497670981,191.64686035731117,4.555203429762527,3.4109816762605596,6.012211258784268,244.76465447124923,4.720485981388877,3.650720914708744,6.165585809435793 +dense,published,puf,0.40363013211436927,0.11480117997887508,118.41319566841526,2.819685061780852,2.003167277936313,4.132922664086149,131.9490867390386,2.908180316090604,2.164296256926942,4.219278958625003 +default,initial,all,0.7675988966050542,0.24930098657653044,109.67353281069065,2.7400987699678767,1.9065127731125615,4.106057707567537,139.4961171319021,2.9489779630212936,2.2796337180771893,4.305934731561324 +default,initial,asec,1.025936184834074,0.2143637472803949,138.62304094182142,4.547022599554794,3.5044856791488828,6.634408603575592,167.16294262078407,4.75496277867221,3.816837674000062,6.8116735232100485 +default,initial,puf,0.5673581353359098,0.13332355689820224,76.50598644028571,1.9787425721109382,0.6921070840491997,3.167009358865418,85.840706854272,2.1350275294682275,1.117842683505096,3.312363861082592 +default,published,all,0.7203916785379127,0.10531231824891661,71.73595745440814,2.740313912978613,0.21680965681125955,4.153269891777422,76.02056029770819,2.902045842564099,0.827777852942473,4.292333896639983 +default,published,asec,0.8445788619709014,0.0945445328289885,142.57403537984788,6.287313269379026,3.3151225447971355,7.762250214623579,147.04941350069421,6.32967407265866,3.430560159302139,7.8421510118444555 +default,published,puf,0.612530785658158,0.05406109357460643,77.91166855678543,3.170558084662735,0.7914752652861562,4.557006350369592,79.41294056392113,3.2168983409736667,0.8902069501657034,4.6437755654332085 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/state_persistence.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/state_persistence.csv new file mode 100644 index 0000000000..173b77b936 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/state_persistence.csv @@ -0,0 +1,52 @@ +,dense_initial,dense_initial_se,acs_rows,acs_rows_se,census_se,z_dense,z_acs +AK,-4.048191684830667,0.8970697523813582,4.377056011665996,3.8674701569110397,1.2765957446808511,-2.594551814932506,1.0747263386223098 +AL,-2.9051191319952174,1.2167865033734007,-0.48651043792738413,1.3201238751499236,1.458966565349544,-1.5291895090811582,-0.24726529237289666 +AR,-0.405416993411583,1.0680665554684374,-2.685710492646857,1.4069716796086178,1.6413373860182372,-0.20702994229473332,-1.2423254736156564 +AZ,3.843807491659291,1.4151817786418597,2.1228292887538522,1.1361190125873954,1.398176291793313,1.9321626492802886,1.1783202328464526 +CA,2.9225878233527354,0.5906538721222633,-0.7181825222738283,0.44765749055376786,0.60790273556231,3.448093619025647,-0.9513035848129473 +CO,0.8809674492820898,0.98023045849131,0.4264986113948952,0.714650612194822,1.094224924012158,0.5996751282337094,0.3263374108900439 +CT,-0.13712000829784188,1.3514663470288042,2.1976649959271484,1.6303966945262747,1.9452887537993921,-0.05788896764957569,0.8658439212886221 +DC,-4.908187992412584,1.7332714466392853,1.7969366196813894,5.492706307713332,2.2492401215805473,-1.7284804920729555,0.302749332982209 +DE,5.348836874890656,1.7284089111684748,6.264556458685824,2.865571367630918,1.580547112462006,2.2837585854566265,1.9142697029335978 +FL,0.8820795735107438,0.8641410736104425,-5.090235557400884,0.5823985920811567,1.094224924012158,0.6326332903950621,-4.106476046052587 +GA,0.30313021997410416,1.0105650010031857,-2.7340585938479247,0.7861697616877288,1.3373860182370823,0.180837381043606,-1.7623820620881954 +HI,-2.1741066636255777,1.189593256244055,-7.927113157323014,0.8403045589641391,1.580547112462006,-1.0990347481285263,-4.428457448729185 +IA,-0.1910881107042499,1.0302147409877493,-2.7618273071213624,0.8378005928894581,1.1550151975683889,-0.12346515773539984,-1.935578718847079 +ID,1.3600598093768292,0.7702050770913274,3.0198257580514927,1.536874895172609,0.790273556231003,1.2324782591947891,1.7474284760707375 +IL,-1.843685938735339,0.9046266224655412,-3.28677682840892,0.7046820523010107,0.9726443768996961,-1.3880019985638996,-2.7364981794311376 +IN,-1.7791617280917489,0.9182951944068689,-0.7197762600360278,0.8067320680282937,1.3373860182370823,-1.0966888381526103,-0.4608444983901647 +KS,-0.4309381665855412,1.1584834581138819,-1.0806564912442962,1.157438878904149,1.519756838905775,-0.22550945300038316,-0.5656937222302905 +KY,-0.6799984024050012,1.3078335639693612,-5.846013940534895,0.6847411421861506,1.762917933130699,-0.3097851541874056,-3.091117753396044 +LA,-6.953546326214388,0.9426938569090801,-6.3974017517613415,1.3818096828258386,1.8237082066869301,-3.3871078844790286,-2.795969561852106 +MA,0.5168209664075327,0.9707370775457278,2.4942721995141497,1.1885725905269742,1.21580547112462,0.33218986385045685,1.4669936435589492 +MD,2.7331982207459458,1.52483546515642,0.6842248405761353,1.1754050446097233,1.519756838905775,1.2695691996803578,0.35613349416434253 +ME,1.8938908269031831,1.5624716696092156,-1.83566979931702,1.0427753176758428,1.398176291793313,0.9032656510286583,-1.052434712476066 +MI,-0.5356881311881168,0.8929469923563752,-3.4531491637768017,0.5731837064265984,1.1550151975683889,-0.36692565023743956,-2.6780673453901693 +MN,0.3383243889675063,1.1314076107969406,-1.3530830028264047,0.7187904123890178,1.1550151975683889,0.20925151535469433,-0.9946129446567765 +MO,1.176259191428846,1.2562727455111249,1.2667521435979445,0.998952501067569,1.398176291793313,0.6257832715978517,0.7371814664620158 +MS,-5.187023305908539,1.0710544124515464,-3.181838087967657,1.681247230773782,1.580547112462006,-2.716766742048247,-1.3788900266211415 +MT,-1.0769657021501455,0.9179118368740706,1.2439177960715497,2.746637529267138,1.398176291793313,-0.6439023366708293,0.40360328104725285 +NC,0.8027108858098835,1.0363589519098417,-4.044958353444928,0.7418068425966107,1.3373860182370823,0.47443387548461113,-2.6449057461926375 +ND,-1.3217134847564989,1.065153573230338,-5.222123165943135,1.4567092582961796,1.2765957446808511,-0.7949663643175545,-2.696082282452708 +NE,0.5040752165037379,1.0813801338253826,-0.48330482015075127,1.4327432632288672,1.1550151975683889,0.31858585010669027,-0.26261860740914916 +NH,1.319164712169039,1.1636661380842388,-2.0731435912934586,1.0410016798293962,1.458966565349544,0.7068721117492321,-1.1567073684263898 +NJ,2.484714563234924,1.1785255823433625,-1.3380404719395536,0.7749380283485001,1.1550151975683889,1.505754147169594,-0.9619995894019492 +NM,-2.1588910024270103,0.8404096281278046,3.9454109486453905,2.5727440555716186,1.2765957446808511,-1.4125235196414012,1.373723294498927 +NV,2.186974911831971,1.4152803262295193,0.5630285454637303,1.4699101327703195,1.519756838905775,1.0531014756356754,0.2662945279006717 +NY,0.16519433294321217,0.8557782267478902,-1.5595238179557036,0.8125413850408143,1.1550151975683889,0.11491751237401192,-1.104329190766703 +OH,-4.414638037113752,0.9017002738500705,-2.0369257252702084,0.707324640545021,1.2765957446808511,-2.824585295854847,-1.3956769232088833 +OK,0.9786331524418372,1.0789085656476076,-2.4269156210384857,0.6936697180268595,1.21580547112462,0.6020532300294463,-1.7337939745470587 +OR,1.8222706670173245,1.187209714047027,-1.0376350147210793,0.9391047234304888,1.458966565349544,0.9687927503794321,-0.598033099808741 +PA,-1.3986727320868546,0.7842558907975117,0.028527656204925478,0.9551151036763976,1.21580547112462,-0.9667330586088612,0.018451355488694598 +RI,1.7450337389071908,1.3492141439481007,4.230687973641485,2.1865267072560863,1.398176291793313,0.8981099108625609,1.6301085811225753 +SC,1.2193141213236807,0.9678664500462015,1.029888503293133,1.220142342915903,1.2765957446808511,0.7611113017254298,0.5832049925184396 +SD,0.590922603699604,1.107164333996254,-1.0931639950999363,1.5212604403340164,1.3373860182370823,0.34035265087792316,-0.5396886811851943 +TN,-0.090195062325229,0.8943761694642755,8.322858286036851,1.3583296773440554,1.033434650455927,-0.0659943001268443,4.876393876580227 +TX,1.7761378050437813,0.7023965138228362,-0.6514021191638637,0.5091761389700658,0.790273556231003,1.6798732309679052,-0.6929054515801788 +UT,1.324245539246065,0.8895961091223195,-1.9506608723850283,0.7200935582967108,0.9726443768996961,1.0046535431723236,-1.6118567282445462 +VA,1.4623248641093678,1.0806928115922467,-1.66345798358876,0.7417936207780743,1.458966565349544,0.8054129644616375,-1.016338435108765 +VT,-0.16659645768994125,1.1869199980582361,-2.8313949630065567,1.7524339067205175,1.519756838905775,-0.08639435721343086,-1.2206232924518088 +WA,4.703302266961051,1.1008135417936376,2.06195810226469,1.0626012254042743,1.1550151975683889,2.9477214164796974,1.3138071829961526 +WI,-0.37300815558169464,0.8832832840706177,0.29420704851318913,0.9840981041263285,1.033434650455927,-0.27437630378466976,0.20616629344239132 +WV,-1.2377078313141308,1.01660909678896,-0.07006745175656803,1.9972605412849338,1.458966565349544,-0.696036291242705,-0.028328567200899032 +WY,-0.9430900533734183,0.703878331506253,-1.1603972238249707,1.469142581544115,0.8510638297872339,-0.853919590129377,-0.6834515659737054 diff --git a/docs/evidence/us-state-child-spm-2026-11/receipts.json b/docs/evidence/us-state-child-spm-2026-11/receipts.json index b5d0cbc8cb..4ab56349ce 100644 --- a/docs/evidence/us-state-child-spm-2026-11/receipts.json +++ b/docs/evidence/us-state-child-spm-2026-11/receipts.json @@ -164,8 +164,12 @@ "bytes": 9218 }, "outputs/acsrent_eval.csv": { - "sha256": "ea8ddcf88d88d70e7b4ac54f8dbfbe99c3b16a5febc09b4eaed5fa16ea0be3c7", - "bytes": 10679 + "sha256": "af50a76abef8112c17a2a70935a2c2a26ddd719a2b32f0101743e57abd0048bb", + "bytes": 11069 + }, + "outputs/acsrent_reform.csv": { + "sha256": "42e443027f04b30f71d14aa239588637c2a647420724a62c4756abca2ca67a2d", + "bytes": 1621 }, "outputs/acsrent_solves.csv": { "sha256": "6c6c991852c1259947339c85ab414a6687e37e6d1264218f1342975382b13d3f", @@ -268,15 +272,15 @@ "bytes": 7856 }, "outputs/kish.csv": { - "sha256": "24c215d51c94d52fc8f9583ecd4b8da90da365a689b5f578fbc645697b99abb3", - "bytes": 2970 + "sha256": "71d3effe7aa843ad4eb2c6ebc368ccfc99ab4b1edc61177844468253174e566a", + "bytes": 4872 }, "outputs/logs/acs_eval.txt": { "sha256": "b6f09dc0999a9c007574daeedb64bda4df33180278801af9c1c19f803ce58659", "bytes": 9939 }, "outputs/logs/acsrent_eval.txt": { - "sha256": "c53150b7ba0842d0aeb6aa354d5a3c87491d9168e0532998c68bf882d0c3c901", + "sha256": "6555d6ee0d5d15d7ae4839c0e2793088bcc5a650eb9e65daca69faa50e9eea8d", "bytes": 9933 }, "outputs/logs/ctc_ssn.txt": { @@ -291,10 +295,18 @@ "sha256": "6ffde97ab4ad0fd8d62f08bd0aa64025f72af56b3ecc897ccb46164f33f29cab", "bytes": 591 }, + "outputs/logs/kish.txt": { + "sha256": "7e8729ece28d9c51d52292831079704c5377eed32cff4a46782c4e9cf0ce3f7f", + "bytes": 522 + }, "outputs/logs/noise_ci.txt": { "sha256": "171066f6260c026dc9e5e9a610facc65848187b77299a46557ac6a8e5768a307", "bytes": 3024 }, + "outputs/logs/overlap.txt": { + "sha256": "f9286e475133b75d69090232b7881415db04a370ca6f9302585aa9e8fa997ba1", + "bytes": 2942 + }, "outputs/logs/part.txt": { "sha256": "64776b5b610f49772f79f0fe31ae0fb75b1a6554458ba890f0da0af6cad03863", "bytes": 645 @@ -311,10 +323,22 @@ "sha256": "2ff11104da0be2f826d2d72c7ad053e86c3d49c3c60f718b4cc489e84a18654e", "bytes": 1665 }, + "outputs/logs/thr_census.txt": { + "sha256": "78329c6af9525618e98f1703ce7fe314fcae4393146196a02b56285e3f444398", + "bytes": 599 + }, "outputs/noise_ci.json": { "sha256": "a378e76bf685a86e01e2071c8b4bbfc184e66d8c53dc2bfc309dddff94a612e6", "bytes": 3587 }, + "outputs/overlap_benchmark.csv": { + "sha256": "3d6d5d7eb3ffe026146cb7837aa54e170f43b39f7be96da3062bfd968da09698", + "bytes": 872 + }, + "outputs/overlap_fits.csv": { + "sha256": "df9fd59aa9b90f363a3b838dff636e9010084a7c4cefb123a8a9d9315bf4c25e", + "bytes": 2569 + }, "outputs/resource_growth.csv": { "sha256": "49a62d42fe888a60d091730fe1fe13f0eaec754fe5504cae6e0885bf78d68b16", "bytes": 919 @@ -323,6 +347,10 @@ "sha256": "9568c0a09d19eba4a61115f37237200fb76abe960264894931722a2f45f7bf95", "bytes": 9894 }, + "outputs/state_persistence.csv": { + "sha256": "f079534fdfbbe03491f51d4aadf9ba335369bf6b1b71445492b0181470f364a8", + "bytes": 7047 + }, "outputs/waterfall.csv": { "sha256": "75aa3c1eec097056ce342aa28e43bcd4431c726cd8eab56bc806c9f03af0cc56", "bytes": 17743 @@ -348,8 +376,12 @@ "bytes": 1101 }, "scripts/acs_one.py": { - "sha256": "0c2e412601d63ece6b20c2829331501d8f127bd4e7a8043209239531776e77d7", - "bytes": 2484 + "sha256": "45ba789123d4999cbf5b85cd0bc2e7e67f607130f30e8c5c107148f7b163a582", + "bytes": 2423 + }, + "scripts/acs_reform_cmp.py": { + "sha256": "5488d5aca4d5d4036aa64704c52c8c57b5fa63c8a6678d8751fa9f43b1fbb4e7", + "bytes": 1299 }, "scripts/acs_rent_run.py": { "sha256": "da787ccc5de771fbfa5735f16b15589e284a18fc0483726ff8ccaa3608b784bc", @@ -460,8 +492,8 @@ "bytes": 5619 }, "scripts/kish.py": { - "sha256": "bb2560c9c83d002cd2eb576d71fc39ca100ae86646fd7590376bd98952b92697", - "bytes": 1026 + "sha256": "82d9c9ef46515635bf7ab516861e37d4f32919737b510fc35173d401272a254b", + "bytes": 1120 }, "scripts/national_cf.py": { "sha256": "3512de45b6642176ce0949a2f51810903893c2a26355b13737bd937a312c2588", @@ -475,6 +507,10 @@ "sha256": "46dc322a34136e6714033a8db94273998649d9ed4656d4a944dcf30e62737360", "bytes": 4119 }, + "scripts/overlap.py": { + "sha256": "4a0177e36ec85f3fa965c09dacbba7c8c9509194bdc94fa7163d8d7b904df267", + "bytes": 9172 + }, "scripts/paired.py": { "sha256": "a4461b5e7b31e37386daa9c14d67dda7607e2b93ddda04e09d2c513e6bb9ca77", "bytes": 3068 @@ -483,10 +519,18 @@ "sha256": "fff80ba67a0b9d9cf1efe1228d9521dda26a7463c3a66bda950464965c9bbdc8", "bytes": 2463 }, + "scripts/prep_evidence.py": { + "sha256": "074ef4e497a28dbb3b2da46a4f156d6d1ec22134fe28445b374144fb7ba73186", + "bytes": 2429 + }, "scripts/puf_house.py": { "sha256": "f7055e02c3dfee9d4e2654a60db0754138f76a04a127e0adcd3b6fcc184d7224", "bytes": 1789 }, + "scripts/receipts.py": { + "sha256": "463e6a2b67a62031fe2af04378ee40f98e63d657ea0611d0ebb468cdf367530d", + "bytes": 4236 + }, "scripts/rent2.py": { "sha256": "4bc02b7765cd72883e1cd76b9a84c06ff913afa71b1561cf2bc9bab86d5b99e9", "bytes": 1866 @@ -539,6 +583,10 @@ "sha256": "7e5de78ec8313f2ba9cb7b10a849eb1c375944b690f33afa7cae9c963396dcf2", "bytes": 795 }, + "scripts/thr_census.py": { + "sha256": "8e8f6fde5c8ef886ea308f773334c099ed4dfd89a8c36d82fe2751ac3ab2a6d6", + "bytes": 2125 + }, "scripts/vardec.py": { "sha256": "735c8c54eed72a8004657e5f6ff38269771a7d99a76ee2d14614b6bf63e802e7", "bytes": 6350 diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_one.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_one.py index 0e1bb37fc7..f50d4c3413 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_one.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_one.py @@ -27,8 +27,7 @@ if c.startswith("parent_") and c.endswith("_id__2024"): frame[c] = frame[c].fillna(-1).astype(np.int64) if "spm_unit_spm_universe_status__2024" not in frame: - # Declared per docs/us-spm-measurement-universe.md: ACS group quarters OUTSIDE, everything else INCLUDED. - gq = frame.get("TYPEHUGQ__2024") + # policyengine-us 2.90.2 ignores this column, so every SPM unit stays in the run. frame["spm_unit_spm_universe_status__2024"] = "INCLUDED" d = "2025-01-01.2025-12-31" ref = Reform.from_dict( diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_reform_cmp.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_reform_cmp.py new file mode 100644 index 0000000000..c41be8dea4 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_reform_cmp.py @@ -0,0 +1,42 @@ +import pandas as pd + +a = pd.read_csv("run/acs_eval.csv") +r = pd.read_csv("run/acsrent_eval.csv") +key = [c for c in a.columns if c.lower() in ("state", "st", "abbr")][0] +print(list(a.columns)) +dc = [c for c in a.columns if "delta" in c.lower() and "se" not in c.lower()][0] +sc = [c for c in a.columns if "delta" in c.lower() and "se" in c.lower()][0] +m = a[[key, dc, sc]].merge(r[[key, dc, sc]], on=key, suffixes=("_pub", "_rent")) +m = m[m[dc + "_rent"] != 0].copy() +m["diff"] = m[dc + "_rent"] - m[dc + "_pub"] +print(m.round(2).to_string(index=False)) +print( + "n", + len(m), + "median pub", + m[dc + "_pub"].median().round(2), + "median rent", + m[dc + "_rent"].median().round(2), + "mean abs diff", + m["diff"].abs().mean().round(2), + "max", + m["diff"].abs().max().round(2), + "mean diff", + m["diff"].mean().round(2), +) +print( + "median se pub", + m[sc + "_pub"].median().round(2), + "rent", + m[sc + "_rent"].median().round(2), +) +out = m.rename( + columns={ + dc + "_pub": "ctc_effect_published", + sc + "_pub": "ctc_effect_se_published", + dc + "_rent": "ctc_effect_corrected_rent", + sc + "_rent": "ctc_effect_se_corrected_rent", + "diff": "corrected_minus_published", + } +) +out.to_csv("run/acsrent_reform.csv", index=False) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/kish.py b/docs/evidence/us-state-child-spm-2026-11/scripts/kish.py index a98969aaaa..aab4a7c966 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/kish.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/kish.py @@ -9,17 +9,18 @@ for tag in ("default", "dense"): u = pd.read_parquet( f"{SP}/run/{tag}_units.parquet", - columns=["kids", "w1", "state", "source_year", "source_household_id"], + columns=["kids", "w0", "w1", "state", "source_year", "source_household_id"], ) u = u[u.kids > 0].copy() - u["W"] = u.w1 * u.kids # An ASEC record and its PUF clone share one source household, so they form one cluster. u["src"] = u.source_year.astype(str) + ":" + u.source_household_id.astype(str) - k = {} - for s, g in u.groupby("state"): - v = g.W.groupby(g.src).sum() - k[s] = v.sum() ** 2 / (v**2).sum() - out[tag] = pd.Series(k) + for w, suffix in (("w1", ""), ("w0", "_initial")): + u["W"] = u[w] * u.kids + k = {} + for s, g in u.groupby("state"): + v = g.W.groupby(g.src).sum() + k[s] = v.sum() ** 2 / (v**2).sum() + out[tag + suffix] = pd.Series(k) out["acs_local"] = pd.read_csv(f"{SP}/run/acs_eval.csv", index_col=0).kish_src t = pd.DataFrame(out) t.to_csv(f"{SP}/run/kish.csv") diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py b/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py new file mode 100644 index 0000000000..2b1c72157a --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py @@ -0,0 +1,302 @@ +"""Sample overlap between the ASEC pool and Table 18, and state misses that persist. + +The pool holds income years 2022 to 2024 and Table 18 averages 2023 to 2025, so the two share +households. Three checks follow: raw ASEC shows the overlap, a refit subtracts the covariance +from shared clusters, and a benchmark built from later years shares no household with 2022 records. +""" + +import json +import os + +import numpy as np +import pandas as pd +from scipy import optimize, stats + +SP = os.path.dirname(os.path.abspath(__file__)) +c = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +cse = c.moe / 1.645 +FIPS = { + 1: "AL", + 2: "AK", + 4: "AZ", + 5: "AR", + 6: "CA", + 8: "CO", + 9: "CT", + 10: "DE", + 11: "DC", + 12: "FL", + 13: "GA", + 15: "HI", + 16: "ID", + 17: "IL", + 18: "IN", + 19: "IA", + 20: "KS", + 21: "KY", + 22: "LA", + 23: "ME", + 24: "MD", + 25: "MA", + 26: "MI", + 27: "MN", + 28: "MS", + 29: "MO", + 30: "MT", + 31: "NE", + 32: "NV", + 33: "NH", + 34: "NJ", + 35: "NM", + 36: "NY", + 37: "NC", + 38: "ND", + 39: "OH", + 40: "OK", + 41: "OR", + 42: "PA", + 44: "RI", + 45: "SC", + 46: "SD", + 47: "TN", + 48: "TX", + 49: "UT", + 50: "VT", + 51: "VA", + 53: "WA", + 54: "WV", + 55: "WI", + 56: "WY", +} +a = pd.read_parquet( + f"{SP}/asec/raw_asec_2022_2025.parquet", + columns=[ + "A_AGE", + "MARSUPWT", + "SPM_RESOURCES", + "SPM_POVTHRESHOLD", + "GESTFIPS", + "income_year", + ], +) +k = a[a.A_AGE < 18].copy() +k["pov"] = (k.SPM_RESOURCES < k.SPM_POVTHRESHOLD).astype(float) +k["state"] = k.GESTFIPS.astype(int).map(FIPS) +raw = ( + (k.pov * k.MARSUPWT).groupby([k.state, k.income_year]).sum().unstack() + / k.MARSUPWT.groupby([k.state, k.income_year]).sum().unstack() + * 100 +) +raw = raw.reindex(c.index) +print("raw ASEC against Table 18") +for lab, ys in ( + ("2023-25, Table 18's window", [2023, 2024, 2025]), + ("2022-24, the pool's window", [2022, 2023, 2024]), +): + m = raw[ys].mean(axis=1) + g = m - c.rate + print( + f" {lab}: corr {m.corr(c.rate):.3f}, gap sd {g.std():.2f}, mean abs gap {g.abs().mean():.2f}" + ) +print( + f" 2022 against 2025, no shared income year: corr {raw[2022].corr(raw[2025]):.2f}, difference sd {(raw[2022] - raw[2025]).std():.2f}" +) + + +def load(tag): + u = pd.read_parquet( + f"{SP}/run/{tag}_units.parquet", + columns=[ + "kids", + "w0", + "w1", + "state", + "source_year", + "source_household_id", + "household_support_channel", + "SPM_RESOURCES", + "SPM_POVTHRESHOLD", + "spm_unit_is_in_spm_poverty__2025", + ], + ) + u = u[u.kids > 0].copy() + u["y"] = u["spm_unit_is_in_spm_poverty__2025"].astype(float) + u["E"] = (u.SPM_RESOURCES.fillna(0) < u.SPM_POVTHRESHOLD.fillna(0)).astype(float) + u["clu"] = u.source_year.astype(str) + ":" + u.source_household_id.astype(str) + u["ch"] = np.where( + u.household_support_channel.astype(str).str.contains("puf"), "puf", "asec" + ) + u["W0"] = u.w0 * u.kids + u["W1"] = u.w1 * u.kids + return u + + +def influence(x, W, v): # noqa: N803 + T = x.groupby("state")[W].transform("sum") + R = (x[W] * x[v]).groupby(x.state).transform("sum") / T + return x[W] * (x[v] - R) / T + + +def fit(gap, v): + wt = 1 / v + m = (wt * gap).sum() / wt.sum() + Q = (wt * (gap - m) ** 2).sum() + t2 = max(0, (Q - 50) / (wt.sum() - (wt**2).sum() / wt.sum())) + + def Qf(t): # noqa: N802 + w = 1 / (v + t) + m_ = (w * gap).sum() / w.sum() + return (w * (gap - m_) ** 2).sum() + + bound = lambda p: ( + 0.0 + if Qf(0) < stats.chi2.ppf(p, 50) + else optimize.brentq(lambda t: Qf(t) - stats.chi2.ppf(p, 50), 0, 400) + ) + return Q, np.sqrt(t2), np.sqrt(bound(0.975)), np.sqrt(bound(0.025)) + + +dense = load("dense") +# Dense ASEC rows at initial weights stand in for Census's estimator on the two shared income years. +cen = dense[(dense.ch == "asec") & dense.source_year.isin([2023, 2024])] +zc = ( + pd.concat( + [ + pd.DataFrame( + {"clu": g.clu, "state": g.state, "zc": influence(g, "W0", "E") / 3} + ) + for _, g in cen.groupby("source_year") + ] + ) + .groupby(["state", "clu"]) + .zc.sum() +) +rows = [] +for tag, u in (("dense", dense), ("default", load("default"))): + for W, wlab in (("W0", "initial"), ("W1", "published")): + for ch in ("all", "asec", "puf"): + x = u if ch == "all" else u[u.ch == ch] + zm = influence(x, W, "y").groupby([x.state, x.clu]).sum().rename("zm") + j = pd.concat([zm, zc], axis=1).dropna() + cov = (j.zm * j.zc).groupby(level=0).sum() * 1e4 + sem = np.sqrt((zm**2).groupby(level=0).sum()) * 100 + gap = (x[W] * x.y).groupby(x.state).sum() / x[W].groupby( + x.state + ).sum() * 100 - c.rate + v0 = sem**2 + cse**2 + v1 = (v0 - 2 * cov).clip(lower=0.05) + q0 = fit(gap, v0) + q1 = fit(gap, v1) + rows.append( + dict( + file=tag, + weights=wlab, + rows=ch, + mean_cov=cov.mean(), + median_rho=(cov / (sem * cse)).median(), + Q=q0[0], + tau=q0[1], + tau_lo=q0[2], + tau_hi=q0[3], + Q_adj=q1[0], + tau_adj=q1[1], + tau_adj_lo=q1[2], + tau_adj_hi=q1[3], + ) + ) +f = pd.DataFrame(rows) +f.to_csv(f"{SP}/run/overlap_fits.csv", index=False) +print(f.round(2).to_string(index=False)) + +# Income years 2024 and 2025 share no household with income year 2022: the CPS keeps a household for +# one month in consecutive Marches at most, so a two-year separation leaves no rotation overlap. +bench = raw[[2024, 2025]].mean(axis=1) +bse = cse * np.sqrt(3 / 2) +print(f"benchmark 2024-25 against Table 18: corr {bench.corr(c.rate):.3f}") +rows = [] +for lab, x in ( + ("all", dense[dense.source_year == 2022]), + ("asec", dense[(dense.source_year == 2022) & (dense.ch == "asec")]), + ("puf", dense[(dense.source_year == 2022) & (dense.ch == "puf")]), +): + for W, wlab in (("W0", "initial"), ("W1", "published")): + m = (x[W] * x.y).groupby(x.state).sum() / x[W].groupby(x.state).sum() * 100 + se = ( + np.sqrt( + (influence(x, W, "y").groupby([x.state, x.clu]).sum() ** 2) + .groupby(level=0) + .sum() + ) + * 100 + ) + g = m - bench + rows.append( + dict( + rows=lab, + weights=wlab, + records=len(x), + mean_gap=g.mean(), + sd=g.std(), + mad=g.abs().mean(), + mad_demeaned=(g - g.mean()).abs().mean(), + corr=m.corr(bench), + median_se=se.median(), + beyond_2se=int((g.abs() > 1.96 * np.sqrt(se**2 + bse**2)).sum()), + ) + ) +b = pd.DataFrame(rows) +b.to_csv(f"{SP}/run/overlap_benchmark.csv", index=False) +print(b.round(2).to_string(index=False)) + +s = pd.read_csv(f"{SP}/run/initial_fit_states.csv", index_col=0) +e = pd.read_csv(f"{SP}/run/acs_eval.csv", index_col=0) +t = pd.DataFrame( + { + "dense_initial": s.dense_W0, + "dense_initial_se": s.dense_W0_se, + "acs_rows": e.acs_only - e.census, + "acs_rows_se": e.acs_only_se, + "census_se": cse, + } +) +t["z_dense"] = t.dense_initial / np.sqrt(t.dense_initial_se**2 + t.census_se**2) +t["z_acs"] = t.acs_rows / np.sqrt(t.acs_rows_se**2 + t.census_se**2) +t.to_csv(f"{SP}/run/state_persistence.csv") +r = t.dense_initial.corr(t.acs_rows) +print( + f"gap corr dense initial, ACS rows {r:.2f}; p {stats.pearsonr(t.dense_initial, t.acs_rows)[1]:.3f}" +) +print( + f"shared Census noise alone would give about {(t.census_se**2).mean() / (t.dense_initial.std() * t.acs_rows.std()):.2f}" +) +pub = s.dense_W1 +print( + f"gap corr dense published, ACS rows {pub.corr(t.acs_rows):.2f}; shared Census noise alone would give about {(t.census_se**2).mean() / (pub.std() * t.acs_rows.std()):.2f}" +) +rng = np.random.default_rng(0) +same = lambda z1, z2, th: ( + (np.sign(z1) == np.sign(z2)) & (np.abs(z1) > th) & (np.abs(z2) > th) +).sum() +for th in (1.28, 1.645, 1.96): + obs = same(t.z_dense.values, t.z_acs.values, th) + sim = np.array( + [ + same(t.z_dense.values, t.z_acs.values[rng.permutation(51)], th) + for _ in range(20000) + ] + ) + pick = t.index[ + (np.sign(t.z_dense) == np.sign(t.z_acs)) + & (t.z_dense.abs() > th) + & (t.z_acs.abs() > th) + ].tolist() + print( + f"|z|>{th}: {obs} states {pick}, permutation mean {sim.mean():.2f}, p {(sim >= obs).mean():.3f}" + ) +print( + t.loc[["DE", "LA", "MS"], ["dense_initial", "acs_rows", "z_dense", "z_acs"]] + .round(2) + .to_string() +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/prep_evidence.py b/docs/evidence/us-state-child-spm-2026-11/scripts/prep_evidence.py new file mode 100644 index 0000000000..53d2d66fa7 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/prep_evidence.py @@ -0,0 +1,51 @@ +"""Copy the kept scripts into the evidence folder, make their paths portable, then format and lint them.""" + +import glob +import os +import re +import shutil +import subprocess + +SP = os.path.dirname(os.path.abspath(__file__)) +E = os.path.expanduser( + "~/PolicyEngine/microcosm/_worktrees/state-child-spm/docs/evidence/us-state-child-spm-2026-11/scripts" +) +R = os.path.expanduser( + "~/PolicyEngine/microcosm/_worktrees/rent-head-align/.venv/bin/ruff" +) +KEEP = "extract_state assemble assemble_dense asec_extract cutrun runcuts decomp decomp2 noise vardec flip year paired thr cols rep_boot rep_eval chi_solve chi_eval ablate_eval ablate_noise fam dl dense_fit steps dmiss idcheck acs_stored acs_hh acs_w acs_one acs_eval acs_rent_run acs_reform_cmp overlap thr_census receipts prep_evidence national_cf cf_eval ctc_ssn house house_sim puf_house part rent2 rent3 rent4 rent5 rentfix dense_rent sparse_rent rent_eval acsrent dash_swing kish initial_fit noise_ci resource_growth".split() +for f in glob.glob(E + "/*"): + os.remove(f) if os.path.isfile(f) else shutil.rmtree(f) +for k in KEEP: + shutil.copy(f"{SP}/{k}.py", E) +for k in ("acs_more.sh",): + shutil.copy(f"{SP}/{k}", E) +for f in glob.glob(E + "/*.py"): + s = open(f).read() + o = s + s = s.replace( + '"SPX/asec/raw_asec_2022_2025.parquet".replace("SPX","' + SP + '")', + 'os.path.join(SP,"asec/raw_asec_2022_2025.parquet")', + ) + s = s.replace(SP, f"{SP}") + s = re.sub(r'(? 0].copy() +ref = u["spm_unit_reference_spm_threshold__2024"].round(0) +vals = sorted(ref.unique()) +print("Census reference thresholds by tenure", cen.round(0).to_dict()) +print("PolicyEngine reference thresholds", vals) +# Read the tenure behind each PolicyEngine value from the records, since near-equal values sort unreliably. +t = pd.crosstab(ref, u.SPM_TENMORTSTATUS) +print(t.to_string()) +pairs = {v: cen[t.loc[v].idxmax()] for v in vals} +print("pairs", {float(k): round(float(v)) for k, v in pairs.items()}) +ratio = ref.map(pairs) / ref +W = u.w1 * u.kids +base = ( + 100 + * (W * (u["spm_unit_net_income__2024"] < u["spm_unit_spm_threshold__2024"])).sum() + / W.sum() +) +swap = ( + 100 + * ( + W * (u["spm_unit_net_income__2024"] < u["spm_unit_spm_threshold__2024"] * ratio) + ).sum() + / W.sum() +) +flag = 100 * (W * u["spm_unit_is_in_spm_poverty__2024"].astype(float)).sum() / W.sum() +print( + f"child rate 2024: simulated {flag:.2f}, recomputed {base:.2f}, with Census thresholds {swap:.2f}" +) From 5e9dd7f3c60b271c7816cd6991c7b4dabb212064 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 1 Nov 2026 19:44:59 -0500 Subject: [PATCH 5/9] Fix the third-review findings in the state child SPM diagnosis Stop naming Louisiana as a finding: one joint miss matches chance. Compare the rent fix's moves like for like and trace Florida's swing to a few donor households. Correct the shared-Census correlations for shared households, add the same-pipeline row that anchors the penalty grid, and leave unrun reform deltas empty. Co-Authored-By: Claude Opus 5.5 --- .../us-state-child-spm-2026-11/README.md | 30 ++--- .../outputs/acsrent_eval.csv | 72 ++++++------ .../outputs/acsrent_solves.csv | 22 ++-- .../outputs/logs/ablate_noise.txt | 20 ++++ .../outputs/logs/acs_reform_cmp.txt | 21 ++++ .../outputs/logs/acsrent_eval.txt | 98 ++++++++--------- .../outputs/logs/fl_reform.txt | 36 ++++++ .../outputs/logs/overlap.txt | 21 +++- .../outputs/state_persistence.csv | 104 +++++++++--------- .../us-state-child-spm-2026-11/receipts.json | 52 ++++++--- .../scripts/acs_eval.py | 8 +- .../scripts/acs_reform_cmp.py | 28 ++++- .../scripts/fl_reform.py | 86 +++++++++++++++ .../scripts/overlap.py | 27 ++++- .../scripts/prep_evidence.py | 2 +- 15 files changed, 432 insertions(+), 195 deletions(-) create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/ablate_noise.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_reform_cmp.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/fl_reform.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/fl_reform.py diff --git a/docs/evidence/us-state-child-spm-2026-11/README.md b/docs/evidence/us-state-child-spm-2026-11/README.md index 3472b13ed7..ed146fb362 100644 --- a/docs/evidence/us-state-child-spm-2026-11/README.md +++ b/docs/evidence/us-state-child-spm-2026-11/README.md @@ -7,9 +7,9 @@ Model figures come from real PolicyEngine US simulations at 2.90.2 (`469ad12cb95 ## What we found 1. **Noise accounts for most of the default file's state scatter, and the data pin that share down poorly.** A state rate carries a replicate standard error of about 3.6 points, or about ±6 at 90%, and that error runs low because it ignores CPS design. Child-weighted effective samples run from 19 in DC to 277 in California. Three fits put noise at 60%, 71% and 80% of the cross-state variance, and the first carries a 95% interval of about 10% to 89%. -2. **On the dense pool, calibration creates most of the systematic error, and most of the damage lands on ASEC rows.** At initial weights, the mean gap reads 0.00, the mean absolute gap 1.78, and 16 jurisdictions fall outside Census's margin. At published weights those read +3.62, 4.33 and 38. ASEC rows go from a mean absolute gap of 2.44 to 7.30, and PUF rows from 2.95 to 3.16. State-specific error rises about 1.7 times, from 1.88 to 3.20 points, once we allow for households the pool shares with Table 18, and a test with no shared households keeps the direction. This result covers the dense pool only. On the default file, support selection puts the shift in place before calibration starts (+3.27 at initial weights) and state-specific error stays flat, and the ACS-local file stores no initial weights. The dense zero nets +2.20 on ASEC rows against -2.20 on PUF rows, and initial weights miss the administrative targets, so this result locates the problem and does not recommend skipping calibration. -3. **Some state error predates calibration, and Louisiana stands out.** At dense initial weights, state gaps still exceed their sampling noise (Q = 170.5 on 50 degrees of freedom after allowing for shared households). Louisiana alone misses the same way by more than 1.96 standard errors at dense initial weights and on ACS rows, which draw on another survey. Delaware and Mississippi come next, but the count of states that miss the same way on both barely beats chance. Florida, Massachusetts and Maryland sit within 3 points at dense initial weights and mostly miss after calibration. -4. **The rent imputation puts rent on the wrong households.** Of records that should carry rent, 89% do not hold their own, in every Populace US file we checked, including the local-area file. PolicyEngine/microcosm#1444 carries the fix. With published weights held fixed, the fix nearly doubles modelled housing subsidies on the dense file, from $7.3bn to $13.9bn, and lowers the 2025 child rate 0.7 points. It barely moves state fit: the mean absolute gap goes from 4.33 to 4.13 on dense, 4.80 to 4.71 on default and 3.18 to 3.21 on ACS-local, where contract rent stands in on ACS rows. It lifts SNAP by less than 1%, and it moves a state's 2021 CTC effect by 0.59 on average across 15 states. +2. **On the dense pool, calibration creates most of the systematic error, and most of the added state error lands on ASEC rows.** At initial weights, the mean gap reads 0.00, the mean absolute gap 1.78, and 16 jurisdictions fall outside Census's margin. At published weights those read +3.62, 4.33 and 38. ASEC rows go from a mean absolute gap of 2.44 to 7.30, and PUF rows from 2.95 to 3.16. State-specific error rises about 1.7 times, from 1.88 to 3.20 points, once we allow for households the pool shares with Table 18, and a test with no shared households keeps the direction. This result covers the dense pool only. On the default file, support selection puts the shift in place before calibration starts (+3.27 at initial weights) and state-specific error stays flat, and the ACS-local file stores no initial weights. The dense zero nets +2.20 on ASEC rows against -2.20 on PUF rows, and initial weights miss the administrative targets, so this result locates the problem and does not recommend skipping calibration. +3. **Some state error predates calibration, and we cannot yet pin it on particular states.** At dense initial weights, state gaps still exceed their sampling noise (Q = 170.5 on 50 degrees of freedom after allowing for shared households). Louisiana has the largest joint miss, past 2.8 standard errors the same way at dense initial weights and on ACS rows, which draw on another survey. One such state matches chance, though (p = .53), so Louisiana gives a lead and not a finding. Florida, Massachusetts and Maryland sit within 3 points at dense initial weights and mostly miss after calibration. +4. **The rent imputation puts rent on the wrong households.** Of records that should carry rent, 89% do not hold their own, in every Populace US file we checked, including the local-area file. PolicyEngine/microcosm#1444 carries the fix. With published weights held fixed, the fix nearly doubles modelled housing subsidies on the dense file, from $7.3bn to $13.9bn, and lowers the 2025 child rate 0.7 points. It barely moves state fit: the mean absolute gap goes from 4.33 to 4.13 on dense, 4.80 to 4.71 on default and 3.18 to 3.21 on ACS-local, where contract rent stands in on ACS rows. It lifts SNAP by less than 1%. Across 15 states, it moves a state's 2021 CTC effect by a median of 0.29, and by more than a point in Delaware and Florida, where a few donor households drive the swing. 5. **The default file is not the state path.** `policyengine.py` routes state regions to the ACS-local file. There the mean gap falls to +0.88 and the mean absolute gap to 3.18, 29 jurisdictions fall outside Census's margin, and 23,407 donor households hold 68% of child weight. ACS rows alone reach a mean absolute gap of 2.46 and a correlation of .69 with a median standard error of 1.06, and still leave 22 outside. Raising the ACS share of the mass does the most of any change we ran on this path: 2.79 to 2.16, or 2.88 to 2.23 with corrected rent, and the median error on a state's reform effect falls from 1.30 to 0.56. ## What the comparison measures @@ -49,7 +49,7 @@ Only the standard deviation rejects, and adding a state-specific τ of 3.25 lift These standard errors run low. Replicates hold support, the target matrix and imputations fixed, and source-household clusters ignore CPS strata, primary sampling units and rotation overlap. τ absorbs that, along with the mismatch between one model year and a three-year Census average. -Firmer evidence comes from the dense file (Q = 147.8, τ = 3.07, 95% interval 2.33 to 4.34) and ACS rows (Q = 131.6, τ = 2.08, 95% interval 1.62 to 3.22). The dense file adds records, not surveys: every channel maps to the same ASEC households, so its .65 gap correlation with the default file partly reflects shared sample noise. ACS rows give the only independent sample. Their gaps correlate .30 with the dense file's at initial weights and .42 at published weights, but both gaps subtract the same Census estimate, and that alone would give about .24 and .15. ACS rows also take tax and rent inputs from donors by QRF, so they can share model error, and they carry published weights. +Firmer evidence comes from the dense file (Q = 147.8, τ = 3.07, 95% interval 2.33 to 4.34) and ACS rows (Q = 131.6, τ = 2.08, 95% interval 1.62 to 3.22). The dense file adds records, not surveys: every channel maps to the same ASEC households, so its .65 gap correlation with the default file partly reflects shared sample noise. ACS rows give the only independent sample. Their gaps correlate .30 with the dense file's at initial weights and .42 at published weights, but both gaps subtract the same Census estimate, and that alone would give about .16 and .09. ACS rows also take tax and rent inputs from donors by QRF, so they can share model error, and they carry published weights. ## Where the error enters @@ -69,7 +69,7 @@ Calibration moves both halves of the dense pool up: ASEC rows at initial weights hold the tightest state pattern in this note, with a +2.20 shift, partly because they compare the survey with itself. PUF rows start 5 points below them, so the dense pool's zero comes from two offsetting gaps. -The initial-weight columns flatter the pool. The pool holds income years 2022 to 2024 and Table 18 averages 2023 to 2025, so they share households, and ASEC rows at initial weights reproduce Census's own state rates (correlation .98 or more in each year). In raw ASEC, the 2022 to 2024 average correlates .96 with Table 18, while 2022 and 2025 correlate .68. Subtracting the covariance from shared clusters moves τ from 1.50 to 1.88 (95% interval 1.41 to 2.59) at initial weights and from 3.07 to 3.20 (2.57 to 4.48) at published weights. So state-specific error rises about 1.7 times, not double, and the intervals nearly touch. That adjustment ignores rotation overlap and design effects, so it still understates the covariance. +The initial-weight columns flatter the pool. The pool holds income years 2022 to 2024 and Table 18 averages 2023 to 2025, so they share households, and ASEC rows at initial weights reproduce Census's own state rates on Census's flag (correlation .98 or more in each year). In raw ASEC, the 2022 to 2024 average correlates .96 with Table 18, while 2022 and 2025 correlate .68. Subtracting the covariance from shared clusters moves τ from 1.50 to 1.88 (95% interval 1.41 to 2.59) at initial weights and from 3.07 to 3.20 (2.57 to 4.48) at published weights. So state-specific error rises about 1.7 times, not double, and the intervals just overlap. That adjustment ignores rotation overlap and design effects, so it still understates the covariance. A stricter test uses records that share no household with their benchmark: dense 2022 records against Census's 2024 to 2025 average in raw ASEC. @@ -149,11 +149,12 @@ Benefit targets and the EITC pull the rate up, and CTC and joint SOI targets pul On the dense file, benefit receipt starts far below target. Summing each family's cells, which mixes dollars and counts where a family holds both, SNAP starts 37.8% short, Medicaid 26.2%, EITC 50.8% and ACA 43.9%, while AGI starts 4.2% short. Those misses line up with the +3.3 point rise, though we ran the ablations on the default file only. -A chi-square anchor to the default file's initial weights lowers noise and overshoots on level: +A chi-square anchor to the default file's initial weights lowers noise and overshoots on level. The grid starts from the same-pipeline re-solve, not from the published weights, so that row anchors it: | Weights, default file | Mean gap | Correlation | Median state SE | Census's flag | | --- | --- | --- | --- | --- | -| Published | 3.24 | .52 | 4.04 | 16.50 | +| Published, for reference | 3.24 | .52 | 4.04 | 16.50 | +| Same pipeline, no anchor | 2.93 | .42 | 4.27 | 15.92 | | λ = .003 | 3.07 | .45 | 3.72 | 16.09 | | λ = .01 | 3.42 | .52 | 3.28 | 16.40 | | λ = .03 | 4.77 | .57 | 2.78 | 17.34 | @@ -161,7 +162,7 @@ A chi-square anchor to the default file's initial weights lowers noise and overs | λ = .3 | 4.55 | .69 | 2.38 | 16.90 | | Initial | 3.27 | .65 | 2.20 | 15.06 | -The mean gap rises above both endpoints, so a pull toward initial weights cannot explain it, and we do not know why it overshoots. Correlation improves as the penalty grows. We did not test an anchor on the dense pool. +The mean gap rises above both endpoints, so a pull toward initial weights cannot explain it, and we do not know why it overshoots. Correlation climbs from .42 to .69 across the grid and ends at .65. We did not test an anchor on the dense pool. **Pooled records keep nominal income from their source year.** PolicyEngine holds every record to a 2024 threshold, while a 2022 record's market income keeps its nominal 2022 value. That accounts for 2.3 to 2.5 points of the thresholds step. Aging 2022 and 2023 ASEC records by Census's growth in 20th-percentile child resources (a real national simulation on the default file) lowers the national 2025 rate from 17.17 to 16.29, the mean gap from 3.24 to 2.45, and the mean absolute gap from 4.80 to 4.05, with 33 jurisdictions outside the margin rather than 38. `outputs/cf_state.csv` holds each state. @@ -204,7 +205,9 @@ The fix closes 0.56 of the dense file's 3.62 mean gap and 0.21 of the default fi On the ACS-local file, a similar exercise, with contract rent standing in on ACS rows, moves the mean gap from +0.88 to +0.49, the mean absolute gap from 3.18 to 3.21, and the correlation from .54 to .51, with 29 jurisdictions outside Census's margin both ways. ACS rows go from a mean absolute gap of 2.46 to 2.53. So rent matters here for getting housing right, not for state fit at published weights. -Rent moves reform effects more than it moves state fit. A reform pass on 15 states, drawn from the default file's large gaps (AR, DC, DE, FL, HI, LA, MA, MD, ME, MO, MS, MT, RI, TN, VT), moves a state's 2021 CTC effect by 0.59 on average, with published weights held fixed. The moves nearly cancel in the mean (-0.04), though the median of those 15 states goes from -3.39 to -2.59. Florida goes from -3.53 to -6.27 and Delaware from -2.97 to -1.76 (`acsrent_reform.csv`). That is a real microsimulation on stand-in ACS rent, so it shows sensitivity, not the rebuilt file's answer. +The fix moves reform effects about as far as it moves baselines, and those moves show how few households can set a state's effect. A reform pass covered 15 states drawn from the default file's large gaps, not its top 15: it includes Arkansas, Hawaii and Maine and leaves out California, Oklahoma and West Virginia, which has the largest effect. On those states, with published weights held fixed, a state's 2021 CTC effect moves 0.59 on average (median 0.29) and its baseline rate moves 0.47 (median 0.24). The effect moves nearly cancel in the mean (-0.04), though the median of the 15 goes from -3.39 to -2.59 (`outputs/acsrent_reform.csv`). + +Only two states move more than a point. Florida goes from -3.53 to -6.27 and Delaware from -2.97 to -1.76, and almost all of each swing sits on donors. In Florida, one donor with 1.21% of the state's child weight moves the effect 1.21 points, and ten source households hold 90% of the gross change. In Delaware, five source households hold all of it (`outputs/logs/fl_reform.txt`). These runs also use stand-in rent on ACS rows, so they show sensitivity and not the rebuilt file's answer. A separate gap sits on the PUF half. `impute_us_housing_assistance_to_puf_support` replaces each PUF-half person's receipt with a QRF draw, and the unit takes its first person's draw. Unweighted, 2.05% of PUF-half units receive assistance against 3.73% on the ASEC half (2.82% against 7.75% among low-income child units), and 9.6% of ASEC recipients keep the flag on their PUF clone. @@ -234,8 +237,7 @@ So state baselines and state reform effects on the dashboard both need a stated This table cannot rank the changes, because its rows use different files, and benefit receipt, a dense anchor and the ASEC-PUF gap have no row. So the order below rests on judgement: prerequisites first, then the change we measured on the state path, then changes measured elsewhere or not at all. Aging reaches as far on the default file (0.75) as the ACS share does on ACS-local (0.63), so it could rank higher. -One warning covers everything after step 2. Aging and better benefit receipt should lower rates, and we have not tested either on the ACS-local path. That path already reads +0.88, and -0.45 at share 0.9, or -0.78 with corrected rent, so changes sized on the default file could overshoot there. - +One warning covers steps 3 and 4. Aging and better benefit receipt should lower rates, and we have not tested either on the ACS-local path. That path already reads +0.88, and -0.45 at share 0.9, or -0.78 with corrected rent, so changes sized on the default file could overshoot there. 1. **Put rent back and rebuild.** PolicyEngine/microcosm#1444 carries the assignment fix. It comes first because it corrects a bug and every later step should run on the rebuilt base, not because it closes the largest gap. After a rebuild, tighten `us_housing_inputs_signal_gate` so positive rent outside renter households fails the build, confirm ACS rows pick up the corrected link through the donor transfer, and re-run this note. Calibration then fits to corrected housing, which the fixed-weight runs here cannot show. 2. **Limit what calibration does to states.** Two levers apply: @@ -253,9 +255,9 @@ One warning covers everything after step 2. Aging and better benefit receipt sho - Test an anchor on the dense pool. Initial weights there carry a mean absolute gap of 1.78, against 4.21 on the default file, so an anchor could keep more of that pattern. This needs a solve; we have not run one. 3. **Close benefit receipt before calibration.** Better take-up and receipt inputs should reduce the tilt, because calibration then has less to do, though we have not tested that. Rent does not close the SNAP gap. 4. **Age pooled incomes** (microcosm#944). A crude single-factor run removes 0.88 points nationally. A real fix ages each income source and draws the pool from 2023 to 2025 to match Table 18. -5. **Close the gap between ASEC and PUF rows.** They start 5 points apart at initial weights, and the dense pool's zero depends on that offset. Start with cash income: at published weights, moving to PolicyEngine's cash income adds 0.75 points on ASEC rows and removes 2.06 on PUF rows, while housing adds 1.65 and 1.16 (`outputs/dense_shapley9_asec.csv`, `outputs/dense_shapley9_puf_tax_detail.csv`). Two known fixes should widen the gap. Carrying the ASEC housing flag to its PUF clone adds subsidy to PUF rows only, and partnership and S-corp income (PolicyEngine/policyengine-us#9919; PolicyEngine/policyengine-us#10573 partly addresses it) takes PUF rows from 13.63 to 11.27 and leaves ASEC rows at 20.52. Make those for their own reasons, not to close this gap. +5. **Close the gap between ASEC and PUF rows.** They start 5 points apart at initial weights, and the dense pool's zero depends on that offset. Start with cash income: at published weights, moving to PolicyEngine's cash income adds 0.75 points on ASEC rows and removes 2.06 on PUF rows, while housing adds 1.65 and 1.16 (`outputs/dense_shapley9_asec.csv`, `outputs/dense_shapley9_puf_tax_detail.csv`). Two known fixes should widen the gap. Carrying the ASEC housing flag to its PUF clone adds subsidy to PUF rows only, and partnership and S-corp income (PolicyEngine/policyengine-us#9919; PolicyEngine/policyengine-us#10573 partly addresses it) takes PUF rows from 13.63 to 11.27 in 2024, at published weights, and leaves ASEC rows at 20.52. Make those for their own reasons, not to close this gap. 6. **Reconcile 2025 resources near the line.** Compare PolicyEngine's and Census's child resource growth by income source, starting with the uprating series for low earners. -7. **Check the state misses that persist.** Start with Louisiana, the one state that misses the same way by more than 1.96 standard errors at dense initial weights and on ACS rows (`outputs/state_persistence.csv`). Delaware and Mississippi follow, though neither clears that bar on both. Look at state tax and benefit rules and at Census's state estimates. Six states miss the same way past 1.28 standard errors, against three by chance (p = .05), and two past 1.645, against 1.4 (p = .41), and shared Census noise feeds both counts. +7. **Check the state misses that persist.** Rank states by the smaller of their two z-scores at dense initial weights and on ACS rows, counting only misses in the same direction (`outputs/state_persistence.csv`): Louisiana 2.80, Delaware 1.91, Ohio 1.40, Illinois 1.39, Mississippi 1.38 and Washington 1.31. These stay leads. Chance alone gives 0.7 states past 1.96 (we see one, p = .53), 1.4 past 1.645 (two, p = .41) and 3.0 past 1.28 (six, p = .05), and shared Census noise feeds those counts. Start with Louisiana and Delaware, looking at state tax and benefit rules and at Census's state estimates. 8. **Report state child rates as a standing holdout** with standard errors, in every release's receipts. Poverty stays a comparison and never a target. ## Limits @@ -280,6 +282,6 @@ Scripts sit in `scripts/` and write beside themselves under `run/` and `asec/`. 5. `ablate_eval.py`, `ablate_noise.py`, `fam.py`, `chi_solve.py`, `chi_eval.py`, `dmiss.py`: calibration. 6. `national_cf.py`, `cf_eval.py`, `ctc_ssn.py`, `part.py`: aged incomes, the CTC reform and partnership income. 7. `rent2.py` to `rent5.py`, `rentfix.py`, `dense_rent.py`, `sparse_rent.py`, `runcuts.py`, `rent_eval.py`, `house.py`, `house_sim.py`, `puf_house.py`: rent and housing. -8. `acs_hh.py`, `acs_w.py`, `acs_more.sh`, `acs_one.py`, `acs_eval.py`, `acsrent.py`, `acs_rent_run.py`, `acs_reform_cmp.py`, `acs_stored.py`: the ACS-local path. +8. `acs_hh.py`, `acs_w.py`, `acs_more.sh`, `acs_one.py`, `acs_eval.py`, `acsrent.py`, `acs_rent_run.py`, `acs_reform_cmp.py`, `fl_reform.py`, `acs_stored.py`: the ACS-local path. 9. `dash_swing.py`: the dashboard's stored audits. 10. `prep_evidence.py`, `receipts.py`: package this folder and write `receipts.json`. diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval.csv index de66243cf9..74780e6169 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval.csv +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval.csv @@ -1,52 +1,52 @@ state,census,moe,acs_local,se,kish_src,acs_share,acs_only,acs_only_se,donor_only,donor_only_se,delta,delta_se,stored_2301,gap -AK,10.5,2.1,12.321393723762833,3.743008462683068,81.68256219816811,0.41906561091719086,14.975786930595175,3.8676548692424246,10.406607937726202,5.820215767713671,0.0,0.0,12.269848823547363,1.8213937237628333 -AL,15.5,2.4,15.059623085010573,3.71513486095829,114.89369341824126,0.3080806998135229,14.892073453526683,1.3194281070236962,15.13422543778082,5.3426796061957385,0.0,0.0,14.110982894897461,-0.440376914989427 +AK,10.5,2.1,12.321393723762833,3.743008462683068,81.68256219816811,0.41906561091719086,14.975786930595175,3.8676548692424246,10.406607937726202,5.820215767713671,,,12.269848823547363,1.8213937237628333 +AL,15.5,2.4,15.059623085010573,3.71513486095829,114.89369341824126,0.3080806998135229,14.892073453526683,1.3194281070236962,15.13422543778082,5.3426796061957385,,,14.110982894897461,-0.440376914989427 AR,13.3,2.7,6.68559611243325,1.412017057266769,115.11649934358303,0.3446122143394325,11.042644416698813,1.42850530885576,4.394598176602837,1.936397291167434,-2.139452870894872,0.8489418874274481,6.774383068084717,-6.614403887566751 -AZ,13.3,2.3,16.387800058721087,4.013061222603815,74.97248693960735,0.32823023017732,15.018313873111348,1.1326133634347828,17.056938186276298,5.934075982139015,0.0,0.0,17.127504348754883,3.0878000587210863 -CA,17.9,1.0,19.49647303904357,1.9618571163684015,385.6580886961881,0.2837607789085938,16.420939875952424,0.4373798484726286,20.714942595329678,2.73651623800518,0.0,0.0,20.379192352294922,1.5964730390435697 -CO,7.7,1.8,9.110107226754993,2.6867568457632443,65.42288079603081,0.3167165607859737,7.9850533379350015,0.7117317734873981,9.631593886487048,3.9361017947397423,0.0,0.0,9.367508888244629,1.4101072267549926 -CT,12.8,3.2,12.142036383928177,2.9672756914200895,100.20771420344856,0.35243678570098613,14.00938323881125,1.6105276066320198,11.125731398111077,4.491962098359044,0.0,0.0,12.430046081542969,-0.6579636160718234 +AZ,13.3,2.3,16.387800058721087,4.013061222603815,74.97248693960735,0.32823023017732,15.018313873111348,1.1326133634347828,17.056938186276298,5.934075982139015,,,17.127504348754883,3.0878000587210863 +CA,17.9,1.0,19.49647303904357,1.9618571163684015,385.6580886961881,0.2837607789085938,16.420939875952424,0.4373798484726286,20.714942595329678,2.73651623800518,,,20.379192352294922,1.5964730390435697 +CO,7.7,1.8,9.110107226754993,2.6867568457632443,65.42288079603081,0.3167165607859737,7.9850533379350015,0.7117317734873981,9.631593886487048,3.9361017947397423,,,9.367508888244629,1.4101072267549926 +CT,12.8,3.2,12.142036383928177,2.9672756914200895,100.20771420344856,0.35243678570098613,14.00938323881125,1.6105276066320198,11.125731398111077,4.491962098359044,,,12.430046081542969,-0.6579636160718234 DC,20.3,3.7,20.063349097499845,5.20282053054896,47.067422820631876,0.4034754527762713,19.335252399157124,5.356380553227544,20.5558169203178,7.985315315053287,-7.870994797687709,4.297309466732037,20.46465492248535,-0.23665090250015552 DE,8.7,2.6,21.36348047305636,6.900153737516051,50.95816913382481,0.30803265271757674,14.964556458685824,2.865571367630918,24.211992829059593,9.76218621056253,-1.7609609623206675,1.0538508926782648,22.213157653808594,12.66348047305636 FL,18.4,1.8,21.68189087324703,3.3801514517694407,135.20425539702788,0.31737704011827417,12.769262957482017,0.5701023800605056,25.825706176604402,4.994668761011213,-6.273629324412617,1.7434241849543939,22.613277435302734,3.2818908732470327 -GA,15.1,2.2,17.239208888854364,2.956386357383339,121.17506625331394,0.3146201235481187,11.748828880220028,0.7688862484597994,19.759539724339476,4.324472924638935,0.0,0.0,17.39934539794922,2.1392088888543643 +GA,15.1,2.2,17.239208888854364,2.956386357383339,121.17506625331394,0.3146201235481187,11.748828880220028,0.7688862484597994,19.759539724339476,4.324472924638935,,,17.39934539794922,2.1392088888543643 HI,13.0,2.6,5.5836079655769995,1.9850974448778431,118.52750117470644,0.37760164062764257,4.347321396550311,0.7711046293327893,6.33364824078138,3.159689737354891,-1.3864993132186871,0.6926717710178918,5.165446758270264,-7.4163920344230005 -IA,8.2,1.9,5.330152234800179,1.7664517911964994,74.5874438402306,0.3464490034124007,5.261597365688324,0.8275805028634736,5.366493340860581,2.672293454377221,0.0,0.0,5.389122486114502,-2.86984776519982 -ID,6.5,1.3,6.012080047447186,1.42519466267205,88.40879016819349,0.33214753479536296,9.443553261930685,1.5355785927140133,4.305482515374321,1.9269207054839907,0.0,0.0,6.954473495483398,-0.4879199525528142 -IL,12.4,1.6,12.71448215138427,3.1317881946460764,93.91544229009794,0.2965816587151526,8.568452112115834,0.6881257126289709,14.462569162995395,4.474926628051286,0.0,0.0,18.092145919799805,0.3144821513842704 -IN,10.6,2.2,9.211095507958051,2.1542988135484107,120.14005678566079,0.35487947569914285,9.845417850190314,0.8064774659615725,8.862156090041381,3.3070911534768737,0.0,0.0,9.129535675048828,-1.3889044920419487 -KS,9.7,2.5,10.902563094311668,4.684481608328661,87.66666433303108,0.3334748697513686,8.436703092478703,1.1318599589725764,12.136278532212144,6.9611728444568906,0.0,0.0,10.451759338378906,1.2025630943116692 -KY,13.3,2.9,9.654856568587451,2.9479167492889964,79.96088420874483,0.3957257386758641,7.365566854024051,0.681608750432868,11.154061352444216,4.895395778032309,0.0,0.0,9.635833740234375,-3.6451434314125493 +IA,8.2,1.9,5.330152234800179,1.7664517911964994,74.5874438402306,0.3464490034124007,5.261597365688324,0.8275805028634736,5.366493340860581,2.672293454377221,,,5.389122486114502,-2.86984776519982 +ID,6.5,1.3,6.012080047447186,1.42519466267205,88.40879016819349,0.33214753479536296,9.443553261930685,1.5355785927140133,4.305482515374321,1.9269207054839907,,,6.954473495483398,-0.4879199525528142 +IL,12.4,1.6,12.71448215138427,3.1317881946460764,93.91544229009794,0.2965816587151526,8.568452112115834,0.6881257126289709,14.462569162995395,4.474926628051286,,,18.092145919799805,0.3144821513842704 +IN,10.6,2.2,9.211095507958051,2.1542988135484107,120.14005678566079,0.35487947569914285,9.845417850190314,0.8064774659615725,8.862156090041381,3.3070911534768737,,,9.129535675048828,-1.3889044920419487 +KS,9.7,2.5,10.902563094311668,4.684481608328661,87.66666433303108,0.3334748697513686,8.436703092478703,1.1318599589725764,12.136278532212144,6.9611728444568906,,,10.451759338378906,1.2025630943116692 +KY,13.3,2.9,9.654856568587451,2.9479167492889964,79.96088420874483,0.3957257386758641,7.365566854024051,0.681608750432868,11.154061352444216,4.895395778032309,,,9.635833740234375,-3.6451434314125493 LA,20.7,3.0,10.577721322368049,2.169661638275234,125.90331436963336,0.3111933330719865,14.035915825132383,1.379637552034913,9.01535683695153,3.059664339475643,-2.067415066350923,0.6135239140696926,11.565276145935059,-10.12227867763195 MA,12.8,2.0,20.79441634009795,4.5906754055484145,102.5908356155141,0.32989952283900936,14.581028749350434,1.1815662741599873,23.85335103909379,6.719603254416517,-2.589970589476747,1.4597746702238246,20.928058624267578,7.994416340097949 MD,10.7,2.5,17.433348552027496,4.218598298707564,61.88106431360571,0.32215088761216787,10.882903843821252,1.1661503288439126,20.546477327204965,6.250901315095014,-3.666427532075165,2.13973279189599,17.483667373657227,6.733348552027497 ME,6.5,2.3,7.234934576863685,3.0188402223230515,38.50834478575946,0.3333179546821343,4.3449891810992485,0.9941392526276736,8.679807279262587,4.590385407059264,-2.565320115416996,1.5680089534063912,7.270956039428711,0.7349345768636848 -MI,10.3,1.9,8.256835401770765,2.6392600139180917,91.52893167205437,0.3203877234279062,6.374426473590426,0.5284478115219912,9.144254201946136,3.8895688869749265,0.0,0.0,9.475631713867188,-2.043164598229236 -MN,6.9,1.9,5.0987592257530725,1.6601981302059463,52.54399261696906,0.34048793553809076,5.402193447224024,0.7088069591670008,4.942104484759751,2.483567801299805,0.0,0.0,5.14799690246582,-1.8012407742469279 +MI,10.3,1.9,8.256835401770765,2.6392600139180917,91.52893167205437,0.3203877234279062,6.374426473590426,0.5284478115219912,9.144254201946136,3.8895688869749265,,,9.475631713867188,-2.043164598229236 +MN,6.9,1.9,5.0987592257530725,1.6601981302059463,52.54399261696906,0.34048793553809076,5.402193447224024,0.7088069591670008,4.942104484759751,2.483567801299805,,,5.14799690246582,-1.8012407742469279 MO,9.7,2.3,16.636921591015795,3.9740672672287634,64.86277090035392,0.33222332397483334,10.740424063041209,0.9951810542894202,19.57046820754853,5.872054728479625,-8.24943192084599,3.6047902663083464,16.677257537841797,6.936921591015796 MS,19.1,2.6,12.989889728210732,2.8237984652354777,120.09612336052896,0.34971731263512185,15.700236078466064,1.6775597911491218,11.532285119724733,4.2438683774562,-3.5702908131062463,1.5687673395260167,12.927408218383789,-6.110110271789269 MT,9.3,2.3,4.617522603187462,1.3314483779387705,51.16610302382995,0.32933782545962187,10.14388019073906,2.7341405641298953,1.9037291917074668,1.1533784757098104,-0.6587857198038035,0.21640068702766152,4.747105598449707,-4.682477396812539 -NC,14.4,2.2,11.383821595734682,2.483166642776731,123.95133566758639,0.3136719210648219,10.238524145357312,0.739669148907255,11.907255886821646,3.607282095198393,0.0,0.0,11.701009750366211,-3.016178404265318 -ND,10.3,2.1,10.66569031081114,3.4523999116526567,67.67907793489668,0.33186741866405767,4.753541889405907,1.4266527330488992,13.602307219160961,5.152722104643105,0.0,0.0,10.772493362426758,0.36569031081113934 -NE,7.1,1.9,9.500128835226924,4.219029473139932,79.73182955023789,0.3063484897355067,6.782482728016978,1.4360419013860366,10.700366661079695,6.024229240183856,0.0,0.0,9.424169540405273,2.4001288352269246 -NH,7.5,2.4,7.202220806202033,3.0310963062993195,73.11100560293525,0.3519654122706294,5.031553444271825,1.0025476199774568,8.381169966340414,4.655768809209172,0.0,0.0,7.5636773109436035,-0.29777919379796725 -NJ,13.3,1.9,10.344787674648451,2.1644162242310285,117.661096080773,0.33625390236036024,11.51591545214037,0.7799682979651915,9.751494114438215,3.2241722472278846,0.0,0.0,9.367637634277344,-2.9552123253515497 -NM,10.9,2.1,15.651364184838581,3.9665352308487023,90.34932912736528,0.3715312357460946,16.15041492874158,2.7362366212931093,15.356340867645713,6.108821740813408,0.0,0.0,14.007346153259277,4.751364184838581 -NV,15.0,2.5,13.340620434521295,3.0735370383923444,85.62569767303911,0.3410867850150841,15.18876643034991,1.4799985740382124,12.383926652062984,4.583093784184722,0.0,0.0,13.599339485168457,-1.6593795654787051 -NY,16.2,1.9,15.066423654405913,2.6438820237960234,174.20366464173924,0.3282953526362707,13.13919751949797,0.6933476291376823,16.008354584990695,3.925321020419153,0.0,0.0,16.431594848632812,-1.1335763455940864 -OH,12.3,2.1,7.433844095393124,1.4405859525265752,136.868774475337,0.3594694685405358,10.082734325411032,0.6687530286491925,5.947271455308107,2.170314537212024,0.0,0.0,9.078166961669922,-4.8661559046068765 -OK,9.9,2.0,13.731178131074726,4.169544904780285,72.68188683082842,0.30082612879830045,7.135168863816389,0.6797946636539011,16.569173106454205,5.963683235099995,0.0,0.0,13.372641563415527,3.8311781310747257 -OR,11.0,2.4,15.223837236720705,3.6042301094674607,80.00122144021869,0.3868748897063032,9.686660958198624,0.9417384902858613,18.71773175526594,5.796223839892173,0.0,0.0,14.899346351623535,4.223837236720705 -PA,11.1,2.0,13.637911018385992,2.8762102777615794,152.97423864359848,0.346456113240414,10.358501019361265,0.9133835774870138,15.376388976794027,4.369408282978113,0.0,0.0,13.813882827758789,2.5379110183859925 +NC,14.4,2.2,11.383821595734682,2.483166642776731,123.95133566758639,0.3136719210648219,10.238524145357312,0.739669148907255,11.907255886821646,3.607282095198393,,,11.701009750366211,-3.016178404265318 +ND,10.3,2.1,10.66569031081114,3.4523999116526567,67.67907793489668,0.33186741866405767,4.753541889405907,1.4266527330488992,13.602307219160961,5.152722104643105,,,10.772493362426758,0.36569031081113934 +NE,7.1,1.9,9.500128835226924,4.219029473139932,79.73182955023789,0.3063484897355067,6.782482728016978,1.4360419013860366,10.700366661079695,6.024229240183856,,,9.424169540405273,2.4001288352269246 +NH,7.5,2.4,7.202220806202033,3.0310963062993195,73.11100560293525,0.3519654122706294,5.031553444271825,1.0025476199774568,8.381169966340414,4.655768809209172,,,7.5636773109436035,-0.29777919379796725 +NJ,13.3,1.9,10.344787674648451,2.1644162242310285,117.661096080773,0.33625390236036024,11.51591545214037,0.7799682979651915,9.751494114438215,3.2241722472278846,,,9.367637634277344,-2.9552123253515497 +NM,10.9,2.1,15.651364184838581,3.9665352308487023,90.34932912736528,0.3715312357460946,16.15041492874158,2.7362366212931093,15.356340867645713,6.108821740813408,,,14.007346153259277,4.751364184838581 +NV,15.0,2.5,13.340620434521295,3.0735370383923444,85.62569767303911,0.3410867850150841,15.18876643034991,1.4799985740382124,12.383926652062984,4.583093784184722,,,13.599339485168457,-1.6593795654787051 +NY,16.2,1.9,15.066423654405913,2.6438820237960234,174.20366464173924,0.3282953526362707,13.13919751949797,0.6933476291376823,16.008354584990695,3.925321020419153,,,16.431594848632812,-1.1335763455940864 +OH,12.3,2.1,7.433844095393124,1.4405859525265752,136.868774475337,0.3594694685405358,10.082734325411032,0.6687530286491925,5.947271455308107,2.170314537212024,,,9.078166961669922,-4.8661559046068765 +OK,9.9,2.0,13.731178131074726,4.169544904780285,72.68188683082842,0.30082612879830045,7.135168863816389,0.6797946636539011,16.569173106454205,5.963683235099995,,,13.372641563415527,3.8311781310747257 +OR,11.0,2.4,15.223837236720705,3.6042301094674607,80.00122144021869,0.3868748897063032,9.686660958198624,0.9417384902858613,18.71773175526594,5.796223839892173,,,14.899346351623535,4.223837236720705 +PA,11.1,2.0,13.637911018385992,2.8762102777615794,152.97423864359848,0.346456113240414,10.358501019361265,0.9133835774870138,15.376388976794027,4.369408282978113,,,13.813882827758789,2.5379110183859925 RI,8.4,2.3,13.35977181953176,4.002107274233144,47.716257082316176,0.2638155685183552,11.706778067766948,2.1389775521649073,13.952130836825097,5.411007448316621,-6.84669058579203,3.2677596335297556,10.114660263061523,4.95977181953176 -SC,11.1,2.1,10.59473085687635,2.4520723216335494,115.26644659001987,0.3736839049269087,11.553570544719635,1.2024288422176759,10.022650781702227,3.8469322710165352,0.0,0.0,9.70772647857666,-0.50526914312365 -SD,7.8,2.2,6.726459502632879,2.3272798467048927,55.2407957270471,0.26912123840231045,6.7068360049000635,1.5212604403340164,6.733685188053119,3.1395687931209575,0.0,0.0,6.721802234649658,-1.0735404973671212 +SC,11.1,2.1,10.59473085687635,2.4520723216335494,115.26644659001987,0.3736839049269087,11.553570544719635,1.2024288422176759,10.022650781702227,3.8469322710165352,,,9.70772647857666,-0.50526914312365 +SD,7.8,2.2,6.726459502632879,2.3272798467048927,55.2407957270471,0.26912123840231045,6.7068360049000635,1.5212604403340164,6.733685188053119,3.1395687931209575,,,6.721802234649658,-1.0735404973671212 TN,10.0,1.7,16.42325489667534,3.0669705013054744,89.2695834668554,0.3282847810394231,17.970609097212844,1.351825751368199,15.667022462787758,4.491841348158154,-5.76581519722165,2.1743474156596263,15.603744506835938,6.423254896675338 -TX,16.1,1.3,14.045259064593418,1.685678655696754,294.32648200901883,0.3083157384243811,15.264531260011097,0.5128349830310771,13.501772927704614,2.4211407892896815,0.0,0.0,14.510196685791016,-2.054740935406583 -UT,7.3,1.6,8.359499249071256,2.0982139808994016,88.5556251779635,0.29356651846541537,5.222133569445866,0.7089311662182424,9.663267464756284,3.0000511031115513,0.0,0.0,8.38582706451416,1.0594992490712558 -VA,12.1,2.4,14.131721562535965,3.4974094202644177,135.12178712944925,0.3120242155444285,10.222161875261767,0.7379258638542938,15.904861434764465,5.046324742621825,0.0,0.0,15.400092124938965,2.0317215625359655 +TX,16.1,1.3,14.045259064593418,1.685678655696754,294.32648200901883,0.3083157384243811,15.264531260011097,0.5128349830310771,13.501772927704614,2.4211407892896815,,,14.510196685791016,-2.054740935406583 +UT,7.3,1.6,8.359499249071256,2.0982139808994016,88.5556251779635,0.29356651846541537,5.222133569445866,0.7089311662182424,9.663267464756284,3.0000511031115513,,,8.38582706451416,1.0594992490712558 +VA,12.1,2.4,14.131721562535965,3.4974094202644177,135.12178712944925,0.3120242155444285,10.222161875261767,0.7379258638542938,15.904861434764465,5.046324742621825,,,15.400092124938965,2.0317215625359655 VT,8.3,2.5,10.308498555295754,4.103266497917791,68.58960036751176,0.3813777601649377,5.468605036993444,1.7524339067205175,13.292270606457496,6.521284444131556,-0.8198424878811376,0.5644160471313165,10.242634773254395,2.0084985552957537 -WA,9.3,1.9,14.144094797845291,3.5056242790878342,104.56017409766304,0.3410985566238413,10.824512336178158,1.0575867773948409,15.862568474980742,5.285650433207835,0.0,0.0,14.172506332397461,4.84409479784529 -WI,7.3,1.7,4.205482205184001,1.1851299579185464,76.2063037717102,0.33178902497349727,7.339248739090038,0.9754240295726758,2.64946265202114,1.6371265070652459,0.0,0.0,5.814634799957275,-3.0945177948159985 -WV,11.3,2.4,15.269485131709581,4.591939630665602,78.48511051927737,0.3651987935901132,11.56747752398947,2.007798430035103,17.39923645944705,7.11376741088013,0.0,0.0,16.38048553466797,3.9694851317095807 -WY,6.5,1.4,7.519438350406651,2.499776130679871,75.3355320006355,0.3319623870118944,5.695065621563699,1.4991725822046913,8.426008750173787,3.689705821181645,0.0,0.0,7.408247947692871,1.0194383504066513 +WA,9.3,1.9,14.144094797845291,3.5056242790878342,104.56017409766304,0.3410985566238413,10.824512336178158,1.0575867773948409,15.862568474980742,5.285650433207835,,,14.172506332397461,4.84409479784529 +WI,7.3,1.7,4.205482205184001,1.1851299579185464,76.2063037717102,0.33178902497349727,7.339248739090038,0.9754240295726758,2.64946265202114,1.6371265070652459,,,5.814634799957275,-3.0945177948159985 +WV,11.3,2.4,15.269485131709581,4.591939630665602,78.48511051927737,0.3651987935901132,11.56747752398947,2.007798430035103,17.39923645944705,7.11376741088013,,,16.38048553466797,3.9694851317095807 +WY,6.5,1.4,7.519438350406651,2.499776130679871,75.3355320006355,0.3319623870118944,5.695065621563699,1.4991725822046913,8.426008750173787,3.689705821181645,,,7.408247947692871,1.0194383504066513 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_solves.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_solves.csv index 69ffcc9190..df0b2886cc 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_solves.csv +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_solves.csv @@ -1,12 +1,12 @@ run,mean_gap,mad,beyond,corr,med_se,med_delta,med_delta_se,acs_share,DE,DC,TN,MD,LA,MT,HI,MA -dup_release_repro,0.16471878949910754,2.8784570859033294,25,0.5204181912988358,2.8131967154228144,0.0,0.0,0.3481740564228461,19.01044496068104,18.264029155223753,15.815895611578442,17.00087539326369,11.026638688928166,4.395263513849296,5.366033904684012,18.391250624530855 -proj_chi_s050_0.03,-0.05092398622014013,2.8449219346098764,24,0.5393663326162758,2.6185470876334023,0.0,0.0,0.35381870008679583,18.65311820464982,19.22251450220031,15.20116770075214,17.12435546653622,10.978118011917076,4.706749920569699,5.5226938114629585,19.05416501157363 -soft_chi_s050_0.1,-0.2881451454796224,2.695072847083243,23,0.5523490782633917,2.4930566590515215,0.0,0.0,0.36703387978463625,18.219334945572307,18.87468437048897,15.22343160103723,16.750802371268357,11.041182497223607,4.197386843784524,5.600783666145576,19.0898877180207 -soft_chi_s700_0,-0.09243136054026196,2.5540732660539924,25,0.5942995177277677,2.0071287637313175,0.0,0.0,0.5323355514970661,19.36414505762124,20.1506881234464,15.510926025059696,16.75356217154926,11.508350076539335,5.31058340265146,5.299461689742384,18.598756395092067 -soft_chi_s700_0.03,-0.34916656095672133,2.465707794838541,24,0.6155211035405689,1.8404570230874595,0.0,0.0,0.5383162332537033,18.86773487462509,19.884284419829086,14.539619686401428,16.133805504277344,11.864488002505711,5.183291978929374,5.57460030335686,18.289204391811964 -soft_chi_s700_0.1,-0.5461299171657797,2.425932440215807,21,0.6281060966915968,1.8761451309974668,0.0,0.0,0.5550259489828211,17.83754923558953,19.97895900597697,14.410949721304988,15.695055654568485,11.787298649888283,5.063141838936079,5.742688008531674,17.714678347057735 -soft_chi_s900_0,-0.4898594897594518,2.270162958508696,22,0.7069119781335766,1.1699043997935354,0.0,0.0,0.7881426593725687,16.297709125418635,23.404550734238775,14.620544855172495,14.357091615000172,12.322483147860545,6.599965335193645,5.462347511867982,17.05436499241893 -soft_chi_s900_0.03,-0.7760268124432347,2.2344476062581227,23,0.730041522365349,1.0681072947623282,0.0,0.0,0.8010793832198903,15.958221403904174,22.663002485998664,13.984234626292814,14.236688507906479,12.997697567195463,6.356789549057919,5.7284856768958745,16.12167486720437 -soft_chi_s900_0.1,-1.0193024698269493,2.202791438427394,25,0.7299229819712859,0.9855704097592791,0.0,0.0,0.8173361826685147,15.547316914656143,21.95311398406457,14.056083521457458,13.795253491871517,12.527441621132631,6.1711300712092045,5.730222328877324,14.991445238160638 -soft_chi_s964_0,-0.7637952950596579,2.2414974839062483,21,0.744359093174314,0.9199117098312307,0.0,0.0,0.9130730706856416,14.831228681671039,24.64042114992082,14.079795144858076,12.901114422537784,12.559100453333539,7.204443327333171,5.432189772145475,15.790087705871422 -soft_chi_s964_0.03,-0.9749631474613972,2.202741501985428,22,0.7622988995188572,0.8573150404361539,0.0,0.0,0.9201088941650787,14.91088302641012,23.75088218085383,13.772862252678022,13.180510927310312,13.309275794355951,7.046273291735259,5.7176987513529625,15.06874085201589 +dup_release_repro,0.16471878949910754,2.8784570859033294,25,0.5204181912988358,2.8131967154228144,,,0.3481740564228461,19.01044496068104,18.264029155223753,15.815895611578442,17.00087539326369,11.026638688928166,4.395263513849296,5.366033904684012,18.391250624530855 +proj_chi_s050_0.03,-0.05092398622014013,2.8449219346098764,24,0.5393663326162758,2.6185470876334023,,,0.35381870008679583,18.65311820464982,19.22251450220031,15.20116770075214,17.12435546653622,10.978118011917076,4.706749920569699,5.5226938114629585,19.05416501157363 +soft_chi_s050_0.1,-0.2881451454796224,2.695072847083243,23,0.5523490782633917,2.4930566590515215,,,0.36703387978463625,18.219334945572307,18.87468437048897,15.22343160103723,16.750802371268357,11.041182497223607,4.197386843784524,5.600783666145576,19.0898877180207 +soft_chi_s700_0,-0.09243136054026196,2.5540732660539924,25,0.5942995177277677,2.0071287637313175,,,0.5323355514970661,19.36414505762124,20.1506881234464,15.510926025059696,16.75356217154926,11.508350076539335,5.31058340265146,5.299461689742384,18.598756395092067 +soft_chi_s700_0.03,-0.34916656095672133,2.465707794838541,24,0.6155211035405689,1.8404570230874595,,,0.5383162332537033,18.86773487462509,19.884284419829086,14.539619686401428,16.133805504277344,11.864488002505711,5.183291978929374,5.57460030335686,18.289204391811964 +soft_chi_s700_0.1,-0.5461299171657797,2.425932440215807,21,0.6281060966915968,1.8761451309974668,,,0.5550259489828211,17.83754923558953,19.97895900597697,14.410949721304988,15.695055654568485,11.787298649888283,5.063141838936079,5.742688008531674,17.714678347057735 +soft_chi_s900_0,-0.4898594897594518,2.270162958508696,22,0.7069119781335766,1.1699043997935354,,,0.7881426593725687,16.297709125418635,23.404550734238775,14.620544855172495,14.357091615000172,12.322483147860545,6.599965335193645,5.462347511867982,17.05436499241893 +soft_chi_s900_0.03,-0.7760268124432347,2.2344476062581227,23,0.730041522365349,1.0681072947623282,,,0.8010793832198903,15.958221403904174,22.663002485998664,13.984234626292814,14.236688507906479,12.997697567195463,6.356789549057919,5.7284856768958745,16.12167486720437 +soft_chi_s900_0.1,-1.0193024698269493,2.202791438427394,25,0.7299229819712859,0.9855704097592791,,,0.8173361826685147,15.547316914656143,21.95311398406457,14.056083521457458,13.795253491871517,12.527441621132631,6.1711300712092045,5.730222328877324,14.991445238160638 +soft_chi_s964_0,-0.7637952950596579,2.2414974839062483,21,0.744359093174314,0.9199117098312307,,,0.9130730706856416,14.831228681671039,24.64042114992082,14.079795144858076,12.901114422537784,12.559100453333539,7.204443327333171,5.432189772145475,15.790087705871422 +soft_chi_s964_0.03,-0.9749631474613972,2.202741501985428,22,0.7622988995188572,0.8573150404361539,,,0.9201088941650787,14.91088302641012,23.75088218085383,13.772862252678022,13.180510927310312,13.309275794355951,7.046273291735259,5.7176987513529625,15.06874085201589 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/ablate_noise.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/ablate_noise.txt new file mode 100644 index 0000000000..12b3c052c0 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/ablate_noise.txt @@ -0,0 +1,20 @@ + kish med_se mean_gap sd_gap mad corr tau Q +run +initial 42354.90 2.20 3.27 4.01 4.21 0.65 2.74 109.46 +published 9174.43 4.04 3.24 5.11 4.80 0.52 2.73 71.55 +R0_full 9275.03 4.27 2.93 5.40 4.75 0.42 2.70 71.31 +keep_pep 34010.38 2.01 2.43 4.11 3.85 0.60 3.02 130.75 +keep_pep_ctc_only 33612.97 1.58 -0.82 3.34 2.60 0.65 2.16 106.45 +keep_pep_ctc_actc_count 30330.79 1.81 0.31 3.45 2.59 0.68 2.04 93.38 +keep_pep_all_soi 11820.60 3.34 0.71 4.54 3.16 0.53 2.14 69.98 +keep_pep_snap_ssi_aca 29749.40 2.75 6.85 5.46 7.20 0.64 3.56 121.34 +keep_pep_medicaid 32448.04 2.53 5.95 5.92 6.82 0.52 4.76 198.19 +drop_snap 9277.93 3.99 1.51 5.52 4.28 0.43 3.45 89.44 +drop_medicaid_chip 9459.53 3.89 1.72 5.35 4.26 0.48 2.79 75.78 +drop_soi_return_count 9394.55 3.92 1.30 5.25 4.10 0.46 2.44 70.57 +drop_ctc_actc 9285.72 4.39 3.99 5.42 5.43 0.46 2.79 70.47 +drop_soi_other 18614.97 3.13 2.78 3.92 3.96 0.59 1.74 65.98 + n agg_ri agg_rf med_ri med_rf +fam geo +census_population:population_age state 918 -0.017 -0.0 0.096 -0.0 + national 18 -0.017 -0.0 -0.038 -0.0 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_reform_cmp.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_reform_cmp.txt new file mode 100644 index 0000000000..95a806a95e --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_reform_cmp.txt @@ -0,0 +1,21 @@ +['state', 'census', 'moe', 'acs_local', 'se', 'kish_src', 'acs_share', 'acs_only', 'acs_only_se', 'donor_only', 'donor_only_se', 'delta', 'delta_se', 'stored_2301', 'gap'] +state delta_pub delta_se_pub delta_rent delta_se_rent diff + AR -1.97 0.85 -2.14 0.85 -0.17 + DC -8.65 4.34 -7.87 4.30 0.78 + DE -2.97 1.68 -1.76 1.05 1.21 + FL -3.53 1.11 -6.27 1.74 -2.74 + HI -1.60 0.70 -1.39 0.69 0.21 + LA -1.62 0.35 -2.07 0.61 -0.45 + MA -3.44 1.67 -2.59 1.46 0.85 + MD -3.41 2.11 -3.67 2.14 -0.25 + ME -2.63 1.57 -2.57 1.57 0.06 + MO -8.96 3.70 -8.25 3.60 0.71 + MS -3.39 1.56 -3.57 1.57 -0.18 + MT -0.67 0.24 -0.66 0.22 0.01 + RI -7.08 3.27 -6.85 3.27 0.24 + TN -5.47 2.10 -5.77 2.17 -0.29 + VT -0.17 0.08 -0.82 0.56 -0.65 +n 15 median pub -3.39 median rent -2.59 mean abs diff 0.59 max 2.74 mean diff -0.04 +median se pub 1.57 rent 1.57 +baseline move, same 15: mean 0.465 median 0.244 | all 51: mean 0.499 median 0.264 +reform move, 15: mean 0.587 median 0.294 | without FL: mean 0.432 | above 1 point ['DE', 'FL'] diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acsrent_eval.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acsrent_eval.txt index ff7f8cec37..6b877cd570 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acsrent_eval.txt +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acsrent_eval.txt @@ -1,71 +1,71 @@ census moe acs_local se kish_src acs_share acs_only acs_only_se donor_only donor_only_se delta delta_se stored_2301 gap state -AK 10.5 2.1 12.32 3.74 81.68 0.42 14.98 3.87 10.41 5.82 0.00 0.00 12.27 1.82 -AL 15.5 2.4 15.06 3.72 114.89 0.31 14.89 1.32 15.13 5.34 0.00 0.00 14.11 -0.44 +AK 10.5 2.1 12.32 3.74 81.68 0.42 14.98 3.87 10.41 5.82 NaN NaN 12.27 1.82 +AL 15.5 2.4 15.06 3.72 114.89 0.31 14.89 1.32 15.13 5.34 NaN NaN 14.11 -0.44 AR 13.3 2.7 6.69 1.41 115.12 0.34 11.04 1.43 4.39 1.94 -2.14 0.85 6.77 -6.61 -AZ 13.3 2.3 16.39 4.01 74.97 0.33 15.02 1.13 17.06 5.93 0.00 0.00 17.13 3.09 -CA 17.9 1.0 19.50 1.96 385.66 0.28 16.42 0.44 20.71 2.74 0.00 0.00 20.38 1.60 -CO 7.7 1.8 9.11 2.69 65.42 0.32 7.99 0.71 9.63 3.94 0.00 0.00 9.37 1.41 -CT 12.8 3.2 12.14 2.97 100.21 0.35 14.01 1.61 11.13 4.49 0.00 0.00 12.43 -0.66 +AZ 13.3 2.3 16.39 4.01 74.97 0.33 15.02 1.13 17.06 5.93 NaN NaN 17.13 3.09 +CA 17.9 1.0 19.50 1.96 385.66 0.28 16.42 0.44 20.71 2.74 NaN NaN 20.38 1.60 +CO 7.7 1.8 9.11 2.69 65.42 0.32 7.99 0.71 9.63 3.94 NaN NaN 9.37 1.41 +CT 12.8 3.2 12.14 2.97 100.21 0.35 14.01 1.61 11.13 4.49 NaN NaN 12.43 -0.66 DC 20.3 3.7 20.06 5.20 47.07 0.40 19.34 5.36 20.56 7.99 -7.87 4.30 20.46 -0.24 DE 8.7 2.6 21.36 6.90 50.96 0.31 14.96 2.87 24.21 9.76 -1.76 1.05 22.21 12.66 FL 18.4 1.8 21.68 3.38 135.20 0.32 12.77 0.57 25.83 4.99 -6.27 1.74 22.61 3.28 -GA 15.1 2.2 17.24 2.96 121.18 0.31 11.75 0.77 19.76 4.32 0.00 0.00 17.40 2.14 +GA 15.1 2.2 17.24 2.96 121.18 0.31 11.75 0.77 19.76 4.32 NaN NaN 17.40 2.14 HI 13.0 2.6 5.58 1.99 118.53 0.38 4.35 0.77 6.33 3.16 -1.39 0.69 5.17 -7.42 -IA 8.2 1.9 5.33 1.77 74.59 0.35 5.26 0.83 5.37 2.67 0.00 0.00 5.39 -2.87 -ID 6.5 1.3 6.01 1.43 88.41 0.33 9.44 1.54 4.31 1.93 0.00 0.00 6.95 -0.49 -IL 12.4 1.6 12.71 3.13 93.92 0.30 8.57 0.69 14.46 4.47 0.00 0.00 18.09 0.31 -IN 10.6 2.2 9.21 2.15 120.14 0.35 9.85 0.81 8.86 3.31 0.00 0.00 9.13 -1.39 -KS 9.7 2.5 10.90 4.68 87.67 0.33 8.44 1.13 12.14 6.96 0.00 0.00 10.45 1.20 -KY 13.3 2.9 9.65 2.95 79.96 0.40 7.37 0.68 11.15 4.90 0.00 0.00 9.64 -3.65 +IA 8.2 1.9 5.33 1.77 74.59 0.35 5.26 0.83 5.37 2.67 NaN NaN 5.39 -2.87 +ID 6.5 1.3 6.01 1.43 88.41 0.33 9.44 1.54 4.31 1.93 NaN NaN 6.95 -0.49 +IL 12.4 1.6 12.71 3.13 93.92 0.30 8.57 0.69 14.46 4.47 NaN NaN 18.09 0.31 +IN 10.6 2.2 9.21 2.15 120.14 0.35 9.85 0.81 8.86 3.31 NaN NaN 9.13 -1.39 +KS 9.7 2.5 10.90 4.68 87.67 0.33 8.44 1.13 12.14 6.96 NaN NaN 10.45 1.20 +KY 13.3 2.9 9.65 2.95 79.96 0.40 7.37 0.68 11.15 4.90 NaN NaN 9.64 -3.65 LA 20.7 3.0 10.58 2.17 125.90 0.31 14.04 1.38 9.02 3.06 -2.07 0.61 11.57 -10.12 MA 12.8 2.0 20.79 4.59 102.59 0.33 14.58 1.18 23.85 6.72 -2.59 1.46 20.93 7.99 MD 10.7 2.5 17.43 4.22 61.88 0.32 10.88 1.17 20.55 6.25 -3.67 2.14 17.48 6.73 ME 6.5 2.3 7.23 3.02 38.51 0.33 4.34 0.99 8.68 4.59 -2.57 1.57 7.27 0.73 -MI 10.3 1.9 8.26 2.64 91.53 0.32 6.37 0.53 9.14 3.89 0.00 0.00 9.48 -2.04 -MN 6.9 1.9 5.10 1.66 52.54 0.34 5.40 0.71 4.94 2.48 0.00 0.00 5.15 -1.80 +MI 10.3 1.9 8.26 2.64 91.53 0.32 6.37 0.53 9.14 3.89 NaN NaN 9.48 -2.04 +MN 6.9 1.9 5.10 1.66 52.54 0.34 5.40 0.71 4.94 2.48 NaN NaN 5.15 -1.80 MO 9.7 2.3 16.64 3.97 64.86 0.33 10.74 1.00 19.57 5.87 -8.25 3.60 16.68 6.94 MS 19.1 2.6 12.99 2.82 120.10 0.35 15.70 1.68 11.53 4.24 -3.57 1.57 12.93 -6.11 MT 9.3 2.3 4.62 1.33 51.17 0.33 10.14 2.73 1.90 1.15 -0.66 0.22 4.75 -4.68 -NC 14.4 2.2 11.38 2.48 123.95 0.31 10.24 0.74 11.91 3.61 0.00 0.00 11.70 -3.02 -ND 10.3 2.1 10.67 3.45 67.68 0.33 4.75 1.43 13.60 5.15 0.00 0.00 10.77 0.37 -NE 7.1 1.9 9.50 4.22 79.73 0.31 6.78 1.44 10.70 6.02 0.00 0.00 9.42 2.40 -NH 7.5 2.4 7.20 3.03 73.11 0.35 5.03 1.00 8.38 4.66 0.00 0.00 7.56 -0.30 -NJ 13.3 1.9 10.34 2.16 117.66 0.34 11.52 0.78 9.75 3.22 0.00 0.00 9.37 -2.96 -NM 10.9 2.1 15.65 3.97 90.35 0.37 16.15 2.74 15.36 6.11 0.00 0.00 14.01 4.75 -NV 15.0 2.5 13.34 3.07 85.63 0.34 15.19 1.48 12.38 4.58 0.00 0.00 13.60 -1.66 -NY 16.2 1.9 15.07 2.64 174.20 0.33 13.14 0.69 16.01 3.93 0.00 0.00 16.43 -1.13 -OH 12.3 2.1 7.43 1.44 136.87 0.36 10.08 0.67 5.95 2.17 0.00 0.00 9.08 -4.87 -OK 9.9 2.0 13.73 4.17 72.68 0.30 7.14 0.68 16.57 5.96 0.00 0.00 13.37 3.83 -OR 11.0 2.4 15.22 3.60 80.00 0.39 9.69 0.94 18.72 5.80 0.00 0.00 14.90 4.22 -PA 11.1 2.0 13.64 2.88 152.97 0.35 10.36 0.91 15.38 4.37 0.00 0.00 13.81 2.54 +NC 14.4 2.2 11.38 2.48 123.95 0.31 10.24 0.74 11.91 3.61 NaN NaN 11.70 -3.02 +ND 10.3 2.1 10.67 3.45 67.68 0.33 4.75 1.43 13.60 5.15 NaN NaN 10.77 0.37 +NE 7.1 1.9 9.50 4.22 79.73 0.31 6.78 1.44 10.70 6.02 NaN NaN 9.42 2.40 +NH 7.5 2.4 7.20 3.03 73.11 0.35 5.03 1.00 8.38 4.66 NaN NaN 7.56 -0.30 +NJ 13.3 1.9 10.34 2.16 117.66 0.34 11.52 0.78 9.75 3.22 NaN NaN 9.37 -2.96 +NM 10.9 2.1 15.65 3.97 90.35 0.37 16.15 2.74 15.36 6.11 NaN NaN 14.01 4.75 +NV 15.0 2.5 13.34 3.07 85.63 0.34 15.19 1.48 12.38 4.58 NaN NaN 13.60 -1.66 +NY 16.2 1.9 15.07 2.64 174.20 0.33 13.14 0.69 16.01 3.93 NaN NaN 16.43 -1.13 +OH 12.3 2.1 7.43 1.44 136.87 0.36 10.08 0.67 5.95 2.17 NaN NaN 9.08 -4.87 +OK 9.9 2.0 13.73 4.17 72.68 0.30 7.14 0.68 16.57 5.96 NaN NaN 13.37 3.83 +OR 11.0 2.4 15.22 3.60 80.00 0.39 9.69 0.94 18.72 5.80 NaN NaN 14.90 4.22 +PA 11.1 2.0 13.64 2.88 152.97 0.35 10.36 0.91 15.38 4.37 NaN NaN 13.81 2.54 RI 8.4 2.3 13.36 4.00 47.72 0.26 11.71 2.14 13.95 5.41 -6.85 3.27 10.11 4.96 -SC 11.1 2.1 10.59 2.45 115.27 0.37 11.55 1.20 10.02 3.85 0.00 0.00 9.71 -0.51 -SD 7.8 2.2 6.73 2.33 55.24 0.27 6.71 1.52 6.73 3.14 0.00 0.00 6.72 -1.07 +SC 11.1 2.1 10.59 2.45 115.27 0.37 11.55 1.20 10.02 3.85 NaN NaN 9.71 -0.51 +SD 7.8 2.2 6.73 2.33 55.24 0.27 6.71 1.52 6.73 3.14 NaN NaN 6.72 -1.07 TN 10.0 1.7 16.42 3.07 89.27 0.33 17.97 1.35 15.67 4.49 -5.77 2.17 15.60 6.42 -TX 16.1 1.3 14.05 1.69 294.33 0.31 15.26 0.51 13.50 2.42 0.00 0.00 14.51 -2.05 -UT 7.3 1.6 8.36 2.10 88.56 0.29 5.22 0.71 9.66 3.00 0.00 0.00 8.39 1.06 -VA 12.1 2.4 14.13 3.50 135.12 0.31 10.22 0.74 15.90 5.05 0.00 0.00 15.40 2.03 +TX 16.1 1.3 14.05 1.69 294.33 0.31 15.26 0.51 13.50 2.42 NaN NaN 14.51 -2.05 +UT 7.3 1.6 8.36 2.10 88.56 0.29 5.22 0.71 9.66 3.00 NaN NaN 8.39 1.06 +VA 12.1 2.4 14.13 3.50 135.12 0.31 10.22 0.74 15.90 5.05 NaN NaN 15.40 2.03 VT 8.3 2.5 10.31 4.10 68.59 0.38 5.47 1.75 13.29 6.52 -0.82 0.56 10.24 2.01 -WA 9.3 1.9 14.14 3.51 104.56 0.34 10.82 1.06 15.86 5.29 0.00 0.00 14.17 4.84 -WI 7.3 1.7 4.21 1.19 76.21 0.33 7.34 0.98 2.65 1.64 0.00 0.00 5.81 -3.09 -WV 11.3 2.4 15.27 4.59 78.49 0.37 11.57 2.01 17.40 7.11 0.00 0.00 16.38 3.97 -WY 6.5 1.4 7.52 2.50 75.34 0.33 5.70 1.50 8.43 3.69 0.00 0.00 7.41 1.02 -median se 2.97 median delta se 0.0 current vs stored 2.30.1 mean abs 0.65 +WA 9.3 1.9 14.14 3.51 104.56 0.34 10.82 1.06 15.86 5.29 NaN NaN 14.17 4.84 +WI 7.3 1.7 4.21 1.19 76.21 0.33 7.34 0.98 2.65 1.64 NaN NaN 5.81 -3.09 +WV 11.3 2.4 15.27 4.59 78.49 0.37 11.57 2.01 17.40 7.11 NaN NaN 16.38 3.97 +WY 6.5 1.4 7.52 2.50 75.34 0.33 5.70 1.50 8.43 3.69 NaN NaN 7.41 1.02 +median se 2.97 median delta se 1.57 current vs stored 2.30.1 mean abs 0.65 all rows states 51 mean gap 0.49 sd 4.19 MAD 3.21 corr 0.513 beyond 29 median se 2.97 ACS rows states 51 mean gap -0.97 sd 3.16 MAD 2.53 corr 0.658 beyond 24 median se 1.06 donor rows states 51 mean gap 1.19 sd 5.4 MAD 4.37 corr 0.398 beyond 38 median se 4.49 -reform delta median 0.0 min -8.25 max 0.0 median se 0.0 +reform delta median -2.59 min -8.25 max -0.66 median se 1.57 mean_gap mad beyond corr med_se med_delta med_delta_se acs_share DE DC TN MD LA MT HI MA run -dup_release_repro 0.16 2.88 25 0.52 2.81 0.0 0.0 0.35 19.01 18.26 15.82 17.00 11.03 4.40 5.37 18.39 -proj_chi_s050_0.03 -0.05 2.84 24 0.54 2.62 0.0 0.0 0.35 18.65 19.22 15.20 17.12 10.98 4.71 5.52 19.05 -soft_chi_s050_0.1 -0.29 2.70 23 0.55 2.49 0.0 0.0 0.37 18.22 18.87 15.22 16.75 11.04 4.20 5.60 19.09 -soft_chi_s700_0 -0.09 2.55 25 0.59 2.01 0.0 0.0 0.53 19.36 20.15 15.51 16.75 11.51 5.31 5.30 18.60 -soft_chi_s700_0.03 -0.35 2.47 24 0.62 1.84 0.0 0.0 0.54 18.87 19.88 14.54 16.13 11.86 5.18 5.57 18.29 -soft_chi_s700_0.1 -0.55 2.43 21 0.63 1.88 0.0 0.0 0.56 17.84 19.98 14.41 15.70 11.79 5.06 5.74 17.71 -soft_chi_s900_0 -0.49 2.27 22 0.71 1.17 0.0 0.0 0.79 16.30 23.40 14.62 14.36 12.32 6.60 5.46 17.05 -soft_chi_s900_0.03 -0.78 2.23 23 0.73 1.07 0.0 0.0 0.80 15.96 22.66 13.98 14.24 13.00 6.36 5.73 16.12 -soft_chi_s900_0.1 -1.02 2.20 25 0.73 0.99 0.0 0.0 0.82 15.55 21.95 14.06 13.80 12.53 6.17 5.73 14.99 -soft_chi_s964_0 -0.76 2.24 21 0.74 0.92 0.0 0.0 0.91 14.83 24.64 14.08 12.90 12.56 7.20 5.43 15.79 -soft_chi_s964_0.03 -0.97 2.20 22 0.76 0.86 0.0 0.0 0.92 14.91 23.75 13.77 13.18 13.31 7.05 5.72 15.07 +dup_release_repro 0.16 2.88 25 0.52 2.81 NaN NaN 0.35 19.01 18.26 15.82 17.00 11.03 4.40 5.37 18.39 +proj_chi_s050_0.03 -0.05 2.84 24 0.54 2.62 NaN NaN 0.35 18.65 19.22 15.20 17.12 10.98 4.71 5.52 19.05 +soft_chi_s050_0.1 -0.29 2.70 23 0.55 2.49 NaN NaN 0.37 18.22 18.87 15.22 16.75 11.04 4.20 5.60 19.09 +soft_chi_s700_0 -0.09 2.55 25 0.59 2.01 NaN NaN 0.53 19.36 20.15 15.51 16.75 11.51 5.31 5.30 18.60 +soft_chi_s700_0.03 -0.35 2.47 24 0.62 1.84 NaN NaN 0.54 18.87 19.88 14.54 16.13 11.86 5.18 5.57 18.29 +soft_chi_s700_0.1 -0.55 2.43 21 0.63 1.88 NaN NaN 0.56 17.84 19.98 14.41 15.70 11.79 5.06 5.74 17.71 +soft_chi_s900_0 -0.49 2.27 22 0.71 1.17 NaN NaN 0.79 16.30 23.40 14.62 14.36 12.32 6.60 5.46 17.05 +soft_chi_s900_0.03 -0.78 2.23 23 0.73 1.07 NaN NaN 0.80 15.96 22.66 13.98 14.24 13.00 6.36 5.73 16.12 +soft_chi_s900_0.1 -1.02 2.20 25 0.73 0.99 NaN NaN 0.82 15.55 21.95 14.06 13.80 12.53 6.17 5.73 14.99 +soft_chi_s964_0 -0.76 2.24 21 0.74 0.92 NaN NaN 0.91 14.83 24.64 14.08 12.90 12.56 7.20 5.43 15.79 +soft_chi_s964_0.03 -0.97 2.20 22 0.76 0.86 NaN NaN 0.92 14.91 23.75 13.77 13.18 13.31 7.05 5.72 15.07 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/fl_reform.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/fl_reform.txt new file mode 100644 index 0000000000..f967e57c50 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/fl_reform.txt @@ -0,0 +1,36 @@ +FL baseline -1.03 reform world -3.78 effect change -2.74 + by channel {'acs': {'d_base': -0.17, 'd_ref': -0.2, 'd_eff': -0.03}, 'donor': {'d_base': -0.86, 'd_ref': -3.58, 'd_eff': -2.71}} + units whose status changes: baseline 114 reform world 143 + d_ref d_base d_eff W share_child_weight +src +donor:83253 -1.21 0.00 -1.21 61429.27 1.21 +donor:140586 -0.45 0.00 -0.45 23033.28 0.45 +donor:140898 0.00 -0.38 0.38 40470.33 0.80 +donor:142132 -0.34 0.00 -0.34 17436.68 0.34 +donor:28044 -0.29 0.00 -0.29 14637.61 0.29 +donor:141933 -0.28 0.00 -0.28 14004.03 0.28 + top 1, 5, 10, 25 clusters of gross change [31, 69, 90, 95] gross 3.89 n 182 +DE baseline -0.85 reform world 0.36 effect change 1.21 + by channel {'acs': {'d_base': 0.0, 'd_ref': -0.06, 'd_eff': -0.06}, 'donor': {'d_base': -0.85, 'd_ref': 0.42, 'd_eff': 1.27}} + units whose status changes: baseline 1 reform world 4 + d_ref d_base d_eff W share_child_weight +src +donor:75588 1.43 0.00 1.43 3375.69 1.43 +donor:75383 -1.02 0.00 -1.02 2395.23 1.02 +donor:19174 0.00 -0.85 0.85 2005.31 0.85 +acs:1291737 -0.06 0.00 -0.06 151.08 0.06 +acs:1317990 0.01 0.00 0.01 12.15 0.01 +acs:895203 0.00 0.00 0.00 4.66 0.00 + top 1, 5, 10, 25 clusters of gross change [43, 100, 100, 100] gross 3.37 n 5 +MO baseline -0.08 reform world 0.63 effect change 0.71 + by channel {'acs': {'d_base': -0.08, 'd_ref': -0.11, 'd_eff': -0.04}, 'donor': {'d_base': -0.0, 'd_ref': 0.75, 'd_eff': 0.75}} + units whose status changes: baseline 16 reform world 13 + d_ref d_base d_eff W share_child_weight +src +donor:128440 1.10 0.00 1.10 31233.87 2.08 +donor:72371 -0.36 0.00 -0.36 5337.34 0.36 +acs:1394201 -0.05 0.00 -0.05 779.10 0.05 +acs:1312521 -0.03 0.00 -0.03 488.80 0.03 +acs:839262 0.00 -0.02 0.02 367.23 0.02 +acs:502807 -0.02 0.00 -0.02 344.29 0.02 + top 1, 5, 10, 25 clusters of gross change [66, 94, 98, 100] gross 1.67 n 23 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/overlap.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/overlap.txt index b14e860973..12c51bd693 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/overlap.txt +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/overlap.txt @@ -15,6 +15,9 @@ default initial puf 0.57 0.13 76.51 1.98 0.69 3.17 85.84 default published all 0.72 0.11 71.74 2.74 0.22 4.15 76.02 2.90 0.83 4.29 default published asec 0.84 0.09 142.57 6.29 3.32 7.76 147.05 6.33 3.43 7.84 default published puf 0.61 0.05 77.91 3.17 0.79 4.56 79.41 3.22 0.89 4.64 +Census's flag on ASEC rows at initial weights against raw ASEC, 2022: corr 0.989 +Census's flag on ASEC rows at initial weights against raw ASEC, 2023: corr 0.986 +Census's flag on ASEC rows at initial weights against raw ASEC, 2024: corr 0.984 benchmark 2024-25 against Table 18: corr 0.969 rows weights records mean_gap sd mad mad_demeaned corr median_se beyond_2se all initial 40692 0.79 3.25 2.47 2.33 0.67 1.78 8 @@ -24,12 +27,18 @@ asec published 19205 9.00 7.01 9.44 5.63 0.60 4.40 puf initial 21487 -1.47 4.17 3.13 2.95 0.41 1.96 9 puf published 21487 2.57 5.89 4.72 4.41 0.42 3.70 8 gap corr dense initial, ACS rows 0.30; p 0.031 -shared Census noise alone would give about 0.24 -gap corr dense published, ACS rows 0.42; shared Census noise alone would give about 0.15 + Census noise alone would give about 0.16 +gap corr dense published, ACS rows 0.42 + Census noise alone would give about 0.09 |z|>1.28: 6 states ['DE', 'IL', 'LA', 'MS', 'OH', 'WA'], permutation mean 3.03, p 0.049 |z|>1.645: 2 states ['DE', 'LA'], permutation mean 1.37, p 0.412 |z|>1.96: 1 states ['LA'], permutation mean 0.68, p 0.533 - dense_initial acs_rows z_dense z_acs -DE 5.35 6.26 2.28 1.91 -LA -6.95 -6.40 -3.39 -2.80 -MS -5.19 -3.18 -2.72 -1.38 + dense_initial acs_rows z_dense z_acs joint_z +LA -6.95 -6.40 -3.39 -2.80 2.80 +DE 5.35 6.26 2.28 1.91 1.91 +OH -4.41 -2.04 -2.82 -1.40 1.40 +IL -1.84 -3.29 -1.39 -2.74 1.39 +MS -5.19 -3.18 -2.72 -1.38 1.38 +WA 4.70 2.06 2.95 1.31 1.31 +ID 1.36 3.02 1.23 1.75 1.23 +AZ 3.84 2.12 1.93 1.18 1.18 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/state_persistence.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/state_persistence.csv index 173b77b936..35118c8eda 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/state_persistence.csv +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/state_persistence.csv @@ -1,52 +1,52 @@ -,dense_initial,dense_initial_se,acs_rows,acs_rows_se,census_se,z_dense,z_acs -AK,-4.048191684830667,0.8970697523813582,4.377056011665996,3.8674701569110397,1.2765957446808511,-2.594551814932506,1.0747263386223098 -AL,-2.9051191319952174,1.2167865033734007,-0.48651043792738413,1.3201238751499236,1.458966565349544,-1.5291895090811582,-0.24726529237289666 -AR,-0.405416993411583,1.0680665554684374,-2.685710492646857,1.4069716796086178,1.6413373860182372,-0.20702994229473332,-1.2423254736156564 -AZ,3.843807491659291,1.4151817786418597,2.1228292887538522,1.1361190125873954,1.398176291793313,1.9321626492802886,1.1783202328464526 -CA,2.9225878233527354,0.5906538721222633,-0.7181825222738283,0.44765749055376786,0.60790273556231,3.448093619025647,-0.9513035848129473 -CO,0.8809674492820898,0.98023045849131,0.4264986113948952,0.714650612194822,1.094224924012158,0.5996751282337094,0.3263374108900439 -CT,-0.13712000829784188,1.3514663470288042,2.1976649959271484,1.6303966945262747,1.9452887537993921,-0.05788896764957569,0.8658439212886221 -DC,-4.908187992412584,1.7332714466392853,1.7969366196813894,5.492706307713332,2.2492401215805473,-1.7284804920729555,0.302749332982209 -DE,5.348836874890656,1.7284089111684748,6.264556458685824,2.865571367630918,1.580547112462006,2.2837585854566265,1.9142697029335978 -FL,0.8820795735107438,0.8641410736104425,-5.090235557400884,0.5823985920811567,1.094224924012158,0.6326332903950621,-4.106476046052587 -GA,0.30313021997410416,1.0105650010031857,-2.7340585938479247,0.7861697616877288,1.3373860182370823,0.180837381043606,-1.7623820620881954 -HI,-2.1741066636255777,1.189593256244055,-7.927113157323014,0.8403045589641391,1.580547112462006,-1.0990347481285263,-4.428457448729185 -IA,-0.1910881107042499,1.0302147409877493,-2.7618273071213624,0.8378005928894581,1.1550151975683889,-0.12346515773539984,-1.935578718847079 -ID,1.3600598093768292,0.7702050770913274,3.0198257580514927,1.536874895172609,0.790273556231003,1.2324782591947891,1.7474284760707375 -IL,-1.843685938735339,0.9046266224655412,-3.28677682840892,0.7046820523010107,0.9726443768996961,-1.3880019985638996,-2.7364981794311376 -IN,-1.7791617280917489,0.9182951944068689,-0.7197762600360278,0.8067320680282937,1.3373860182370823,-1.0966888381526103,-0.4608444983901647 -KS,-0.4309381665855412,1.1584834581138819,-1.0806564912442962,1.157438878904149,1.519756838905775,-0.22550945300038316,-0.5656937222302905 -KY,-0.6799984024050012,1.3078335639693612,-5.846013940534895,0.6847411421861506,1.762917933130699,-0.3097851541874056,-3.091117753396044 -LA,-6.953546326214388,0.9426938569090801,-6.3974017517613415,1.3818096828258386,1.8237082066869301,-3.3871078844790286,-2.795969561852106 -MA,0.5168209664075327,0.9707370775457278,2.4942721995141497,1.1885725905269742,1.21580547112462,0.33218986385045685,1.4669936435589492 -MD,2.7331982207459458,1.52483546515642,0.6842248405761353,1.1754050446097233,1.519756838905775,1.2695691996803578,0.35613349416434253 -ME,1.8938908269031831,1.5624716696092156,-1.83566979931702,1.0427753176758428,1.398176291793313,0.9032656510286583,-1.052434712476066 -MI,-0.5356881311881168,0.8929469923563752,-3.4531491637768017,0.5731837064265984,1.1550151975683889,-0.36692565023743956,-2.6780673453901693 -MN,0.3383243889675063,1.1314076107969406,-1.3530830028264047,0.7187904123890178,1.1550151975683889,0.20925151535469433,-0.9946129446567765 -MO,1.176259191428846,1.2562727455111249,1.2667521435979445,0.998952501067569,1.398176291793313,0.6257832715978517,0.7371814664620158 -MS,-5.187023305908539,1.0710544124515464,-3.181838087967657,1.681247230773782,1.580547112462006,-2.716766742048247,-1.3788900266211415 -MT,-1.0769657021501455,0.9179118368740706,1.2439177960715497,2.746637529267138,1.398176291793313,-0.6439023366708293,0.40360328104725285 -NC,0.8027108858098835,1.0363589519098417,-4.044958353444928,0.7418068425966107,1.3373860182370823,0.47443387548461113,-2.6449057461926375 -ND,-1.3217134847564989,1.065153573230338,-5.222123165943135,1.4567092582961796,1.2765957446808511,-0.7949663643175545,-2.696082282452708 -NE,0.5040752165037379,1.0813801338253826,-0.48330482015075127,1.4327432632288672,1.1550151975683889,0.31858585010669027,-0.26261860740914916 -NH,1.319164712169039,1.1636661380842388,-2.0731435912934586,1.0410016798293962,1.458966565349544,0.7068721117492321,-1.1567073684263898 -NJ,2.484714563234924,1.1785255823433625,-1.3380404719395536,0.7749380283485001,1.1550151975683889,1.505754147169594,-0.9619995894019492 -NM,-2.1588910024270103,0.8404096281278046,3.9454109486453905,2.5727440555716186,1.2765957446808511,-1.4125235196414012,1.373723294498927 -NV,2.186974911831971,1.4152803262295193,0.5630285454637303,1.4699101327703195,1.519756838905775,1.0531014756356754,0.2662945279006717 -NY,0.16519433294321217,0.8557782267478902,-1.5595238179557036,0.8125413850408143,1.1550151975683889,0.11491751237401192,-1.104329190766703 -OH,-4.414638037113752,0.9017002738500705,-2.0369257252702084,0.707324640545021,1.2765957446808511,-2.824585295854847,-1.3956769232088833 -OK,0.9786331524418372,1.0789085656476076,-2.4269156210384857,0.6936697180268595,1.21580547112462,0.6020532300294463,-1.7337939745470587 -OR,1.8222706670173245,1.187209714047027,-1.0376350147210793,0.9391047234304888,1.458966565349544,0.9687927503794321,-0.598033099808741 -PA,-1.3986727320868546,0.7842558907975117,0.028527656204925478,0.9551151036763976,1.21580547112462,-0.9667330586088612,0.018451355488694598 -RI,1.7450337389071908,1.3492141439481007,4.230687973641485,2.1865267072560863,1.398176291793313,0.8981099108625609,1.6301085811225753 -SC,1.2193141213236807,0.9678664500462015,1.029888503293133,1.220142342915903,1.2765957446808511,0.7611113017254298,0.5832049925184396 -SD,0.590922603699604,1.107164333996254,-1.0931639950999363,1.5212604403340164,1.3373860182370823,0.34035265087792316,-0.5396886811851943 -TN,-0.090195062325229,0.8943761694642755,8.322858286036851,1.3583296773440554,1.033434650455927,-0.0659943001268443,4.876393876580227 -TX,1.7761378050437813,0.7023965138228362,-0.6514021191638637,0.5091761389700658,0.790273556231003,1.6798732309679052,-0.6929054515801788 -UT,1.324245539246065,0.8895961091223195,-1.9506608723850283,0.7200935582967108,0.9726443768996961,1.0046535431723236,-1.6118567282445462 -VA,1.4623248641093678,1.0806928115922467,-1.66345798358876,0.7417936207780743,1.458966565349544,0.8054129644616375,-1.016338435108765 -VT,-0.16659645768994125,1.1869199980582361,-2.8313949630065567,1.7524339067205175,1.519756838905775,-0.08639435721343086,-1.2206232924518088 -WA,4.703302266961051,1.1008135417936376,2.06195810226469,1.0626012254042743,1.1550151975683889,2.9477214164796974,1.3138071829961526 -WI,-0.37300815558169464,0.8832832840706177,0.29420704851318913,0.9840981041263285,1.033434650455927,-0.27437630378466976,0.20616629344239132 -WV,-1.2377078313141308,1.01660909678896,-0.07006745175656803,1.9972605412849338,1.458966565349544,-0.696036291242705,-0.028328567200899032 -WY,-0.9430900533734183,0.703878331506253,-1.1603972238249707,1.469142581544115,0.8510638297872339,-0.853919590129377,-0.6834515659737054 +,dense_initial,dense_initial_se,acs_rows,acs_rows_se,census_se,z_dense,z_acs,joint_z +AK,-4.048191684830667,0.8970697523813582,4.377056011665996,3.8674701569110397,1.2765957446808511,-2.594551814932506,1.0747263386223098,0.0 +AL,-2.9051191319952174,1.2167865033734007,-0.48651043792738413,1.3201238751499236,1.458966565349544,-1.5291895090811582,-0.24726529237289666,0.24726529237289666 +AR,-0.405416993411583,1.0680665554684374,-2.685710492646857,1.4069716796086178,1.6413373860182372,-0.20702994229473332,-1.2423254736156564,0.20702994229473332 +AZ,3.843807491659291,1.4151817786418597,2.1228292887538522,1.1361190125873954,1.398176291793313,1.9321626492802886,1.1783202328464526,1.1783202328464526 +CA,2.9225878233527354,0.5906538721222633,-0.7181825222738283,0.44765749055376786,0.60790273556231,3.448093619025647,-0.9513035848129473,0.0 +CO,0.8809674492820898,0.98023045849131,0.4264986113948952,0.714650612194822,1.094224924012158,0.5996751282337094,0.3263374108900439,0.3263374108900439 +CT,-0.13712000829784188,1.3514663470288042,2.1976649959271484,1.6303966945262747,1.9452887537993921,-0.05788896764957569,0.8658439212886221,0.0 +DC,-4.908187992412584,1.7332714466392853,1.7969366196813894,5.492706307713332,2.2492401215805473,-1.7284804920729555,0.302749332982209,0.0 +DE,5.348836874890656,1.7284089111684748,6.264556458685824,2.865571367630918,1.580547112462006,2.2837585854566265,1.9142697029335978,1.9142697029335978 +FL,0.8820795735107438,0.8641410736104425,-5.090235557400884,0.5823985920811567,1.094224924012158,0.6326332903950621,-4.106476046052587,0.0 +GA,0.30313021997410416,1.0105650010031857,-2.7340585938479247,0.7861697616877288,1.3373860182370823,0.180837381043606,-1.7623820620881954,0.0 +HI,-2.1741066636255777,1.189593256244055,-7.927113157323014,0.8403045589641391,1.580547112462006,-1.0990347481285263,-4.428457448729185,1.0990347481285263 +IA,-0.1910881107042499,1.0302147409877493,-2.7618273071213624,0.8378005928894581,1.1550151975683889,-0.12346515773539984,-1.935578718847079,0.12346515773539984 +ID,1.3600598093768292,0.7702050770913274,3.0198257580514927,1.536874895172609,0.790273556231003,1.2324782591947891,1.7474284760707375,1.2324782591947891 +IL,-1.843685938735339,0.9046266224655412,-3.28677682840892,0.7046820523010107,0.9726443768996961,-1.3880019985638996,-2.7364981794311376,1.3880019985638996 +IN,-1.7791617280917489,0.9182951944068689,-0.7197762600360278,0.8067320680282937,1.3373860182370823,-1.0966888381526103,-0.4608444983901647,0.4608444983901647 +KS,-0.4309381665855412,1.1584834581138819,-1.0806564912442962,1.157438878904149,1.519756838905775,-0.22550945300038316,-0.5656937222302905,0.22550945300038316 +KY,-0.6799984024050012,1.3078335639693612,-5.846013940534895,0.6847411421861506,1.762917933130699,-0.3097851541874056,-3.091117753396044,0.3097851541874056 +LA,-6.953546326214388,0.9426938569090801,-6.3974017517613415,1.3818096828258386,1.8237082066869301,-3.3871078844790286,-2.795969561852106,2.795969561852106 +MA,0.5168209664075327,0.9707370775457278,2.4942721995141497,1.1885725905269742,1.21580547112462,0.33218986385045685,1.4669936435589492,0.33218986385045685 +MD,2.7331982207459458,1.52483546515642,0.6842248405761353,1.1754050446097233,1.519756838905775,1.2695691996803578,0.35613349416434253,0.35613349416434253 +ME,1.8938908269031831,1.5624716696092156,-1.83566979931702,1.0427753176758428,1.398176291793313,0.9032656510286583,-1.052434712476066,0.0 +MI,-0.5356881311881168,0.8929469923563752,-3.4531491637768017,0.5731837064265984,1.1550151975683889,-0.36692565023743956,-2.6780673453901693,0.36692565023743956 +MN,0.3383243889675063,1.1314076107969406,-1.3530830028264047,0.7187904123890178,1.1550151975683889,0.20925151535469433,-0.9946129446567765,0.0 +MO,1.176259191428846,1.2562727455111249,1.2667521435979445,0.998952501067569,1.398176291793313,0.6257832715978517,0.7371814664620158,0.6257832715978517 +MS,-5.187023305908539,1.0710544124515464,-3.181838087967657,1.681247230773782,1.580547112462006,-2.716766742048247,-1.3788900266211415,1.3788900266211415 +MT,-1.0769657021501455,0.9179118368740706,1.2439177960715497,2.746637529267138,1.398176291793313,-0.6439023366708293,0.40360328104725285,0.0 +NC,0.8027108858098835,1.0363589519098417,-4.044958353444928,0.7418068425966107,1.3373860182370823,0.47443387548461113,-2.6449057461926375,0.0 +ND,-1.3217134847564989,1.065153573230338,-5.222123165943135,1.4567092582961796,1.2765957446808511,-0.7949663643175545,-2.696082282452708,0.7949663643175545 +NE,0.5040752165037379,1.0813801338253826,-0.48330482015075127,1.4327432632288672,1.1550151975683889,0.31858585010669027,-0.26261860740914916,0.0 +NH,1.319164712169039,1.1636661380842388,-2.0731435912934586,1.0410016798293962,1.458966565349544,0.7068721117492321,-1.1567073684263898,0.0 +NJ,2.484714563234924,1.1785255823433625,-1.3380404719395536,0.7749380283485001,1.1550151975683889,1.505754147169594,-0.9619995894019492,0.0 +NM,-2.1588910024270103,0.8404096281278046,3.9454109486453905,2.5727440555716186,1.2765957446808511,-1.4125235196414012,1.373723294498927,0.0 +NV,2.186974911831971,1.4152803262295193,0.5630285454637303,1.4699101327703195,1.519756838905775,1.0531014756356754,0.2662945279006717,0.2662945279006717 +NY,0.16519433294321217,0.8557782267478902,-1.5595238179557036,0.8125413850408143,1.1550151975683889,0.11491751237401192,-1.104329190766703,0.0 +OH,-4.414638037113752,0.9017002738500705,-2.0369257252702084,0.707324640545021,1.2765957446808511,-2.824585295854847,-1.3956769232088833,1.3956769232088833 +OK,0.9786331524418372,1.0789085656476076,-2.4269156210384857,0.6936697180268595,1.21580547112462,0.6020532300294463,-1.7337939745470587,0.0 +OR,1.8222706670173245,1.187209714047027,-1.0376350147210793,0.9391047234304888,1.458966565349544,0.9687927503794321,-0.598033099808741,0.0 +PA,-1.3986727320868546,0.7842558907975117,0.028527656204925478,0.9551151036763976,1.21580547112462,-0.9667330586088612,0.018451355488694598,0.0 +RI,1.7450337389071908,1.3492141439481007,4.230687973641485,2.1865267072560863,1.398176291793313,0.8981099108625609,1.6301085811225753,0.8981099108625609 +SC,1.2193141213236807,0.9678664500462015,1.029888503293133,1.220142342915903,1.2765957446808511,0.7611113017254298,0.5832049925184396,0.5832049925184396 +SD,0.590922603699604,1.107164333996254,-1.0931639950999363,1.5212604403340164,1.3373860182370823,0.34035265087792316,-0.5396886811851943,0.0 +TN,-0.090195062325229,0.8943761694642755,8.322858286036851,1.3583296773440554,1.033434650455927,-0.0659943001268443,4.876393876580227,0.0 +TX,1.7761378050437813,0.7023965138228362,-0.6514021191638637,0.5091761389700658,0.790273556231003,1.6798732309679052,-0.6929054515801788,0.0 +UT,1.324245539246065,0.8895961091223195,-1.9506608723850283,0.7200935582967108,0.9726443768996961,1.0046535431723236,-1.6118567282445462,0.0 +VA,1.4623248641093678,1.0806928115922467,-1.66345798358876,0.7417936207780743,1.458966565349544,0.8054129644616375,-1.016338435108765,0.0 +VT,-0.16659645768994125,1.1869199980582361,-2.8313949630065567,1.7524339067205175,1.519756838905775,-0.08639435721343086,-1.2206232924518088,0.08639435721343086 +WA,4.703302266961051,1.1008135417936376,2.06195810226469,1.0626012254042743,1.1550151975683889,2.9477214164796974,1.3138071829961526,1.3138071829961526 +WI,-0.37300815558169464,0.8832832840706177,0.29420704851318913,0.9840981041263285,1.033434650455927,-0.27437630378466976,0.20616629344239132,0.0 +WV,-1.2377078313141308,1.01660909678896,-0.07006745175656803,1.9972605412849338,1.458966565349544,-0.696036291242705,-0.028328567200899032,0.028328567200899032 +WY,-0.9430900533734183,0.703878331506253,-1.1603972238249707,1.469142581544115,0.8510638297872339,-0.853919590129377,-0.6834515659737054,0.6834515659737054 diff --git a/docs/evidence/us-state-child-spm-2026-11/receipts.json b/docs/evidence/us-state-child-spm-2026-11/receipts.json index 4ab56349ce..fda2197773 100644 --- a/docs/evidence/us-state-child-spm-2026-11/receipts.json +++ b/docs/evidence/us-state-child-spm-2026-11/receipts.json @@ -164,16 +164,16 @@ "bytes": 9218 }, "outputs/acsrent_eval.csv": { - "sha256": "af50a76abef8112c17a2a70935a2c2a26ddd719a2b32f0101743e57abd0048bb", - "bytes": 11069 + "sha256": "02400416f37d7dabd7b666fcb75f140566c7cebfee8cf3fa7b2554ca639da7db", + "bytes": 10853 }, "outputs/acsrent_reform.csv": { "sha256": "42e443027f04b30f71d14aa239588637c2a647420724a62c4756abca2ca67a2d", "bytes": 1621 }, "outputs/acsrent_solves.csv": { - "sha256": "6c6c991852c1259947339c85ab414a6687e37e6d1264218f1342975382b13d3f", - "bytes": 3090 + "sha256": "fef3ba85d72e2389f2f5d0545ea21f843ba1226384991f666db2e1c5c17a8037", + "bytes": 3024 }, "outputs/asec_state_raw.csv": { "sha256": "5e28ec94ce143145bd3d8335d2820a90aab8ca9ecb9ebf43e996690a3eab5a5c", @@ -275,13 +275,21 @@ "sha256": "71d3effe7aa843ad4eb2c6ebc368ccfc99ab4b1edc61177844468253174e566a", "bytes": 4872 }, + "outputs/logs/ablate_noise.txt": { + "sha256": "ecf6ebde31a35f085d3499d3bc15c29ce305763e6f3346b6040dc03326da72bb", + "bytes": 1692 + }, "outputs/logs/acs_eval.txt": { "sha256": "b6f09dc0999a9c007574daeedb64bda4df33180278801af9c1c19f803ce58659", "bytes": 9939 }, + "outputs/logs/acs_reform_cmp.txt": { + "sha256": "69bb8f2efb82b96b53f8b6713c3c84e8413197156aca4821c128367fae643b0e", + "bytes": 1486 + }, "outputs/logs/acsrent_eval.txt": { - "sha256": "6555d6ee0d5d15d7ae4839c0e2793088bcc5a650eb9e65daca69faa50e9eea8d", - "bytes": 9933 + "sha256": "fdb5e7770a817328981f4ef471bb13ac15c98db5bfdbeb16116c3953442b066f", + "bytes": 9939 }, "outputs/logs/ctc_ssn.txt": { "sha256": "1d81a564a70fd2ad43424f5ff20d3d974e023ad4fc91ee56ebdfc6c2350142a3", @@ -291,6 +299,10 @@ "sha256": "9349ae893019dd6700f544b1286479b2d01ac9b3b93392df807d61a2cc1b2d1b", "bytes": 1632 }, + "outputs/logs/fl_reform.txt": { + "sha256": "a8d06e96ccf726bdec27183aea630682728257bc244636aec3742f6f28c3dc9d", + "bytes": 2508 + }, "outputs/logs/house.txt": { "sha256": "6ffde97ab4ad0fd8d62f08bd0aa64025f72af56b3ecc897ccb46164f33f29cab", "bytes": 591 @@ -304,8 +316,8 @@ "bytes": 3024 }, "outputs/logs/overlap.txt": { - "sha256": "f9286e475133b75d69090232b7881415db04a370ca6f9302585aa9e8fa997ba1", - "bytes": 2942 + "sha256": "1f54a28190d774637c5007a38e48c810605c1f699c9d7e1b7548945475b415c2", + "bytes": 3475 }, "outputs/logs/part.txt": { "sha256": "64776b5b610f49772f79f0fe31ae0fb75b1a6554458ba890f0da0af6cad03863", @@ -348,8 +360,8 @@ "bytes": 9894 }, "outputs/state_persistence.csv": { - "sha256": "f079534fdfbbe03491f51d4aadf9ba335369bf6b1b71445492b0181470f364a8", - "bytes": 7047 + "sha256": "1512f58ee9588a3c5fc7f0e3930b9ccf6bc0ff680e10a898a73cb4d1b6154383", + "bytes": 7673 }, "outputs/waterfall.csv": { "sha256": "75aa3c1eec097056ce342aa28e43bcd4431c726cd8eab56bc806c9f03af0cc56", @@ -364,8 +376,8 @@ "bytes": 4093 }, "scripts/acs_eval.py": { - "sha256": "6336b8e205359e0baffb2a90f34c6fbd0889715554e513bebc6246b648b9b0a7", - "bytes": 6829 + "sha256": "7eb43cbf01c33c15066d0e12d745721afbe2207a2860a2004fb37af7a101690a", + "bytes": 7069 }, "scripts/acs_hh.py": { "sha256": "bf827c705569556dcda37ed1e5f7902da82ae716378059396ea84618cc0978f6", @@ -380,8 +392,8 @@ "bytes": 2423 }, "scripts/acs_reform_cmp.py": { - "sha256": "5488d5aca4d5d4036aa64704c52c8c57b5fa63c8a6678d8751fa9f43b1fbb4e7", - "bytes": 1299 + "sha256": "79402b83786323aa2252576c1b4fc457245970509674376c4499e0af4855a591", + "bytes": 2103 }, "scripts/acs_rent_run.py": { "sha256": "da787ccc5de771fbfa5735f16b15589e284a18fc0483726ff8ccaa3608b784bc", @@ -471,6 +483,10 @@ "sha256": "20cf8033ae5044e7ccf1fb1678679ddcd01befbfbc7b5a39fb3f4ddc07670660", "bytes": 1273 }, + "scripts/fl_reform.py": { + "sha256": "ee1cff431fd9f323e0705d0911b41247d1a42cddd6d7575d8146d9d2468d3d1a", + "bytes": 2670 + }, "scripts/flip.py": { "sha256": "90a35ab5c4d615a387738ebb5f6a71f7ef0d0b3c96f77f7f1ab7ea6d3f0b4ee6", "bytes": 2264 @@ -508,8 +524,8 @@ "bytes": 4119 }, "scripts/overlap.py": { - "sha256": "4a0177e36ec85f3fa965c09dacbba7c8c9509194bdc94fa7163d8d7b904df267", - "bytes": 9172 + "sha256": "09b9717a9ccb5451f7d1f5a65af825c048d68ff5d096aaa812ac3a9a4810898a", + "bytes": 9911 }, "scripts/paired.py": { "sha256": "a4461b5e7b31e37386daa9c14d67dda7607e2b93ddda04e09d2c513e6bb9ca77", @@ -520,8 +536,8 @@ "bytes": 2463 }, "scripts/prep_evidence.py": { - "sha256": "074ef4e497a28dbb3b2da46a4f156d6d1ec22134fe28445b374144fb7ba73186", - "bytes": 2429 + "sha256": "4848e0b9113348755bd010909df5429c5de84e8d640e28caadaa7d31f8c16ca0", + "bytes": 2439 }, "scripts/puf_house.py": { "sha256": "f7055e02c3dfee9d4e2654a60db0754138f76a04a127e0adcd3b6fcc184d7224", diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py index ff81199a10..49b53bde66 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py @@ -86,7 +86,9 @@ ) if "poor_r" not in u: u["poor_r"] = np.nan -u["poor_r"] = u.poor_r.fillna(u.poor) # acsrent_r covers the top-gap states only +# acsrent_r covers 15 states, so the rest carry no reform delta. +u["poor_r_ran"] = u.poor_r.notna() +u["poor_r"] = u.poor_r.fillna(u.poor) u = ( u[u.kids > 0] .merge(uh, left_on="spm_unit_id", right_on="person_spm_unit_id") @@ -141,6 +143,8 @@ def lin(g, w, f): ) d = pd.DataFrame(rows).set_index("state") d["gap"] = d.acs_local - d.census +unrun = [st for st, g in u.groupby("state") if not g.poor_r_ran.any()] +d.loc[unrun, ["delta", "delta_se"]] = np.nan print(d.round(2).to_string()) print( "median se", @@ -252,5 +256,7 @@ def lin(g, w, f): ) ) o = pd.DataFrame(out).set_index("run") +if unrun: + o[[c_ for c_ in o.columns if "delta" in c_]] = np.nan o.to_csv(f"{SP}/run/{TAG}_solves.csv") print(o.round(2).to_string()) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_reform_cmp.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_reform_cmp.py index c41be8dea4..2a590a1507 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_reform_cmp.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_reform_cmp.py @@ -7,7 +7,7 @@ dc = [c for c in a.columns if "delta" in c.lower() and "se" not in c.lower()][0] sc = [c for c in a.columns if "delta" in c.lower() and "se" in c.lower()][0] m = a[[key, dc, sc]].merge(r[[key, dc, sc]], on=key, suffixes=("_pub", "_rent")) -m = m[m[dc + "_rent"] != 0].copy() +m = m[m[dc + "_rent"].notna()].copy() m["diff"] = m[dc + "_rent"] - m[dc + "_pub"] print(m.round(2).to_string(index=False)) print( @@ -40,3 +40,29 @@ } ) out.to_csv("run/acsrent_reform.csv", index=False) +# Like for like: how far the fix moves baselines and reform effects on the same states and on all 51. +base = a[[key, "acs_local"]].merge( + r[[key, "acs_local"]], on=key, suffixes=("_pub", "_rent") +) +base["move"] = (base.acs_local_rent - base.acs_local_pub).abs() +same = base[base[key].isin(m[key])] +print( + "baseline move, same 15: mean", + same.move.mean().round(3), + "median", + same.move.median().round(3), + "| all 51: mean", + base.move.mean().round(3), + "median", + base.move.median().round(3), +) +print( + "reform move, 15: mean", + m["diff"].abs().mean().round(3), + "median", + m["diff"].abs().median().round(3), + "| without FL: mean", + m[m[key] != "FL"]["diff"].abs().mean().round(3), + "| above 1 point", + m.loc[m["diff"].abs() > 1, key].tolist(), +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/fl_reform.py b/docs/evidence/us-state-child-spm-2026-11/scripts/fl_reform.py new file mode 100644 index 0000000000..064e0a7041 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/fl_reform.py @@ -0,0 +1,86 @@ +"""Why Florida's 2021 CTC effect moves with the rent fix: which source households carry the change.""" + +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) + + +def load(tag, fips): + u = pd.read_parquet(f"{SP}/run/{tag}/{fips:02d}.parquet") + f = f"{SP}/run/{tag}_r/{fips:02d}.parquet" + if not os.path.exists(f): + return u + return u.drop(columns=[c for c in ("poor_r",) if c in u]).merge( + pd.read_parquet(f), on="spm_unit_id" + ) + + +h = pd.read_parquet(f"{SP}/run/acs_hh.parquet") +uh = pd.read_parquet(f"{SP}/run/acs_unit_hh.parquet").drop_duplicates( + "person_spm_unit_id" +) +for st, fips in (("FL", 12), ("DE", 10), ("MO", 29)): + a = load("acs", fips) + b = load("acsrent", fips) + m = a[["spm_unit_id", "kids", "poor", "poor_r"]].merge( + b[["spm_unit_id", "poor", "poor_r"]], + on="spm_unit_id", + suffixes=("_pub", "_rent"), + ) + m = ( + m[m.kids > 0] + .merge(uh, left_on="spm_unit_id", right_on="person_spm_unit_id") + .merge(h, left_on="person_household_id", right_on="household_id") + ) + m["W"] = m.household_weight * m.kids + T = m.W.sum() + m["channel"] = np.where( + m.household_support_channel.astype(str) == "acs_2024_1yr", "acs", "donor" + ) + m["src"] = m.channel + ":" + m.household_source_id.astype(str) + m["d_base"] = 100 * m.W * (m.poor_rent - m.poor_pub) / T + m["d_ref"] = 100 * m.W * (m.poor_r_rent - m.poor_r_pub) / T + m["d_eff"] = m.d_ref - m.d_base + print( + st, + "baseline", + round(m.d_base.sum(), 2), + "reform world", + round(m.d_ref.sum(), 2), + "effect change", + round(m.d_eff.sum(), 2), + ) + print( + " by channel", + m.groupby("channel")[["d_base", "d_ref", "d_eff"]] + .sum() + .round(2) + .to_dict("index"), + ) + print( + " units whose status changes: baseline", + int((m.poor_rent != m.poor_pub).sum()), + "reform world", + int((m.poor_r_rent != m.poor_r_pub).sum()), + ) + g = m.groupby("src").agg( + d_ref=("d_ref", "sum"), + d_base=("d_base", "sum"), + d_eff=("d_eff", "sum"), + W=("W", "sum"), + ) + g["share_child_weight"] = 100 * g.W / T + top = g.reindex(g.d_eff.abs().sort_values(ascending=False).index).head(6) + print(top.round(2).to_string()) + c = g.d_eff.abs().sort_values(ascending=False) + print( + " top 1, 5, 10, 25 clusters of gross change", + [round(100 * c.head(k).sum() / c.sum()) for k in (1, 5, 10, 25)], + "gross", + round(c.sum(), 2), + "n", + int((c > 0).sum()), + ) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py b/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py index 2b1c72157a..55af084135 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py @@ -174,6 +174,7 @@ def Qf(t): # noqa: N802 .zc.sum() ) rows = [] +covs = {} for tag, u in (("dense", dense), ("default", load("default"))): for W, wlab in (("W0", "initial"), ("W1", "published")): for ch in ("all", "asec", "puf"): @@ -181,6 +182,7 @@ def Qf(t): # noqa: N802 zm = influence(x, W, "y").groupby([x.state, x.clu]).sum().rename("zm") j = pd.concat([zm, zc], axis=1).dropna() cov = (j.zm * j.zc).groupby(level=0).sum() * 1e4 + covs[(tag, wlab, ch)] = cov sem = np.sqrt((zm**2).groupby(level=0).sum()) * 100 gap = (x[W] * x.y).groupby(x.state).sum() / x[W].groupby( x.state @@ -214,6 +216,12 @@ def Qf(t): # noqa: N802 # one month in consecutive Marches at most, so a two-year separation leaves no rotation overlap. bench = raw[[2024, 2025]].mean(axis=1) bse = cse * np.sqrt(3 / 2) +for y in (2022, 2023, 2024): + x = dense[(dense.source_year == y) & (dense.ch == "asec")] + m = (x.W0 * x.E).groupby(x.state).sum() / x.W0.groupby(x.state).sum() * 100 + print( + f"Census's flag on ASEC rows at initial weights against raw ASEC, {y}: corr {m.corr(raw[y]):.3f}" + ) print(f"benchmark 2024-25 against Table 18: corr {bench.corr(c.rate):.3f}") rows = [] for lab, x in ( @@ -264,16 +272,16 @@ def Qf(t): # noqa: N802 t["z_dense"] = t.dense_initial / np.sqrt(t.dense_initial_se**2 + t.census_se**2) t["z_acs"] = t.acs_rows / np.sqrt(t.acs_rows_se**2 + t.census_se**2) t.to_csv(f"{SP}/run/state_persistence.csv") -r = t.dense_initial.corr(t.acs_rows) +# ACS rows share no household with Census, so the gaps' sampling covariance equals Var(Census) less Cov(dense, Census). print( - f"gap corr dense initial, ACS rows {r:.2f}; p {stats.pearsonr(t.dense_initial, t.acs_rows)[1]:.3f}" + f"gap corr dense initial, ACS rows {t.dense_initial.corr(t.acs_rows):.2f}; p {stats.pearsonr(t.dense_initial, t.acs_rows)[1]:.3f}" ) print( - f"shared Census noise alone would give about {(t.census_se**2).mean() / (t.dense_initial.std() * t.acs_rows.std()):.2f}" + f" Census noise alone would give about {(t.census_se**2 - covs[('dense', 'initial', 'all')]).mean() / (t.dense_initial.std() * t.acs_rows.std()):.2f}" ) -pub = s.dense_W1 +print(f"gap corr dense published, ACS rows {s.dense_W1.corr(t.acs_rows):.2f}") print( - f"gap corr dense published, ACS rows {pub.corr(t.acs_rows):.2f}; shared Census noise alone would give about {(t.census_se**2).mean() / (pub.std() * t.acs_rows.std()):.2f}" + f" Census noise alone would give about {(t.census_se**2 - covs[('dense', 'published', 'all')]).mean() / (s.dense_W1.std() * t.acs_rows.std()):.2f}" ) rng = np.random.default_rng(0) same = lambda z1, z2, th: ( @@ -295,8 +303,15 @@ def Qf(t): # noqa: N802 print( f"|z|>{th}: {obs} states {pick}, permutation mean {sim.mean():.2f}, p {(sim >= obs).mean():.3f}" ) +t["joint_z"] = np.where( + np.sign(t.z_dense) == np.sign(t.z_acs), + np.minimum(t.z_dense.abs(), t.z_acs.abs()), + 0, +) +t.to_csv(f"{SP}/run/state_persistence.csv") print( - t.loc[["DE", "LA", "MS"], ["dense_initial", "acs_rows", "z_dense", "z_acs"]] + t.sort_values("joint_z", ascending=False) + .head(8)[["dense_initial", "acs_rows", "z_dense", "z_acs", "joint_z"]] .round(2) .to_string() ) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/prep_evidence.py b/docs/evidence/us-state-child-spm-2026-11/scripts/prep_evidence.py index 53d2d66fa7..10acd0d4d6 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/prep_evidence.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/prep_evidence.py @@ -13,7 +13,7 @@ R = os.path.expanduser( "~/PolicyEngine/microcosm/_worktrees/rent-head-align/.venv/bin/ruff" ) -KEEP = "extract_state assemble assemble_dense asec_extract cutrun runcuts decomp decomp2 noise vardec flip year paired thr cols rep_boot rep_eval chi_solve chi_eval ablate_eval ablate_noise fam dl dense_fit steps dmiss idcheck acs_stored acs_hh acs_w acs_one acs_eval acs_rent_run acs_reform_cmp overlap thr_census receipts prep_evidence national_cf cf_eval ctc_ssn house house_sim puf_house part rent2 rent3 rent4 rent5 rentfix dense_rent sparse_rent rent_eval acsrent dash_swing kish initial_fit noise_ci resource_growth".split() +KEEP = "extract_state assemble assemble_dense asec_extract cutrun runcuts decomp decomp2 noise vardec flip year paired thr cols rep_boot rep_eval chi_solve chi_eval ablate_eval ablate_noise fam dl dense_fit steps dmiss idcheck acs_stored acs_hh acs_w acs_one acs_eval acs_rent_run acs_reform_cmp fl_reform overlap thr_census receipts prep_evidence national_cf cf_eval ctc_ssn house house_sim puf_house part rent2 rent3 rent4 rent5 rentfix dense_rent sparse_rent rent_eval acsrent dash_swing kish initial_fit noise_ci resource_growth".split() for f in glob.glob(E + "/*"): os.remove(f) if os.path.isfile(f) else shutil.rmtree(f) for k in KEEP: From 247f1a88a3f75c6dddc5fc443f6747fb0cd50c9a Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 1 Nov 2026 19:51:46 -0500 Subject: [PATCH 6/9] Test Louisiana's miss at its own size The p of .53 answered whether any state clears 1.96 on both comparisons, not whether a miss as large as Louisiana's beats chance. A permutation of the largest joint z gives .19. Co-Authored-By: Claude Opus 5.5 --- docs/evidence/us-state-child-spm-2026-11/README.md | 2 +- .../outputs/logs/overlap.txt | 1 + .../us-state-child-spm-2026-11/receipts.json | 8 ++++---- .../us-state-child-spm-2026-11/scripts/overlap.py | 14 ++++++++++++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/docs/evidence/us-state-child-spm-2026-11/README.md b/docs/evidence/us-state-child-spm-2026-11/README.md index ed146fb362..e90c798197 100644 --- a/docs/evidence/us-state-child-spm-2026-11/README.md +++ b/docs/evidence/us-state-child-spm-2026-11/README.md @@ -8,7 +8,7 @@ Model figures come from real PolicyEngine US simulations at 2.90.2 (`469ad12cb95 1. **Noise accounts for most of the default file's state scatter, and the data pin that share down poorly.** A state rate carries a replicate standard error of about 3.6 points, or about ±6 at 90%, and that error runs low because it ignores CPS design. Child-weighted effective samples run from 19 in DC to 277 in California. Three fits put noise at 60%, 71% and 80% of the cross-state variance, and the first carries a 95% interval of about 10% to 89%. 2. **On the dense pool, calibration creates most of the systematic error, and most of the added state error lands on ASEC rows.** At initial weights, the mean gap reads 0.00, the mean absolute gap 1.78, and 16 jurisdictions fall outside Census's margin. At published weights those read +3.62, 4.33 and 38. ASEC rows go from a mean absolute gap of 2.44 to 7.30, and PUF rows from 2.95 to 3.16. State-specific error rises about 1.7 times, from 1.88 to 3.20 points, once we allow for households the pool shares with Table 18, and a test with no shared households keeps the direction. This result covers the dense pool only. On the default file, support selection puts the shift in place before calibration starts (+3.27 at initial weights) and state-specific error stays flat, and the ACS-local file stores no initial weights. The dense zero nets +2.20 on ASEC rows against -2.20 on PUF rows, and initial weights miss the administrative targets, so this result locates the problem and does not recommend skipping calibration. -3. **Some state error predates calibration, and we cannot yet pin it on particular states.** At dense initial weights, state gaps still exceed their sampling noise (Q = 170.5 on 50 degrees of freedom after allowing for shared households). Louisiana has the largest joint miss, past 2.8 standard errors the same way at dense initial weights and on ACS rows, which draw on another survey. One such state matches chance, though (p = .53), so Louisiana gives a lead and not a finding. Florida, Massachusetts and Maryland sit within 3 points at dense initial weights and mostly miss after calibration. +3. **Some state error predates calibration, and we cannot yet pin it on particular states.** At dense initial weights, state gaps still exceed their sampling noise (Q = 170.5 on 50 degrees of freedom after allowing for shared households). Louisiana has the largest joint miss, about 2.8 standard errors the same way at dense initial weights and on ACS rows, which draw on another survey. A miss that large on both turns up by chance about one time in five (p = .19), so Louisiana gives a lead and not a finding. Florida, Massachusetts and Maryland sit within 3 points at dense initial weights and mostly miss after calibration. 4. **The rent imputation puts rent on the wrong households.** Of records that should carry rent, 89% do not hold their own, in every Populace US file we checked, including the local-area file. PolicyEngine/microcosm#1444 carries the fix. With published weights held fixed, the fix nearly doubles modelled housing subsidies on the dense file, from $7.3bn to $13.9bn, and lowers the 2025 child rate 0.7 points. It barely moves state fit: the mean absolute gap goes from 4.33 to 4.13 on dense, 4.80 to 4.71 on default and 3.18 to 3.21 on ACS-local, where contract rent stands in on ACS rows. It lifts SNAP by less than 1%. Across 15 states, it moves a state's 2021 CTC effect by a median of 0.29, and by more than a point in Delaware and Florida, where a few donor households drive the swing. 5. **The default file is not the state path.** `policyengine.py` routes state regions to the ACS-local file. There the mean gap falls to +0.88 and the mean absolute gap to 3.18, 29 jurisdictions fall outside Census's margin, and 23,407 donor households hold 68% of child weight. ACS rows alone reach a mean absolute gap of 2.46 and a correlation of .69 with a median standard error of 1.06, and still leave 22 outside. Raising the ACS share of the mass does the most of any change we ran on this path: 2.79 to 2.16, or 2.88 to 2.23 with corrected rent, and the median error on a state's reform effect falls from 1.30 to 0.56. diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/overlap.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/overlap.txt index 12c51bd693..2c2b4f96c9 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/overlap.txt +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/overlap.txt @@ -33,6 +33,7 @@ gap corr dense published, ACS rows 0.42 |z|>1.28: 6 states ['DE', 'IL', 'LA', 'MS', 'OH', 'WA'], permutation mean 3.03, p 0.049 |z|>1.645: 2 states ['DE', 'LA'], permutation mean 1.37, p 0.412 |z|>1.96: 1 states ['LA'], permutation mean 0.68, p 0.533 +largest joint z 2.796, permutation median 2.59, p 0.185 dense_initial acs_rows z_dense z_acs joint_z LA -6.95 -6.40 -3.39 -2.80 2.80 DE 5.35 6.26 2.28 1.91 1.91 diff --git a/docs/evidence/us-state-child-spm-2026-11/receipts.json b/docs/evidence/us-state-child-spm-2026-11/receipts.json index fda2197773..1ce6f69c2b 100644 --- a/docs/evidence/us-state-child-spm-2026-11/receipts.json +++ b/docs/evidence/us-state-child-spm-2026-11/receipts.json @@ -316,8 +316,8 @@ "bytes": 3024 }, "outputs/logs/overlap.txt": { - "sha256": "1f54a28190d774637c5007a38e48c810605c1f699c9d7e1b7548945475b415c2", - "bytes": 3475 + "sha256": "bc35fdb742c035470d15e63a852cf40f852f06539821375bbf01b89d0a2ea907", + "bytes": 3531 }, "outputs/logs/part.txt": { "sha256": "64776b5b610f49772f79f0fe31ae0fb75b1a6554458ba890f0da0af6cad03863", @@ -524,8 +524,8 @@ "bytes": 4119 }, "scripts/overlap.py": { - "sha256": "09b9717a9ccb5451f7d1f5a65af825c048d68ff5d096aaa812ac3a9a4810898a", - "bytes": 9911 + "sha256": "09387f8f1a5613bce0db504ea725e79dea6f0d546d543621705cc6f3ab369c40", + "bytes": 10306 }, "scripts/paired.py": { "sha256": "a4461b5e7b31e37386daa9c14d67dda7607e2b93ddda04e09d2c513e6bb9ca77", diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py b/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py index 55af084135..7429b5beae 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py @@ -308,6 +308,20 @@ def Qf(t): # noqa: N802 np.minimum(t.z_dense.abs(), t.z_acs.abs()), 0, ) + + +def largest(z2): + return np.where( + np.sign(t.z_dense.values) == np.sign(z2), + np.minimum(np.abs(t.z_dense.values), np.abs(z2)), + 0, + ).max() + + +sim = np.array([largest(t.z_acs.values[rng.permutation(51)]) for _ in range(200000)]) +print( + f"largest joint z {t.joint_z.max():.3f}, permutation median {np.median(sim):.2f}, p {(sim >= t.joint_z.max()).mean():.3f}" +) t.to_csv(f"{SP}/run/state_persistence.csv") print( t.sort_values("joint_z", ascending=False) From 5cc8f6cc023465ee64c38184406808b14472917d Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Fri, 6 Nov 2026 06:15:59 -0500 Subject: [PATCH 7/9] Reword the state child SPM note to the trace it now is Populace US means to differ from Census where it fixes CPS errors, so the note now measures differences from Table 18 and no longer treats them as misses: - The title and opening say so, and name the question: separating intended corrections from noise and bugs. "Systematic error" becomes a systematic shift, and "state-specific error" becomes state-specific variation. - "What would fix it" becomes "What we would change", and says a smaller gap alone does not make a better file. - The rent sections now record what landed. #1444 fixed the assignment, #1529 made the gate fail on rent outside renter households (the test the note named no longer exists), and no published file carries the fix yet. PolicyEngine/child-poverty-impact-dashboard#127 has left draft. No figure changes: a token comparison of the old and new text finds only punctuation differences. ACS-local figures stay on hold for the fill-0 rerun. Co-Authored-By: Claude Opus 5.5 --- .../us-state-child-spm-2026-11/README.md | 76 ++++++++++--------- .../us-state-child-spm-2026-11/receipts.json | 6 +- .../scripts/receipts.py | 2 +- 3 files changed, 43 insertions(+), 41 deletions(-) diff --git a/docs/evidence/us-state-child-spm-2026-11/README.md b/docs/evidence/us-state-child-spm-2026-11/README.md index e90c798197..924c97f6a9 100644 --- a/docs/evidence/us-state-child-spm-2026-11/README.md +++ b/docs/evidence/us-state-child-spm-2026-11/README.md @@ -1,20 +1,20 @@ -# Why Populace US state child SPM poverty rates miss Census +# How calibration, sampling noise and rent imputation move Populace US state child SPM rates -State child SPM poverty on the default Populace US file misses Census P60-290 Table 18 by 4.8 points on average, and 38 of 51 jurisdictions fall outside Census's margin. This note splits that miss into sampling noise, weight concentration and systematic error, decomposes the largest gaps, and lists what would close them. +We build Populace US to correct CPS errors, so we expect its state child SPM rates to differ from Census P60-290 Table 18, which Census estimates from the CPS ASEC. On the default file they differ by 4.8 points on average, and 38 of 51 jurisdictions fall outside Census's margin. We cannot tell a correction from noise or a bug by the size of a gap. So we split the difference into sampling noise, weight concentration and systematic shifts, decompose the largest gaps, and list what we would change. -Model figures come from real PolicyEngine US simulations at 2.90.2 (`469ad12cb957`), one state cut at a time as `slideshows/appam-2026/analysis/state_baseline.py` on PolicyEngine/policyengine-slides#95 does. Differences, standard errors and fits are arithmetic on those runs' output, and the two figures that change an input without re-simulating say so. No poverty rate entered a calibration target: the dense file's 6,102 target names include none. That makes these comparisons holdouts of the target, not of the sample, because the ASEC pool and Table 18 share households. +Model figures come from real PolicyEngine US simulations at 2.90.2 (`469ad12cb957`), one state cut at a time as `slideshows/appam-2026/analysis/state_baseline.py` on PolicyEngine/policyengine-slides#95 does. We compute differences, standard errors and fits from those runs' output, and the two figures that change an input without re-simulating say so. No poverty rate entered a calibration target: the dense file's 6,102 target names include none. That makes these comparisons holdouts of the target, not of the sample, because the ASEC pool and Table 18 share households. ## What we found 1. **Noise accounts for most of the default file's state scatter, and the data pin that share down poorly.** A state rate carries a replicate standard error of about 3.6 points, or about ±6 at 90%, and that error runs low because it ignores CPS design. Child-weighted effective samples run from 19 in DC to 277 in California. Three fits put noise at 60%, 71% and 80% of the cross-state variance, and the first carries a 95% interval of about 10% to 89%. -2. **On the dense pool, calibration creates most of the systematic error, and most of the added state error lands on ASEC rows.** At initial weights, the mean gap reads 0.00, the mean absolute gap 1.78, and 16 jurisdictions fall outside Census's margin. At published weights those read +3.62, 4.33 and 38. ASEC rows go from a mean absolute gap of 2.44 to 7.30, and PUF rows from 2.95 to 3.16. State-specific error rises about 1.7 times, from 1.88 to 3.20 points, once we allow for households the pool shares with Table 18, and a test with no shared households keeps the direction. This result covers the dense pool only. On the default file, support selection puts the shift in place before calibration starts (+3.27 at initial weights) and state-specific error stays flat, and the ACS-local file stores no initial weights. The dense zero nets +2.20 on ASEC rows against -2.20 on PUF rows, and initial weights miss the administrative targets, so this result locates the problem and does not recommend skipping calibration. -3. **Some state error predates calibration, and we cannot yet pin it on particular states.** At dense initial weights, state gaps still exceed their sampling noise (Q = 170.5 on 50 degrees of freedom after allowing for shared households). Louisiana has the largest joint miss, about 2.8 standard errors the same way at dense initial weights and on ACS rows, which draw on another survey. A miss that large on both turns up by chance about one time in five (p = .19), so Louisiana gives a lead and not a finding. Florida, Massachusetts and Maryland sit within 3 points at dense initial weights and mostly miss after calibration. -4. **The rent imputation puts rent on the wrong households.** Of records that should carry rent, 89% do not hold their own, in every Populace US file we checked, including the local-area file. PolicyEngine/microcosm#1444 carries the fix. With published weights held fixed, the fix nearly doubles modelled housing subsidies on the dense file, from $7.3bn to $13.9bn, and lowers the 2025 child rate 0.7 points. It barely moves state fit: the mean absolute gap goes from 4.33 to 4.13 on dense, 4.80 to 4.71 on default and 3.18 to 3.21 on ACS-local, where contract rent stands in on ACS rows. It lifts SNAP by less than 1%. Across 15 states, it moves a state's 2021 CTC effect by a median of 0.29, and by more than a point in Delaware and Florida, where a few donor households drive the swing. -5. **The default file is not the state path.** `policyengine.py` routes state regions to the ACS-local file. There the mean gap falls to +0.88 and the mean absolute gap to 3.18, 29 jurisdictions fall outside Census's margin, and 23,407 donor households hold 68% of child weight. ACS rows alone reach a mean absolute gap of 2.46 and a correlation of .69 with a median standard error of 1.06, and still leave 22 outside. Raising the ACS share of the mass does the most of any change we ran on this path: 2.79 to 2.16, or 2.88 to 2.23 with corrected rent, and the median error on a state's reform effect falls from 1.30 to 0.56. +2. **On the dense pool, calibration creates most of the systematic shift, and most of the added state variation lands on ASEC rows.** At initial weights, the mean gap reads 0.00, the mean absolute gap 1.78, and 16 jurisdictions fall outside Census's margin. At published weights those read +3.62, 4.33 and 38. ASEC rows go from a mean absolute gap of 2.44 to 7.30, and PUF rows from 2.95 to 3.16. State-specific variation rises about 1.7 times, from 1.88 to 3.20 points, once we allow for households the pool shares with Table 18, and a test with no shared households keeps the direction. This result covers the dense pool only. On the default file, support selection puts the shift in place before calibration starts (+3.27 at initial weights) and state-specific variation stays flat, and the ACS-local file stores no initial weights. The dense zero nets +2.20 on ASEC rows against -2.20 on PUF rows, and initial weights miss the administrative targets, so this result shows where the shift enters and does not recommend skipping calibration. +3. **Some state variation predates calibration, and we cannot yet pin it on particular states.** At dense initial weights, state gaps still exceed their sampling noise (Q = 170.5 on 50 degrees of freedom after allowing for shared households). Louisiana has the largest joint gap, about 2.8 standard errors the same way at dense initial weights and on ACS rows, which draw on another survey. A gap that large on both turns up by chance about one time in five (p = .19), so Louisiana gives a lead and not a finding. Florida, Massachusetts and Maryland sit within 3 points at dense initial weights and mostly move away after calibration. +4. **The Populace US files we checked carry rent on the wrong households.** Of records that should carry rent, 89% do not hold their own in each file, including the local-area file. PolicyEngine/microcosm#1444 fixed the code, and no published file carries the fix yet. With published weights held fixed, the fix nearly doubles modelled housing subsidies on the dense file, from $7.3bn to $13.9bn, and lowers the 2025 child rate 0.7 points. It barely moves the state gaps: the mean absolute gap goes from 4.33 to 4.13 on dense, 4.80 to 4.71 on default and 3.18 to 3.21 on ACS-local, where contract rent stands in on ACS rows. It lifts SNAP by less than 1%. Across 15 states, it moves a state's 2021 CTC effect by a median of 0.29, and by more than a point in Delaware and Florida, where a few donor households drive the swing. +5. **`policyengine.py` routes state regions to the ACS-local file, not the default file.** There the mean gap falls to +0.88 and the mean absolute gap to 3.18, 29 jurisdictions fall outside Census's margin, and 23,407 donor households hold 68% of child weight. ACS rows alone reach a mean absolute gap of 2.46 and a correlation of .69 with a median standard error of 1.06, and still leave 22 outside. Raising the ACS share of the mass moves the mean absolute gap furthest of any change we ran on this path, from 2.79 to 2.16, or 2.88 to 2.23 with corrected rent. It also lowers the median standard error on a state's reform effect from 1.30 to 0.56. ## What the comparison measures -Table 18 averages income years 2023 to 2025 and carries a margin of 1.0 to 3.7 points. The model column is PolicyEngine's 2025 rate. Standard errors below linearize the ratio and cluster on source household, counting an ASEC record and its PUF clone as one cluster, so the columns compare like with like. Q and τ first treat model and Census as independent. The two rows after them subtract the covariance from households they share, as the section on where the error enters explains. +Table 18 averages income years 2023 to 2025 and carries a margin of 1.0 to 3.7 points. The model column holds PolicyEngine's 2025 rate. Standard errors below linearize the ratio and cluster on source household, counting an ASEC record and its PUF clone as one cluster, so the columns compare like with like. Q and τ first treat model and Census as independent. The two rows after them subtract the covariance from households they share. | Measure | Default, initial | Default, published | Dense, initial | Dense, published | ACS-local (Build O 10/17) | | --- | --- | --- | --- | --- | --- | @@ -31,7 +31,7 @@ Table 18 averages income years 2023 to 2025 and carries a margin of 1.0 to 3.7 p | Q, allowing for shared households | 139.5 | 76.0 | 170.5 | 188.4 | not run | | τ, allowing for shared households | 2.95 | 2.90 | 1.88 | 3.20 | not run | -Default is Build P; dense is `b5db384`. The published snapshot does not store ACS-local initial weights, so that column has no initial counterpart. The default file also has a replicate standard error from 80 replicate calibrations: a Poisson bootstrap of source households, then a full re-solve. Its median reads 3.57, and its ratio to the linearized error runs from .53 in West Virginia to 2.17 in Montana. Census's own root-mean-square standard error is 1.35. +The default column reads Build P and the dense column `b5db384`. The published snapshot does not store ACS-local initial weights, so that column has no initial counterpart. We also ran 80 replicate calibrations on the default file, a Poisson bootstrap of source households and then a full re-solve, for a replicate standard error. Its median reads 3.57, and its ratio to the linearized error runs from .53 in West Virginia to 2.17 in Montana. Census's own root-mean-square standard error reads 1.35. ## Noise and weight concentration @@ -45,13 +45,13 @@ We tested whether noise alone could produce the pattern, using a common shift pl | Standard deviation of gaps | 5.11 | 4.12 | 3.27 to 5.12 | .03 | | Outside Census's margin | 38 | 36 | 30 to 42 | .31 | -Only the standard deviation rejects, and adding a state-specific τ of 3.25 lifts the null medians to 4.94 and 5.23, just past the observed values. A DerSimonian-Laird fit gives Q = 88.4 and τ = 3.25, with a Q-profile 95% interval of 1.71 to 4.84. That interval puts noise's share of the variance anywhere from about 10% to 89%, around a point estimate of 60%. Replicates also centre away from the published values, by 1.83 points on average and by -6.93 in Tennessee, -5.76 in Rhode Island and +4.92 in Montana. Measuring error around the published values gives Q = 64.8 (p = .08), τ = 2.28 and a noise share of 80%, and linearized errors give 71%, so the default file alone barely separates noise from state-specific error. +Only the standard deviation rejects, and adding a state-specific τ of 3.25 lifts the null medians to 4.94 and 5.23, just past the observed values. A DerSimonian-Laird fit gives Q = 88.4 and τ = 3.25, with a Q-profile 95% interval of 1.71 to 4.84. That interval puts noise's share of the variance anywhere from about 10% to 89%, around a point estimate of 60%. Replicates also centre away from the published values, by 1.83 points on average and by -6.93 in Tennessee, -5.76 in Rhode Island and +4.92 in Montana. Measuring replicate error around the published values gives Q = 64.8 (p = .08), τ = 2.28 and a noise share of 80%, and linearized errors give 71%, so the default file alone barely separates noise from state-specific variation. These standard errors run low. Replicates hold support, the target matrix and imputations fixed, and source-household clusters ignore CPS strata, primary sampling units and rotation overlap. τ absorbs that, along with the mismatch between one model year and a three-year Census average. Firmer evidence comes from the dense file (Q = 147.8, τ = 3.07, 95% interval 2.33 to 4.34) and ACS rows (Q = 131.6, τ = 2.08, 95% interval 1.62 to 3.22). The dense file adds records, not surveys: every channel maps to the same ASEC households, so its .65 gap correlation with the default file partly reflects shared sample noise. ACS rows give the only independent sample. Their gaps correlate .30 with the dense file's at initial weights and .42 at published weights, but both gaps subtract the same Census estimate, and that alone would give about .16 and .09. ACS rows also take tax and rent inputs from donors by QRF, so they can share model error, and they carry published weights. -## Where the error enters +## Where the differences enter Calibration moves both halves of the dense pool up: @@ -67,9 +67,9 @@ Calibration moves both halves of the dense pool up: | PUF rows, correlation with Census | .55 | .52 | | PUF rows, τ | 2.43 | 2.82 | -ASEC rows at initial weights hold the tightest state pattern in this note, with a +2.20 shift, partly because they compare the survey with itself. PUF rows start 5 points below them, so the dense pool's zero comes from two offsetting gaps. +ASEC rows at initial weights hold the tightest state pattern, with a +2.20 shift, partly because they compare the survey with itself. PUF rows start 5 points below them, so the dense pool's zero comes from two offsetting gaps. -The initial-weight columns flatter the pool. The pool holds income years 2022 to 2024 and Table 18 averages 2023 to 2025, so they share households, and ASEC rows at initial weights reproduce Census's own state rates on Census's flag (correlation .98 or more in each year). In raw ASEC, the 2022 to 2024 average correlates .96 with Table 18, while 2022 and 2025 correlate .68. Subtracting the covariance from shared clusters moves τ from 1.50 to 1.88 (95% interval 1.41 to 2.59) at initial weights and from 3.07 to 3.20 (2.57 to 4.48) at published weights. So state-specific error rises about 1.7 times, not double, and the intervals just overlap. That adjustment ignores rotation overlap and design effects, so it still understates the covariance. +Shared households pull the initial-weight columns toward Census. The pool holds income years 2022 to 2024 and Table 18 averages 2023 to 2025, so they share households. ASEC rows at initial weights reproduce Census's own state rates on Census's flag (correlation .98 or more in each year). In raw ASEC, the 2022 to 2024 average correlates .96 with Table 18, while 2022 and 2025 correlate .68. Subtracting the covariance from shared clusters moves τ from 1.50 to 1.88 (95% interval 1.41 to 2.59) at initial weights and from 3.07 to 3.20 (2.57 to 4.48) at published weights. So state-specific variation rises about 1.7 times, not double, and the intervals just overlap. That adjustment ignores rotation overlap and design effects, so it still understates the covariance. A stricter test uses records that share no household with their benchmark: dense 2022 records against Census's 2024 to 2025 average in raw ASEC. @@ -84,7 +84,7 @@ A stricter test uses records that share no household with their benchmark: dense | PUF rows, mean absolute gap | 3.13 | 4.72 | | PUF rows, correlation | .41 | .42 | -The direction survives. This test uses a third of the records, so both columns carry more noise, and calibration targets the pool rather than a single source year, so the published column may overstate the damage. Still, the 1.78 and .78 at initial weights overstate how well the pool fits, and calibration still adds state error. +The direction survives. This test uses a third of the records, so both columns carry more noise, and calibration targets the pool rather than a single source year, so the published column may overstate calibration's effect. Still, the 1.78 and .78 at initial weights overstate how closely the pool tracks Census on its own, and calibration still widens state variation. The calibration step differs by flag and by file: @@ -120,7 +120,7 @@ Ten states read this way, with standard errors in brackets: | --- | --- | --- | --- | --- | --- | --- | --- | --- | | DC | 20.3 | +14.1 (10.6) | -4.9 (1.7) | +5.8 (3.4) | +0.9 (5.3) | +1.8 (5.5) | +0.3 | Too noisy to read on any file | | DE | 8.7 | +13.7 (6.9) | +5.3 (1.7) | +13.0 (3.2) | +13.5 (6.9) | +6.3 (2.9) | +16.7 | High everywhere, and donors widen it | -| TN | 10.0 | +13.2 (5.1) | -0.1 (0.9) | +5.3 (1.8) | +6.6 (3.1) | +8.3 (1.4) | +5.7 | High on ACS rows, fine on the initial pool | +| TN | 10.0 | +13.2 (5.1) | -0.1 (0.9) | +5.3 (1.8) | +6.6 (3.1) | +8.3 (1.4) | +5.7 | High on ACS rows, near Census on the initial pool | | MD | 10.7 | +12.5 (6.0) | +2.7 (1.5) | +8.5 (2.8) | +6.9 (4.2) | +0.7 (1.2) | +9.8 | Calibration and donors | | FL | 18.4 | +9.8 (4.0) | +0.9 (0.9) | +11.6 (1.7) | +4.3 (3.5) | -5.1 (0.6) | +8.7 | Calibration and donors; ACS rows read low | | MA | 12.8 | +7.4 (5.1) | +0.5 (1.0) | +7.9 (1.9) | +8.6 (4.6) | +2.5 (1.2) | +11.7 | Calibration and donors | @@ -147,7 +147,7 @@ Ten states read this way, with standard errors in brackets: Benefit targets and the EITC pull the rate up, and CTC and joint SOI targets pull it down. With every family in, the national rate lands near population-only, at 16.23 against 16.43, while the state correlation falls from .60 to .42. The last two rows land about a point apart, and they differ in the 11 JCT rows the re-solves drop, the rebuilt matrix and the solver path. `outputs/ablate_eval.csv` holds the drop-one runs too. -On the dense file, benefit receipt starts far below target. Summing each family's cells, which mixes dollars and counts where a family holds both, SNAP starts 37.8% short, Medicaid 26.2%, EITC 50.8% and ACA 43.9%, while AGI starts 4.2% short. Those misses line up with the +3.3 point rise, though we ran the ablations on the default file only. +On the dense file, benefit receipt starts far below target. Summing each family's cells, which mixes dollars and counts where a family holds both, SNAP starts 37.8% short, Medicaid 26.2%, EITC 50.8% and ACA 43.9%, while AGI starts 4.2% short. Those shortfalls line up with the +3.3 point rise, though we ran the ablations on the default file only. A chi-square anchor to the default file's initial weights lowers noise and overshoots on level. The grid starts from the same-pipeline re-solve, not from the published weights, so that row anchors it: @@ -166,26 +166,26 @@ The mean gap rises above both endpoints, so a pull toward initial weights cannot **Pooled records keep nominal income from their source year.** PolicyEngine holds every record to a 2024 threshold, while a 2022 record's market income keeps its nominal 2022 value. That accounts for 2.3 to 2.5 points of the thresholds step. Aging 2022 and 2023 ASEC records by Census's growth in 20th-percentile child resources (a real national simulation on the default file) lowers the national 2025 rate from 17.17 to 16.29, the mean gap from 3.24 to 2.45, and the mean absolute gap from 4.80 to 4.05, with 33 jurisdictions outside the margin rather than 38. `outputs/cf_state.csv` holds each state. -**The model overshoots from 2024 to 2025.** PolicyEngine rises 1.48 points while Census holds at 13.4. Reference thresholds match Census for 2025, and swapping Census's 2024 thresholds into the test moves PolicyEngine's 2024 rate only from 15.69 to 15.72, so the difference sits in resources. That swap is arithmetic on simulated resources (`outputs/logs/thr_census.txt`). Between the 10th and 30th percentiles, child SPM resources grew 3.6% to 5.7% in Census's data, against 1.6% to 2.8% on the default file and 2.5% to 3.2% on dense (`outputs/resource_growth.csv`). +**PolicyEngine's child rate rises 1.48 points from 2024 to 2025 while Census's holds at 13.4.** Reference thresholds match Census for 2025, and swapping Census's 2024 thresholds into the test moves PolicyEngine's 2024 rate only from 15.69 to 15.72, so the difference sits in resources. We computed that swap by arithmetic on simulated resources (`outputs/logs/thr_census.txt`). Between the 10th and 30th percentiles, child SPM resources grew 3.6% to 5.7% in Census's data, against 1.6% to 2.8% on the default file and 2.5% to 3.2% on dense (`outputs/resource_growth.csv`). The CTC's adult SSN requirement explains little of this. `gov.irs.credits.ctc.adult_ssn_requirement_applies` starts in 2025. Units whose refundable CTC falls to zero that year hold 2.48% of child weight, and 83% of that weight has no adult in the SPM unit with an eligible SSN card. Those units hold 11% of the child weight moving into poverty, so the rule can account for at most that share through this channel. -**Partnership and S-corp income stays out of SPM resources** (PolicyEngine/policyengine-us#9919). Adding it before tax lowers the 2024 rate from 16.62 to 15.29 on the dense file, all of it on PUF records. This line is arithmetic on simulation output. +**Partnership and S-corp income stays out of SPM resources** (PolicyEngine/policyengine-us#9919). Adding it before tax, by arithmetic on simulation output, lowers the 2024 rate from 16.62 to 15.29 on the dense file, all of it on PUF records. -**Offsets hide part of the shift.** PolicyEngine's SNAP matches USDA totals after calibration and runs about twice Census's recorded value on low-income child units, which pulls poverty down 2.7 to 3.4 points. +**Administrative SNAP offsets part of the shift.** PolicyEngine's SNAP matches USDA totals after calibration and runs about twice Census's recorded value on low-income child units, which pulls poverty down 2.7 to 3.4 points. ## The rent bug -`impute_us_pre_subsidy_rent` draws rent for households in table order, and `person_rent[head_mask] = predicted` writes those draws to heads in person order. The two orders agree for 9.15% of households. On the dense file, 46.4% of records hold the wrong rent, and 89% of records that should carry rent do not hold their own. +Until PolicyEngine/microcosm#1444, `impute_us_pre_subsidy_rent` drew rent for households in table order, and `person_rent[head_mask] = predicted` wrote those draws to heads in person order. The two orders agree for 9.15% of households. On the dense file, 46.4% of records hold the wrong rent, and 89% of records that should carry rent do not hold their own. | Pairing, 168,852 base households | Rented | Owned with mortgage | None | | --- | --- | --- | --- | | Rent on the household's own head, as published | 40.8% | 27.1% | 25.1% | | The n-th head's rent with the n-th household's tenure | 100% | 0% | 0% | -The second row is the test: it restores the link exactly, so the draws are right and only their destination is wrong. The default and dense files carry the same draws, and so do ACS-local donors. +The second row restores the link exactly, so the model drew rent for the right households and the code wrote it to the wrong heads. The default and dense files carry the same draws, and so do ACS-local donors. -ACS rows inherit the problem. `build_optional_acs_multispine` passes the base to `transfer_acs_inputs` as its donor, and `pre_subsidy_rent` sits among the transfer targets, so ACS rows learned from misplaced rent: 39.6% of ACS renters carry rent, and so do 30% of ACS owners. The file stores native `RNTP` for all 336,110 renter households, and `acs_transfer.py` leaves it out of this path because contract rent differs from pre-subsidy rent. A 2023 to 2025 pipeline smoke run recorded 30,838 such heads in its `positive_rent_nonrenter` receipt (`experiments/us-asec-2025-source/receipts/pipeline_smoke_2023_2025.json`), and `test_signal_gate_preserves_archived_qrf_rent_outside_renter_household` allowed them. +ACS rows inherit the misplaced rent. `build_optional_acs_multispine` passes the base to `transfer_acs_inputs` as its donor, and `pre_subsidy_rent` sits among the transfer targets, so ACS rows learned from it: 39.6% of ACS renters carry rent, and so do 30% of ACS owners. The file stores native `RNTP` for all 336,110 renter households, and `acs_transfer.py` leaves it out of this path because contract rent differs from pre-subsidy rent. A 2023 to 2025 pipeline smoke run recorded 30,838 heads with rent outside renter households in its `positive_rent_nonrenter` receipt (`experiments/us-asec-2025-source/receipts/pipeline_smoke_2023_2025.json`), and `us_housing_inputs_signal_gate` passed them until PolicyEngine/microcosm#1529 made it fail the build on such rent. `transfer_acs_inputs` draws rent through the same QRF sign classifier, which gives every owner a small chance of positive rent, so a rebuild can still leave rent on ACS owners. Rent reaches poverty by several paths. SNAP's shelter deduction, some state TANF programs and state credits read it, and the largest path we measured runs through `hud_gross_rent`. `hud_hap` takes the lesser of the maximum subsidy and gross rent less tenant payment, so a recipient whose rent and utility allowance fall short of the tenant payment gets nothing. On the default file, 74% of Census housing recipients among child units on ASEC rows get no model subsidy. Moving rent back onto the right households, with published weights held fixed, gives: @@ -201,21 +201,21 @@ Rent reaches poverty by several paths. SNAP's shelter deduction, some state TANF | Mean absolute gap | 4.33 | 4.13 | 4.80 | 4.71 | | Outside Census's margin, of 51 | 38 | 36 | 38 | 34 | -The fix closes 0.56 of the dense file's 3.62 mean gap and 0.21 of the default file's 3.24. State steps run from -2.93 to +0.40 on dense and from -5.38 to +3.02 on default. It leaves the SNAP miss at initial weights in place. +The fix takes 0.56 off the dense file's 3.62 mean gap and 0.21 off the default file's 3.24. State steps run from -2.93 to +0.40 on dense and from -5.38 to +3.02 on default. The fix leaves the SNAP shortfall at initial weights in place. -On the ACS-local file, a similar exercise, with contract rent standing in on ACS rows, moves the mean gap from +0.88 to +0.49, the mean absolute gap from 3.18 to 3.21, and the correlation from .54 to .51, with 29 jurisdictions outside Census's margin both ways. ACS rows go from a mean absolute gap of 2.46 to 2.53. So rent matters here for getting housing right, not for state fit at published weights. +On the ACS-local file, a similar exercise, with contract rent standing in on ACS rows, moves the mean gap from +0.88 to +0.49, the mean absolute gap from 3.18 to 3.21, and the correlation from .54 to .51. It leaves 29 jurisdictions outside Census's margin both ways. ACS rows go from a mean absolute gap of 2.46 to 2.53. So at published weights the fix corrects housing here and leaves the state gaps about where they were. The fix moves reform effects about as far as it moves baselines, and those moves show how few households can set a state's effect. A reform pass covered 15 states drawn from the default file's large gaps, not its top 15: it includes Arkansas, Hawaii and Maine and leaves out California, Oklahoma and West Virginia, which has the largest effect. On those states, with published weights held fixed, a state's 2021 CTC effect moves 0.59 on average (median 0.29) and its baseline rate moves 0.47 (median 0.24). The effect moves nearly cancel in the mean (-0.04), though the median of the 15 goes from -3.39 to -2.59 (`outputs/acsrent_reform.csv`). Only two states move more than a point. Florida goes from -3.53 to -6.27 and Delaware from -2.97 to -1.76, and almost all of each swing sits on donors. In Florida, one donor with 1.21% of the state's child weight moves the effect 1.21 points, and ten source households hold 90% of the gross change. In Delaware, five source households hold all of it (`outputs/logs/fl_reform.txt`). These runs also use stand-in rent on ACS rows, so they show sensitivity and not the rebuilt file's answer. -A separate gap sits on the PUF half. `impute_us_housing_assistance_to_puf_support` replaces each PUF-half person's receipt with a QRF draw, and the unit takes its first person's draw. Unweighted, 2.05% of PUF-half units receive assistance against 3.73% on the ASEC half (2.82% against 7.75% among low-income child units), and 9.6% of ASEC recipients keep the flag on their PUF clone. +The PUF half also holds less housing assistance. `impute_us_housing_assistance_to_puf_support` replaces each PUF-half person's receipt with a QRF draw, and the unit takes its first person's draw. Unweighted, 2.05% of PUF-half units receive assistance against 3.73% on the ASEC half (2.82% against 7.75% among low-income child units), and 9.6% of ASEC recipients keep the flag on their PUF clone. ## What this means for the Child Poverty Impact Dashboard -The dashboard reads ACS-local slices, not the default file. Master serves Build P's August 19 slices under policyengine-us 1.825.2. PolicyEngine/child-poverty-impact-dashboard#127, still a draft, moves it to Build O 10/17 through `policyengine.py` 6.11.1. +The dashboard reads ACS-local slices, not the default file: master serves Build P's August 19 slices under policyengine-us 1.825.2, and PolicyEngine/child-poverty-impact-dashboard#127, still open, moves it to Build O 10/17 through `policyengine.py` 6.11.1. -**Baselines.** At 2.90.2, the 10/17 file gives a mean gap of +0.88, a mean absolute gap of 3.18, and 29 of 51 jurisdictions outside Census's margin. Its median state standard error of 2.98 means about ±4.9 points at 90%. A common shift plus model and Census noise gives a mean absolute gap of 2.79 (central 95% 2.22 to 3.43), so noise can carry most of the 3.18. The dashboard's stored audits show Build P fitting better than Build O at the same model: at 1.825.2 the mean absolute gap reads 2.78 against 3.13, with 23 jurisdictions outside the margin against 31. So PR #127's move costs some baseline fit. +**Baselines.** At 2.90.2, the 10/17 file gives a mean gap of +0.88, a mean absolute gap of 3.18, and 29 of 51 jurisdictions outside Census's margin. Its median state standard error of 2.98 gives about ±4.9 points at 90%. A common shift plus model and Census noise gives a mean absolute gap of 2.79 (central 95% 2.22 to 3.43), so noise can account for most of the 3.18. The dashboard's stored audits put Build P closer to Census than Build O at the same model: at 1.825.2 the mean absolute gap reads 2.78 against 3.13, with 23 jurisdictions outside the margin against 31. So PR #127's move widens the baseline gaps. **Reform effects.** The 2021 CTC reform lowers the median state's 2025 child rate 2.97 points, with a median standard error of 1.29, or about ±2.1 at 90%. That error runs smaller in points than a baseline's, and larger for its size: the median ratio of standard error to effect reads .45, against .24 for baselines. The largest effects carry the largest errors: West Virginia at -11.85 (4.61), Missouri at -8.96 (3.70) and DC at -8.65 (4.34). @@ -223,11 +223,13 @@ The stored audits give a second reading. At 1.825.2, Build P and Build O differ So state baselines and state reform effects on the dashboard both need a stated uncertainty, and neither should read as a point estimate to the tenth. The rent code predates the August 19 build, so those slices should carry the bug, though we did not test them, and the fix moves some state effects by more than a point. The legacy `backend/` and `cpid_calc/` paths read `enhanced_cps_2024`, and PR #127 says the frontend no longer calls them. -## What would fix it +## What we would change + +We want Populace US to differ from Census where the CPS errs, so a smaller gap alone does not make a better file, and we judge each change by what it corrects. Where we ran them, these changes move the gaps as follows: | Change | Measured on | Mean absolute gap | Mean gap | | --- | --- | --- | --- | -| No calibration (diagnostic only) | Dense | 4.33 to 1.78 | +3.62 to 0.00 | +| No calibration (comparison only) | Dense | 4.33 to 1.78 | +3.62 to 0.00 | | Rent fix, weights fixed | Dense | 4.33 to 4.13 | +3.62 to +3.06 | | Rent fix, weights fixed | Default | 4.80 to 4.71 | +3.24 to +3.03 | | Rent fix, weights fixed | ACS-local | 3.18 to 3.21 | +0.88 to +0.49 | @@ -235,11 +237,11 @@ So state baselines and state reform effects on the dashboard both need a stated | The same solves, corrected rent | ACS-local solves | 2.88 to 2.23 | +0.16 to -0.78 | | Single-factor income aging | Default | 4.80 to 4.05 | +3.24 to +2.45 | -This table cannot rank the changes, because its rows use different files, and benefit receipt, a dense anchor and the ASEC-PUF gap have no row. So the order below rests on judgement: prerequisites first, then the change we measured on the state path, then changes measured elsewhere or not at all. Aging reaches as far on the default file (0.75) as the ACS share does on ACS-local (0.63), so it could rank higher. +We cannot rank the changes from this table, because its rows use different files, and benefit receipt, a dense anchor and the ASEC-PUF gap have no row. So we order them by judgement: prerequisites first, then the change we measured on the state path, then changes measured elsewhere or not at all. Aging reaches as far on the default file (0.75) as the ACS share does on ACS-local (0.63), so it could rank higher. -One warning covers steps 3 and 4. Aging and better benefit receipt should lower rates, and we have not tested either on the ACS-local path. That path already reads +0.88, and -0.45 at share 0.9, or -0.78 with corrected rent, so changes sized on the default file could overshoot there. +Aging and better benefit receipt should lower rates, and we have not tested either on the ACS-local path. That path already reads +0.88, and -0.45 at share 0.9, or -0.78 with corrected rent, so we would measure steps 3 and 4 there before adopting a size from the default file. -1. **Put rent back and rebuild.** PolicyEngine/microcosm#1444 carries the assignment fix. It comes first because it corrects a bug and every later step should run on the rebuilt base, not because it closes the largest gap. After a rebuild, tighten `us_housing_inputs_signal_gate` so positive rent outside renter households fails the build, confirm ACS rows pick up the corrected link through the donor transfer, and re-run this note. Calibration then fits to corrected housing, which the fixed-weight runs here cannot show. +1. **Rebuild with the rent fix.** PolicyEngine/microcosm#1444 fixed the assignment, and PolicyEngine/microcosm#1529 made `us_housing_inputs_signal_gate` fail the build on positive rent outside renter households. The rebuild comes first because it corrects a bug and every later step should run on the rebuilt base, not because it closes the largest gap. With it, set ACS owners' rent to zero after the transfer, confirm ACS renters pick up the corrected link through the donor, and re-run `scripts/`. Calibration then fits to corrected housing, which the fixed-weight runs here cannot show. 2. **Limit what calibration does to states.** Two levers apply: - Give ACS records more of the state mass. `--acs-share` raises the weight on real state samples. On all 51 states: @@ -251,13 +253,13 @@ One warning covers steps 3 and 4. Aging and better benefit receipt should lower | Share 0.9, λ = .03 | 2.16 | .75 | 22 | 1.09 | 0.56 | | Share 0.964, λ = .03 | 2.14 | .77 | 22 | 0.87 | 0.47 | - With corrected rent, the share 0.9 row reads 2.23, with 23 outside the margin (`outputs/acsrent_solves.csv`). These standard errors fall, and bias remains: at share 0.9, DC reads 24.47 against Census's 20.3. PolicyEngine/microcosm#1078 puts the cost at 36% and 43% more held-out target error on its two folds at share 0.9 with no penalty, mostly on SOI cells, so the share needs a methodology decision. + With corrected rent, the share 0.9 row reads 2.23, with 23 outside the margin (`outputs/acsrent_solves.csv`). Standard errors fall and gaps remain: at share 0.9, DC reads 24.47 against Census's 20.3. PolicyEngine/microcosm#1078 puts the cost at 36% and 43% more held-out target error on its two folds at share 0.9 with no penalty, mostly on SOI cells, so the share needs a methodology decision. - Test an anchor on the dense pool. Initial weights there carry a mean absolute gap of 1.78, against 4.21 on the default file, so an anchor could keep more of that pattern. This needs a solve; we have not run one. -3. **Close benefit receipt before calibration.** Better take-up and receipt inputs should reduce the tilt, because calibration then has less to do, though we have not tested that. Rent does not close the SNAP gap. +3. **Close benefit receipt before calibration.** Better take-up and receipt inputs should reduce the tilt, because calibration then has less to do, though we have not tested that. The rent fix does not close SNAP's shortfall. 4. **Age pooled incomes** (microcosm#944). A crude single-factor run removes 0.88 points nationally. A real fix ages each income source and draws the pool from 2023 to 2025 to match Table 18. 5. **Close the gap between ASEC and PUF rows.** They start 5 points apart at initial weights, and the dense pool's zero depends on that offset. Start with cash income: at published weights, moving to PolicyEngine's cash income adds 0.75 points on ASEC rows and removes 2.06 on PUF rows, while housing adds 1.65 and 1.16 (`outputs/dense_shapley9_asec.csv`, `outputs/dense_shapley9_puf_tax_detail.csv`). Two known fixes should widen the gap. Carrying the ASEC housing flag to its PUF clone adds subsidy to PUF rows only, and partnership and S-corp income (PolicyEngine/policyengine-us#9919; PolicyEngine/policyengine-us#10573 partly addresses it) takes PUF rows from 13.63 to 11.27 in 2024, at published weights, and leaves ASEC rows at 20.52. Make those for their own reasons, not to close this gap. 6. **Reconcile 2025 resources near the line.** Compare PolicyEngine's and Census's child resource growth by income source, starting with the uprating series for low earners. -7. **Check the state misses that persist.** Rank states by the smaller of their two z-scores at dense initial weights and on ACS rows, counting only misses in the same direction (`outputs/state_persistence.csv`): Louisiana 2.80, Delaware 1.91, Ohio 1.40, Illinois 1.39, Mississippi 1.38 and Washington 1.31. These stay leads. Chance alone gives 0.7 states past 1.96 (we see one, p = .53), 1.4 past 1.645 (two, p = .41) and 3.0 past 1.28 (six, p = .05), and shared Census noise feeds those counts. Start with Louisiana and Delaware, looking at state tax and benefit rules and at Census's state estimates. +7. **Check the state gaps that persist.** Rank states by the smaller of their two z-scores at dense initial weights and on ACS rows, counting only gaps in the same direction (`outputs/state_persistence.csv`): Louisiana 2.80, Delaware 1.91, Ohio 1.40, Illinois 1.39, Mississippi 1.38 and Washington 1.31. These stay leads. Chance alone gives 0.7 states past 1.96 (we see one, p = .53), 1.4 past 1.645 (two, p = .41) and 3.0 past 1.28 (six, p = .05), and shared Census noise feeds those counts. Start with Louisiana and Delaware, looking at state tax and benefit rules and at Census's state estimates. 8. **Report state child rates as a standing holdout** with standard errors, in every release's receipts. Poverty stays a comparison and never a target. ## Limits @@ -268,7 +270,7 @@ One warning covers steps 3 and 4. Aging and better benefit receipt should lower - The aged run scales 42 income columns on 2022 and 2023 ASEC records by a single child-resource factor. PUF records stay as they are, the weights stay fit to unaged income, and it tests 0.88 of the 2.3 to 2.5 points the Shapley assigns. - policyengine-us 2.90.2 has no `spm_unit_spm_universe_status`, so it ignores that column and these runs measure every SPM unit, group quarters included. That choice matters at state level: PR #127 puts the August 19 release's 2024 median relative gap against ACS 2023 at -15.9% with all SPM units and -18.2% with group quarters excluded. - The ablations ran on Build P, not the dense file. -- Initial weights miss the administrative targets, so the initial-weight columns diagnose where error enters. They do not describe a usable file. +- Initial weights miss the administrative targets, so we use the initial-weight columns to locate where differences enter, and they do not describe a usable file. - We did not verify why Census records less SNAP than administrative totals imply. ## Reproduction @@ -277,7 +279,7 @@ Scripts sit in `scripts/` and write beside themselves under `run/` and `asec/`. 1. `dl.py`, `asec_extract.py`, `extract_state.py`, `assemble.py`, `cutrun.py`, `assemble_dense.py`, `cols.py`, `idcheck.py`: downloads, state cuts of each file and id checks. 2. `noise.py`, `vardec.py`, `rep_boot.py`, `rep_eval.py`, `noise_ci.py`, `dense_fit.py`, `kish.py`: noise. -3. `initial_fit.py`, `overlap.py`: initial and published weights by channel, sample overlap and persistent state misses. +3. `initial_fit.py`, `overlap.py`: initial and published weights by channel, sample overlap and persistent state gaps. 4. `decomp.py`, `decomp2.py`, `steps.py`, `year.py`, `paired.py`, `thr.py`, `thr_census.py`, `flip.py`, `resource_growth.py`: decomposition. 5. `ablate_eval.py`, `ablate_noise.py`, `fam.py`, `chi_solve.py`, `chi_eval.py`, `dmiss.py`: calibration. 6. `national_cf.py`, `cf_eval.py`, `ctc_ssn.py`, `part.py`: aged incomes, the CTC reform and partnership income. diff --git a/docs/evidence/us-state-child-spm-2026-11/receipts.json b/docs/evidence/us-state-child-spm-2026-11/receipts.json index 1ce6f69c2b..ec5136772a 100644 --- a/docs/evidence/us-state-child-spm-2026-11/receipts.json +++ b/docs/evidence/us-state-child-spm-2026-11/receipts.json @@ -1,5 +1,5 @@ { - "purpose": "Receipts for the state child SPM diagnosis. Aggregates by state and national totals only; no household rows.", + "purpose": "Receipts for the state child SPM note. Aggregates by state and national totals only; no household rows.", "date": "2026-11-01", "model": { "policyengine_us": "2.90.2", @@ -544,8 +544,8 @@ "bytes": 1789 }, "scripts/receipts.py": { - "sha256": "463e6a2b67a62031fe2af04378ee40f98e63d657ea0611d0ebb468cdf367530d", - "bytes": 4236 + "sha256": "59b70392fd0c2548c137e9832d3c62a21571d4fa7df027ba6331993ad37862a3", + "bytes": 4231 }, "scripts/rent2.py": { "sha256": "4bc02b7765cd72883e1cd76b9a84c06ff913afa71b1561cf2bc9bab86d5b99e9", diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/receipts.py b/docs/evidence/us-state-child-spm-2026-11/scripts/receipts.py index f6e03886a9..a91c07cf41 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/receipts.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/receipts.py @@ -100,7 +100,7 @@ def sha(p): "15cefac4/populace_us_2024_calibration.npz" ] r = { - "purpose": "Receipts for the state child SPM diagnosis. Aggregates by state and national totals only; no household rows.", + "purpose": "Receipts for the state child SPM note. Aggregates by state and national totals only; no household rows.", "date": "2026-11-01", "model": { "policyengine_us": v[0], From 0a7b0d8de3788115700a65baab92c28ab9d0c3c1 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sat, 7 Nov 2026 07:40:40 -0500 Subject: [PATCH 8/9] Rerun the ACS-local figures under fill 0, with published rent The evidence scripts now split the ACS-local file through HTTP range requests and run every state with blank parent links filled with 0, which policyengine-us reads as unknown. The largest states run in two steps or in household parts, and checks show both write what one whole-state run writes. All 51 published-rent rates match the deck's fill-0 run to 3.35e-7. The README carries the published-rent figures from this rerun: mean gap +0.89, mean absolute gap 3.19, Q 73.9, tau 2.04 and median reform effect -2.90. Corrected-rent figures still come from the -1 fill until that pass's last four states finish. outputs/*_fill_minus1.* keep the -1 fill's tables, and the README names Microcosm's US files. Co-Authored-By: Claude Opus 5.5 --- .../us-state-child-spm-2026-11/README.md | 32 +- .../outputs/acs_eval.csv | 16 +- .../outputs/acs_eval_fill_minus1.csv | 52 ++ .../outputs/acs_rerun_vs_deck.csv | 52 ++ .../outputs/acs_solves.csv | 22 +- .../outputs/acs_solves_fill_minus1.csv | 12 + .../outputs/acsrent_eval_fill_minus1.csv | 52 ++ .../outputs/acsrent_reform_fill_minus1.csv | 16 + .../outputs/acsrent_solves_fill_minus1.csv | 12 + .../outputs/blank_holders_state.csv | 52 ++ .../outputs/dash_swing_fill_minus1.csv | 52 ++ .../outputs/logs/acs_eval.txt | 32 +- .../outputs/logs/acs_hh_split.txt | 3 + .../outputs/logs/acs_rerun_check.txt | 4 + .../outputs/logs/acs_split.txt | 60 ++ .../outputs/logs/blank_holders.txt | 17 + .../outputs/logs/dash_swing.txt | 11 + .../outputs/logs/noise_ci.txt | 6 +- .../outputs/logs/parent_blanks.txt | 5 + .../outputs/logs/persist.txt | 17 + .../outputs/logs/rent_map.txt | 1 + .../outputs/logs/rentfix.txt | 11 + .../outputs/noise_ci.json | 58 +- .../outputs/noise_ci_fill_minus1.json | 186 +++++ .../outputs/state_persistence_fill_minus1.csv | 52 ++ .../us-state-child-spm-2026-11/receipts.json | 235 +++++- .../scripts/acs_eval.py | 2 +- .../scripts/acs_hh.py | 27 - .../scripts/acs_hh_split.py | 61 ++ .../scripts/acs_more.sh | 15 - .../scripts/acs_one.py | 69 -- .../scripts/acs_parts.sh | 21 + .../scripts/acs_parts_cmp.py | 32 + .../scripts/acs_reform_cmp.py | 4 +- .../scripts/acs_rent_run.py | 166 ---- .../scripts/acs_rerun.py | 210 ++++++ .../scripts/acs_rerun.sh | 22 + .../scripts/acs_rerun_check.py | 100 +++ .../scripts/acs_split.py | 203 +++++ .../scripts/acsrent_parts.sh | 10 + .../scripts/blank_holders.py | 87 +++ .../scripts/cutrun.py | 4 +- .../scripts/dash_swing.py | 40 +- .../scripts/fill_cmp.py | 52 ++ .../scripts/fill_trace.py | 84 +++ .../scripts/host_wait.py | 34 + .../scripts/overlap.py | 72 +- .../scripts/parent_blanks.py | 34 + .../scripts/parts_check.sh | 33 + .../scripts/parts_ids.py | 74 ++ .../scripts/parts_merge.py | 40 + .../scripts/persist.py | 97 +++ .../scripts/post_acs.sh | 15 + .../scripts/post_acsrent.sh | 27 + .../scripts/prep_evidence.py | 18 +- .../scripts/real_fixed_diff.py | 139 ++++ .../scripts/receipts.py | 69 +- .../scripts/remote_fixed.py | 300 ++++++++ .../scripts/rent_map.py | 23 + .../scripts/split_remote.sh | 30 + .../scripts/test_remote_fixed.py | 711 ++++++++++++++++++ .../scripts/two_part_check.sh | 38 + .../scripts/two_part_cmp.py | 34 + .../scripts/with_hold.sh | 23 + 64 files changed, 3558 insertions(+), 530 deletions(-) create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval_fill_minus1.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/acs_rerun_vs_deck.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves_fill_minus1.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval_fill_minus1.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_reform_fill_minus1.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_solves_fill_minus1.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/blank_holders_state.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/dash_swing_fill_minus1.csv create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_hh_split.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_rerun_check.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_split.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/blank_holders.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/dash_swing.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/parent_blanks.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/persist.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/rent_map.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/logs/rentfix.txt create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/noise_ci_fill_minus1.json create mode 100644 docs/evidence/us-state-child-spm-2026-11/outputs/state_persistence_fill_minus1.csv delete mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_hh.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_hh_split.py delete mode 100755 docs/evidence/us-state-child-spm-2026-11/scripts/acs_more.sh delete mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_one.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_parts.sh create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_parts_cmp.py delete mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_run.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_rerun.py create mode 100755 docs/evidence/us-state-child-spm-2026-11/scripts/acs_rerun.sh create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_rerun_check.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acs_split.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/acsrent_parts.sh create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/blank_holders.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/fill_cmp.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/fill_trace.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/host_wait.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/parent_blanks.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/parts_check.sh create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/parts_ids.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/parts_merge.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/persist.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/post_acs.sh create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/post_acsrent.sh create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/real_fixed_diff.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/remote_fixed.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/rent_map.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/split_remote.sh create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/test_remote_fixed.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/two_part_check.sh create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/two_part_cmp.py create mode 100644 docs/evidence/us-state-child-spm-2026-11/scripts/with_hold.sh diff --git a/docs/evidence/us-state-child-spm-2026-11/README.md b/docs/evidence/us-state-child-spm-2026-11/README.md index 924c97f6a9..68a88c0742 100644 --- a/docs/evidence/us-state-child-spm-2026-11/README.md +++ b/docs/evidence/us-state-child-spm-2026-11/README.md @@ -1,6 +1,6 @@ -# How calibration, sampling noise and rent imputation move Populace US state child SPM rates +# How calibration, sampling noise and rent imputation move state child SPM rates in Microcosm's US files -We build Populace US to correct CPS errors, so we expect its state child SPM rates to differ from Census P60-290 Table 18, which Census estimates from the CPS ASEC. On the default file they differ by 4.8 points on average, and 38 of 51 jurisdictions fall outside Census's margin. We cannot tell a correction from noise or a bug by the size of a gap. So we split the difference into sampling noise, weight concentration and systematic shifts, decompose the largest gaps, and list what we would change. +We build Microcosm's US files to correct CPS errors, so we expect their state child SPM rates to differ from Census P60-290 Table 18, which Census estimates from the CPS ASEC. On the default file they differ by 4.8 points on average, and 38 of 51 jurisdictions fall outside Census's margin. We cannot tell a correction from noise or a bug by the size of a gap. So we split the difference into sampling noise, weight concentration and systematic shifts, decompose the largest gaps, and list what we would change. Model figures come from real PolicyEngine US simulations at 2.90.2 (`469ad12cb957`), one state cut at a time as `slideshows/appam-2026/analysis/state_baseline.py` on PolicyEngine/policyengine-slides#95 does. We compute differences, standard errors and fits from those runs' output, and the two figures that change an input without re-simulating say so. No poverty rate entered a calibration target: the dense file's 6,102 target names include none. That makes these comparisons holdouts of the target, not of the sample, because the ASEC pool and Table 18 share households. @@ -9,8 +9,8 @@ Model figures come from real PolicyEngine US simulations at 2.90.2 (`469ad12cb95 1. **Noise accounts for most of the default file's state scatter, and the data pin that share down poorly.** A state rate carries a replicate standard error of about 3.6 points, or about ±6 at 90%, and that error runs low because it ignores CPS design. Child-weighted effective samples run from 19 in DC to 277 in California. Three fits put noise at 60%, 71% and 80% of the cross-state variance, and the first carries a 95% interval of about 10% to 89%. 2. **On the dense pool, calibration creates most of the systematic shift, and most of the added state variation lands on ASEC rows.** At initial weights, the mean gap reads 0.00, the mean absolute gap 1.78, and 16 jurisdictions fall outside Census's margin. At published weights those read +3.62, 4.33 and 38. ASEC rows go from a mean absolute gap of 2.44 to 7.30, and PUF rows from 2.95 to 3.16. State-specific variation rises about 1.7 times, from 1.88 to 3.20 points, once we allow for households the pool shares with Table 18, and a test with no shared households keeps the direction. This result covers the dense pool only. On the default file, support selection puts the shift in place before calibration starts (+3.27 at initial weights) and state-specific variation stays flat, and the ACS-local file stores no initial weights. The dense zero nets +2.20 on ASEC rows against -2.20 on PUF rows, and initial weights miss the administrative targets, so this result shows where the shift enters and does not recommend skipping calibration. 3. **Some state variation predates calibration, and we cannot yet pin it on particular states.** At dense initial weights, state gaps still exceed their sampling noise (Q = 170.5 on 50 degrees of freedom after allowing for shared households). Louisiana has the largest joint gap, about 2.8 standard errors the same way at dense initial weights and on ACS rows, which draw on another survey. A gap that large on both turns up by chance about one time in five (p = .19), so Louisiana gives a lead and not a finding. Florida, Massachusetts and Maryland sit within 3 points at dense initial weights and mostly move away after calibration. -4. **The Populace US files we checked carry rent on the wrong households.** Of records that should carry rent, 89% do not hold their own in each file, including the local-area file. PolicyEngine/microcosm#1444 fixed the code, and no published file carries the fix yet. With published weights held fixed, the fix nearly doubles modelled housing subsidies on the dense file, from $7.3bn to $13.9bn, and lowers the 2025 child rate 0.7 points. It barely moves the state gaps: the mean absolute gap goes from 4.33 to 4.13 on dense, 4.80 to 4.71 on default and 3.18 to 3.21 on ACS-local, where contract rent stands in on ACS rows. It lifts SNAP by less than 1%. Across 15 states, it moves a state's 2021 CTC effect by a median of 0.29, and by more than a point in Delaware and Florida, where a few donor households drive the swing. -5. **`policyengine.py` routes state regions to the ACS-local file, not the default file.** There the mean gap falls to +0.88 and the mean absolute gap to 3.18, 29 jurisdictions fall outside Census's margin, and 23,407 donor households hold 68% of child weight. ACS rows alone reach a mean absolute gap of 2.46 and a correlation of .69 with a median standard error of 1.06, and still leave 22 outside. Raising the ACS share of the mass moves the mean absolute gap furthest of any change we ran on this path, from 2.79 to 2.16, or 2.88 to 2.23 with corrected rent. It also lowers the median standard error on a state's reform effect from 1.30 to 0.56. +4. **The files we checked carry rent on the wrong households.** Of records that should carry rent, 89% do not hold their own in each file, including the local-area file. PolicyEngine/microcosm#1444 fixed the code, and no published file carries the fix yet. With published weights held fixed, the fix nearly doubles modelled housing subsidies on the dense file, from $7.3bn to $13.9bn, and lowers the 2025 child rate 0.7 points. It barely moves the state gaps: the mean absolute gap goes from 4.33 to 4.13 on dense, 4.80 to 4.71 on default and 3.18 to 3.21 on ACS-local, where contract rent stands in on ACS rows. It lifts SNAP by less than 1%. Across 15 states, it moves a state's 2021 CTC effect by a median of 0.29, and by more than a point in Delaware and Florida, where a few donor households drive the swing. +5. **`policyengine.py` routes state regions to the ACS-local file, not the default file.** There the mean gap falls to +0.89 and the mean absolute gap to 3.19, 29 jurisdictions fall outside Census's margin, and 23,407 donor households hold 68% of child weight. ACS rows alone reach a mean absolute gap of 2.46 and a correlation of .69 with a median standard error of 1.06, and still leave 22 outside. Raising the ACS share of the mass moves the mean absolute gap furthest of any change we ran on this path, from 2.79 to 2.16, or 2.88 to 2.23 with corrected rent. It also lowers the median standard error on a state's reform effect from 1.30 to 0.56. ## What the comparison measures @@ -19,15 +19,15 @@ Table 18 averages income years 2023 to 2025 and carries a margin of 1.0 to 3.7 p | Measure | Default, initial | Default, published | Dense, initial | Dense, published | ACS-local (Build O 10/17) | | --- | --- | --- | --- | --- | --- | | Household records | 57,240 | 57,240 | 352,932 | 352,932 | 1,586,908 | -| Mean gap | +3.27 | +3.24 | 0.00 | +3.62 | +0.88 | +| Mean gap | +3.27 | +3.24 | 0.00 | +3.62 | +0.89 | | Standard deviation of gaps | 4.01 | 5.11 | 2.40 | 4.02 | 4.12 | -| Mean absolute gap | 4.21 | 4.80 | 1.78 | 4.33 | 3.18 | +| Mean absolute gap | 4.21 | 4.80 | 1.78 | 4.33 | 3.19 | | Correlation with Census | .65 | .52 | .78 | .65 | .54 | | Outside Census's margin, of 51 | 36 | 38 | 16 | 38 | 29 | | Median state standard error | 2.20 | 4.04 | 1.07 | 1.86 | 2.98 | | Median child-weighted Kish sample | 211 | 51 | 635 | 305 | 88 | -| Q on 50 degrees of freedom | 109.5 | 71.5 | 94.4 | 147.8 | 73.3 | -| State-specific standard deviation τ | 2.74 | 2.73 | 1.50 | 3.07 | 2.02 | +| Q on 50 degrees of freedom | 109.5 | 71.5 | 94.4 | 147.8 | 73.9 | +| State-specific standard deviation τ | 2.74 | 2.73 | 1.50 | 3.07 | 2.04 | | Q, allowing for shared households | 139.5 | 76.0 | 170.5 | 188.4 | not run | | τ, allowing for shared households | 2.95 | 2.90 | 1.88 | 3.20 | not run | @@ -119,7 +119,7 @@ Ten states read this way, with standard errors in brackets: | State | Census | Default gap | Dense, initial | Dense, published | ACS-local | ACS rows | ACS-local donors | Reading | | --- | --- | --- | --- | --- | --- | --- | --- | --- | | DC | 20.3 | +14.1 (10.6) | -4.9 (1.7) | +5.8 (3.4) | +0.9 (5.3) | +1.8 (5.5) | +0.3 | Too noisy to read on any file | -| DE | 8.7 | +13.7 (6.9) | +5.3 (1.7) | +13.0 (3.2) | +13.5 (6.9) | +6.3 (2.9) | +16.7 | High everywhere, and donors widen it | +| DE | 8.7 | +13.7 (6.9) | +5.3 (1.7) | +13.0 (3.2) | +13.5 (6.9) | +6.3 (2.9) | +16.8 | High everywhere, and donors widen it | | TN | 10.0 | +13.2 (5.1) | -0.1 (0.9) | +5.3 (1.8) | +6.6 (3.1) | +8.3 (1.4) | +5.7 | High on ACS rows, near Census on the initial pool | | MD | 10.7 | +12.5 (6.0) | +2.7 (1.5) | +8.5 (2.8) | +6.9 (4.2) | +0.7 (1.2) | +9.8 | Calibration and donors | | FL | 18.4 | +9.8 (4.0) | +0.9 (0.9) | +11.6 (1.7) | +4.3 (3.5) | -5.1 (0.6) | +8.7 | Calibration and donors; ACS rows read low | @@ -215,9 +215,9 @@ The PUF half also holds less housing assistance. `impute_us_housing_assistance_t The dashboard reads ACS-local slices, not the default file: master serves Build P's August 19 slices under policyengine-us 1.825.2, and PolicyEngine/child-poverty-impact-dashboard#127, still open, moves it to Build O 10/17 through `policyengine.py` 6.11.1. -**Baselines.** At 2.90.2, the 10/17 file gives a mean gap of +0.88, a mean absolute gap of 3.18, and 29 of 51 jurisdictions outside Census's margin. Its median state standard error of 2.98 gives about ±4.9 points at 90%. A common shift plus model and Census noise gives a mean absolute gap of 2.79 (central 95% 2.22 to 3.43), so noise can account for most of the 3.18. The dashboard's stored audits put Build P closer to Census than Build O at the same model: at 1.825.2 the mean absolute gap reads 2.78 against 3.13, with 23 jurisdictions outside the margin against 31. So PR #127's move widens the baseline gaps. +**Baselines.** At 2.90.2, the 10/17 file gives a mean gap of +0.89, a mean absolute gap of 3.19, and 29 of 51 jurisdictions outside Census's margin. Its median state standard error of 2.98 gives about ±4.9 points at 90%. A common shift plus model and Census noise gives a mean absolute gap of 2.79 (central 95% 2.22 to 3.43), so noise can account for most of the 3.19. The dashboard's stored audits put Build P closer to Census than Build O at the same model: at 1.825.2 the mean absolute gap reads 2.78 against 3.13, with 23 jurisdictions outside the margin against 31. So PR #127's move widens the baseline gaps. -**Reform effects.** The 2021 CTC reform lowers the median state's 2025 child rate 2.97 points, with a median standard error of 1.29, or about ±2.1 at 90%. That error runs smaller in points than a baseline's, and larger for its size: the median ratio of standard error to effect reads .45, against .24 for baselines. The largest effects carry the largest errors: West Virginia at -11.85 (4.61), Missouri at -8.96 (3.70) and DC at -8.65 (4.34). +**Reform effects.** The 2021 CTC reform lowers the median state's 2025 child rate 2.90 points, with a median standard error of 1.29, or about ±2.1 at 90%. That error runs smaller in points than a baseline's, and larger for its size: the median ratio of standard error to effect reads .45, against .24 for baselines. The largest effects carry the largest errors: West Virginia at -11.85 (4.61), Missouri at -8.96 (3.70) and DC at -8.65 (4.34). The stored audits give a second reading. At 1.825.2, Build P and Build O differ on a state's 2025 effect by 0.55 on average (standard deviation 0.83, or 0.59 per build), about half the clustered error. Those builds share source records, so that comparison understates sampling noise. Model version moves effects further: the same 10/17 file at 1.825.2 and 2.30.1 differs by 1.11 on average (standard deviation 1.72), and Arizona goes from -11.92 to -6.37. @@ -225,7 +225,7 @@ So state baselines and state reform effects on the dashboard both need a stated ## What we would change -We want Populace US to differ from Census where the CPS errs, so a smaller gap alone does not make a better file, and we judge each change by what it corrects. Where we ran them, these changes move the gaps as follows: +We want Microcosm's files to differ from Census where the CPS errs, so a smaller gap alone does not make a better file, and we judge each change by what it corrects. Where we ran them, these changes move the gaps as follows: | Change | Measured on | Mean absolute gap | Mean gap | | --- | --- | --- | --- | @@ -233,13 +233,13 @@ We want Populace US to differ from Census where the CPS errs, so a smaller gap a | Rent fix, weights fixed | Dense | 4.33 to 4.13 | +3.62 to +3.06 | | Rent fix, weights fixed | Default | 4.80 to 4.71 | +3.24 to +3.03 | | Rent fix, weights fixed | ACS-local | 3.18 to 3.21 | +0.88 to +0.49 | -| ACS share 0.5 to 0.9, λ = .03 | ACS-local solves | 2.79 to 2.16 | +0.54 to -0.45 | +| ACS share 0.5 to 0.9, λ = .03 | ACS-local solves | 2.79 to 2.16 | +0.55 to -0.45 | | The same solves, corrected rent | ACS-local solves | 2.88 to 2.23 | +0.16 to -0.78 | | Single-factor income aging | Default | 4.80 to 4.05 | +3.24 to +2.45 | We cannot rank the changes from this table, because its rows use different files, and benefit receipt, a dense anchor and the ASEC-PUF gap have no row. So we order them by judgement: prerequisites first, then the change we measured on the state path, then changes measured elsewhere or not at all. Aging reaches as far on the default file (0.75) as the ACS share does on ACS-local (0.63), so it could rank higher. -Aging and better benefit receipt should lower rates, and we have not tested either on the ACS-local path. That path already reads +0.88, and -0.45 at share 0.9, or -0.78 with corrected rent, so we would measure steps 3 and 4 there before adopting a size from the default file. +Aging and better benefit receipt should lower rates, and we have not tested either on the ACS-local path. That path already reads +0.89, and -0.45 at share 0.9, or -0.78 with corrected rent, so we would measure steps 3 and 4 there before adopting a size from the default file. 1. **Rebuild with the rent fix.** PolicyEngine/microcosm#1444 fixed the assignment, and PolicyEngine/microcosm#1529 made `us_housing_inputs_signal_gate` fail the build on positive rent outside renter households. The rebuild comes first because it corrects a bug and every later step should run on the rebuilt base, not because it closes the largest gap. With it, set ACS owners' rent to zero after the transfer, confirm ACS renters pick up the corrected link through the donor, and re-run `scripts/`. Calibration then fits to corrected housing, which the fixed-weight runs here cannot show. 2. **Limit what calibration does to states.** Two levers apply: @@ -266,7 +266,7 @@ Aging and better benefit receipt should lower rates, and we have not tested eith - Corrected-rent runs keep the published weights. Calibration fit those weights to outcomes that used misplaced rent, so a rebuild can move results further. - The ACS-local corrected-rent run gives donors their base record's rent and gives ACS renter heads twelve times `RNTP`. Contract rent stands in for pre-subsidy rent there, and a rebuild would transfer rent from corrected donors instead. -- The #1078 solves come from the 2026-09-23 Build O checkpoint. We applied them to outcomes from the 10/17 file, which shares its household ids, and that mismatch alone moves the mean absolute gap: 2.79 for the release-like solve against 3.18 for the 10/17 weights. The cost figures come from share 0.9 with no penalty, not from the λ = .03 rows. +- The #1078 solves come from the 2026-09-23 Build O checkpoint. We applied them to outcomes from the 10/17 file, which shares its household ids, and that mismatch alone moves the mean absolute gap: 2.79 for the release-like solve against 3.19 for the 10/17 weights. The cost figures come from share 0.9 with no penalty, not from the λ = .03 rows. - The aged run scales 42 income columns on 2022 and 2023 ASEC records by a single child-resource factor. PUF records stay as they are, the weights stay fit to unaged income, and it tests 0.88 of the 2.3 to 2.5 points the Shapley assigns. - policyengine-us 2.90.2 has no `spm_unit_spm_universe_status`, so it ignores that column and these runs measure every SPM unit, group quarters included. That choice matters at state level: PR #127 puts the August 19 release's 2024 median relative gap against ACS 2023 at -15.9% with all SPM units and -18.2% with group quarters excluded. - The ablations ran on Build P, not the dense file. @@ -284,6 +284,6 @@ Scripts sit in `scripts/` and write beside themselves under `run/` and `asec/`. 5. `ablate_eval.py`, `ablate_noise.py`, `fam.py`, `chi_solve.py`, `chi_eval.py`, `dmiss.py`: calibration. 6. `national_cf.py`, `cf_eval.py`, `ctc_ssn.py`, `part.py`: aged incomes, the CTC reform and partnership income. 7. `rent2.py` to `rent5.py`, `rentfix.py`, `dense_rent.py`, `sparse_rent.py`, `runcuts.py`, `rent_eval.py`, `house.py`, `house_sim.py`, `puf_house.py`: rent and housing. -8. `acs_hh.py`, `acs_w.py`, `acs_more.sh`, `acs_one.py`, `acs_eval.py`, `acsrent.py`, `acs_rent_run.py`, `acs_reform_cmp.py`, `fl_reform.py`, `acs_stored.py`: the ACS-local path. +8. `split_remote.sh` runs `acs_split.py`, which reads the ACS-local file through HTTP range requests with `remote_fixed.py`, and then `acs_hh_split.py`; `test_remote_fixed.py` and `real_fixed_diff.py` test the reader against pandas. `acs_rerun.sh` runs `acs_rerun.py` once per state, in two steps for large states, and `acs_parts.sh` and `acsrent_parts.sh` run the largest in household parts through `parts_ids.py` and `parts_merge.py`. `two_part_check.sh`, `two_part_cmp.py`, `parts_check.sh` and `acs_parts_cmp.py` check that both routes write what one whole-state run writes, and `host_wait.py` and `with_hold.sh` space the runs on a shared host. `acsrent.py` and `rent_map.py` build corrected rent. `post_acs.sh` and `post_acsrent.sh` run most of the scripts that evaluate the runs: `acs_rerun_check.py`, `acs_eval.py`, `acs_reform_cmp.py`, `fl_reform.py`, `persist.py`, `fill_cmp.py` and `fill_trace.py`. `acs_w.py`, `acs_stored.py`, `blank_holders.py` and `parent_blanks.py` run on their own. 9. `dash_swing.py`: the dashboard's stored audits. 10. `prep_evidence.py`, `receipts.py`: package this folder and write `receipts.json`. diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval.csv index 45270d4260..6ab543fe47 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval.csv +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval.csv @@ -3,12 +3,12 @@ AK,10.5,2.1,12.280018990905361,3.7429945829727433,81.68256219816811,0.4190656109 AL,15.5,2.4,15.097029105403672,3.714754421094721,114.89369341824126,0.3080806998135229,15.013489562072616,1.3201238751499236,15.134225525513061,5.34267960480369,-3.7065665355345523,1.8243214373931491,14.110982894897461,-0.4029708945963275 AR,13.3,2.7,6.865179131445666,1.5082223057994428,115.11649934358303,0.3446122143394325,10.614289507353144,1.4069716796086178,4.893843600463475,2.1126039715893956,-1.9729223774049145,0.8486357725649586,6.774383068084717,-6.434820868554334 AZ,13.3,2.3,17.2274257709247,4.036185043556269,74.97248693960735,0.32823023017732,15.422829288753853,1.1361190125873954,18.10916106972576,5.964356353114199,-6.409766223213803,3.1723381851552177,17.127504348754883,3.9274257709246996 -CA,17.9,1.0,19.81299229330585,1.9590157540054765,385.6580886961881,0.2837607789085938,17.18181747772617,0.44765749055376786,20.855415261955702,2.732515975286605,-4.3311474346083285,1.008919083209612,20.379192352294922,1.9129922933058516 +CA,17.9,1.0,20.374148310073995,2.0065644631305153,385.6580886961881,0.2837607789085938,17.18181747772617,0.44765749055376786,21.63889095030611,2.7981409628142764,-4.892303451376475,1.1413048285214231,20.379192352294922,2.4741483100739963 CO,7.7,1.8,9.444477925729958,2.7918367533710695,65.42288079603081,0.3167165607859737,8.126498611394895,0.714650612194822,10.055389666988338,4.092871284920891,-0.7445325358294997,0.2448312330320677,9.367508888244629,1.7444779257299574 CT,12.8,3.2,12.639491386601781,2.976592910506625,100.20771420344856,0.35243678570098613,14.997664995927149,1.6303966945262747,11.356053555910302,4.498691455689171,-2.0892910893802488,0.6399943235425594,12.430046081542969,-0.16050861339821942 DC,20.3,3.7,21.17762088880096,5.263356667774975,47.067422820631876,0.4034754527762713,22.09693661968139,5.492706307713332,20.5558169203178,7.985315315053287,-8.648974183112678,4.339825412853922,20.46465492248535,0.8776208888009585 -DE,8.7,2.6,22.214556265883786,6.8988397316513765,50.95816913382481,0.30803265271757674,14.964556458685824,2.865571367630918,25.4419291781805,9.750038330015922,-2.9691945909874917,1.6834766244883417,22.213157653808594,13.514556265883787 -FL,18.4,1.8,22.716581875939795,3.450752003739791,135.20425539702788,0.31737704011827417,13.309764442599114,0.5823985920811567,27.090164438184587,5.105259969012908,-3.529584484380603,1.1124732966522155,22.613277435302734,4.3165818759397965 +DE,8.7,2.6,22.220429001435104,6.898631568028852,50.95816913382481,0.30803265271757674,14.964556458685824,2.865571367630918,25.450416190717128,9.749700895952708,-2.975067326538812,1.6835912146641878,22.213157653808594,13.520429001435105 +FL,18.4,1.8,22.716581880178733,3.4507520037558477,135.20425539702788,0.31737704011827417,13.309764442599114,0.5823985920811567,27.09016444439437,5.105259969130432,-3.5295844886195393,1.1124732966960185,22.613277435302734,4.316581880178735 GA,15.1,2.2,17.43337014267132,2.957265204862554,121.17506625331394,0.3146201235481187,12.365941406152075,0.7861697616877288,19.75954736195083,4.3244730263696685,-3.4609575448229744,1.308112138441585,17.39934539794922,2.3333701426713187 HI,13.0,2.6,5.857583818085909,1.9889760415112085,118.52750117470644,0.37760164062764257,5.072886842676986,0.8403045589641391,6.333650087940408,3.1596897479879456,-1.5974204310103088,0.7041621558092247,5.165446758270264,-7.142416181914091 IA,8.2,1.9,5.3913265527436955,1.7684275375401726,74.5874438402306,0.3464490034124007,5.438172692878637,0.8378005928894581,5.366493297728849,2.6722934528230895,-0.7506708887596472,0.20700191879052138,5.389122486114502,-2.8086734472563037 @@ -18,14 +18,14 @@ IN,10.6,2.2,9.223448046626508,2.154468976525361,120.14005678566079,0.35487947569 KS,9.7,2.5,11.586384567718781,4.696788420846965,87.66666433303108,0.3334748697513686,8.619343508755703,1.157438878904149,13.070850172662428,6.970213903172144,-5.5529596017194836,4.512273328741079,10.451759338378906,1.8863845677187818 KY,13.3,2.9,9.689846323973743,2.9483317956973827,79.96088420874483,0.3957257386758641,7.453986059465105,0.6847411421861506,11.154061352444216,4.895395778032309,-2.5243584152065885,1.1998687175740188,9.635833740234375,-3.6101536760262576 LA,20.7,3.0,11.730880540483419,2.2898751366337846,125.90331436963336,0.3111933330719865,14.302598248238658,1.3818096828258386,10.569014020279953,3.250604115565913,-1.6161803656670206,0.3522690221840859,11.565276145935059,-8.96911945951658 -MA,12.8,2.0,21.445487004357428,4.583912196904784,102.5908356155141,0.32989952283900936,15.29427219951415,1.1885725905269742,24.473813200445946,6.714566475961021,-3.438875768601351,1.6663025426707383,20.928058624267578,8.645487004357427 +MA,12.8,2.0,21.445487004357428,4.583912196904784,102.5908356155141,0.32989952283900936,15.29427219951415,1.1885725905269742,24.473813200445946,6.714566475961021,-3.438875692787333,1.6663025424800213,20.928058624267578,8.645487004357427 MD,10.7,2.5,17.594849581875806,4.219468499518609,61.88106431360571,0.32215088761216787,11.384224840576135,1.1754050446097233,20.546477365215054,6.250901315946282,-3.413791655908443,2.109547341096508,17.483667373657227,6.894849581875807 ME,6.5,2.3,7.341376743429005,3.023967157684075,38.50834478575946,0.3333179546821343,4.66433020068298,1.0427753176758428,8.679807385867475,4.590385414016676,-2.6266704709698754,1.5727339170258277,7.270956039428711,0.8413767434290049 MI,10.3,1.9,9.518321082342105,2.7161230473664943,91.52893167205437,0.3203877234279062,6.846850836223199,0.5731837064265984,10.777724862798427,4.013116917840977,-3.506682134099301,1.645038820193314,9.475631713867188,-0.7816789176578958 MN,6.9,1.9,5.148035849588164,1.6628146141935474,52.54399261696906,0.34048793553809076,5.546916997173596,0.7187904123890178,4.942104486411001,2.4835678014049756,-0.9536367002109238,0.5435043713052599,5.14799690246582,-1.751964150411836 -MO,9.7,2.3,16.712115012858845,3.972621557470334,64.86277090035392,0.33222332397483334,10.966752143597944,0.998952501067569,19.57047113459243,5.8720546862765035,-8.959376509915272,3.695574848895399,16.677257537841797,7.012115012858846 +MO,9.7,2.3,16.712121944356173,3.9726214158520317,64.86277090035392,0.33222332397483334,10.966752143597944,0.998952501067569,19.57048151455564,5.872054536618208,-8.959380697884113,3.695574799852117,16.677257537841797,7.012121944356174 MS,19.1,2.6,13.834987455238846,2.905001549407161,120.09612336052896,0.34971731263512185,15.918161912032344,1.681247230773782,12.714671342054093,4.372497038093584,-3.394959085138506,1.561580138172457,12.927408218383789,-5.265012544761156 -MT,9.3,2.3,4.762273156353108,1.3444919982053272,51.16610302382995,0.32933782545962187,10.54391779607155,2.746637529267138,1.923117549388858,1.1550900948238008,-0.6722671920587023,0.23826363983213664,4.747105598449707,-4.537726843646893 +MT,9.3,2.3,4.762273156353108,1.3444919982053272,51.16610302382995,0.32933782545962187,10.54391779607155,2.746637529267138,1.923117549388858,1.1550900948238008,-0.6722669623049259,0.2382636276211245,4.747105598449707,-4.537726843646893 NC,14.4,2.2,11.995112092574214,2.5342962431195852,123.95133566758639,0.3136719210648219,10.355041646555073,0.7418068425966107,12.744672052706704,3.6836405937100336,-5.352585782229246,1.8840570016606637,11.701009750366211,-2.4048879074257865 ND,10.3,2.1,10.77332600550937,3.453878669263689,67.67907793489668,0.33186741866405767,5.077876834056866,1.4567092582961796,13.602306461578337,5.152722089063701,-1.2256245427537,0.5560134505331789,10.772493362426758,0.4733260055093691 NE,7.1,1.9,9.449340085155248,4.219964071949956,79.73182955023789,0.3063484897355067,6.616695179849248,1.4327432632288672,10.70036668259837,6.024229239646368,-2.773364941208342,2.0470255282972625,9.424169540405273,2.349340085155248 @@ -40,13 +40,13 @@ OR,11.0,2.4,14.960178635932131,3.5949311943496207,80.00122144021869,0.3868748897 PA,11.1,2.0,13.904691968664487,2.87649779986758,152.97423864359848,0.346456113240414,11.128527656204925,0.9551151036763976,15.376389764171986,4.369408281439186,-2.1674883896829673,0.879027961867837,13.813882827758789,2.8046919686644873 RI,8.4,2.3,13.60351363660979,4.009385868577048,47.716257082316176,0.2638155685183552,12.630687973641486,2.1865267072560863,13.952130836825097,5.411007448316621,-7.082426369729525,3.2725430726119247,10.114660263061523,5.20351363660979 SC,11.1,2.1,10.810091607299103,2.4552497356178207,115.26644659001987,0.3736839049269087,12.129888503293133,1.220142342915903,10.022650789978407,3.846932271101733,-4.377230751356924,1.8470338585513792,9.70772647857666,-0.2899083927008963 -SD,7.8,2.2,6.7334030791646615,2.327494107437512,55.2407957270471,0.26912123840231045,6.7068360049000635,1.5212604403340164,6.743185500412182,3.1399701067480654,-3.8757962438048383,1.8528175080764355,6.721802234649658,-1.0665969208353383 +SD,7.8,2.2,6.7334030791646615,2.327494107437512,55.2407957270471,0.26912123840231045,6.7068360049000635,1.5212604403340164,6.743185500412182,3.1399701067480654,-2.5428566716304988,1.2967713260749396,6.721802234649658,-1.0665969208353383 TN,10.0,1.7,16.56342989643172,3.0750103992829754,89.2695834668554,0.3282847810394231,18.32285828603685,1.3583296773440554,15.703551264338433,4.498916992179288,-5.4719950504883315,2.1036927030836683,15.603744506835938,6.563429896431721 TX,16.1,1.3,14.56129472980773,1.7099791037316212,294.32648200901883,0.3083157384243811,15.448597880836138,0.5091761389700658,14.165782584436048,2.4589102342382105,-3.2431418088928776,0.9309326462236662,14.510196685791016,-1.5387052701922705 UT,7.3,1.6,8.396840398155128,2.099223154592061,88.5556251779635,0.29356651846541537,5.3493391276149715,0.7200935582967108,9.66326443013613,3.000050993855462,-0.9210572651019494,0.40017105080632065,8.38582706451416,1.0968403981551278 VA,12.1,2.4,15.480344613972704,3.640112088292969,135.12178712944925,0.3120242155444285,10.43654201641124,0.7417936207780743,17.76790848529483,5.242359875269632,-4.143535467007477,2.455084414660597,15.400092124938965,3.3803446139727047 VT,8.3,2.5,10.308498569173608,4.103266497775551,68.58960036751176,0.3813777601649377,5.468605036993444,1.7524339067205175,13.292270628890982,6.521284444046136,-0.17161126906749033,0.08063431563089071,10.242634773254395,2.0084985691736073 -WA,9.3,1.9,14.191340763191679,3.429843009071,104.56017409766304,0.3410985566238413,11.36195810226469,1.0626012254042743,15.656048955108263,5.171935724813351,-2.8903319465027324,1.4107232418371332,14.172506332397461,4.891340763191678 +WA,9.3,1.9,14.191340763191679,3.429843009071,104.56017409766304,0.3410985566238413,11.36195810226469,1.0626012254042743,15.656048955108263,5.171935724813351,-2.890331940537185,1.4107232418130056,14.172506332397461,4.891340763191678 WI,7.3,1.7,5.888274576437183,1.672271817496593,76.2063037717102,0.33178902497349727,7.594207048513189,0.9840981041263285,5.041222234086362,2.4212066330916575,-3.2429978446197953,1.3338005589292077,5.814634799957275,-1.4117254235628165 WV,11.3,2.4,16.406165852468614,4.6685814591830095,78.48511051927737,0.3651987935901132,11.229932548243433,1.9972605412849338,19.384033788062002,7.229452995913754,-11.847910332700181,4.606019524846844,16.38048553466797,5.106165852468614 WY,6.5,1.4,7.401438055757387,2.4967406866678012,75.3355320006355,0.3319623870118944,5.339602776175029,1.469142581544115,8.426008750173787,3.689705821181645,-1.6214124288534664,0.994557781496175,7.408247947692871,0.9014380557573869 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval_fill_minus1.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval_fill_minus1.csv new file mode 100644 index 0000000000..45270d4260 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_eval_fill_minus1.csv @@ -0,0 +1,52 @@ +state,census,moe,acs_local,se,kish_src,acs_share,acs_only,acs_only_se,donor_only,donor_only_se,delta,delta_se,stored_2301,gap +AK,10.5,2.1,12.280018990905361,3.7429945829727433,81.68256219816811,0.41906561091719086,14.877056011665996,3.8674701569110397,10.406607937726202,5.820215767713671,-1.7128711765052902,1.2581818899101276,12.269848823547363,1.7800189909053614 +AL,15.5,2.4,15.097029105403672,3.714754421094721,114.89369341824126,0.3080806998135229,15.013489562072616,1.3201238751499236,15.134225525513061,5.34267960480369,-3.7065665355345523,1.8243214373931491,14.110982894897461,-0.4029708945963275 +AR,13.3,2.7,6.865179131445666,1.5082223057994428,115.11649934358303,0.3446122143394325,10.614289507353144,1.4069716796086178,4.893843600463475,2.1126039715893956,-1.9729223774049145,0.8486357725649586,6.774383068084717,-6.434820868554334 +AZ,13.3,2.3,17.2274257709247,4.036185043556269,74.97248693960735,0.32823023017732,15.422829288753853,1.1361190125873954,18.10916106972576,5.964356353114199,-6.409766223213803,3.1723381851552177,17.127504348754883,3.9274257709246996 +CA,17.9,1.0,19.81299229330585,1.9590157540054765,385.6580886961881,0.2837607789085938,17.18181747772617,0.44765749055376786,20.855415261955702,2.732515975286605,-4.3311474346083285,1.008919083209612,20.379192352294922,1.9129922933058516 +CO,7.7,1.8,9.444477925729958,2.7918367533710695,65.42288079603081,0.3167165607859737,8.126498611394895,0.714650612194822,10.055389666988338,4.092871284920891,-0.7445325358294997,0.2448312330320677,9.367508888244629,1.7444779257299574 +CT,12.8,3.2,12.639491386601781,2.976592910506625,100.20771420344856,0.35243678570098613,14.997664995927149,1.6303966945262747,11.356053555910302,4.498691455689171,-2.0892910893802488,0.6399943235425594,12.430046081542969,-0.16050861339821942 +DC,20.3,3.7,21.17762088880096,5.263356667774975,47.067422820631876,0.4034754527762713,22.09693661968139,5.492706307713332,20.5558169203178,7.985315315053287,-8.648974183112678,4.339825412853922,20.46465492248535,0.8776208888009585 +DE,8.7,2.6,22.214556265883786,6.8988397316513765,50.95816913382481,0.30803265271757674,14.964556458685824,2.865571367630918,25.4419291781805,9.750038330015922,-2.9691945909874917,1.6834766244883417,22.213157653808594,13.514556265883787 +FL,18.4,1.8,22.716581875939795,3.450752003739791,135.20425539702788,0.31737704011827417,13.309764442599114,0.5823985920811567,27.090164438184587,5.105259969012908,-3.529584484380603,1.1124732966522155,22.613277435302734,4.3165818759397965 +GA,15.1,2.2,17.43337014267132,2.957265204862554,121.17506625331394,0.3146201235481187,12.365941406152075,0.7861697616877288,19.75954736195083,4.3244730263696685,-3.4609575448229744,1.308112138441585,17.39934539794922,2.3333701426713187 +HI,13.0,2.6,5.857583818085909,1.9889760415112085,118.52750117470644,0.37760164062764257,5.072886842676986,0.8403045589641391,6.333650087940408,3.1596897479879456,-1.5974204310103088,0.7041621558092247,5.165446758270264,-7.142416181914091 +IA,8.2,1.9,5.3913265527436955,1.7684275375401726,74.5874438402306,0.3464490034124007,5.438172692878637,0.8378005928894581,5.366493297728849,2.6722934528230895,-0.7506708887596472,0.20700191879052138,5.389122486114502,-2.8086734472563037 +ID,6.5,1.3,6.8832216559761825,1.652010165863833,88.40879016819349,0.33214753479536296,9.519825758051493,1.536874895172609,5.571941697658865,2.305972755027926,-1.7885081332636041,0.9816030370166006,6.954473495483398,0.3832216559761825 +IL,12.4,1.6,13.732748462967361,3.3490960514359984,93.91544229009794,0.2965816587151526,9.11322317159108,0.7046820523010107,15.680474862723223,4.780003805114391,-4.427158137239671,2.0181302276137845,18.092145919799805,1.332748462967361 +IN,10.6,2.2,9.223448046626508,2.154468976525361,120.14005678566079,0.35487947569914285,9.880223739963972,0.8067320680282937,8.862157086373566,3.307091171465403,-2.170078429848301,1.19712258605729,9.129535675048828,-1.3765519533734913 +KS,9.7,2.5,11.586384567718781,4.696788420846965,87.66666433303108,0.3334748697513686,8.619343508755703,1.157438878904149,13.070850172662428,6.970213903172144,-5.5529596017194836,4.512273328741079,10.451759338378906,1.8863845677187818 +KY,13.3,2.9,9.689846323973743,2.9483317956973827,79.96088420874483,0.3957257386758641,7.453986059465105,0.6847411421861506,11.154061352444216,4.895395778032309,-2.5243584152065885,1.1998687175740188,9.635833740234375,-3.6101536760262576 +LA,20.7,3.0,11.730880540483419,2.2898751366337846,125.90331436963336,0.3111933330719865,14.302598248238658,1.3818096828258386,10.569014020279953,3.250604115565913,-1.6161803656670206,0.3522690221840859,11.565276145935059,-8.96911945951658 +MA,12.8,2.0,21.445487004357428,4.583912196904784,102.5908356155141,0.32989952283900936,15.29427219951415,1.1885725905269742,24.473813200445946,6.714566475961021,-3.438875768601351,1.6663025426707383,20.928058624267578,8.645487004357427 +MD,10.7,2.5,17.594849581875806,4.219468499518609,61.88106431360571,0.32215088761216787,11.384224840576135,1.1754050446097233,20.546477365215054,6.250901315946282,-3.413791655908443,2.109547341096508,17.483667373657227,6.894849581875807 +ME,6.5,2.3,7.341376743429005,3.023967157684075,38.50834478575946,0.3333179546821343,4.66433020068298,1.0427753176758428,8.679807385867475,4.590385414016676,-2.6266704709698754,1.5727339170258277,7.270956039428711,0.8413767434290049 +MI,10.3,1.9,9.518321082342105,2.7161230473664943,91.52893167205437,0.3203877234279062,6.846850836223199,0.5731837064265984,10.777724862798427,4.013116917840977,-3.506682134099301,1.645038820193314,9.475631713867188,-0.7816789176578958 +MN,6.9,1.9,5.148035849588164,1.6628146141935474,52.54399261696906,0.34048793553809076,5.546916997173596,0.7187904123890178,4.942104486411001,2.4835678014049756,-0.9536367002109238,0.5435043713052599,5.14799690246582,-1.751964150411836 +MO,9.7,2.3,16.712115012858845,3.972621557470334,64.86277090035392,0.33222332397483334,10.966752143597944,0.998952501067569,19.57047113459243,5.8720546862765035,-8.959376509915272,3.695574848895399,16.677257537841797,7.012115012858846 +MS,19.1,2.6,13.834987455238846,2.905001549407161,120.09612336052896,0.34971731263512185,15.918161912032344,1.681247230773782,12.714671342054093,4.372497038093584,-3.394959085138506,1.561580138172457,12.927408218383789,-5.265012544761156 +MT,9.3,2.3,4.762273156353108,1.3444919982053272,51.16610302382995,0.32933782545962187,10.54391779607155,2.746637529267138,1.923117549388858,1.1550900948238008,-0.6722671920587023,0.23826363983213664,4.747105598449707,-4.537726843646893 +NC,14.4,2.2,11.995112092574214,2.5342962431195852,123.95133566758639,0.3136719210648219,10.355041646555073,0.7418068425966107,12.744672052706704,3.6836405937100336,-5.352585782229246,1.8840570016606637,11.701009750366211,-2.4048879074257865 +ND,10.3,2.1,10.77332600550937,3.453878669263689,67.67907793489668,0.33186741866405767,5.077876834056866,1.4567092582961796,13.602306461578337,5.152722089063701,-1.2256245427537,0.5560134505331789,10.772493362426758,0.4733260055093691 +NE,7.1,1.9,9.449340085155248,4.219964071949956,79.73182955023789,0.3063484897355067,6.616695179849248,1.4327432632288672,10.70036668259837,6.024229239646368,-2.773364941208342,2.0470255282972625,9.424169540405273,2.349340085155248 +NH,7.5,2.4,7.341353766570573,3.0325569332572875,73.11100560293525,0.3519654122706294,5.426856408706541,1.0410016798293962,8.381169950167626,4.65576880909591,-1.7440078720187737,1.1478460185223052,7.5636773109436035,-0.15864623342942696 +NJ,13.3,1.9,9.557043381747203,1.9162624371592416,117.661096080773,0.33625390236036024,11.961959528060447,0.7749380283485001,8.33871239355312,2.8245204958290597,-1.8300351640183579,0.5244118016918777,9.367637634277344,-3.742956618252798 +NM,10.9,2.1,14.01167154192929,3.7994548780123316,90.34932912736528,0.3715312357460946,14.845410948645391,2.5727440555716186,13.518790670697477,5.861090460434442,-3.660158217562636,1.1255688052699755,14.007346153259277,3.11167154192929 +NV,15.0,2.5,13.468276340728854,3.0753002518416257,85.62569767303911,0.3410867850150841,15.56302854546373,1.4699101327703195,12.383926719766048,4.583093785704573,-1.7376207562912138,0.629917069409643,13.599339485168457,-1.5317236592711456 +NY,16.2,1.9,16.438761395241823,2.6761162776778433,174.20366464173924,0.3282953526362707,14.640476182044296,0.8125413850408143,17.31767250673155,3.9709324760353133,-3.1739864748408753,0.8278323796866007,16.431594848632812,0.2387613952418235 +OH,12.3,2.1,9.090849449499077,1.8533750618063252,136.868774475337,0.3594694685405358,10.263074274729792,0.707324640545021,8.43299004352262,2.853453360507819,-3.8587554469843512,1.4539869880448621,9.078166961669922,-3.209150550500924 +OK,9.9,2.0,13.83283197089369,4.169261159568695,72.68188683082842,0.30082612879830045,7.473084378961515,0.6936697180268595,16.56917314011818,5.9636832440681475,-2.8990779051992153,1.2894681243110515,13.372641563415527,3.932831970893689 +OR,11.0,2.4,14.960178635932131,3.5949311943496207,80.00122144021869,0.3868748897063032,9.96236498527892,0.9391047234304888,18.113741542437342,5.78101162715257,-2.1027433074865645,1.412721803429275,14.899346351623535,3.960178635932131 +PA,11.1,2.0,13.904691968664487,2.87649779986758,152.97423864359848,0.346456113240414,11.128527656204925,0.9551151036763976,15.376389764171986,4.369408281439186,-2.1674883896829673,0.879027961867837,13.813882827758789,2.8046919686644873 +RI,8.4,2.3,13.60351363660979,4.009385868577048,47.716257082316176,0.2638155685183552,12.630687973641486,2.1865267072560863,13.952130836825097,5.411007448316621,-7.082426369729525,3.2725430726119247,10.114660263061523,5.20351363660979 +SC,11.1,2.1,10.810091607299103,2.4552497356178207,115.26644659001987,0.3736839049269087,12.129888503293133,1.220142342915903,10.022650789978407,3.846932271101733,-4.377230751356924,1.8470338585513792,9.70772647857666,-0.2899083927008963 +SD,7.8,2.2,6.7334030791646615,2.327494107437512,55.2407957270471,0.26912123840231045,6.7068360049000635,1.5212604403340164,6.743185500412182,3.1399701067480654,-3.8757962438048383,1.8528175080764355,6.721802234649658,-1.0665969208353383 +TN,10.0,1.7,16.56342989643172,3.0750103992829754,89.2695834668554,0.3282847810394231,18.32285828603685,1.3583296773440554,15.703551264338433,4.498916992179288,-5.4719950504883315,2.1036927030836683,15.603744506835938,6.563429896431721 +TX,16.1,1.3,14.56129472980773,1.7099791037316212,294.32648200901883,0.3083157384243811,15.448597880836138,0.5091761389700658,14.165782584436048,2.4589102342382105,-3.2431418088928776,0.9309326462236662,14.510196685791016,-1.5387052701922705 +UT,7.3,1.6,8.396840398155128,2.099223154592061,88.5556251779635,0.29356651846541537,5.3493391276149715,0.7200935582967108,9.66326443013613,3.000050993855462,-0.9210572651019494,0.40017105080632065,8.38582706451416,1.0968403981551278 +VA,12.1,2.4,15.480344613972704,3.640112088292969,135.12178712944925,0.3120242155444285,10.43654201641124,0.7417936207780743,17.76790848529483,5.242359875269632,-4.143535467007477,2.455084414660597,15.400092124938965,3.3803446139727047 +VT,8.3,2.5,10.308498569173608,4.103266497775551,68.58960036751176,0.3813777601649377,5.468605036993444,1.7524339067205175,13.292270628890982,6.521284444046136,-0.17161126906749033,0.08063431563089071,10.242634773254395,2.0084985691736073 +WA,9.3,1.9,14.191340763191679,3.429843009071,104.56017409766304,0.3410985566238413,11.36195810226469,1.0626012254042743,15.656048955108263,5.171935724813351,-2.8903319465027324,1.4107232418371332,14.172506332397461,4.891340763191678 +WI,7.3,1.7,5.888274576437183,1.672271817496593,76.2063037717102,0.33178902497349727,7.594207048513189,0.9840981041263285,5.041222234086362,2.4212066330916575,-3.2429978446197953,1.3338005589292077,5.814634799957275,-1.4117254235628165 +WV,11.3,2.4,16.406165852468614,4.6685814591830095,78.48511051927737,0.3651987935901132,11.229932548243433,1.9972605412849338,19.384033788062002,7.229452995913754,-11.847910332700181,4.606019524846844,16.38048553466797,5.106165852468614 +WY,6.5,1.4,7.401438055757387,2.4967406866678012,75.3355320006355,0.3319623870118944,5.339602776175029,1.469142581544115,8.426008750173787,3.689705821181645,-1.6214124288534664,0.994557781496175,7.408247947692871,0.9014380557573869 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acs_rerun_vs_deck.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_rerun_vs_deck.csv new file mode 100644 index 0000000000..3dcd974504 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_rerun_vs_deck.csv @@ -0,0 +1,52 @@ +,rerun,deck_99ee5b354,diff +AK,12.280018990905361,12.280018902222128,8.868323320143645e-08 +AL,15.097029105403669,15.097029269703253,-1.6429958371588782e-07 +AR,6.865179131445669,6.865179158322447,-2.687677813639766e-08 +AZ,17.2274257709247,17.22742595902717,-1.88102468712259e-07 +CA,20.374148310073988,20.374148222691655,8.738233248095639e-08 +CO,9.444477925729956,9.444477858941154,6.678880204447069e-08 +CT,12.63949138660178,12.639491351259352,3.534242765113049e-08 +DC,21.177620888800956,21.17762070511618,1.8368477583408094e-07 +DE,22.22042900143511,22.22042866679022,3.3464489135326403e-07 +FL,22.716581880178726,22.716581843023185,3.715554086625161e-08 +GA,17.433370142671322,17.43337031195012,-1.6927879897821185e-07 +HI,5.857583818085912,5.857583743619603,7.446630867491422e-08 +IA,5.3913265527436955,5.3913265972729825,-4.452928692444402e-08 +ID,6.883221655976185,6.8832216762626315,-2.0286446300588068e-08 +IL,13.732748462967361,13.732748385262012,7.770534971029974e-08 +IN,9.223448046626508,9.22344812166144,-7.503493115734727e-08 +KS,11.586384567718785,11.586384534741017,3.297776807187347e-08 +KY,9.689846323973745,9.689846346880431,-2.290668632554116e-08 +LA,11.730880540483417,11.730880622678743,-8.219532610098668e-08 +MA,21.445487004357428,21.445486995867174,8.490253833315364e-09 +MD,17.594849581875803,17.594849698931508,-1.1705570557296596e-07 +ME,7.341376743429007,7.341376635830637,1.0759836932550115e-07 +MI,9.518321082342103,9.51832100478657,7.755553355082156e-08 +MN,5.148035849588165,5.148035850741653,-1.153487971805589e-09 +MO,16.712121944356173,16.71212178070164,1.6365453348043957e-07 +MS,13.834987455238842,13.834987349236789,1.0600205335720148e-07 +MT,4.762273156353108,4.762273171782485,-1.5429376887254875e-08 +NC,11.995112092574217,11.995112136195859,-4.362164141014091e-08 +ND,10.773326005509372,10.773326006109645,-6.002736085974902e-10 +NE,9.44934008515525,9.449340077906502,7.248747380117493e-09 +NH,7.341353766570573,7.341353758564617,8.005955898227057e-09 +NJ,9.557043381747203,9.557043380838682,9.085212582249369e-10 +NM,14.011671541929294,14.011671453444666,8.84846276250073e-08 +NV,13.468276340728856,13.468276185314497,1.5541435871568865e-07 +NY,16.438761395241823,16.438761323718364,7.152345915528713e-08 +OH,9.090849449499078,9.090849497593641,-4.809456299881276e-08 +OK,13.832831970893688,13.832832136918386,-1.660246979895419e-07 +OR,14.960178635932131,14.960178605148503,3.0783628091057835e-08 +PA,13.904691968664485,13.904691983293437,-1.4628952271777962e-08 +RI,13.603513636609787,13.603513442810936,1.9379885074499725e-07 +SC,10.810091607299103,10.81009163434252,-2.704341639514496e-08 +SD,6.733403079164661,6.733403277773982,-1.9860932098936246e-07 +TN,16.56342989643172,16.563429876852265,1.9579456278506768e-08 +TX,14.561294729807733,14.561294779369085,-4.956135235545389e-08 +UT,8.39684039815513,8.396840445914263,-4.775913353682881e-08 +VA,15.480344613972706,15.480344609122307,4.850399193401245e-09 +VT,10.308498569173604,10.308498340888855,2.2828474932623521e-07 +WA,14.19134076319168,14.191340913009428,-1.4981774754119215e-07 +WI,5.888274576437182,5.88827454088196,3.5555222765992767e-08 +WV,16.406165852468614,16.406165846886925,5.58168977704554e-09 +WY,7.4014380557573896,7.4014381737328545,-1.1797546495273536e-07 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves.csv index eb2a138c3c..88c35d0623 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves.csv +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves.csv @@ -1,12 +1,12 @@ run,mean_gap,mad,beyond,corr,med_se,med_delta,med_delta_se,acs_share,DE,DC,TN,MD,LA,MT,HI,MA -dup_release_repro,0.544647278204183,2.7886350939161892,27,0.5563910628408775,2.8184831455867525,-2.994076890617613,1.2969962750907356,0.3481740564228461,19.72096757153362,19.40304497242515,16.043549040971147,17.176587822918897,12.027706493180412,4.534327158576392,5.722639757413111,19.183838317977454 -proj_chi_s050_0.03,0.27806832715569085,2.734114031625438,21,0.5737793903816584,2.6074687904558633,-2.935075411873965,1.208306785739919,0.35381870008679583,19.25305735633003,20.27839942917138,15.505442086850039,17.29785999996839,12.009270456475054,4.850919824134285,5.84242605135861,19.48690654141444 -soft_chi_s050_0.1,0.03666643819765543,2.585351625532392,20,0.5849139132710077,2.4699320361689416,-2.9684169114554586,1.1638352769950655,0.36703387978463625,18.936399489435015,20.17727139468469,15.61138420080497,16.927392662743056,11.961887482184487,4.264553919675482,5.931090315761128,19.48056369601165 -soft_chi_s700_0,0.2722806136794624,2.5233981395409657,24,0.6278832481244133,2.0877454471177903,-2.7789980387905118,0.9726157164287281,0.5323355514970661,19.88375465080892,21.656603520349034,15.708753888451223,17.01329819148205,12.659494932239813,5.41516099491029,5.827740027731627,19.402471728689115 -soft_chi_s700_0.03,-0.026580847142335953,2.4029499593356385,23,0.6445210236966457,1.8594830396623332,-2.7935298326396705,0.8816671070254242,0.5383162332537033,19.3847160463197,21.3545841952864,14.861625854049299,16.39005279126511,12.679167173634717,5.263917143048904,6.0828375088813775,18.774519297731846 -soft_chi_s700_0.1,-0.2268683703569958,2.3270703876421392,20,0.6559213735996077,1.8729659228708382,-2.810431756156195,0.8322699529518508,0.5550259489828211,18.370862852135303,21.484361595602966,14.77507615043668,15.960596320168857,12.534100659393891,5.127223108726691,6.230713167299212,18.142961948312763 -soft_chi_s900_0,-0.1458447478736399,2.2741066175605353,24,0.7240547027895161,1.1751406139019414,-3.1618756258319074,0.5905712018478149,0.7881426593725687,16.551442408397687,25.254609984652674,14.983840708120976,14.789207931718328,12.887580827632778,6.656828980913233,6.2263335410973815,17.719514820330552 -soft_chi_s900_0.03,-0.4548573249034494,2.162521439016692,22,0.7459660446918597,1.087381605704914,-3.0133436473419537,0.5631251504333945,0.8010793832198903,16.207791050183783,24.471418485651192,14.345915241704857,14.628241020762575,13.472252578365584,6.425878798418147,6.440864594444196,16.636697208774066 -soft_chi_s900_0.1,-0.7011707000588694,2.1286033403021016,21,0.7453267387500889,1.0073573546132972,-2.8858168495464054,0.5421863929032062,0.8173361826685147,15.799735925878519,23.776175717795308,14.456171557236855,14.22147052432781,12.974062901653799,6.241481658245595,6.404087629779315,15.499720474386635 -soft_chi_s964_0,-0.42384078940653297,2.2335587346009715,23,0.7538343494808044,0.9191862374643311,-3.037816703365899,0.5240750345547482,0.9130730706856416,14.94317731051859,26.635829758432187,14.49617354576192,13.399849982968556,12.918120474714872,7.208015099913618,6.2708673010172244,16.406922667181373 -soft_chi_s964_0.03,-0.6451740708461082,2.139972983678509,22,0.7719873950319354,0.8719371038082558,-3.108520441224063,0.4717886030660438,0.9201088941650787,15.020227309790263,25.732826885357802,14.182538067759129,13.645269605994729,13.626317180920186,7.0742738192143,6.495613719807099,15.594008303464898 +dup_release_repro,0.5467185501665852,2.790706365878592,27,0.5567036993418202,2.8184831455867525,-2.7756494216725773,1.2969962750907356,0.3481740564228461,19.728229566758934,19.40304497242515,16.043549040971147,17.176587822918897,12.027706493180412,4.534327158576392,5.722639757413111,19.183838317977454 +proj_chi_s050_0.03,0.28109115786141503,2.7371368623311616,21,0.5743155991110539,2.6074687904558633,-2.7423515749411007,1.185588990067002,0.35381870008679583,19.25863706183765,20.27839942917138,15.505442086850039,17.29785999996839,12.009270456475054,4.850919824134285,5.84242605135861,19.48690654141444 +soft_chi_s050_0.1,0.039691080382381796,2.5883762677171185,21,0.5853130891995929,2.4699320361689416,-2.8643936217960073,1.1638352769950655,0.36703387978463625,18.94608758467959,20.17727139468469,15.61138420080497,16.927392662743056,11.961887482184487,4.264553919675482,5.931090315761128,19.48056369601165 +soft_chi_s700_0,0.2740814485041922,2.5251989743656953,24,0.6281246468849466,2.0877454471177903,-2.7789980387905118,0.9726157164287281,0.5323355514970661,19.890168277677482,21.656603520349034,15.708753888451223,17.01329819148205,12.659494932239813,5.41516099491029,5.827740027731627,19.402471728689115 +soft_chi_s700_0.03,-0.02486139515066335,2.4014848480545887,23,0.644771997267838,1.8594830396623332,-2.79999001149452,0.8816671070254242,0.5383162332537033,19.391176225174547,21.3545841952864,14.861625854049299,16.39005279126511,12.679167173634717,5.263917143048904,6.0828375088813775,18.774519297731846 +soft_chi_s700_0.1,-0.2247407836102727,2.325204795203555,20,0.6562167887393887,1.8729659228708382,-2.7720868941844845,0.8322699529518508,0.5550259489828211,18.37751722564939,21.484361595602966,14.77507615043668,15.960596320168857,12.534100659393891,5.127223108726691,6.230713167299212,18.142961948312763 +soft_chi_s900_0,-0.14548266377558539,2.273805918325192,24,0.7241018305320078,1.1751406139019414,-3.116503795492548,0.5905712018478149,0.7881426593725687,16.552998513067905,25.254609984652674,14.983840708120976,14.789207931718328,12.887580827632778,6.656828980913233,6.2263335410973815,17.719514820330552 +soft_chi_s900_0.03,-0.45418542271817663,2.16191101122093,22,0.7460768311626631,1.087381605704914,-2.981292825627254,0.5631251504333945,0.8010793832198903,16.20934989465916,24.471418485651192,14.345915241704857,14.628241020762575,13.472252578365584,6.425878798418147,6.440864594444196,16.636697208774066 +soft_chi_s900_0.1,-0.7002964017829656,2.127797527311455,21,0.745456137911339,1.0073573546132972,-2.8858168495464054,0.5421863929032062,0.8173361826685147,15.801473441238617,23.776175717795308,14.456171557236855,14.22147052432781,12.974062901653799,6.241481658245595,6.404087629779315,15.499720474386635 +soft_chi_s964_0,-0.4237154274980539,2.233458628416352,23,0.7538515130359602,0.9191862374643311,-3.0378166555809347,0.5240750345547482,0.9130730706856416,14.943817251932101,26.635829758432187,14.49617354576192,13.399849982968556,12.918120474714872,7.208015099913618,6.2708673010172244,16.406922667181373 +soft_chi_s964_0.03,-0.6449044440631073,2.1397282992936164,22,0.7720328899338983,0.8719371038082558,-3.1063670952784452,0.4717886030660438,0.9201088941650787,15.020859861735408,25.732826885357802,14.182538067759129,13.645269605994729,13.626317180920186,7.0742738192143,6.495613719807099,15.594008303464898 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves_fill_minus1.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves_fill_minus1.csv new file mode 100644 index 0000000000..eb2a138c3c --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acs_solves_fill_minus1.csv @@ -0,0 +1,12 @@ +run,mean_gap,mad,beyond,corr,med_se,med_delta,med_delta_se,acs_share,DE,DC,TN,MD,LA,MT,HI,MA +dup_release_repro,0.544647278204183,2.7886350939161892,27,0.5563910628408775,2.8184831455867525,-2.994076890617613,1.2969962750907356,0.3481740564228461,19.72096757153362,19.40304497242515,16.043549040971147,17.176587822918897,12.027706493180412,4.534327158576392,5.722639757413111,19.183838317977454 +proj_chi_s050_0.03,0.27806832715569085,2.734114031625438,21,0.5737793903816584,2.6074687904558633,-2.935075411873965,1.208306785739919,0.35381870008679583,19.25305735633003,20.27839942917138,15.505442086850039,17.29785999996839,12.009270456475054,4.850919824134285,5.84242605135861,19.48690654141444 +soft_chi_s050_0.1,0.03666643819765543,2.585351625532392,20,0.5849139132710077,2.4699320361689416,-2.9684169114554586,1.1638352769950655,0.36703387978463625,18.936399489435015,20.17727139468469,15.61138420080497,16.927392662743056,11.961887482184487,4.264553919675482,5.931090315761128,19.48056369601165 +soft_chi_s700_0,0.2722806136794624,2.5233981395409657,24,0.6278832481244133,2.0877454471177903,-2.7789980387905118,0.9726157164287281,0.5323355514970661,19.88375465080892,21.656603520349034,15.708753888451223,17.01329819148205,12.659494932239813,5.41516099491029,5.827740027731627,19.402471728689115 +soft_chi_s700_0.03,-0.026580847142335953,2.4029499593356385,23,0.6445210236966457,1.8594830396623332,-2.7935298326396705,0.8816671070254242,0.5383162332537033,19.3847160463197,21.3545841952864,14.861625854049299,16.39005279126511,12.679167173634717,5.263917143048904,6.0828375088813775,18.774519297731846 +soft_chi_s700_0.1,-0.2268683703569958,2.3270703876421392,20,0.6559213735996077,1.8729659228708382,-2.810431756156195,0.8322699529518508,0.5550259489828211,18.370862852135303,21.484361595602966,14.77507615043668,15.960596320168857,12.534100659393891,5.127223108726691,6.230713167299212,18.142961948312763 +soft_chi_s900_0,-0.1458447478736399,2.2741066175605353,24,0.7240547027895161,1.1751406139019414,-3.1618756258319074,0.5905712018478149,0.7881426593725687,16.551442408397687,25.254609984652674,14.983840708120976,14.789207931718328,12.887580827632778,6.656828980913233,6.2263335410973815,17.719514820330552 +soft_chi_s900_0.03,-0.4548573249034494,2.162521439016692,22,0.7459660446918597,1.087381605704914,-3.0133436473419537,0.5631251504333945,0.8010793832198903,16.207791050183783,24.471418485651192,14.345915241704857,14.628241020762575,13.472252578365584,6.425878798418147,6.440864594444196,16.636697208774066 +soft_chi_s900_0.1,-0.7011707000588694,2.1286033403021016,21,0.7453267387500889,1.0073573546132972,-2.8858168495464054,0.5421863929032062,0.8173361826685147,15.799735925878519,23.776175717795308,14.456171557236855,14.22147052432781,12.974062901653799,6.241481658245595,6.404087629779315,15.499720474386635 +soft_chi_s964_0,-0.42384078940653297,2.2335587346009715,23,0.7538343494808044,0.9191862374643311,-3.037816703365899,0.5240750345547482,0.9130730706856416,14.94317731051859,26.635829758432187,14.49617354576192,13.399849982968556,12.918120474714872,7.208015099913618,6.2708673010172244,16.406922667181373 +soft_chi_s964_0.03,-0.6451740708461082,2.139972983678509,22,0.7719873950319354,0.8719371038082558,-3.108520441224063,0.4717886030660438,0.9201088941650787,15.020227309790263,25.732826885357802,14.182538067759129,13.645269605994729,13.626317180920186,7.0742738192143,6.495613719807099,15.594008303464898 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval_fill_minus1.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval_fill_minus1.csv new file mode 100644 index 0000000000..74780e6169 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_eval_fill_minus1.csv @@ -0,0 +1,52 @@ +state,census,moe,acs_local,se,kish_src,acs_share,acs_only,acs_only_se,donor_only,donor_only_se,delta,delta_se,stored_2301,gap +AK,10.5,2.1,12.321393723762833,3.743008462683068,81.68256219816811,0.41906561091719086,14.975786930595175,3.8676548692424246,10.406607937726202,5.820215767713671,,,12.269848823547363,1.8213937237628333 +AL,15.5,2.4,15.059623085010573,3.71513486095829,114.89369341824126,0.3080806998135229,14.892073453526683,1.3194281070236962,15.13422543778082,5.3426796061957385,,,14.110982894897461,-0.440376914989427 +AR,13.3,2.7,6.68559611243325,1.412017057266769,115.11649934358303,0.3446122143394325,11.042644416698813,1.42850530885576,4.394598176602837,1.936397291167434,-2.139452870894872,0.8489418874274481,6.774383068084717,-6.614403887566751 +AZ,13.3,2.3,16.387800058721087,4.013061222603815,74.97248693960735,0.32823023017732,15.018313873111348,1.1326133634347828,17.056938186276298,5.934075982139015,,,17.127504348754883,3.0878000587210863 +CA,17.9,1.0,19.49647303904357,1.9618571163684015,385.6580886961881,0.2837607789085938,16.420939875952424,0.4373798484726286,20.714942595329678,2.73651623800518,,,20.379192352294922,1.5964730390435697 +CO,7.7,1.8,9.110107226754993,2.6867568457632443,65.42288079603081,0.3167165607859737,7.9850533379350015,0.7117317734873981,9.631593886487048,3.9361017947397423,,,9.367508888244629,1.4101072267549926 +CT,12.8,3.2,12.142036383928177,2.9672756914200895,100.20771420344856,0.35243678570098613,14.00938323881125,1.6105276066320198,11.125731398111077,4.491962098359044,,,12.430046081542969,-0.6579636160718234 +DC,20.3,3.7,20.063349097499845,5.20282053054896,47.067422820631876,0.4034754527762713,19.335252399157124,5.356380553227544,20.5558169203178,7.985315315053287,-7.870994797687709,4.297309466732037,20.46465492248535,-0.23665090250015552 +DE,8.7,2.6,21.36348047305636,6.900153737516051,50.95816913382481,0.30803265271757674,14.964556458685824,2.865571367630918,24.211992829059593,9.76218621056253,-1.7609609623206675,1.0538508926782648,22.213157653808594,12.66348047305636 +FL,18.4,1.8,21.68189087324703,3.3801514517694407,135.20425539702788,0.31737704011827417,12.769262957482017,0.5701023800605056,25.825706176604402,4.994668761011213,-6.273629324412617,1.7434241849543939,22.613277435302734,3.2818908732470327 +GA,15.1,2.2,17.239208888854364,2.956386357383339,121.17506625331394,0.3146201235481187,11.748828880220028,0.7688862484597994,19.759539724339476,4.324472924638935,,,17.39934539794922,2.1392088888543643 +HI,13.0,2.6,5.5836079655769995,1.9850974448778431,118.52750117470644,0.37760164062764257,4.347321396550311,0.7711046293327893,6.33364824078138,3.159689737354891,-1.3864993132186871,0.6926717710178918,5.165446758270264,-7.4163920344230005 +IA,8.2,1.9,5.330152234800179,1.7664517911964994,74.5874438402306,0.3464490034124007,5.261597365688324,0.8275805028634736,5.366493340860581,2.672293454377221,,,5.389122486114502,-2.86984776519982 +ID,6.5,1.3,6.012080047447186,1.42519466267205,88.40879016819349,0.33214753479536296,9.443553261930685,1.5355785927140133,4.305482515374321,1.9269207054839907,,,6.954473495483398,-0.4879199525528142 +IL,12.4,1.6,12.71448215138427,3.1317881946460764,93.91544229009794,0.2965816587151526,8.568452112115834,0.6881257126289709,14.462569162995395,4.474926628051286,,,18.092145919799805,0.3144821513842704 +IN,10.6,2.2,9.211095507958051,2.1542988135484107,120.14005678566079,0.35487947569914285,9.845417850190314,0.8064774659615725,8.862156090041381,3.3070911534768737,,,9.129535675048828,-1.3889044920419487 +KS,9.7,2.5,10.902563094311668,4.684481608328661,87.66666433303108,0.3334748697513686,8.436703092478703,1.1318599589725764,12.136278532212144,6.9611728444568906,,,10.451759338378906,1.2025630943116692 +KY,13.3,2.9,9.654856568587451,2.9479167492889964,79.96088420874483,0.3957257386758641,7.365566854024051,0.681608750432868,11.154061352444216,4.895395778032309,,,9.635833740234375,-3.6451434314125493 +LA,20.7,3.0,10.577721322368049,2.169661638275234,125.90331436963336,0.3111933330719865,14.035915825132383,1.379637552034913,9.01535683695153,3.059664339475643,-2.067415066350923,0.6135239140696926,11.565276145935059,-10.12227867763195 +MA,12.8,2.0,20.79441634009795,4.5906754055484145,102.5908356155141,0.32989952283900936,14.581028749350434,1.1815662741599873,23.85335103909379,6.719603254416517,-2.589970589476747,1.4597746702238246,20.928058624267578,7.994416340097949 +MD,10.7,2.5,17.433348552027496,4.218598298707564,61.88106431360571,0.32215088761216787,10.882903843821252,1.1661503288439126,20.546477327204965,6.250901315095014,-3.666427532075165,2.13973279189599,17.483667373657227,6.733348552027497 +ME,6.5,2.3,7.234934576863685,3.0188402223230515,38.50834478575946,0.3333179546821343,4.3449891810992485,0.9941392526276736,8.679807279262587,4.590385407059264,-2.565320115416996,1.5680089534063912,7.270956039428711,0.7349345768636848 +MI,10.3,1.9,8.256835401770765,2.6392600139180917,91.52893167205437,0.3203877234279062,6.374426473590426,0.5284478115219912,9.144254201946136,3.8895688869749265,,,9.475631713867188,-2.043164598229236 +MN,6.9,1.9,5.0987592257530725,1.6601981302059463,52.54399261696906,0.34048793553809076,5.402193447224024,0.7088069591670008,4.942104484759751,2.483567801299805,,,5.14799690246582,-1.8012407742469279 +MO,9.7,2.3,16.636921591015795,3.9740672672287634,64.86277090035392,0.33222332397483334,10.740424063041209,0.9951810542894202,19.57046820754853,5.872054728479625,-8.24943192084599,3.6047902663083464,16.677257537841797,6.936921591015796 +MS,19.1,2.6,12.989889728210732,2.8237984652354777,120.09612336052896,0.34971731263512185,15.700236078466064,1.6775597911491218,11.532285119724733,4.2438683774562,-3.5702908131062463,1.5687673395260167,12.927408218383789,-6.110110271789269 +MT,9.3,2.3,4.617522603187462,1.3314483779387705,51.16610302382995,0.32933782545962187,10.14388019073906,2.7341405641298953,1.9037291917074668,1.1533784757098104,-0.6587857198038035,0.21640068702766152,4.747105598449707,-4.682477396812539 +NC,14.4,2.2,11.383821595734682,2.483166642776731,123.95133566758639,0.3136719210648219,10.238524145357312,0.739669148907255,11.907255886821646,3.607282095198393,,,11.701009750366211,-3.016178404265318 +ND,10.3,2.1,10.66569031081114,3.4523999116526567,67.67907793489668,0.33186741866405767,4.753541889405907,1.4266527330488992,13.602307219160961,5.152722104643105,,,10.772493362426758,0.36569031081113934 +NE,7.1,1.9,9.500128835226924,4.219029473139932,79.73182955023789,0.3063484897355067,6.782482728016978,1.4360419013860366,10.700366661079695,6.024229240183856,,,9.424169540405273,2.4001288352269246 +NH,7.5,2.4,7.202220806202033,3.0310963062993195,73.11100560293525,0.3519654122706294,5.031553444271825,1.0025476199774568,8.381169966340414,4.655768809209172,,,7.5636773109436035,-0.29777919379796725 +NJ,13.3,1.9,10.344787674648451,2.1644162242310285,117.661096080773,0.33625390236036024,11.51591545214037,0.7799682979651915,9.751494114438215,3.2241722472278846,,,9.367637634277344,-2.9552123253515497 +NM,10.9,2.1,15.651364184838581,3.9665352308487023,90.34932912736528,0.3715312357460946,16.15041492874158,2.7362366212931093,15.356340867645713,6.108821740813408,,,14.007346153259277,4.751364184838581 +NV,15.0,2.5,13.340620434521295,3.0735370383923444,85.62569767303911,0.3410867850150841,15.18876643034991,1.4799985740382124,12.383926652062984,4.583093784184722,,,13.599339485168457,-1.6593795654787051 +NY,16.2,1.9,15.066423654405913,2.6438820237960234,174.20366464173924,0.3282953526362707,13.13919751949797,0.6933476291376823,16.008354584990695,3.925321020419153,,,16.431594848632812,-1.1335763455940864 +OH,12.3,2.1,7.433844095393124,1.4405859525265752,136.868774475337,0.3594694685405358,10.082734325411032,0.6687530286491925,5.947271455308107,2.170314537212024,,,9.078166961669922,-4.8661559046068765 +OK,9.9,2.0,13.731178131074726,4.169544904780285,72.68188683082842,0.30082612879830045,7.135168863816389,0.6797946636539011,16.569173106454205,5.963683235099995,,,13.372641563415527,3.8311781310747257 +OR,11.0,2.4,15.223837236720705,3.6042301094674607,80.00122144021869,0.3868748897063032,9.686660958198624,0.9417384902858613,18.71773175526594,5.796223839892173,,,14.899346351623535,4.223837236720705 +PA,11.1,2.0,13.637911018385992,2.8762102777615794,152.97423864359848,0.346456113240414,10.358501019361265,0.9133835774870138,15.376388976794027,4.369408282978113,,,13.813882827758789,2.5379110183859925 +RI,8.4,2.3,13.35977181953176,4.002107274233144,47.716257082316176,0.2638155685183552,11.706778067766948,2.1389775521649073,13.952130836825097,5.411007448316621,-6.84669058579203,3.2677596335297556,10.114660263061523,4.95977181953176 +SC,11.1,2.1,10.59473085687635,2.4520723216335494,115.26644659001987,0.3736839049269087,11.553570544719635,1.2024288422176759,10.022650781702227,3.8469322710165352,,,9.70772647857666,-0.50526914312365 +SD,7.8,2.2,6.726459502632879,2.3272798467048927,55.2407957270471,0.26912123840231045,6.7068360049000635,1.5212604403340164,6.733685188053119,3.1395687931209575,,,6.721802234649658,-1.0735404973671212 +TN,10.0,1.7,16.42325489667534,3.0669705013054744,89.2695834668554,0.3282847810394231,17.970609097212844,1.351825751368199,15.667022462787758,4.491841348158154,-5.76581519722165,2.1743474156596263,15.603744506835938,6.423254896675338 +TX,16.1,1.3,14.045259064593418,1.685678655696754,294.32648200901883,0.3083157384243811,15.264531260011097,0.5128349830310771,13.501772927704614,2.4211407892896815,,,14.510196685791016,-2.054740935406583 +UT,7.3,1.6,8.359499249071256,2.0982139808994016,88.5556251779635,0.29356651846541537,5.222133569445866,0.7089311662182424,9.663267464756284,3.0000511031115513,,,8.38582706451416,1.0594992490712558 +VA,12.1,2.4,14.131721562535965,3.4974094202644177,135.12178712944925,0.3120242155444285,10.222161875261767,0.7379258638542938,15.904861434764465,5.046324742621825,,,15.400092124938965,2.0317215625359655 +VT,8.3,2.5,10.308498555295754,4.103266497917791,68.58960036751176,0.3813777601649377,5.468605036993444,1.7524339067205175,13.292270606457496,6.521284444131556,-0.8198424878811376,0.5644160471313165,10.242634773254395,2.0084985552957537 +WA,9.3,1.9,14.144094797845291,3.5056242790878342,104.56017409766304,0.3410985566238413,10.824512336178158,1.0575867773948409,15.862568474980742,5.285650433207835,,,14.172506332397461,4.84409479784529 +WI,7.3,1.7,4.205482205184001,1.1851299579185464,76.2063037717102,0.33178902497349727,7.339248739090038,0.9754240295726758,2.64946265202114,1.6371265070652459,,,5.814634799957275,-3.0945177948159985 +WV,11.3,2.4,15.269485131709581,4.591939630665602,78.48511051927737,0.3651987935901132,11.56747752398947,2.007798430035103,17.39923645944705,7.11376741088013,,,16.38048553466797,3.9694851317095807 +WY,6.5,1.4,7.519438350406651,2.499776130679871,75.3355320006355,0.3319623870118944,5.695065621563699,1.4991725822046913,8.426008750173787,3.689705821181645,,,7.408247947692871,1.0194383504066513 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_reform_fill_minus1.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_reform_fill_minus1.csv new file mode 100644 index 0000000000..196935a43b --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_reform_fill_minus1.csv @@ -0,0 +1,16 @@ +state,ctc_effect_published,ctc_effect_se_published,ctc_effect_corrected_rent,ctc_effect_se_corrected_rent,corrected_minus_published +AR,-1.9729223774049145,0.8486357725649586,-2.139452870894872,0.8489418874274481,-0.16653049348995763 +DC,-8.648974183112678,4.339825412853922,-7.870994797687709,4.297309466732037,0.7779793854249686 +DE,-2.9691945909874917,1.6834766244883417,-1.7609609623206675,1.0538508926782648,1.2082336286668243 +FL,-3.529584484380603,1.1124732966522155,-6.273629324412617,1.7434241849543939,-2.7440448400320143 +HI,-1.5974204310103088,0.7041621558092247,-1.3864993132186871,0.6926717710178918,0.2109211177916217 +LA,-1.6161803656670206,0.3522690221840859,-2.067415066350923,0.6135239140696926,-0.45123470068390237 +MA,-3.438875768601351,1.6663025426707383,-2.589970589476747,1.4597746702238246,0.8489051791246038 +MD,-3.413791655908443,2.109547341096508,-3.666427532075165,2.13973279189599,-0.252635876166722 +ME,-2.6266704709698754,1.5727339170258277,-2.565320115416996,1.5680089534063912,0.0613503555528796 +MO,-8.959376509915272,3.695574848895399,-8.24943192084599,3.6047902663083464,0.7099445890692824 +MS,-3.394959085138506,1.561580138172457,-3.5702908131062463,1.5687673395260167,-0.17533172796774021 +MT,-0.6722671920587023,0.23826363983213664,-0.6587857198038035,0.21640068702766152,0.013481472254898819 +RI,-7.082426369729525,3.2725430726119247,-6.84669058579203,3.2677596335297556,0.2357357839374954 +TN,-5.4719950504883315,2.1036927030836683,-5.76581519722165,2.1743474156596263,-0.29382014673331813 +VT,-0.17161126906749033,0.08063431563089071,-0.8198424878811376,0.5644160471313165,-0.6482312188136472 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_solves_fill_minus1.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_solves_fill_minus1.csv new file mode 100644 index 0000000000..df0b2886cc --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/acsrent_solves_fill_minus1.csv @@ -0,0 +1,12 @@ +run,mean_gap,mad,beyond,corr,med_se,med_delta,med_delta_se,acs_share,DE,DC,TN,MD,LA,MT,HI,MA +dup_release_repro,0.16471878949910754,2.8784570859033294,25,0.5204181912988358,2.8131967154228144,,,0.3481740564228461,19.01044496068104,18.264029155223753,15.815895611578442,17.00087539326369,11.026638688928166,4.395263513849296,5.366033904684012,18.391250624530855 +proj_chi_s050_0.03,-0.05092398622014013,2.8449219346098764,24,0.5393663326162758,2.6185470876334023,,,0.35381870008679583,18.65311820464982,19.22251450220031,15.20116770075214,17.12435546653622,10.978118011917076,4.706749920569699,5.5226938114629585,19.05416501157363 +soft_chi_s050_0.1,-0.2881451454796224,2.695072847083243,23,0.5523490782633917,2.4930566590515215,,,0.36703387978463625,18.219334945572307,18.87468437048897,15.22343160103723,16.750802371268357,11.041182497223607,4.197386843784524,5.600783666145576,19.0898877180207 +soft_chi_s700_0,-0.09243136054026196,2.5540732660539924,25,0.5942995177277677,2.0071287637313175,,,0.5323355514970661,19.36414505762124,20.1506881234464,15.510926025059696,16.75356217154926,11.508350076539335,5.31058340265146,5.299461689742384,18.598756395092067 +soft_chi_s700_0.03,-0.34916656095672133,2.465707794838541,24,0.6155211035405689,1.8404570230874595,,,0.5383162332537033,18.86773487462509,19.884284419829086,14.539619686401428,16.133805504277344,11.864488002505711,5.183291978929374,5.57460030335686,18.289204391811964 +soft_chi_s700_0.1,-0.5461299171657797,2.425932440215807,21,0.6281060966915968,1.8761451309974668,,,0.5550259489828211,17.83754923558953,19.97895900597697,14.410949721304988,15.695055654568485,11.787298649888283,5.063141838936079,5.742688008531674,17.714678347057735 +soft_chi_s900_0,-0.4898594897594518,2.270162958508696,22,0.7069119781335766,1.1699043997935354,,,0.7881426593725687,16.297709125418635,23.404550734238775,14.620544855172495,14.357091615000172,12.322483147860545,6.599965335193645,5.462347511867982,17.05436499241893 +soft_chi_s900_0.03,-0.7760268124432347,2.2344476062581227,23,0.730041522365349,1.0681072947623282,,,0.8010793832198903,15.958221403904174,22.663002485998664,13.984234626292814,14.236688507906479,12.997697567195463,6.356789549057919,5.7284856768958745,16.12167486720437 +soft_chi_s900_0.1,-1.0193024698269493,2.202791438427394,25,0.7299229819712859,0.9855704097592791,,,0.8173361826685147,15.547316914656143,21.95311398406457,14.056083521457458,13.795253491871517,12.527441621132631,6.1711300712092045,5.730222328877324,14.991445238160638 +soft_chi_s964_0,-0.7637952950596579,2.2414974839062483,21,0.744359093174314,0.9199117098312307,,,0.9130730706856416,14.831228681671039,24.64042114992082,14.079795144858076,12.901114422537784,12.559100453333539,7.204443327333171,5.432189772145475,15.790087705871422 +soft_chi_s964_0.03,-0.9749631474613972,2.202741501985428,22,0.7622988995188572,0.8573150404361539,,,0.9201088941650787,14.91088302641012,23.75088218085383,13.772862252678022,13.180510927310312,13.309275794355951,7.046273291735259,5.7176987513529625,15.06874085201589 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/blank_holders_state.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/blank_holders_state.csv new file mode 100644 index 0000000000..1e2e59d21b --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/blank_holders_state.csv @@ -0,0 +1,52 @@ +fips,people,blank,weighted_share +1,56748.0,3079.0,0.7176 +2,9370.0,2444.0,0.6062 +4,79224.0,3548.0,0.6817 +5,35086.0,2839.0,0.686 +6,401287.0,7866.0,0.7411 +8,66055.0,3274.0,0.6704 +9,40478.0,2577.0,0.6801 +10,12908.0,3039.0,0.6502 +11,7874.0,1334.0,0.6567 +12,217666.0,4651.0,0.7059 +13,115511.0,3706.0,0.7364 +15,18005.0,2900.0,0.662 +16,23270.0,2409.0,0.6698 +17,133658.0,4747.0,0.7091 +18,74477.0,3407.0,0.67 +19,36585.0,2835.0,0.6805 +20,33345.0,2661.0,0.6642 +21,50199.0,2290.0,0.6605 +22,48843.0,2865.0,0.7128 +23,16895.0,2089.0,0.6454 +24,66021.0,3268.0,0.685 +25,78948.0,4418.0,0.6864 +26,106828.0,4137.0,0.7049 +27,63309.0,3439.0,0.6536 +28,32515.0,2580.0,0.6918 +29,68492.0,2892.0,0.6733 +30,13380.0,1945.0,0.6606 +31,23250.0,2713.0,0.6862 +32,34405.0,2936.0,0.6801 +33,16742.0,2374.0,0.6773 +34,99281.0,4909.0,0.6934 +35,23353.0,2622.0,0.6692 +36,216135.0,6263.0,0.7075 +37,117941.0,3790.0,0.7089 +38,10248.0,1850.0,0.6741 +39,126353.0,4315.0,0.6806 +40,41817.0,2623.0,0.722 +41,47727.0,3349.0,0.6537 +42,140057.0,5755.0,0.6772 +44,12490.0,2256.0,0.6983 +45,59791.0,2744.0,0.6558 +46,11897.0,2288.0,0.686 +47,78064.0,3193.0,0.7062 +48,297905.0,5782.0,0.721 +49,39652.0,2901.0,0.7023 +50,8178.0,1245.0,0.6513 +51,93495.0,4116.0,0.7027 +53,86629.0,3743.0,0.6478 +54,20874.0,2421.0,0.6796 +55,66235.0,3325.0,0.6763 +56,7767.0,1569.0,0.6957 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/dash_swing_fill_minus1.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/dash_swing_fill_minus1.csv new file mode 100644 index 0000000000..7b69566383 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/dash_swing_fill_minus1.csv @@ -0,0 +1,52 @@ +,p24,p25,o24,o25,o25_18252,o24_221 +AK,-4.189894676208496,-5.673839092254639,-4.373375415802002,-1.7095413208007812,-6.640180587768555,-4.373375415802002 +AL,-5.012664794921875,-4.470902442932129,-2.8875207901000977,-2.7333478927612305,-4.968289375305176,-3.838292121887207 +AR,-1.5955448150634766,-2.695366144180298,-1.4236054420471191,-1.9772796630859375,-2.3963615894317627,-1.4233779907226562 +AZ,-10.281723976135254,-9.662915229797363,-3.781346321105957,-6.3656511306762695,-11.923871517181396,-3.8333358764648438 +CA,-3.736156463623047,-3.880396842956543,-4.793203353881836,-5.535208702087402,-3.742342948913574,-4.8096923828125 +CO,-0.6606168746948242,-0.8275508880615234,-0.8121490478515625,-0.9536361694335938,-0.925776481628418,-0.7850923538208008 +CT,-1.7586374282836914,-1.7703189849853516,-2.002377510070801,-2.030771255493164,-1.9308042526245117,-2.0001754760742188 +DC,-1.3295745849609375,-2.9570493698120117,-8.179778099060059,-7.9533491134643555,-2.8667736053466797,-8.129595756530762 +DE,-2.33499813079834,-2.279691696166992,-5.36961555480957,-5.435258865356445,-2.457225799560547,-5.36961555480957 +FL,-3.865865707397461,-3.357553482055664,-5.740966796875,-3.9676551818847656,-6.100198745727539,-5.701401710510254 +GA,-3.080746650695801,-2.6071701049804688,-4.445429801940918,-3.4896020889282227,-2.86575984954834,-4.791293144226074 +HI,-3.5331966876983643,-2.710688829421997,-2.608574390411377,-2.785074472427368,-3.5598132610321045,-2.608574390411377 +IA,-1.2073469161987305,-1.085604190826416,-0.9085164070129395,-0.8048229217529297,-0.7547454833984375,-0.9023137092590332 +ID,-1.167829990386963,-1.0795774459838867,-1.1714277267456055,-1.901484489440918,-1.0411276817321777,-1.097053050994873 +IL,-7.139523506164551,-6.458962440490723,-4.282228469848633,-8.83888053894043,-8.613019943237305,-4.282962799072266 +IN,-3.4897637367248535,-3.511981964111328,-2.219841957092285,-2.1886167526245117,-3.0147900581359863,-2.1482343673706055 +KS,-4.764968395233154,-4.5028886795043945,-6.837752819061279,-5.541018486022949,-6.498903751373291,-6.973252773284912 +KY,-3.459348201751709,-3.3902740478515625,-2.6096558570861816,-2.5431671142578125,-3.135756015777588,-2.5220632553100586 +LA,-5.638120174407959,-4.8973894119262695,-3.1079702377319336,-1.4829511642456055,-4.254573822021484,-3.1211328506469727 +MA,-4.3399858474731445,-3.395580291748047,-3.340383529663086,-3.3914051055908203,-3.1008968353271484,-2.5382080078125 +MD,-0.8330593109130859,-7.321868896484375,-1.5074882507324219,-9.015921592712402,-6.742190361022949,-1.5407180786132812 +ME,-2.779177188873291,-2.7190308570861816,-2.5734190940856934,-2.655895233154297,-2.7348837852478027,-2.570552349090576 +MI,-2.7965292930603027,-4.478377103805542,-2.080575466156006,-3.4591875076293945,-4.55608344078064,-2.118161678314209 +MN,-0.5588521957397461,-0.5429868698120117,-1.079054832458496,-0.9754786491394043,-0.8658616542816162,-1.0532169342041016 +MO,-5.693965435028076,-6.024465084075928,-6.493651390075684,-8.944635391235352,-6.490201950073242,-6.476726531982422 +MS,-4.121949672698975,-4.28740119934082,-5.5541839599609375,-4.007966995239258,-4.833344459533691,-5.625495433807373 +MT,-0.7315001487731934,-0.6603364944458008,-0.8444640636444092,-0.768653154373169,-0.6661734580993652,-0.9424371719360352 +NC,-2.9216790199279785,-2.721771240234375,-4.820042610168457,-4.398758888244629,-3.844996452331543,-6.247556209564209 +ND,-1.095254898071289,-1.1478958129882812,-0.9279356002807617,-1.2256460189819336,-0.6770458221435547,-0.9017829895019531 +NE,-5.928585529327393,-4.526432991027832,-6.791402339935303,-6.594109296798706,-4.920290470123291,-6.791403293609619 +NH,-3.1012496948242188,-1.7489027976989746,-1.7163872718811035,-1.8274922370910645,-1.6276025772094727,-1.695164680480957 +NJ,-1.2045764923095703,-1.0750389099121094,-1.1831417083740234,-1.7260732650756836,-1.1427698135375977,-1.0962090492248535 +NM,-5.908068656921387,-5.670726776123047,-6.657066345214844,-5.910312652587891,-6.02302360534668,-6.644031524658203 +NV,-2.995401382446289,-2.899956703186035,-2.7631330490112305,-1.9952678680419922,-2.785487174987793,-2.719846725463867 +NY,-3.84584903717041,-3.301645278930664,-3.8091773986816406,-3.3273448944091797,-3.8251752853393555,-3.8059425354003906 +OH,-4.279670238494873,-3.564304828643799,-2.4238171577453613,-3.895282745361328,-3.468106746673584,-2.383358955383301 +OK,-0.9729490280151367,-1.6426286697387695,-1.3617620468139648,-2.4307985305786133,-1.3856840133666992,-1.3995094299316406 +OR,-0.7172441482543945,-3.117441177368164,-1.4312019348144531,-4.85249137878418,-3.511751174926758,-1.4312057495117188 +PA,-2.39363956451416,-1.8110342025756836,-3.553032875061035,-2.6409196853637695,-1.8544549942016602,-3.545027732849121 +RI,-10.134502410888672,-7.170621871948242,-7.31915807723999,-5.006382942199707,-5.057307720184326,-7.4494616985321045 +SC,-3.361548900604248,-3.2307605743408203,-3.2702345848083496,-3.384464740753174,-3.2846899032592773,-3.1891674995422363 +SD,-4.291806697845459,-3.8360729217529297,-1.7623538970947266,-2.543172836303711,-3.000764846801758,-1.7623538970947266 +TN,-4.139863014221191,-5.404635429382324,-4.014834403991699,-4.543438911437988,-5.95438289642334,-4.050980567932129 +TX,-3.4791202545166016,-3.509881019592285,-3.225029945373535,-3.6476917266845703,-3.0690717697143555,-3.3291406631469727 +UT,-1.6343493461608887,-2.336082935333252,-1.6495895385742188,-0.9567546844482422,-1.2125139236450195,-1.5026459693908691 +VA,-5.260139465332031,-5.2570648193359375,-2.962580680847168,-4.125798225402832,-5.877525329589844,-2.9812583923339844 +VT,-0.4380931854248047,-0.2148294448852539,-0.7923793792724609,-0.10500144958496094,-0.12960052490234375,-0.7923784255981445 +WA,-2.850407600402832,-1.7509937286376953,-3.2660112380981445,-2.919992446899414,-2.915656089782715,-3.282376289367676 +WI,-2.336136817932129,-2.9149160385131836,-2.6450157165527344,-3.169431209564209,-2.734252452850342,-2.645015239715576 +WV,-9.820388793945312,-9.350496768951416,-9.833352088928223,-11.881651878356934,-9.517368793487549,-9.776033878326416 +WY,-1.9863653182983398,-1.8889093399047852,-1.3712310791015625,-1.6214418411254883,-1.880359172821045,-1.4958949089050293 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_eval.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_eval.txt index 3e2826992f..54eae90449 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_eval.txt +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_eval.txt @@ -4,11 +4,11 @@ AK 10.5 2.1 12.28 3.74 81.68 0.42 14.88 3.87 AL 15.5 2.4 15.10 3.71 114.89 0.31 15.01 1.32 15.13 5.34 -3.71 1.82 14.11 -0.40 AR 13.3 2.7 6.87 1.51 115.12 0.34 10.61 1.41 4.89 2.11 -1.97 0.85 6.77 -6.43 AZ 13.3 2.3 17.23 4.04 74.97 0.33 15.42 1.14 18.11 5.96 -6.41 3.17 17.13 3.93 -CA 17.9 1.0 19.81 1.96 385.66 0.28 17.18 0.45 20.86 2.73 -4.33 1.01 20.38 1.91 +CA 17.9 1.0 20.37 2.01 385.66 0.28 17.18 0.45 21.64 2.80 -4.89 1.14 20.38 2.47 CO 7.7 1.8 9.44 2.79 65.42 0.32 8.13 0.71 10.06 4.09 -0.74 0.24 9.37 1.74 CT 12.8 3.2 12.64 2.98 100.21 0.35 15.00 1.63 11.36 4.50 -2.09 0.64 12.43 -0.16 DC 20.3 3.7 21.18 5.26 47.07 0.40 22.10 5.49 20.56 7.99 -8.65 4.34 20.46 0.88 -DE 8.7 2.6 22.21 6.90 50.96 0.31 14.96 2.87 25.44 9.75 -2.97 1.68 22.21 13.51 +DE 8.7 2.6 22.22 6.90 50.96 0.31 14.96 2.87 25.45 9.75 -2.98 1.68 22.21 13.52 FL 18.4 1.8 22.72 3.45 135.20 0.32 13.31 0.58 27.09 5.11 -3.53 1.11 22.61 4.32 GA 15.1 2.2 17.43 2.96 121.18 0.31 12.37 0.79 19.76 4.32 -3.46 1.31 17.40 2.33 HI 13.0 2.6 5.86 1.99 118.53 0.38 5.07 0.84 6.33 3.16 -1.60 0.70 5.17 -7.14 @@ -41,7 +41,7 @@ OR 11.0 2.4 14.96 3.59 80.00 0.39 9.96 0.94 PA 11.1 2.0 13.90 2.88 152.97 0.35 11.13 0.96 15.38 4.37 -2.17 0.88 13.81 2.80 RI 8.4 2.3 13.60 4.01 47.72 0.26 12.63 2.19 13.95 5.41 -7.08 3.27 10.11 5.20 SC 11.1 2.1 10.81 2.46 115.27 0.37 12.13 1.22 10.02 3.85 -4.38 1.85 9.71 -0.29 -SD 7.8 2.2 6.73 2.33 55.24 0.27 6.71 1.52 6.74 3.14 -3.88 1.85 6.72 -1.07 +SD 7.8 2.2 6.73 2.33 55.24 0.27 6.71 1.52 6.74 3.14 -2.54 1.30 6.72 -1.07 TN 10.0 1.7 16.56 3.08 89.27 0.33 18.32 1.36 15.70 4.50 -5.47 2.10 15.60 6.56 TX 16.1 1.3 14.56 1.71 294.33 0.31 15.45 0.51 14.17 2.46 -3.24 0.93 14.51 -1.54 UT 7.3 1.6 8.40 2.10 88.56 0.29 5.35 0.72 9.66 3.00 -0.92 0.40 8.39 1.10 @@ -51,21 +51,21 @@ WA 9.3 1.9 14.19 3.43 104.56 0.34 11.36 1.06 WI 7.3 1.7 5.89 1.67 76.21 0.33 7.59 0.98 5.04 2.42 -3.24 1.33 5.81 -1.41 WV 11.3 2.4 16.41 4.67 78.49 0.37 11.23 2.00 19.38 7.23 -11.85 4.61 16.38 5.11 WY 6.5 1.4 7.40 2.50 75.34 0.33 5.34 1.47 8.43 3.69 -1.62 0.99 7.41 0.90 -median se 2.98 median delta se 1.29 current vs stored 2.30.1 mean abs 0.36 -all rows states 51 mean gap 0.88 sd 4.12 MAD 3.18 corr 0.542 beyond 29 median se 2.98 +median se 2.98 median delta se 1.29 current vs stored 2.30.1 mean abs 0.35 +all rows states 51 mean gap 0.89 sd 4.12 MAD 3.19 corr 0.543 beyond 29 median se 2.98 ACS rows states 51 mean gap -0.64 sd 3.11 MAD 2.46 corr 0.686 beyond 22 median se 1.06 -donor rows states 51 mean gap 1.6 sd 5.33 MAD 4.34 corr 0.421 beyond 37 median se 4.5 -reform delta median -2.97 min -11.85 max -0.17 median se 1.29 +donor rows states 51 mean gap 1.61 sd 5.33 MAD 4.35 corr 0.424 beyond 37 median se 4.5 +reform delta median -2.9 min -11.85 max -0.17 median se 1.29 mean_gap mad beyond corr med_se med_delta med_delta_se acs_share DE DC TN MD LA MT HI MA run -dup_release_repro 0.54 2.79 27 0.56 2.82 -2.99 1.30 0.35 19.72 19.40 16.04 17.18 12.03 4.53 5.72 19.18 -proj_chi_s050_0.03 0.28 2.73 21 0.57 2.61 -2.94 1.21 0.35 19.25 20.28 15.51 17.30 12.01 4.85 5.84 19.49 -soft_chi_s050_0.1 0.04 2.59 20 0.58 2.47 -2.97 1.16 0.37 18.94 20.18 15.61 16.93 11.96 4.26 5.93 19.48 -soft_chi_s700_0 0.27 2.52 24 0.63 2.09 -2.78 0.97 0.53 19.88 21.66 15.71 17.01 12.66 5.42 5.83 19.40 -soft_chi_s700_0.03 -0.03 2.40 23 0.64 1.86 -2.79 0.88 0.54 19.38 21.35 14.86 16.39 12.68 5.26 6.08 18.77 -soft_chi_s700_0.1 -0.23 2.33 20 0.66 1.87 -2.81 0.83 0.56 18.37 21.48 14.78 15.96 12.53 5.13 6.23 18.14 -soft_chi_s900_0 -0.15 2.27 24 0.72 1.18 -3.16 0.59 0.79 16.55 25.25 14.98 14.79 12.89 6.66 6.23 17.72 -soft_chi_s900_0.03 -0.45 2.16 22 0.75 1.09 -3.01 0.56 0.80 16.21 24.47 14.35 14.63 13.47 6.43 6.44 16.64 +dup_release_repro 0.55 2.79 27 0.56 2.82 -2.78 1.30 0.35 19.73 19.40 16.04 17.18 12.03 4.53 5.72 19.18 +proj_chi_s050_0.03 0.28 2.74 21 0.57 2.61 -2.74 1.19 0.35 19.26 20.28 15.51 17.30 12.01 4.85 5.84 19.49 +soft_chi_s050_0.1 0.04 2.59 21 0.59 2.47 -2.86 1.16 0.37 18.95 20.18 15.61 16.93 11.96 4.26 5.93 19.48 +soft_chi_s700_0 0.27 2.53 24 0.63 2.09 -2.78 0.97 0.53 19.89 21.66 15.71 17.01 12.66 5.42 5.83 19.40 +soft_chi_s700_0.03 -0.02 2.40 23 0.64 1.86 -2.80 0.88 0.54 19.39 21.35 14.86 16.39 12.68 5.26 6.08 18.77 +soft_chi_s700_0.1 -0.22 2.33 20 0.66 1.87 -2.77 0.83 0.56 18.38 21.48 14.78 15.96 12.53 5.13 6.23 18.14 +soft_chi_s900_0 -0.15 2.27 24 0.72 1.18 -3.12 0.59 0.79 16.55 25.25 14.98 14.79 12.89 6.66 6.23 17.72 +soft_chi_s900_0.03 -0.45 2.16 22 0.75 1.09 -2.98 0.56 0.80 16.21 24.47 14.35 14.63 13.47 6.43 6.44 16.64 soft_chi_s900_0.1 -0.70 2.13 21 0.75 1.01 -2.89 0.54 0.82 15.80 23.78 14.46 14.22 12.97 6.24 6.40 15.50 soft_chi_s964_0 -0.42 2.23 23 0.75 0.92 -3.04 0.52 0.91 14.94 26.64 14.50 13.40 12.92 7.21 6.27 16.41 -soft_chi_s964_0.03 -0.65 2.14 22 0.77 0.87 -3.11 0.47 0.92 15.02 25.73 14.18 13.65 13.63 7.07 6.50 15.59 +soft_chi_s964_0.03 -0.64 2.14 22 0.77 0.87 -3.11 0.47 0.92 15.02 25.73 14.18 13.65 13.63 7.07 6.50 15.59 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_hh_split.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_hh_split.txt new file mode 100644 index 0000000000..00398388af --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_hh_split.txt @@ -0,0 +1,3 @@ +households (1586908, 6) unit keys (1589568, 2) people 3587263 person columns 339 +rent was 6.87 now 6.07 +weight total 122537092 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_rerun_check.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_rerun_check.txt new file mode 100644 index 0000000000..c764f37564 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_rerun_check.txt @@ -0,0 +1,4 @@ +rates against the deck's fill-0 run: states 51 largest difference 3.3464489135326403e-07 +the split under -1 against the earlier -1 runs: {'CA': (np.float64(19.812992), np.float64(19.812992)), 'DE': (np.float64(22.214556), np.float64(22.214556))} +CA units that change 1 by channel {'asec': 1} source households 1 rate move 0.5612 largest source household's share of the state's child weight, percent 0.561 +DE units that change 1 by channel {'asec': 1} source households 1 rate move 0.0059 largest source household's share of the state's child weight, percent 0.006 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_split.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_split.txt new file mode 100644 index 0000000000..9a760ba281 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/acs_split.txt @@ -0,0 +1,60 @@ +source RemoteStore people 3587263 chunk 200000 +read retry at 8752624272 after 1s: TimeoutError('The read operation timed out') +read retry at 8752624272 after 2s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8752624272 after 4s: ConnectionResetError(54, 'Connection reset by peer') +read retry at 8766345406 after 1s: ConnectionError('response ended early at byte 8766345406') +read retry at 8766737174 after 1s: ConnectionError('response ended early at byte 8766737174') +read retry at 8843348758 after 1s: TimeoutError('The read operation timed out') +households (1586908, 38) peak GiB 1.07 +chunk 0 seconds 3196 peak GiB 3.02 +chunk 1 seconds 3351 peak GiB 3.48 +chunk 2 seconds 3507 peak GiB 3.56 +chunk 3 seconds 3664 peak GiB 3.61 +chunk 4 seconds 3820 peak GiB 3.62 +read retry at 8059826200 after 1s: TimeoutError('The read operation timed out') +read retry at 8059826200 after 2s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8059826200 after 4s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8059826200 after 8s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8059826200 after 16s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8059826200 after 32s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8059826200 after 64s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8059826200 after 128s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8059826200 after 256s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8059826200 after 300s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8059826200 after 300s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8059826200 after 300s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8077914136 after 1s: ConnectionResetError(54, 'Connection reset by peer') +read retry at 8078241816 after 1s: TimeoutError('The read operation timed out') +read retry at 8078241816 after 2s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8078241816 after 4s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8078241816 after 8s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8078241816 after 16s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8078241816 after 32s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8078241816 after 64s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8078241816 after 128s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8078241816 after 256s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8078241816 after 300s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +read retry at 8078241816 after 300s: URLError(gaierror(8, 'nodename nor servname provided, or not known')) +chunk 5 seconds 10049 peak GiB 3.62 +chunk 6 seconds 10208 peak GiB 3.62 +chunk 7 seconds 10369 peak GiB 3.62 +chunk 8 seconds 10526 peak GiB 3.62 +chunk 9 seconds 10682 peak GiB 3.62 +chunk 10 seconds 10839 peak GiB 3.62 +chunk 11 seconds 10996 peak GiB 3.62 +chunk 12 seconds 11156 peak GiB 3.62 +chunk 13 seconds 11380 peak GiB 3.62 +chunk 14 seconds 11541 peak GiB 3.62 +chunk 15 seconds 11700 peak GiB 3.62 +chunk 16 seconds 11919 peak GiB 3.62 +chunk 17 seconds 12066 peak GiB 3.62 +people 3587263 person columns 339 +tax_unit groups 2175528 spanning states 0 +tax_unit peak GiB 3.62 +spm_unit groups 1589568 spanning states 0 +spm_unit peak GiB 3.62 +family groups 1594874 spanning states 0 +family peak GiB 3.62 +marital_unit groups 2867105 spanning states 0 +marital_unit peak GiB 3.62 +done files 306 seconds 12683 peak GiB 3.62 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/blank_holders.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/blank_holders.txt new file mode 100644 index 0000000000..333b2fa5a8 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/blank_holders.txt @@ -0,0 +1,17 @@ +people 3587263 households 1586908 +blank parent_1 166321 parent_2 166321 both 166321 either 166321 +weighted share of people 0.6989 of children 0.6768 +parent_1 zero 3420942 positive 0 negative 0 + size sum +person_support_channel +acs_2024_1yr 3420942 0 +asec 66001 66001 +puf_tax_detail 100320 100320 +households with a blank 57240 of them all blank 57240 + people blank weighted_share +fips +6 401287.0 7866.0 0.7411 +10 12908.0 3039.0 0.6502 +12 217666.0 4651.0 0.7059 +25 78948.0 4418.0 0.6864 +29 68492.0 2892.0 0.6733 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/dash_swing.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/dash_swing.txt new file mode 100644 index 0000000000..d86cecfd91 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/dash_swing.txt @@ -0,0 +1,11 @@ +{'p24': 0, 'p25': 0, 'o24': 0, 'o25': 0, 'o25_18252': 0, 'o24_221': 0} 51 +p24 o24 states 51 mean abs swing 1.16 sd 1.84 max 6.85 DC corr 0.668 +p25 o25 states 51 mean abs swing 1.16 sd 1.63 max 5.0 DC corr 0.757 +this run vs stored o25, mean abs 0.666 +implied sd of between-build noise per build 1.15 median delta se 1.29 rms delta se 1.83 +same model 1.825.2, Build P against Build O, 2025: mean abs 0.55 sd 0.83 per build 0.59 max 2.74 FL +same file across 1.825.2 and 2.30.1, 2025: mean abs 1.11 sd 1.72 max 5.56 AZ + p24 p25 o24 o25 o25_18252 o24_221 +AZ -10.28 -9.66 -3.78 -6.37 -11.92 -3.83 +DC -1.33 -2.96 -8.18 -7.95 -2.87 -8.13 +NC -2.92 -2.72 -4.82 -4.40 -3.84 -6.25 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/noise_ci.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/noise_ci.txt index 29d8532aa3..2f020597f6 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/noise_ci.txt +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/noise_ci.txt @@ -4,9 +4,9 @@ default_linearized {'Q': np.float64(71.548), 'df': 50, 'p': 0.024, 'tau': np.flo replicate over linearized: median 0.86 range 0.53 2.17 mean abs replicate bias 1.83 largest {'MT': 4.92, 'RI': 5.76, 'TN': 6.93} dense_published {'Q': np.float64(147.799), 'df': 50, 'p': 0.0, 'tau': np.float64(3.071), 'tau_lo': np.float64(2.329), 'tau_hi': np.float64(4.344), 'var': np.float64(16.196), 'noise_share': np.float64(0.418), 'noise_share_lo': np.float64(-0.165), 'noise_share_hi': np.float64(0.665), 'mean_v': 5.798} -acs_local_all {'Q': np.float64(73.284), 'df': 50, 'p': 0.018, 'tau': np.float64(2.015), 'tau_lo': np.float64(0.467), 'tau_hi': np.float64(3.496), 'var': np.float64(16.981), 'noise_share': np.float64(0.761), 'noise_share_lo': np.float64(0.28), 'noise_share_hi': np.float64(0.987), 'mean_v': 12.562} +acs_local_all {'Q': np.float64(73.917), 'df': 50, 'p': 0.016, 'tau': np.float64(2.044), 'tau_lo': np.float64(0.538), 'tau_hi': np.float64(3.51), 'var': np.float64(17.014), 'noise_share': np.float64(0.754), 'noise_share_lo': np.float64(0.276), 'noise_share_hi': np.float64(0.983), 'mean_v': 12.566} acs_rows {'Q': np.float64(131.574), 'df': 50, 'p': 0.0, 'tau': np.float64(2.078), 'tau_lo': np.float64(1.625), 'tau_hi': np.float64(3.215), 'var': np.float64(9.703), 'noise_share': np.float64(0.555), 'noise_share_lo': np.float64(-0.065), 'noise_share_hi': np.float64(0.728), 'mean_v': 4.354} -acs_local_donors {'Q': np.float64(74.386), 'df': 50, 'p': 0.014, 'tau': np.float64(2.786), 'tau_lo': np.float64(0.648), 'tau_hi': np.float64(4.315), 'var': np.float64(28.398), 'noise_share': np.float64(0.727), 'noise_share_lo': np.float64(0.344), 'noise_share_hi': np.float64(0.985), 'mean_v': 25.419} +acs_local_donors {'Q': np.float64(75.12), 'df': 50, 'p': 0.012, 'tau': np.float64(2.83), 'tau_lo': np.float64(0.724), 'tau_hi': np.float64(4.338), 'var': np.float64(28.458), 'noise_share': np.float64(0.718), 'noise_share_lo': np.float64(0.339), 'noise_share_hi': np.float64(0.982), 'mean_v': 25.426} null shift+noise {'mad': [3.44, 3.56, 4.25, 4.98, 5.13], 'sd': [3.27, 3.4, 4.12, 4.95, 5.12], 'beyond': [30.0, 31.0, 36.0, 41.0, 42.0], 'obs': {'mad': 4.79849727626572, 'sd': 5.1105998537849535, 'beyond': 38}, 'p_mad': 0.1035, 'p_sd': 0.0259, 'p_beyond': 0.3107} null shift+noise+tau {'mad': [3.97, 4.12, 4.94, 5.82, 6.0], 'sd': [4.21, 4.37, 5.23, 6.18, 6.38], 'beyond': [31.0, 32.0, 37.0, 42.0, 43.0], 'obs': {'mad': 4.79849727626572, 'sd': 5.1105998537849535, 'beyond': 38}, 'p_mad': 0.6065, 'p_sd': 0.58635, 'p_beyond': 0.49405} -ACS-local null {'mad': [2.22, 2.3, 2.79, 3.32, 3.43], 'sd': [2.75, 2.86, 3.5, 4.24, 4.4], 'beyond': [20.0, 21.0, 27.0, 32.0, 34.0], 'obs': {'mad': 3.176892139210129, 'sd': 4.120827319858382, 'beyond': 29}, 'p_mad': 0.11205, 'p_sd': 0.0818, 'p_beyond': 0.2998} +ACS-local null {'mad': [2.22, 2.3, 2.79, 3.32, 3.43], 'sd': [2.75, 2.86, 3.5, 4.24, 4.4], 'beyond': [20.0, 21.0, 27.0, 32.0, 34.0], 'obs': {'mad': 3.1880104860347513, 'sd': 4.12475079990298, 'beyond': 29}, 'p_mad': 0.1074, 'p_sd': 0.08075, 'p_beyond': 0.3029} diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/parent_blanks.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/parent_blanks.txt new file mode 100644 index 0000000000..131440e347 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/parent_blanks.txt @@ -0,0 +1,5 @@ +default people 166321 + stores no parent columns +dense people 907863 + parent_1_id int64 blank 0 zero 619213 negative 0 positive 288650 + parent_2_id int64 blank 0 zero 673363 negative 0 positive 234500 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/persist.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/persist.txt new file mode 100644 index 0000000000..8f5e250a4a --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/persist.txt @@ -0,0 +1,17 @@ +gap corr dense initial, ACS rows 0.30; p 0.031 + Census noise alone would give about 0.16 +gap corr dense published, ACS rows 0.42 + Census noise alone would give about 0.09 +|z|>1.28: 6 states ['DE', 'IL', 'LA', 'MS', 'OH', 'WA'], permutation mean 3.03, p 0.049 +|z|>1.645: 2 states ['DE', 'LA'], permutation mean 1.37, p 0.412 +|z|>1.96: 1 states ['LA'], permutation mean 0.68, p 0.533 +largest joint z 2.796, permutation median 2.59, p 0.185 + dense_initial acs_rows z_dense z_acs joint_z +LA -6.95 -6.40 -3.39 -2.80 2.80 +DE 5.35 6.26 2.28 1.91 1.91 +OH -4.41 -2.04 -2.82 -1.40 1.40 +IL -1.84 -3.29 -1.39 -2.74 1.39 +MS -5.19 -3.18 -2.72 -1.38 1.38 +WA 4.70 2.06 2.95 1.31 1.31 +ID 1.36 3.02 1.23 1.75 1.23 +AZ 3.84 2.12 1.93 1.18 1.18 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/rent_map.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/rent_map.txt new file mode 100644 index 0000000000..0e1d90447d --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/rent_map.txt @@ -0,0 +1 @@ +source households 168852 rent $bn 0.77 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/logs/rentfix.txt b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/rentfix.txt new file mode 100644 index 0000000000..226e7959d9 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/logs/rentfix.txt @@ -0,0 +1,11 @@ +source ids unique in base True +base households 168852 positive 53053 sum 0.77 +other channel sources found 1.0 +clone index by channel {('asec', 0): 168852, ('puf_tax_detail', 1): 168852, ('puf_tax_detail', 2): 15228} + weight_M was_any right_any was_mean right_mean +tenure_type +NONE 1.498 0.285 0.0 4029.497 0.000 +OWNED_WITH_MORTGAGE 90.106 0.299 0.0 4417.972 0.000 +RENTED 46.494 0.388 1.0 5954.510 15410.143 +weighted total rent, was 681.0 right 716.5 +records moved 0.464 weight moved 0.5185 diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/noise_ci.json b/docs/evidence/us-state-child-spm-2026-11/outputs/noise_ci.json index aad2f3a899..dbeb3b82c3 100644 --- a/docs/evidence/us-state-child-spm-2026-11/outputs/noise_ci.json +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/noise_ci.json @@ -2,7 +2,7 @@ "default_replicate": { "Q": 88.40618049421572, "df": 50, - "p": 0.0006606953818153031, + "p": 0.0006606953818152986, "tau": 3.2465694661482893, "tau_lo": 1.7122878484524746, "tau_hi": 4.840911706611139, @@ -28,7 +28,7 @@ "default_linearized": { "Q": 71.54752778678422, "df": 50, - "p": 0.024417951201096147, + "p": 0.024417951201095967, "tau": 2.7318501167333893, "tau_lo": 0.13774138913839723, "tau_hi": 4.146775759450035, @@ -41,7 +41,7 @@ "dense_published": { "Q": 147.79926318354475, "df": 50, - "p": 1.3400118212676642e-11, + "p": 1.3400118212676647e-11, "tau": 3.0713486973806456, "tau_lo": 2.3294462752155356, "tau_hi": 4.343865613386318, @@ -52,22 +52,22 @@ "mean_v": 5.79846072243994 }, "acs_local_all": { - "Q": 73.28394711139177, + "Q": 73.9166302025121, "df": 50, - "p": 0.017600667293570144, - "tau": 2.0152989229220633, - "tau_lo": 0.46677414231140657, - "tau_hi": 3.4958661033570277, - "var": 16.981217800091212, - "noise_share": 0.7608281221910355, - "noise_share_lo": 0.2803178219329473, - "noise_share_hi": 0.9871694655533257, - "mean_v": 12.56197920084301 + "p": 0.01557799078148914, + "tau": 2.044219749579033, + "tau_lo": 0.5384299814821493, + "tau_hi": 3.5100661223111356, + "var": 17.01356916130027, + "noise_share": 0.7543822613026839, + "noise_share_lo": 0.27583894559754296, + "noise_share_hi": 0.9829602570624452, + "mean_v": 12.565620082481603 }, "acs_rows": { "Q": 131.573636682349, "df": 50, - "p": 2.906283832072266e-09, + "p": 2.9062838320722656e-09, "tau": 2.078444059024237, "tau_lo": 1.6247665391479142, "tau_hi": 3.215085974576774, @@ -78,17 +78,17 @@ "mean_v": 4.354307742910868 }, "acs_local_donors": { - "Q": 74.38600098457465, + "Q": 75.11992914149931, "df": 50, - "p": 0.01421571165194804, - "tau": 2.786391456644747, - "tau_lo": 0.6482180731228857, - "tau_hi": 4.314776890702981, - "var": 28.397890778366232, - "noise_share": 0.7266002109009624, - "noise_share_lo": 0.3444125917010953, - "noise_share_hi": 0.9852035958021484, - "mean_v": 25.419275862349163 + "p": 0.01230079352662799, + "tau": 2.8304443441406364, + "tau_lo": 0.7244826314863948, + "tau_hi": 4.337931368268061, + "var": 28.4576106462753, + "noise_share": 0.7184789937265411, + "noise_share_lo": 0.3387481194501838, + "noise_share_hi": 0.9815558976524914, + "mean_v": 25.42626346352447 }, "null_shift_noise": { "mad": [ @@ -175,12 +175,12 @@ 34.0 ], "obs": { - "mad": 3.176892139210129, - "sd": 4.120827319858382, + "mad": 3.1880104860347513, + "sd": 4.12475079990298, "beyond": 29 }, - "p_mad": 0.11205, - "p_sd": 0.0818, - "p_beyond": 0.2998 + "p_mad": 0.1074, + "p_sd": 0.08075, + "p_beyond": 0.3029 } } \ No newline at end of file diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/noise_ci_fill_minus1.json b/docs/evidence/us-state-child-spm-2026-11/outputs/noise_ci_fill_minus1.json new file mode 100644 index 0000000000..aad2f3a899 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/noise_ci_fill_minus1.json @@ -0,0 +1,186 @@ +{ + "default_replicate": { + "Q": 88.40618049421572, + "df": 50, + "p": 0.0006606953818153031, + "tau": 3.2465694661482893, + "tau_lo": 1.7122878484524746, + "tau_hi": 4.840911706611139, + "var": 26.118230865506785, + "noise_share": 0.5964422953146344, + "noise_share_lo": 0.10275599171023486, + "noise_share_hi": 0.8877439405809803, + "mean_v": 17.326059541770654 + }, + "default_replicate_rmse": { + "Q": 64.78855186048433, + "df": 50, + "p": 0.07791977349463591, + "tau": 2.2826487494363596, + "tau_lo": 0.0, + "tau_hi": 4.1468010853791135, + "var": 26.118230865506785, + "noise_share": 0.8005038955305108, + "noise_share_lo": 0.34161087210499586, + "noise_share_hi": 1.0, + "mean_v": 22.84239401986353 + }, + "default_linearized": { + "Q": 71.54752778678422, + "df": 50, + "p": 0.024417951201096147, + "tau": 2.7318501167333893, + "tau_lo": 0.13774138913839723, + "tau_hi": 4.146775759450035, + "var": 26.118230865506785, + "noise_share": 0.7142606978732124, + "noise_share_lo": 0.3416189140945187, + "noise_share_hi": 0.9992735844024248, + "mean_v": 24.25633958471365 + }, + "dense_published": { + "Q": 147.79926318354475, + "df": 50, + "p": 1.3400118212676642e-11, + "tau": 3.0713486973806456, + "tau_lo": 2.3294462752155356, + "tau_hi": 4.343865613386318, + "var": 16.19589516275953, + "noise_share": 0.41755718185974466, + "noise_share_lo": -0.16505869404164986, + "noise_share_hi": 0.6649570835953119, + "mean_v": 5.79846072243994 + }, + "acs_local_all": { + "Q": 73.28394711139177, + "df": 50, + "p": 0.017600667293570144, + "tau": 2.0152989229220633, + "tau_lo": 0.46677414231140657, + "tau_hi": 3.4958661033570277, + "var": 16.981217800091212, + "noise_share": 0.7608281221910355, + "noise_share_lo": 0.2803178219329473, + "noise_share_hi": 0.9871694655533257, + "mean_v": 12.56197920084301 + }, + "acs_rows": { + "Q": 131.573636682349, + "df": 50, + "p": 2.906283832072266e-09, + "tau": 2.078444059024237, + "tau_lo": 1.6247665391479142, + "tau_hi": 3.215085974576774, + "var": 9.702983308697004, + "noise_share": 0.5547833517737689, + "noise_share_lo": -0.06531955122041655, + "noise_share_hi": 0.7279325107806256, + "mean_v": 4.354307742910868 + }, + "acs_local_donors": { + "Q": 74.38600098457465, + "df": 50, + "p": 0.01421571165194804, + "tau": 2.786391456644747, + "tau_lo": 0.6482180731228857, + "tau_hi": 4.314776890702981, + "var": 28.397890778366232, + "noise_share": 0.7266002109009624, + "noise_share_lo": 0.3444125917010953, + "noise_share_hi": 0.9852035958021484, + "mean_v": 25.419275862349163 + }, + "null_shift_noise": { + "mad": [ + 3.44, + 3.56, + 4.25, + 4.98, + 5.13 + ], + "sd": [ + 3.27, + 3.4, + 4.12, + 4.95, + 5.12 + ], + "beyond": [ + 30.0, + 31.0, + 36.0, + 41.0, + 42.0 + ], + "obs": { + "mad": 4.79849727626572, + "sd": 5.1105998537849535, + "beyond": 38 + }, + "p_mad": 0.1035, + "p_sd": 0.0259, + "p_beyond": 0.3107 + }, + "null_shift_noise_tau": { + "mad": [ + 3.97, + 4.12, + 4.94, + 5.82, + 6.0 + ], + "sd": [ + 4.21, + 4.37, + 5.23, + 6.18, + 6.38 + ], + "beyond": [ + 31.0, + 32.0, + 37.0, + 42.0, + 43.0 + ], + "obs": { + "mad": 4.79849727626572, + "sd": 5.1105998537849535, + "beyond": 38 + }, + "p_mad": 0.6065, + "p_sd": 0.58635, + "p_beyond": 0.49405 + }, + "acs_null_shift_noise": { + "mad": [ + 2.22, + 2.3, + 2.79, + 3.32, + 3.43 + ], + "sd": [ + 2.75, + 2.86, + 3.5, + 4.24, + 4.4 + ], + "beyond": [ + 20.0, + 21.0, + 27.0, + 32.0, + 34.0 + ], + "obs": { + "mad": 3.176892139210129, + "sd": 4.120827319858382, + "beyond": 29 + }, + "p_mad": 0.11205, + "p_sd": 0.0818, + "p_beyond": 0.2998 + } +} \ No newline at end of file diff --git a/docs/evidence/us-state-child-spm-2026-11/outputs/state_persistence_fill_minus1.csv b/docs/evidence/us-state-child-spm-2026-11/outputs/state_persistence_fill_minus1.csv new file mode 100644 index 0000000000..35118c8eda --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/outputs/state_persistence_fill_minus1.csv @@ -0,0 +1,52 @@ +,dense_initial,dense_initial_se,acs_rows,acs_rows_se,census_se,z_dense,z_acs,joint_z +AK,-4.048191684830667,0.8970697523813582,4.377056011665996,3.8674701569110397,1.2765957446808511,-2.594551814932506,1.0747263386223098,0.0 +AL,-2.9051191319952174,1.2167865033734007,-0.48651043792738413,1.3201238751499236,1.458966565349544,-1.5291895090811582,-0.24726529237289666,0.24726529237289666 +AR,-0.405416993411583,1.0680665554684374,-2.685710492646857,1.4069716796086178,1.6413373860182372,-0.20702994229473332,-1.2423254736156564,0.20702994229473332 +AZ,3.843807491659291,1.4151817786418597,2.1228292887538522,1.1361190125873954,1.398176291793313,1.9321626492802886,1.1783202328464526,1.1783202328464526 +CA,2.9225878233527354,0.5906538721222633,-0.7181825222738283,0.44765749055376786,0.60790273556231,3.448093619025647,-0.9513035848129473,0.0 +CO,0.8809674492820898,0.98023045849131,0.4264986113948952,0.714650612194822,1.094224924012158,0.5996751282337094,0.3263374108900439,0.3263374108900439 +CT,-0.13712000829784188,1.3514663470288042,2.1976649959271484,1.6303966945262747,1.9452887537993921,-0.05788896764957569,0.8658439212886221,0.0 +DC,-4.908187992412584,1.7332714466392853,1.7969366196813894,5.492706307713332,2.2492401215805473,-1.7284804920729555,0.302749332982209,0.0 +DE,5.348836874890656,1.7284089111684748,6.264556458685824,2.865571367630918,1.580547112462006,2.2837585854566265,1.9142697029335978,1.9142697029335978 +FL,0.8820795735107438,0.8641410736104425,-5.090235557400884,0.5823985920811567,1.094224924012158,0.6326332903950621,-4.106476046052587,0.0 +GA,0.30313021997410416,1.0105650010031857,-2.7340585938479247,0.7861697616877288,1.3373860182370823,0.180837381043606,-1.7623820620881954,0.0 +HI,-2.1741066636255777,1.189593256244055,-7.927113157323014,0.8403045589641391,1.580547112462006,-1.0990347481285263,-4.428457448729185,1.0990347481285263 +IA,-0.1910881107042499,1.0302147409877493,-2.7618273071213624,0.8378005928894581,1.1550151975683889,-0.12346515773539984,-1.935578718847079,0.12346515773539984 +ID,1.3600598093768292,0.7702050770913274,3.0198257580514927,1.536874895172609,0.790273556231003,1.2324782591947891,1.7474284760707375,1.2324782591947891 +IL,-1.843685938735339,0.9046266224655412,-3.28677682840892,0.7046820523010107,0.9726443768996961,-1.3880019985638996,-2.7364981794311376,1.3880019985638996 +IN,-1.7791617280917489,0.9182951944068689,-0.7197762600360278,0.8067320680282937,1.3373860182370823,-1.0966888381526103,-0.4608444983901647,0.4608444983901647 +KS,-0.4309381665855412,1.1584834581138819,-1.0806564912442962,1.157438878904149,1.519756838905775,-0.22550945300038316,-0.5656937222302905,0.22550945300038316 +KY,-0.6799984024050012,1.3078335639693612,-5.846013940534895,0.6847411421861506,1.762917933130699,-0.3097851541874056,-3.091117753396044,0.3097851541874056 +LA,-6.953546326214388,0.9426938569090801,-6.3974017517613415,1.3818096828258386,1.8237082066869301,-3.3871078844790286,-2.795969561852106,2.795969561852106 +MA,0.5168209664075327,0.9707370775457278,2.4942721995141497,1.1885725905269742,1.21580547112462,0.33218986385045685,1.4669936435589492,0.33218986385045685 +MD,2.7331982207459458,1.52483546515642,0.6842248405761353,1.1754050446097233,1.519756838905775,1.2695691996803578,0.35613349416434253,0.35613349416434253 +ME,1.8938908269031831,1.5624716696092156,-1.83566979931702,1.0427753176758428,1.398176291793313,0.9032656510286583,-1.052434712476066,0.0 +MI,-0.5356881311881168,0.8929469923563752,-3.4531491637768017,0.5731837064265984,1.1550151975683889,-0.36692565023743956,-2.6780673453901693,0.36692565023743956 +MN,0.3383243889675063,1.1314076107969406,-1.3530830028264047,0.7187904123890178,1.1550151975683889,0.20925151535469433,-0.9946129446567765,0.0 +MO,1.176259191428846,1.2562727455111249,1.2667521435979445,0.998952501067569,1.398176291793313,0.6257832715978517,0.7371814664620158,0.6257832715978517 +MS,-5.187023305908539,1.0710544124515464,-3.181838087967657,1.681247230773782,1.580547112462006,-2.716766742048247,-1.3788900266211415,1.3788900266211415 +MT,-1.0769657021501455,0.9179118368740706,1.2439177960715497,2.746637529267138,1.398176291793313,-0.6439023366708293,0.40360328104725285,0.0 +NC,0.8027108858098835,1.0363589519098417,-4.044958353444928,0.7418068425966107,1.3373860182370823,0.47443387548461113,-2.6449057461926375,0.0 +ND,-1.3217134847564989,1.065153573230338,-5.222123165943135,1.4567092582961796,1.2765957446808511,-0.7949663643175545,-2.696082282452708,0.7949663643175545 +NE,0.5040752165037379,1.0813801338253826,-0.48330482015075127,1.4327432632288672,1.1550151975683889,0.31858585010669027,-0.26261860740914916,0.0 +NH,1.319164712169039,1.1636661380842388,-2.0731435912934586,1.0410016798293962,1.458966565349544,0.7068721117492321,-1.1567073684263898,0.0 +NJ,2.484714563234924,1.1785255823433625,-1.3380404719395536,0.7749380283485001,1.1550151975683889,1.505754147169594,-0.9619995894019492,0.0 +NM,-2.1588910024270103,0.8404096281278046,3.9454109486453905,2.5727440555716186,1.2765957446808511,-1.4125235196414012,1.373723294498927,0.0 +NV,2.186974911831971,1.4152803262295193,0.5630285454637303,1.4699101327703195,1.519756838905775,1.0531014756356754,0.2662945279006717,0.2662945279006717 +NY,0.16519433294321217,0.8557782267478902,-1.5595238179557036,0.8125413850408143,1.1550151975683889,0.11491751237401192,-1.104329190766703,0.0 +OH,-4.414638037113752,0.9017002738500705,-2.0369257252702084,0.707324640545021,1.2765957446808511,-2.824585295854847,-1.3956769232088833,1.3956769232088833 +OK,0.9786331524418372,1.0789085656476076,-2.4269156210384857,0.6936697180268595,1.21580547112462,0.6020532300294463,-1.7337939745470587,0.0 +OR,1.8222706670173245,1.187209714047027,-1.0376350147210793,0.9391047234304888,1.458966565349544,0.9687927503794321,-0.598033099808741,0.0 +PA,-1.3986727320868546,0.7842558907975117,0.028527656204925478,0.9551151036763976,1.21580547112462,-0.9667330586088612,0.018451355488694598,0.0 +RI,1.7450337389071908,1.3492141439481007,4.230687973641485,2.1865267072560863,1.398176291793313,0.8981099108625609,1.6301085811225753,0.8981099108625609 +SC,1.2193141213236807,0.9678664500462015,1.029888503293133,1.220142342915903,1.2765957446808511,0.7611113017254298,0.5832049925184396,0.5832049925184396 +SD,0.590922603699604,1.107164333996254,-1.0931639950999363,1.5212604403340164,1.3373860182370823,0.34035265087792316,-0.5396886811851943,0.0 +TN,-0.090195062325229,0.8943761694642755,8.322858286036851,1.3583296773440554,1.033434650455927,-0.0659943001268443,4.876393876580227,0.0 +TX,1.7761378050437813,0.7023965138228362,-0.6514021191638637,0.5091761389700658,0.790273556231003,1.6798732309679052,-0.6929054515801788,0.0 +UT,1.324245539246065,0.8895961091223195,-1.9506608723850283,0.7200935582967108,0.9726443768996961,1.0046535431723236,-1.6118567282445462,0.0 +VA,1.4623248641093678,1.0806928115922467,-1.66345798358876,0.7417936207780743,1.458966565349544,0.8054129644616375,-1.016338435108765,0.0 +VT,-0.16659645768994125,1.1869199980582361,-2.8313949630065567,1.7524339067205175,1.519756838905775,-0.08639435721343086,-1.2206232924518088,0.08639435721343086 +WA,4.703302266961051,1.1008135417936376,2.06195810226469,1.0626012254042743,1.1550151975683889,2.9477214164796974,1.3138071829961526,1.3138071829961526 +WI,-0.37300815558169464,0.8832832840706177,0.29420704851318913,0.9840981041263285,1.033434650455927,-0.27437630378466976,0.20616629344239132,0.0 +WV,-1.2377078313141308,1.01660909678896,-0.07006745175656803,1.9972605412849338,1.458966565349544,-0.696036291242705,-0.028328567200899032,0.028328567200899032 +WY,-0.9430900533734183,0.703878331506253,-1.1603972238249707,1.469142581544115,0.8510638297872339,-0.853919590129377,-0.6834515659737054,0.6834515659737054 diff --git a/docs/evidence/us-state-child-spm-2026-11/receipts.json b/docs/evidence/us-state-child-spm-2026-11/receipts.json index ec5136772a..77250bdc76 100644 --- a/docs/evidence/us-state-child-spm-2026-11/receipts.json +++ b/docs/evidence/us-state-child-spm-2026-11/receipts.json @@ -1,6 +1,6 @@ { "purpose": "Receipts for the state child SPM note. Aggregates by state and national totals only; no household rows.", - "date": "2026-11-01", + "date": "2026-11-07", "model": { "policyengine_us": "2.90.2", "policyengine_us_commit": "469ad12cb957", @@ -27,7 +27,12 @@ "revision": "725d89993f6b2dc4821fd5c3620f0f3d4d630102", "file": "populace_us_2024_acs_local.h5", "sha256": "3ce781c440a7f933b1d952ff4e9d9f65f4698c64b94d2fad165af0c662838d6c", - "bytes": 9819603807 + "bytes": 9819603807, + "rerun": { + "read": "2026-11-06, by acs_split.py through HTTP range requests (remote_fixed.py), with no local copy", + "identity": "the Hub's x-linked-etag and x-linked-size for the pinned revision matched sha256 and bytes above", + "blank_parent_links": "fill 0, which the model reads as unknown; outputs/*_fill_minus1.* keep the earlier -1 fill's figures" + } } }, "external_inputs": { @@ -152,10 +157,22 @@ "bytes": 10183 }, "outputs/acs_eval.csv": { + "sha256": "32aee14da0ff0de4590980ed68c2ff55326dcb766c96f6aa8bc20edcf4bdb54b", + "bytes": 12152 + }, + "outputs/acs_eval_fill_minus1.csv": { "sha256": "376c147a3eda66adf5c5c91750f0e64845af8d628f5f22bbd49f755d7e04397e", "bytes": 12153 }, + "outputs/acs_rerun_vs_deck.csv": { + "sha256": "90238db9d17c7c81ddfc55027aaf42dcbb17f7db8a37ec2ac951a1fe8941905f", + "bytes": 3230 + }, "outputs/acs_solves.csv": { + "sha256": "8b73ad87254a24137fcaf362331eb4dbd7c7e42417d862bcfcbc754499de5f12", + "bytes": 3427 + }, + "outputs/acs_solves_fill_minus1.csv": { "sha256": "52274cf8655c6958fbc0e3485b4d806b7e6f8a3bfa7a38a3e1c42cdab74e3a5c", "bytes": 3427 }, @@ -167,18 +184,34 @@ "sha256": "02400416f37d7dabd7b666fcb75f140566c7cebfee8cf3fa7b2554ca639da7db", "bytes": 10853 }, + "outputs/acsrent_eval_fill_minus1.csv": { + "sha256": "02400416f37d7dabd7b666fcb75f140566c7cebfee8cf3fa7b2554ca639da7db", + "bytes": 10853 + }, "outputs/acsrent_reform.csv": { "sha256": "42e443027f04b30f71d14aa239588637c2a647420724a62c4756abca2ca67a2d", "bytes": 1621 }, + "outputs/acsrent_reform_fill_minus1.csv": { + "sha256": "42e443027f04b30f71d14aa239588637c2a647420724a62c4756abca2ca67a2d", + "bytes": 1621 + }, "outputs/acsrent_solves.csv": { "sha256": "fef3ba85d72e2389f2f5d0545ea21f843ba1226384991f666db2e1c5c17a8037", "bytes": 3024 }, + "outputs/acsrent_solves_fill_minus1.csv": { + "sha256": "fef3ba85d72e2389f2f5d0545ea21f843ba1226384991f666db2e1c5c17a8037", + "bytes": 3024 + }, "outputs/asec_state_raw.csv": { "sha256": "5e28ec94ce143145bd3d8335d2820a90aab8ca9ecb9ebf43e996690a3eab5a5c", "bytes": 8183 }, + "outputs/blank_holders_state.csv": { + "sha256": "a6e576a1320a3e9a5039767f03ffb54fc39f6e41f6ce0e9b502f8fb45f2137af", + "bytes": 1299 + }, "outputs/calibration_step.csv": { "sha256": "6b032159cfba7d90721ccb049b152a599c75e09b8b8d3c480b1f4c266ba9ab5e", "bytes": 889 @@ -203,6 +236,10 @@ "sha256": "97dbc88024fa207f93df893057beb84dd356ad1f705e3bf1144afc6d1d49fb7a", "bytes": 6129 }, + "outputs/dash_swing_fill_minus1.csv": { + "sha256": "97dbc88024fa207f93df893057beb84dd356ad1f705e3bf1144afc6d1d49fb7a", + "bytes": 6129 + }, "outputs/default_noise.csv": { "sha256": "97aee00d5f5cae2d2012dbebffcc9f4f1af86cb6d088b642b40386a497633621", "bytes": 16058 @@ -280,21 +317,41 @@ "bytes": 1692 }, "outputs/logs/acs_eval.txt": { - "sha256": "b6f09dc0999a9c007574daeedb64bda4df33180278801af9c1c19f803ce58659", + "sha256": "a9d0efceb309ffa49b6ca5409d11f8410c59f9d79be53c36ebc48eb8145bb5cb", "bytes": 9939 }, + "outputs/logs/acs_hh_split.txt": { + "sha256": "cf8e13dae874188aff183b51b91702a892e72c63b31e3db36f8fa5e23ea8f568", + "bytes": 127 + }, "outputs/logs/acs_reform_cmp.txt": { "sha256": "69bb8f2efb82b96b53f8b6713c3c84e8413197156aca4821c128367fae643b0e", "bytes": 1486 }, + "outputs/logs/acs_rerun_check.txt": { + "sha256": "2bcb97f67ae25fe522a1104a1bbf9e60077cef1bf427b25d74e4487977a3bac4", + "bytes": 564 + }, + "outputs/logs/acs_split.txt": { + "sha256": "59a99ca0c62654485c355d92960ef17b43abcd324133f084ae3329e09dc742aa", + "bytes": 4096 + }, "outputs/logs/acsrent_eval.txt": { "sha256": "fdb5e7770a817328981f4ef471bb13ac15c98db5bfdbeb16116c3953442b066f", "bytes": 9939 }, + "outputs/logs/blank_holders.txt": { + "sha256": "18d8d4a7d2e4a29ad7764e2e622bc1bc512f80c86d375161e9fb48146bebeb7e", + "bytes": 720 + }, "outputs/logs/ctc_ssn.txt": { "sha256": "1d81a564a70fd2ad43424f5ff20d3d974e023ad4fc91ee56ebdfc6c2350142a3", "bytes": 480 }, + "outputs/logs/dash_swing.txt": { + "sha256": "2833ea5b2ef6f9bb7549af501d53a98dc9c1e2c6ef4f5519ad6687349812069a", + "bytes": 707 + }, "outputs/logs/dmiss.txt": { "sha256": "9349ae893019dd6700f544b1286479b2d01ac9b3b93392df807d61a2cc1b2d1b", "bytes": 1632 @@ -312,17 +369,25 @@ "bytes": 522 }, "outputs/logs/noise_ci.txt": { - "sha256": "171066f6260c026dc9e5e9a610facc65848187b77299a46557ac6a8e5768a307", - "bytes": 3024 + "sha256": "8a6c987cbda76d0eb8168b4dcf870abaebdba07c8782dda9e6f3413b8cfb3465", + "bytes": 3022 }, "outputs/logs/overlap.txt": { "sha256": "bc35fdb742c035470d15e63a852cf40f852f06539821375bbf01b89d0a2ea907", "bytes": 3531 }, + "outputs/logs/parent_blanks.txt": { + "sha256": "79fdb41e631bd6e5e0eb31df50100e8453066320e77cac6ae83d17dfb6d173f2", + "bytes": 203 + }, "outputs/logs/part.txt": { "sha256": "64776b5b610f49772f79f0fe31ae0fb75b1a6554458ba890f0da0af6cad03863", "bytes": 645 }, + "outputs/logs/persist.txt": { + "sha256": "d351d2b29e37e3b2725466800cb3c67b3d4bdf052648373f5a4d4b61a5313c27", + "bytes": 917 + }, "outputs/logs/puf_house.txt": { "sha256": "3d321f44554801a3313860bbc8e81d02d713084d575618defb374af01d4021ff", "bytes": 397 @@ -335,11 +400,23 @@ "sha256": "2ff11104da0be2f826d2d72c7ad053e86c3d49c3c60f718b4cc489e84a18654e", "bytes": 1665 }, + "outputs/logs/rent_map.txt": { + "sha256": "e099badba09c849e2ff146403ec878218b6c5bf7c61801bc66302a1e356262be", + "bytes": 39 + }, + "outputs/logs/rentfix.txt": { + "sha256": "d3e949128d1c59e0d860c7699011a61ec66763fe9350df097f59c6ec82bd92a1", + "bytes": 681 + }, "outputs/logs/thr_census.txt": { "sha256": "78329c6af9525618e98f1703ce7fe314fcae4393146196a02b56285e3f444398", "bytes": 599 }, "outputs/noise_ci.json": { + "sha256": "d194a6a7aae4c2ec6972d042b715e7e1abb85ca046b1b5ca7d6bc8d2f8438a2a", + "bytes": 3583 + }, + "outputs/noise_ci_fill_minus1.json": { "sha256": "a378e76bf685a86e01e2071c8b4bbfc184e66d8c53dc2bfc309dddff94a612e6", "bytes": 3587 }, @@ -363,6 +440,10 @@ "sha256": "1512f58ee9588a3c5fc7f0e3930b9ccf6bc0ff680e10a898a73cb4d1b6154383", "bytes": 7673 }, + "outputs/state_persistence_fill_minus1.csv": { + "sha256": "1512f58ee9588a3c5fc7f0e3930b9ccf6bc0ff680e10a898a73cb4d1b6154383", + "bytes": 7673 + }, "outputs/waterfall.csv": { "sha256": "75aa3c1eec097056ce342aa28e43bcd4431c726cd8eab56bc806c9f03af0cc56", "bytes": 17743 @@ -376,28 +457,40 @@ "bytes": 4093 }, "scripts/acs_eval.py": { - "sha256": "7eb43cbf01c33c15066d0e12d745721afbe2207a2860a2004fb37af7a101690a", - "bytes": 7069 + "sha256": "3ff90514d390a6b7b9c208314c0d6c0b9c3fe6728b35db37126e80f2ad305d10", + "bytes": 7058 }, - "scripts/acs_hh.py": { - "sha256": "bf827c705569556dcda37ed1e5f7902da82ae716378059396ea84618cc0978f6", - "bytes": 696 + "scripts/acs_hh_split.py": { + "sha256": "243b788b4345dc4e29cbd03453701575545bfa54cbc62711cec66ae7f022c747", + "bytes": 1954 }, - "scripts/acs_more.sh": { - "sha256": "a03cab963b266f9e194a87ef21d969f65b4a61ec91a5ac93e01f660ef94380ae", - "bytes": 1101 + "scripts/acs_parts.sh": { + "sha256": "f83005b16c47a74971410f1a67913ca14c553b9ac6b31d2a818a2372b605d90f", + "bytes": 1348 }, - "scripts/acs_one.py": { - "sha256": "45ba789123d4999cbf5b85cd0bc2e7e67f607130f30e8c5c107148f7b163a582", - "bytes": 2423 + "scripts/acs_parts_cmp.py": { + "sha256": "84bf77ed3e67a8880f22f551645693b68774fa1ee00bdcdf6a13f140cc7791f6", + "bytes": 1085 }, "scripts/acs_reform_cmp.py": { - "sha256": "79402b83786323aa2252576c1b4fc457245970509674376c4499e0af4855a591", - "bytes": 2103 + "sha256": "01abbeddf5d2fe2be5c7c53891311dea02a1e4d1a5b4d7419486752395fd4a73", + "bytes": 2150 + }, + "scripts/acs_rerun.py": { + "sha256": "13e5164f778a9e1110fa4d87446107d9091bfc957112ad5f6121fa064726c043", + "bytes": 7841 }, - "scripts/acs_rent_run.py": { - "sha256": "da787ccc5de771fbfa5735f16b15589e284a18fc0483726ff8ccaa3608b784bc", - "bytes": 5340 + "scripts/acs_rerun.sh": { + "sha256": "0abb8de7ece1ee3384fdc7b74ccc632308e9d7aa654e9e41f6428f99f11e5340", + "bytes": 1465 + }, + "scripts/acs_rerun_check.py": { + "sha256": "42dd7f74405524f24a8d2c72e374f08fef313be13b1867ffaa7c0c29cf848b93", + "bytes": 3072 + }, + "scripts/acs_split.py": { + "sha256": "e80812c7235ae55ce4681152959c0fa77a6e6f17795a8ff7e42cb26541db9a24", + "bytes": 7201 }, "scripts/acs_stored.py": { "sha256": "08176ca7c7b701aa70419c2fc126febe742fb1f7d1984c25da358ec998043dda", @@ -411,6 +504,10 @@ "sha256": "43e3c6a8d02ad2f91dd352f7491304a9213ed40931defe47dc97e33383892c40", "bytes": 2655 }, + "scripts/acsrent_parts.sh": { + "sha256": "62ec6b853385b1d633facf8d2d1ab0aa97593c59d37105e5a7b68ee41e5d0cca", + "bytes": 562 + }, "scripts/asec_extract.py": { "sha256": "f5889656172550ba6f8c3bfb7efc17cf6780d723a0cca0811851043155805423", "bytes": 2932 @@ -423,6 +520,10 @@ "sha256": "68f06f83297c449de20c5ae7429b29c06f70e5ea0ba715fe749af4b207f240e9", "bytes": 861 }, + "scripts/blank_holders.py": { + "sha256": "9061febf7a24508c4f138e87420d7200a09ded50e6830ef8ed1d9257d18709ca", + "bytes": 2322 + }, "scripts/cf_eval.py": { "sha256": "1283c70c81115bb310e4f5d96c7f429864e6211c641ae1bb1e63bbc63b1dbda9", "bytes": 3633 @@ -444,12 +545,12 @@ "bytes": 2659 }, "scripts/cutrun.py": { - "sha256": "ee4e16c1bd8a58f91bd5ad19c3b57b9b7e0ee1b920a2098725682b92e88e66b6", - "bytes": 3517 + "sha256": "a61cdf8ce58ae857e0551d672105d3955e9581449c4001ff0799f98819ea7f99", + "bytes": 3577 }, "scripts/dash_swing.py": { - "sha256": "a52f2e2b1f09ec7c2f2e6a9408e84e4659a9c7559acbed61beffa78f5127cc56", - "bytes": 2487 + "sha256": "2aabbbf218c045de1b7007646cc5beb29dcf1610c3c243b6675672e450220314", + "bytes": 2762 }, "scripts/decomp.py": { "sha256": "4102acc5cffd7549374f16aaa6af8fe9b8a7f9d12e5316eb7965478ce704d717", @@ -483,6 +584,14 @@ "sha256": "20cf8033ae5044e7ccf1fb1678679ddcd01befbfbc7b5a39fb3f4ddc07670660", "bytes": 1273 }, + "scripts/fill_cmp.py": { + "sha256": "415edf0839ca8d8c195b32025fbe0f9b9309f55c63a4e2bcef9e430c6d250a02", + "bytes": 1596 + }, + "scripts/fill_trace.py": { + "sha256": "d6071e3bd04e2863da4194ab78d13cce770a8aaf64b599eecc9e3fec7d6cbf00", + "bytes": 3321 + }, "scripts/fl_reform.py": { "sha256": "ee1cff431fd9f323e0705d0911b41247d1a42cddd6d7575d8146d9d2468d3d1a", "bytes": 2670 @@ -491,6 +600,10 @@ "sha256": "90a35ab5c4d615a387738ebb5f6a71f7ef0d0b3c96f77f7f1ab7ea6d3f0b4ee6", "bytes": 2264 }, + "scripts/host_wait.py": { + "sha256": "4999bf8e882b0de18d971be0194e9eda5c0f8ecef9dadb98268a7c27b1374a42", + "bytes": 1292 + }, "scripts/house.py": { "sha256": "9572cbc303793e4d5851ba70d06ca622a26a8902c0a1c1a2a56aeb2cb0442f8e", "bytes": 2530 @@ -524,28 +637,64 @@ "bytes": 4119 }, "scripts/overlap.py": { - "sha256": "09387f8f1a5613bce0db504ea725e79dea6f0d546d543621705cc6f3ab369c40", - "bytes": 10306 + "sha256": "4bc0751057fc91f7e7694a97c10fac330856b0b354e00f420364481786a7c06c", + "bytes": 7818 }, "scripts/paired.py": { "sha256": "a4461b5e7b31e37386daa9c14d67dda7607e2b93ddda04e09d2c513e6bb9ca77", "bytes": 3068 }, + "scripts/parent_blanks.py": { + "sha256": "02fc8c90540875f30b46d8e15d7f71e2eb6ca85b72e301d6579ca4f3b321dbec", + "bytes": 934 + }, "scripts/part.py": { "sha256": "fff80ba67a0b9d9cf1efe1228d9521dda26a7463c3a66bda950464965c9bbdc8", "bytes": 2463 }, + "scripts/parts_check.sh": { + "sha256": "be064641f25a3554e3a49b91b4ed9602f0329e5603050848584fed7a4bce25ca", + "bytes": 1761 + }, + "scripts/parts_ids.py": { + "sha256": "165f003e0636536fde5bd71c50169723e8b83c745168e1d05a3460a6d6af01aa", + "bytes": 2781 + }, + "scripts/parts_merge.py": { + "sha256": "59f2211aa6eecd935a09791581979b7a8d0bec6b23afc86e749938f872e02200", + "bytes": 1421 + }, + "scripts/persist.py": { + "sha256": "789662c2a493895f382beecff3455a532103f45f5c14089f8a8cc0e7e1534639", + "bytes": 3170 + }, + "scripts/post_acs.sh": { + "sha256": "e5da36c937c1a5a53c70c88a6863ecde7e46cbab560c1d35690790cb228a61e4", + "bytes": 931 + }, + "scripts/post_acsrent.sh": { + "sha256": "472603eac5196d4e20f73f7c748170a59aac668ccd0075e207fa1d38486b4929", + "bytes": 1692 + }, "scripts/prep_evidence.py": { - "sha256": "4848e0b9113348755bd010909df5429c5de84e8d640e28caadaa7d31f8c16ca0", - "bytes": 2439 + "sha256": "4332e98beb1bdaff448da4c88df74bc1b6be3f800a8f8da0ebc5b1b1b0b5a832", + "bytes": 2818 }, "scripts/puf_house.py": { "sha256": "f7055e02c3dfee9d4e2654a60db0754138f76a04a127e0adcd3b6fcc184d7224", "bytes": 1789 }, + "scripts/real_fixed_diff.py": { + "sha256": "9b4ebd290e87c0b704a06ca967fd6d5588bab5f8df2a78f81effc5d636ced8f6", + "bytes": 4985 + }, "scripts/receipts.py": { - "sha256": "59b70392fd0c2548c137e9832d3c62a21571d4fa7df027ba6331993ad37862a3", - "bytes": 4231 + "sha256": "cb11e5fc620b1473c263ca71e6dbcbe012d27557ddd88b5dcb2dbafd6940eb85", + "bytes": 3880 + }, + "scripts/remote_fixed.py": { + "sha256": "2a42ebb365e75be4083a3fb150d436e4076a09d32a7cace46a4a3fab9389b2ef", + "bytes": 11428 }, "scripts/rent2.py": { "sha256": "4bc02b7765cd72883e1cd76b9a84c06ff913afa71b1561cf2bc9bab86d5b99e9", @@ -567,6 +716,10 @@ "sha256": "0dc77b80f336a9491214f607137024d8a94052d89cfd10ff36927a11c5ca05f2", "bytes": 5158 }, + "scripts/rent_map.py": { + "sha256": "928a6c1e4d0a01fd4a5c2a24fcfbbb429d68f45f893aeb904b997999b6bc516d", + "bytes": 800 + }, "scripts/rentfix.py": { "sha256": "4e68da53964d75f3586d2cd281113291ab76383d3f34657984f9ac9d0c00d962", "bytes": 2672 @@ -591,10 +744,18 @@ "sha256": "b8265899609939684777d746f35cceca2bad5377fc10eb21dc87b08148476c69", "bytes": 2311 }, + "scripts/split_remote.sh": { + "sha256": "9e24e1a9a209246170cb5e7f3e2bcc998d8d079ba449ed48159895f25fd7a385", + "bytes": 2039 + }, "scripts/steps.py": { "sha256": "616c0550ccc8cef2ae3235d2a555407d55ed047a22113c24d4854f6f41f227d8", "bytes": 2178 }, + "scripts/test_remote_fixed.py": { + "sha256": "f7a3edda1dd1c2aae0b0f6efa15fb2964c1fc5d308f2964ab4a1c375c73fea44", + "bytes": 25392 + }, "scripts/thr.py": { "sha256": "7e5de78ec8313f2ba9cb7b10a849eb1c375944b690f33afa7cae9c963396dcf2", "bytes": 795 @@ -603,10 +764,22 @@ "sha256": "8e8f6fde5c8ef886ea308f773334c099ed4dfd89a8c36d82fe2751ac3ab2a6d6", "bytes": 2125 }, + "scripts/two_part_check.sh": { + "sha256": "735cc2c17f13a32a999e0804ae52cbab198b70523b5970ca54c55e00bcb58a14", + "bytes": 2009 + }, + "scripts/two_part_cmp.py": { + "sha256": "9ae78e5bba952e21d39b2e91bf643c91789e5ed7a67dca205f63beaee939b31e", + "bytes": 1263 + }, "scripts/vardec.py": { "sha256": "735c8c54eed72a8004657e5f6ff38269771a7d99a76ee2d14614b6bf63e802e7", "bytes": 6350 }, + "scripts/with_hold.sh": { + "sha256": "49a08e9788fc00611693c321d106f23c91ee3763e616ce54f7de10350cdabdcc", + "bytes": 1109 + }, "scripts/year.py": { "sha256": "ca35dc3ba29b95abe4e07a5921a70ad4b4099cadf7ff35ca4ccca9fe67846986", "bytes": 4304 diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py index 49b53bde66..92cd915948 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_eval.py @@ -86,7 +86,7 @@ ) if "poor_r" not in u: u["poor_r"] = np.nan -# acsrent_r covers 15 states, so the rest carry no reform delta. +# A state with no reform run carries no reform delta. u["poor_r_ran"] = u.poor_r.notna() u["poor_r"] = u.poor_r.fillna(u.poor) u = ( diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_hh.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_hh.py deleted file mode 100644 index 4e7bb7c462..0000000000 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_hh.py +++ /dev/null @@ -1,27 +0,0 @@ -import os - -SP = os.path.dirname(os.path.abspath(__file__)) -import os - -import pandas as pd - -S = os.path.expanduser( - "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" -) -f = S + "725d89993f6b2dc4821fd5c3620f0f3d4d630102/populace_us_2024_acs_local.h5" -h = pd.read_hdf(f, "household")[ - [ - "household_id", - "state_fips", - "household_support_channel", - "household_source_id", - "household_weight", - "TYPEHUGQ", - ] -] -h.to_parquet(f"{SP}/run/acs_hh.parquet") -p = pd.read_hdf(f, "person")[ - ["person_household_id", "person_spm_unit_id"] -].drop_duplicates() -p.to_parquet(f"{SP}/run/acs_unit_hh.parquet") -print(h.shape, p.shape) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_hh_split.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_hh_split.py new file mode 100644 index 0000000000..80997b8a79 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_hh_split.py @@ -0,0 +1,61 @@ +"""Household and SPM-unit keys for clustering, from the per-state split of the ACS-local file. Also checks the split's size and the rent totals.""" + +import glob +import os + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +D = f"{SP}/run/acs_split/" +right = ( + pd.read_parquet(f"{SP}/run/rent_right.parquet") + .set_index("household_source_id") + .rent_right +) +hs, us = [], [] +was = now = 0.0 +n_p = cols = 0 +for f in sorted(glob.glob(D + "*-household.pkl.gz")): + h = pd.read_pickle(f) + p = pd.read_pickle(f.replace("-household", "-person")) + hs.append( + h[ + [ + "household_id", + "state_fips", + "household_support_channel", + "household_source_id", + "household_weight", + "TYPEHUGQ", + ] + ] + ) + us.append(p[["person_household_id", "person_spm_unit_id"]].drop_duplicates()) + acs = h.household_support_channel.astype(str).str.startswith("acs").values + hr = pd.Series( + np.where( + acs, + 12 + * pd.to_numeric(h.acs_monthly_contract_rent, errors="coerce") + .fillna(0) + .values, + h.household_source_id.map(right).values, + ), + index=h.household_id.values, + ) + assert hr.notna().all() + head = p.is_household_head.astype(bool).values + was += p.pre_subsidy_rent.sum() + now += p.person_household_id[head].map(hr).sum() + n_p += len(p) + cols = p.shape[1] +h = pd.concat(hs, ignore_index=True) +u = pd.concat(us, ignore_index=True) +h.to_parquet(f"{SP}/run/acs_hh.parquet", compression="zstd") +u.to_parquet(f"{SP}/run/acs_unit_hh.parquet", compression="zstd") +print( + "households", h.shape, "unit keys", u.shape, "people", n_p, "person columns", cols +) +print("rent was", round(was / 1e9, 2), "now", round(now / 1e9, 2)) +print("weight total", round(h.household_weight.sum())) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_more.sh b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_more.sh deleted file mode 100755 index e708c61234..0000000000 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_more.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/zsh -# Cut the remaining 36 ACS-local states, then simulate them two at a time, smallest first, and drop each cut when its state finishes. -SP=${0:a:h}; cd $SP -S=~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots -ALL=(1 2 4 5 6 8 9 10 11 12 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 44 45 46 47 48 49 50 51 53 54 55 56) -REST=() -for f in $ALL; do n=$(printf %02d $f); [ -f run/acs/$n.parquet ] || REST+=$f; done -ONLY_FIPS=${(j:,:)REST} OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 env/.venv/bin/python - <&1 | tail -2 | cut -c1-200 -import sys; sys.path.insert(0,"$SP"); sys.argv=["x"] -import cutrun, pathlib -d=pathlib.Path("$SP/run/acs_cuts"); d.mkdir(exist_ok=True,parents=True) -print(cutrun.cut("$S/725d89993f6b2dc4821fd5c3620f0f3d4d630102/populace_us_2024_acs_local.h5", d)) -PY -ls -Sr run/acs_cuts | sed 's/.pkl//' | OMP_NUM_THREADS=2 OPENBLAS_NUM_THREADS=2 xargs -P 2 -I{} sh -c 'env/.venv/bin/python acs_one.py {} >> run/acs.log 2>&1 && [ -f run/acs/{}.parquet ] && rm -f run/acs_cuts/{}.pkl' -echo done $(ls run/acs | wc -l) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_one.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_one.py deleted file mode 100644 index f50d4c3413..0000000000 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_one.py +++ /dev/null @@ -1,69 +0,0 @@ -"""One ACS-local state at current policyengine-us: unit results for 2025, with the 2021 CTC reform, keyed for clustering. -Usage: acs_one.py """ - -import os -import sys -import time -import warnings - -import numpy as np -import pandas as pd - -warnings.filterwarnings("ignore") -SP = os.path.dirname(os.path.abspath(__file__)) -from policyengine_core.data import Dataset -from policyengine_core.reforms import Reform -from policyengine_us import Microsimulation - -fips = int(sys.argv[1]) -TAG = os.environ.get("ACS_TAG", "acs") -Y = 2025 -f = f"{SP}/run/{TAG}/{fips:02d}.parquet" -if os.path.exists(f): - sys.exit(0) -t0 = time.time() -frame = pd.read_pickle(f"{SP}/run/{TAG}_cuts/{fips:02d}.pkl") -for c in frame.columns: - if c.startswith("parent_") and c.endswith("_id__2024"): - frame[c] = frame[c].fillna(-1).astype(np.int64) -if "spm_unit_spm_universe_status__2024" not in frame: - # policyengine-us 2.90.2 ignores this column, so every SPM unit stays in the run. - frame["spm_unit_spm_universe_status__2024"] = "INCLUDED" -d = "2025-01-01.2025-12-31" -ref = Reform.from_dict( - { - "gov.irs.credits.ctc.amount.arpa[0].amount": {d: 3600}, - "gov.irs.credits.ctc.amount.arpa[1].amount": {d: 3000}, - "gov.irs.credits.ctc.refundable.fully_refundable": {d: True}, - "gov.irs.credits.ctc.phase_out.arpa.in_effect": {d: True}, - }, - country_id="us", -) -base = Microsimulation(dataset=Dataset.from_dataframe(frame, 2024)) -ids = base.calculate("spm_unit_id", 2024).values -age = base.calculate("age", 2024).values -pu = base.calculate("person_spm_unit_id", 2024).values -res = { - "spm_unit_id": ids, - "kids": pd.Series(age < 18).groupby(pu).sum().reindex(ids).values, -} -res["poor"] = np.asarray( - base.calculate("spm_unit_is_in_spm_poverty", Y, map_to="spm_unit").values, float -) -res["net"] = np.asarray( - base.calculate("spm_unit_net_income", Y, map_to="spm_unit").values, float -) -res["thr"] = np.asarray( - base.calculate("spm_unit_spm_threshold", Y, map_to="spm_unit").values, float -) -res["hh"] = ( - base.calculate("household_id", 2024, map_to="spm_unit").values if False else None -) -res.pop("hh") -del base -sim = Microsimulation(dataset=Dataset.from_dataframe(frame, 2024), reform=ref) -res["poor_r"] = np.asarray( - sim.calculate("spm_unit_is_in_spm_poverty", Y, map_to="spm_unit").values, float -) -pd.DataFrame(res).to_parquet(f) -print(fips, round(time.time() - t0), flush=True) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_parts.sh b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_parts.sh new file mode 100644 index 0000000000..1f262d30f0 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_parts.sh @@ -0,0 +1,21 @@ +#!/bin/zsh +# Run one ACS-local state in household parts, each part in acs_rerun.py's two steps under the 8 GiB stop, then merge the parts +# into the state's output: for states whose baseline alone passes 8 GiB (Texas and California). +# Each step waits for 48 GiB available and 58 GB free first, on Fleet ops' terms. A finished part skips on a rerun. +# Usage: acs_parts.sh [>] +SP=${0:a:h}; cd $SP +F=$1; TAG=$2; K=$3; DEST=${4:-run/$TAG} +FF=${(l:2::0:)F} +export OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 VECLIB_MAXIMUM_THREADS=1 NUMEXPR_NUM_THREADS=1 OMP_WAIT_POLICY=PASSIVE +LOG=${PARTS_LOG:-run/acs_parts.log}; PY=env/.venv/bin/python +DIR=run/parts/${DEST//\//_}/$FF-k$K +note() { print -r -- "$(date -u +%TZ) $*" >> $LOG; } +[[ -e $DEST/$FF.parquet ]] && { note "$FF $TAG already in $DEST"; exit 0; } +gate() { python3 -I host_wait.py 48 58 $LOG; } +gate +nice -n 5 $PY parts_ids.py $F $K $DIR >> $LOG 2>&1 || { note "failed $FF $TAG parts_ids exit $?"; exit 1; } +for (( k = 0; k < K; k++ )); do + gate + env TWO_PART=1 OUT=$DIR/p$k HOUSEHOLDS=$DIR/p$k.npy nice -n 5 $PY acs_rerun.py $F $TAG >> $LOG 2>&1 || { note "failed $FF $TAG part $k exit $?"; exit 1; } +done +nice -n 5 $PY parts_merge.py $F $TAG $K $DIR $DEST >> $LOG 2>&1 || { note "failed $FF $TAG merge exit $?"; exit 1; } diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_parts_cmp.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_parts_cmp.py new file mode 100644 index 0000000000..07e22ae977 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_parts_cmp.py @@ -0,0 +1,32 @@ +"""Check that a state run in household parts (acs_parts.sh) writes exactly what a whole-state run writes: every column, value, +dtype and row order. The whole-state files come from the rerun itself. +""" + +import sys + +import pandas as pd + +PAIRS = [ + ("run/acs/56.parquet", "run/parts_check/acs/56.parquet"), + ("run/acs/10.parquet", "run/parts_check/acs/10.parquet"), + ("run/acs/05.parquet", "run/parts_check/acs/05.parquet"), + ("run/acsrent/56.parquet", "run/parts_check/acsrent/56.parquet"), + ("run/acsrent/50.parquet", "run/parts_check/acsrent/50.parquet"), +] +differ = 0 +for whole, parts in PAIRS: + a, b = pd.read_parquet(whole), pd.read_parquet(parts) + try: + pd.testing.assert_frame_equal(a, b, check_exact=True) + print( + "same", + whole, + parts, + a.shape, + " ".join(f"{c}:{t}" for c, t in a.dtypes.items()), + flush=True, + ) + except AssertionError as error: + differ += 1 + print("differ", whole, parts, str(error)[:600], flush=True) +sys.exit(1 if differ else 0) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_reform_cmp.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_reform_cmp.py index 2a590a1507..bab1c951bc 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_reform_cmp.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_reform_cmp.py @@ -47,7 +47,7 @@ base["move"] = (base.acs_local_rent - base.acs_local_pub).abs() same = base[base[key].isin(m[key])] print( - "baseline move, same 15: mean", + f"baseline move, the {len(same)} states with reform runs: mean", same.move.mean().round(3), "median", same.move.median().round(3), @@ -57,7 +57,7 @@ base.move.median().round(3), ) print( - "reform move, 15: mean", + f"reform move, {len(m)} states: mean", m["diff"].abs().mean().round(3), "median", m["diff"].abs().median().round(3), diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_run.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_run.py deleted file mode 100644 index 609a72b541..0000000000 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rent_run.py +++ /dev/null @@ -1,166 +0,0 @@ -"""ACS-local file with rent on the right households, one state at a time, simulated in memory so no cut reaches disk. -Donors take the base record's right rent; ACS renter heads take twelve times native monthly contract rent. Weights unchanged. -Base simulations for all 51 first; then the 2021 CTC reform for the top-gap states. Pauses while free space reads under 30 GB.""" - -import gc -import glob -import os -import subprocess -import sys -import time -import warnings - -import numpy as np -import pandas as pd - -warnings.filterwarnings("ignore") -SP = os.path.dirname(os.path.abspath(__file__)) -sys.path.insert(0, SP) -import extract_state as ex -from policyengine_core.data import Dataset -from policyengine_core.reforms import Reform -from policyengine_us import Microsimulation - -S = os.path.expanduser( - "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" -) -FREE = os.path.expanduser("~/reviews/us-hub/scripts/free_gb.py") -Y = 2025 -TOP = [11, 10, 47, 24, 12, 44, 50, 29, 22, 30, 28, 15, 5, 25, 23] - - -def wait_for_space(): - while True: - gb = float( - subprocess.run( - ["python3", FREE], capture_output=True, text=True - ).stdout.split()[0] - ) - if gb >= 30: - return gb - print("pause, free", gb, flush=True) - time.sleep(120) - - -ex.load(S + "725d89993f6b2dc4821fd5c3620f0f3d4d630102/populace_us_2024_acs_local.h5") -de = pd.read_hdf( - [x for x in glob.glob(S + "15cefac4*/*.h5") if "calib" not in x][0], "household" -)[["household_id", "household_source_id"]] -right = ( - pd.read_parquet(f"{SP}/run/rentfix_dense.parquet") - .merge(de, on="household_id") - .drop_duplicates("household_source_id") - .set_index("household_source_id") - .rent_right -) -h = ex.tables["household"] -p = ex.tables["person"] -acs = h.household_support_channel.astype(str).str.startswith("acs").values -hr = pd.Series( - np.where( - acs, - 12 - * pd.to_numeric(h.acs_monthly_contract_rent, errors="coerce").fillna(0).values, - h.household_source_id.map(right).values, - ), - index=h.household_id.values, -) -assert hr.notna().all() -head = p.is_household_head.astype(bool).values -rent = np.zeros(len(p)) -rent[head] = p.person_household_id[head].map(hr).values -print( - "rent was", - round(p.pre_subsidy_rent.sum() / 1e9, 2), - "now", - round(rent.sum() / 1e9, 2), - flush=True, -) -p["pre_subsidy_rent"] = rent -ex.tables["person"] = p -sizes = h.groupby("state_fips").size().sort_values() -order = TOP + [int(f) for f in sizes.index if int(f) not in TOP] -os.makedirs(f"{SP}/run/acsrent", exist_ok=True) -os.makedirs(f"{SP}/run/acsrent_r", exist_ok=True) - - -def frame_for(fips): - frame = ex.state_file(fips) - for c in frame.columns: - if c.startswith("parent_") and c.endswith("_id__2024"): - frame[c] = frame[c].fillna(-1).astype(np.int64) - if "spm_unit_spm_universe_status__2024" not in frame: - frame["spm_unit_spm_universe_status__2024"] = "INCLUDED" - return frame - - -for fips in order: - f = f"{SP}/run/acsrent/{fips:02d}.parquet" - if os.path.exists(f): - continue - gb = wait_for_space() - t0 = time.time() - sim = Microsimulation(dataset=Dataset.from_dataframe(frame_for(fips), 2024)) - ids = sim.calculate("spm_unit_id", 2024).values - age = sim.calculate("age", 2024).values - pu = sim.calculate("person_spm_unit_id", 2024).values - res = { - "spm_unit_id": ids, - "kids": pd.Series(age < 18).groupby(pu).sum().reindex(ids).values, - } - res["poor"] = np.asarray( - sim.calculate("spm_unit_is_in_spm_poverty", Y, map_to="spm_unit").values, float - ) - res["net"] = np.asarray( - sim.calculate("spm_unit_net_income", Y, map_to="spm_unit").values, float - ) - res["thr"] = np.asarray( - sim.calculate("spm_unit_spm_threshold", Y, map_to="spm_unit").values, float - ) - res["snap"] = np.asarray( - sim.calculate("snap", 2024, map_to="spm_unit").values, float - ) - res["house"] = np.asarray( - sim.calculate( - "spm_unit_capped_housing_subsidy", 2024, map_to="spm_unit" - ).values, - float, - ) - pd.DataFrame(res).to_parquet(f) - del sim - gc.collect() - print(fips, round(time.time() - t0), "free", gb, flush=True) -d = "2025-01-01.2025-12-31" -ref = Reform.from_dict( - { - "gov.irs.credits.ctc.amount.arpa[0].amount": {d: 3600}, - "gov.irs.credits.ctc.amount.arpa[1].amount": {d: 3000}, - "gov.irs.credits.ctc.refundable.fully_refundable": {d: True}, - "gov.irs.credits.ctc.phase_out.arpa.in_effect": {d: True}, - }, - country_id="us", -) -for fips in TOP: - f = f"{SP}/run/acsrent_r/{fips:02d}.parquet" - if os.path.exists(f): - continue - wait_for_space() - t0 = time.time() - sim = Microsimulation( - dataset=Dataset.from_dataframe(frame_for(fips), 2024), reform=ref - ) - pd.DataFrame( - { - "spm_unit_id": sim.calculate("spm_unit_id", 2024).values, - "poor_r": np.asarray( - sim.calculate( - "spm_unit_is_in_spm_poverty", Y, map_to="spm_unit" - ).values, - float, - ), - } - ).to_parquet(f) - del sim - gc.collect() - print("reform", fips, round(time.time() - t0), flush=True) -print("done", flush=True) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rerun.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rerun.py new file mode 100644 index 0000000000..a0ca71af88 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rerun.py @@ -0,0 +1,210 @@ +"""One ACS-local state from the per-state split: baseline and the 2021 CTC reform for 2025, keyed for clustering. + +Every donor in the file leaves its parent links blank. The model reads 0 as unknown (parent_1_id.py), so blanks take 0. +Usage: acs_rerun.py . Tag acs keeps the published rent. Tag acsrent gives donors the base record's right rent +and ACS renter heads twelve times native monthly contract rent, with weights unchanged. +FILL overrides the fill for the checks in acs_rerun.sh: -1 repeats the earlier runs, and none leaves the blanks in place. +Such a check skips the reform unless WITH_REFORM=1, which runs it too: the South Dakota trace compares reform effects that way. +Stops itself with exit 75 if peak RSS passes RSS_CAP_GIB (default 8). + +Texas passed 8 GiB holding the baseline and then the reform in one image. So once run/two_part_ok exists (two_part_check.sh +writes it after two steps reproduce one process exactly), a state whose person split reaches TWO_PART_MB (default 12) runs in +two steps. The baseline step writes its results to .base and re-executes this process for the reform step, which reads +them back: the process holds one simulation at a time, under the same stop. A run stopped after the baseline step starts at the +reform. TWO_PART=1 or 0 forces either way, and OUT sends the output to another folder, for the check. +While run/hold exists, a run waits at its start, before any heavy import, unless IGNORE_HOLD is set: two_part_check.sh +holds the rerun between states that way. +HOUSEHOLDS names a .npy file of household ids, and the run then covers only those households: acs_parts.sh runs a state +in parts that way. +""" + +import gc +import os +import resource +import sys +import threading +import time +import warnings + +SP = os.path.dirname(os.path.abspath(__file__)) +if os.path.exists(f"{SP}/run/hold") and not os.environ.get("IGNORE_HOLD"): + # two_part_check.sh holds the rerun between states: wait here, before any heavy import, until it lets go. + mark = f"{SP}/run/held.{os.getpid()}" + open(mark, "w").close() + while os.path.exists(f"{SP}/run/hold"): + time.sleep(15) + os.remove(mark) +import numpy as np +import pandas as pd + +warnings.filterwarnings("ignore") +sys.path.insert(0, SP) +fips, TAG = int(sys.argv[1]), sys.argv[2] +FILL = os.environ.get("FILL", "0") +CAP = float(os.environ.get("RSS_CAP_GIB", "8")) * 2**30 + + +def peak(): + return resource.getrusage(resource.RUSAGE_SELF).ru_maxrss + + +def watch(): + while True: + time.sleep(2) + if peak() > CAP: + print(f"rss stop {fips} {TAG} peak {peak() / 2**30:.2f} GiB", flush=True) + os._exit(75) + + +threading.Thread(target=watch, daemon=True).start() +import extract_state as ex +from policyengine_core.data import Dataset +from policyengine_core.reforms import Reform +from policyengine_us import CountryTaxBenefitSystem, Microsimulation + +Y = 2025 +checking = FILL != "0" +with_reform = not checking or os.environ.get("WITH_REFORM") == "1" +folder = os.environ.get("OUT") or ( + f"{SP}/run/check_fill{FILL}" if checking else f"{SP}/run/{TAG}" +) +os.makedirs(folder, exist_ok=True) +target = f"{folder}/{fips:02d}.parquet" +if os.path.exists(target): + sys.exit(0) +partial = f"{target}.base" +forced = os.environ.get("TWO_PART") +if checking: + two_part = False +elif forced in ("0", "1"): + two_part = forced == "1" +else: + size_mb = os.path.getsize(f"{SP}/run/acs_split/{fips:02d}-person.pkl.gz") / 1e6 + two_part = os.path.exists(f"{SP}/run/two_part_ok") and size_mb >= float( + os.environ.get("TWO_PART_MB", "12") + ) +step = ("reform" if os.path.exists(partial) else "baseline") if two_part else "both" +t0 = float(os.environ.get("TWO_PART_T0", time.time())) +ex.known = set(CountryTaxBenefitSystem().variables) +ex.tables = { + n: pd.read_pickle(f"{SP}/run/acs_split/{fips:02d}-{n}.pkl.gz") + for n in ("household", "person", *ex.GROUPS) +} +if TAG == "acsrent": + h, p = ex.tables["household"], ex.tables["person"] + right = ( + pd.read_parquet(f"{SP}/run/rent_right.parquet") + .set_index("household_source_id") + .rent_right + ) + acs = h.household_support_channel.astype(str).str.startswith("acs").values + hr = pd.Series( + np.where( + acs, + 12 + * pd.to_numeric(h.acs_monthly_contract_rent, errors="coerce") + .fillna(0) + .values, + h.household_source_id.map(right).values, + ), + index=h.household_id.values, + ) + assert hr.notna().all() + head = p.is_household_head.astype(bool).values + rent = np.zeros(len(p)) + rent[head] = p.person_household_id[head].map(hr).values + p["pre_subsidy_rent"] = rent +if os.environ.get("HOUSEHOLDS"): + # One part of the state (acs_parts.sh): only these households reach the simulation. + households = ex.tables["household"] + ex.tables["household"] = households[ + households.household_id.isin(np.load(os.environ["HOUSEHOLDS"])) + ] +frame = ex.state_file(fips) +ex.tables = None +gc.collect() +if FILL != "none": + for c in frame.columns: + if c.startswith("parent_") and c.endswith("_id__2024"): + frame[c] = frame[c].fillna(int(FILL)).astype(np.int64) +if "spm_unit_spm_universe_status__2024" not in frame: + # policyengine-us 2.90.2 ignores this column, so every SPM unit stays in the run. + frame["spm_unit_spm_universe_status__2024"] = "INCLUDED" +d = "2025-01-01.2025-12-31" +ref = Reform.from_dict( + { + "gov.irs.credits.ctc.amount.arpa[0].amount": {d: 3600}, + "gov.irs.credits.ctc.amount.arpa[1].amount": {d: 3000}, + "gov.irs.credits.ctc.refundable.fully_refundable": {d: True}, + "gov.irs.credits.ctc.phase_out.arpa.in_effect": {d: True}, + }, + country_id="us", +) + + +def unit(sim, name, period=Y): + return np.asarray(sim.calculate(name, period, map_to="spm_unit").values, float) + + +if step == "reform": + res = pd.read_parquet(partial) +else: + base = Microsimulation(dataset=Dataset.from_dataframe(frame, 2024)) + ids = base.calculate("spm_unit_id", 2024).values + age = base.calculate("age", 2024).values + pu = base.calculate("person_spm_unit_id", 2024).values + res = { + "spm_unit_id": ids, + "kids": pd.Series(age < 18).groupby(pu).sum().reindex(ids).values, + } + res["poor"] = unit(base, "spm_unit_is_in_spm_poverty") + res["net"] = unit(base, "spm_unit_net_income") + res["thr"] = unit(base, "spm_unit_spm_threshold") + if TAG == "acsrent": + res["snap"] = unit(base, "snap", 2024) + res["house"] = unit(base, "spm_unit_capped_housing_subsidy", 2024) + del base + gc.collect() +if step == "baseline": + pd.DataFrame(res).to_parquet(partial + ".tmp", compression="zstd") + os.replace(partial + ".tmp", partial) + print( + fips, + TAG, + "baseline step seconds", + round(time.time() - t0), + "peak GiB", + round(peak() / 2**30, 2), + flush=True, + ) + os.execve( + sys.executable, + sys.orig_argv, + dict(os.environ, TWO_PART_T0=repr(t0), TWO_PART_PEAK=str(peak())), + ) +if with_reform: + sim = Microsimulation(dataset=Dataset.from_dataframe(frame, 2024), reform=ref) + res["poor_r"] = unit(sim, "spm_unit_is_in_spm_poverty") + if step == "reform": + assert np.array_equal( + sim.calculate("spm_unit_id", 2024).values, res["spm_unit_id"].values + ) + del sim + gc.collect() +pd.DataFrame(res).to_parquet(target + ".tmp", compression="zstd") +os.replace(target + ".tmp", target) +if step == "reform": + os.remove(partial) +top = max(peak(), int(os.environ.get("TWO_PART_PEAK", "0"))) +print( + fips, + TAG, + "fill", + FILL, + "seconds", + round(time.time() - t0), + "peak GiB", + round(top / 2**30, 2), + *(["two steps"] if two_part else []), + flush=True, +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rerun.sh b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rerun.sh new file mode 100755 index 0000000000..0e4c2d42fd --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rerun.sh @@ -0,0 +1,22 @@ +#!/bin/zsh +# Every ACS-local state, one process at a time, smallest first: rent as published, then rent on the right households. +# Fleet ops' terms for this run: one process, one thread, nice 5, an 8 GiB stop and under 300 MB of new disk. +# Before each state it waits for 48 GiB available and RERUN_FREE_GB (default 65) GB free, and while a host booking refuses this caller. +SP=${0:a:h}; cd $SP +export OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1 VECLIB_MAXIMUM_THREADS=1 NUMEXPR_NUM_THREADS=1 OMP_WAIT_POLICY=PASSIVE +LOG=run/acs_rerun.log; PY=env/.venv/bin/python +gate() { python3 -I host_wait.py 48 ${RERUN_FREE_GB:-65} $LOG; } +ORDER=(${(f)"$(ls -Sr run/acs_split/*-person.pkl.gz | sed -E 's#.*/([0-9]{2})-person.pkl.gz#\1#')"}) +print "start $(date -u +%FT%TZ) states ${#ORDER}" >> $LOG +# What the model does with a blank, on the smallest state, and two states that must repeat the earlier -1 runs. +gate; print "blank check on ${ORDER[1]}" >> $LOG; FILL=none nice -n 5 $PY acs_rerun.py ${ORDER[1]} acs 2>&1 | tail -3 | cut -c1-300 >> $LOG +for f in 10 6; do gate; FILL=-1 nice -n 5 $PY acs_rerun.py $f acs >> $LOG 2>&1; done +for TAG in acs acsrent; do + for f in $ORDER; do + gate + nice -n 5 $PY acs_rerun.py $f $TAG >> $LOG 2>&1 + rc=$?; [ $rc = 0 ] || print "failed $f $TAG exit $rc $(date -u +%TZ)" >> $LOG + done + print "pass $TAG done $(date -u +%TZ) MB $(du -sm run/$TAG | cut -f1)" >> $LOG +done +print "done $(date -u +%FT%TZ)" >> $LOG diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rerun_check.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rerun_check.py new file mode 100644 index 0000000000..cf3a0b42c0 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_rerun_check.py @@ -0,0 +1,100 @@ +"""Check the rerun: 51 rates against the deck's fill-0 run, and two states under -1 against the earlier runs. Then trace which units the fill moves.""" + +import json +import os +import re +import subprocess + +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +S = os.path.expanduser("~/PolicyEngine/policyengine-slides") +FIPS = eval( + re.search(r"FIPS\s*=\s*(\{.*?\})", open(f"{SP}/acs_eval.py").read(), re.S).group(1) +) +AB = {v: k for k, v in FIPS.items()} +deck = ( + pd.DataFrame( + json.loads( + subprocess.run( + [ + "git", + "-C", + S, + "show", + "99ee5b354:slideshows/appam-2026/data/state_baseline.json", + ], + capture_output=True, + text=True, + ).stdout + )["rows"] + ) + .set_index("state") + .child_spm_percent +) +earlier = pd.read_csv(f"{SP}/run/acs_eval_fill_minus1.csv", index_col=0).acs_local +h = pd.read_parquet(f"{SP}/run/acs_hh.parquet") +uh = pd.read_parquet(f"{SP}/run/acs_unit_hh.parquet").drop_duplicates( + "person_spm_unit_id" +) + + +def rates(folder): + u = pd.concat( + [ + pd.read_parquet(f"{SP}/run/{folder}/{f}") + for f in sorted(os.listdir(f"{SP}/run/{folder}")) + if f.endswith(".parquet") + ], + ignore_index=True, + ) + u = ( + u[u.kids > 0] + .merge(uh, left_on="spm_unit_id", right_on="person_spm_unit_id") + .merge(h, left_on="person_household_id", right_on="household_id") + ) + u["W"] = u.household_weight * u.kids + return u, ( + 100 + * (u.W * u.poor).groupby(u.state_fips).sum() + / u.W.groupby(u.state_fips).sum() + ).rename(index=AB) + + +u0, r0 = rates("acs") +a = pd.DataFrame({"rerun": r0, "deck_99ee5b354": deck}) +a["diff"] = a.rerun - a.deck_99ee5b354 +print( + "rates against the deck's fill-0 run: states", + int(a.rerun.notna().sum()), + "largest difference", + a["diff"].abs().max(), +) +a.to_csv(f"{SP}/run/acs_rerun_vs_deck.csv") +u1, r1 = rates("check_fill-1") +print( + "the split under -1 against the earlier -1 runs:", + {s: (round(r1[s], 6), round(earlier[s], 6)) for s in r1.index}, +) +for st in r1.index: + fips = FIPS[st] + m = u0[u0.state_fips == fips][ + ["spm_unit_id", "poor", "W", "household_support_channel", "household_source_id"] + ].merge(u1[["spm_unit_id", "poor"]], on="spm_unit_id", suffixes=("_0", "_m1")) + mv = m[m.poor_0 != m.poor_m1] + T = m.W.sum() + print( + st, + "units that change", + len(mv), + "by channel", + mv.household_support_channel.astype(str).value_counts().to_dict(), + "source households", + mv.household_source_id.nunique(), + "rate move", + round(100 * (mv.W * (mv.poor_0 - mv.poor_m1)).sum() / T, 4), + "largest source household's share of the state's child weight, percent", + round(100 * mv.groupby("household_source_id").W.sum().max() / T, 3) + if len(mv) + else 0, + ) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acs_split.py b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_split.py new file mode 100644 index 0000000000..b9dd5cf5e1 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acs_split.py @@ -0,0 +1,203 @@ +"""Split the ACS-local file by state, one table per file, as state_baseline.py's split_by_state does. + +The source is a local H5 path or an https URL. A URL reads through range requests (remote_fixed.py), so no copy of the file lands anywhere. +The person table reads in chunks, so the whole table never sits in memory, and rows keep file order within each state. +A group that spans states goes to every state it touches, so no member loses its group's row. +With SPLIT_GATE set to " ", it waits at host_wait.py before each table and each chunk. +A run that stops keeps its finished chunks, and the next run with the same chunk size starts after them. +Stops itself with exit 75 if peak RSS passes RSS_CAP_GIB (default 8). +Usage: acs_split.py
+A URL also needs SPLIT_SIZE and SPLIT_SHA256, which it checks against what the URL reports. +""" + +import glob +import json +import os +import resource +import shutil +import subprocess +import sys +import threading +import time + +import numpy as np +import pandas as pd + +HERE = os.path.dirname(os.path.abspath(__file__)) +source, out = sys.argv[1], sys.argv[2] +GROUPS = ("tax_unit", "spm_unit", "family", "marital_unit") +CHUNK = int(os.environ.get("SPLIT_CHUNK", "400000")) +GATE = os.environ.get("SPLIT_GATE", "").split() +GZ = {"method": "gzip", "compresslevel": 1} +finished = f"{out}/parts.finished" +if os.path.exists(finished): + shutil.rmtree(finished) + print("an earlier run finished this split", flush=True) + sys.exit(0) +os.makedirs(f"{out}/parts", exist_ok=True) +t0 = time.time() +CAP = float(os.environ.get("RSS_CAP_GIB", "8")) + + +def peak(): + return round(resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 2**30, 2) + + +def watch(): + while True: + time.sleep(2) + if peak() > CAP: + print("rss stop, peak GiB", peak(), flush=True) + os._exit(75) + + +def gate(): + if GATE: + subprocess.run(["python3", "-I", f"{HERE}/host_wait.py", *GATE], check=True) + + +def open_store(): + if not source.startswith("https://") and not source.startswith("http://"): + return pd.HDFStore(source, "r") + sys.path.insert(0, HERE) + from remote_fixed import RemoteStore + + return RemoteStore( + source, + size=int(os.environ["SPLIT_SIZE"]), + sha256=os.environ["SPLIT_SHA256"], + rate=int(os.environ.get("SPLIT_RATE", "3000000")), + patience=int(os.environ.get("SPLIT_PATIENCE", "7200")), + ) + + +def nrows(store, key): + if not isinstance(store, pd.HDFStore): + return store.nrows(key) + node = store.get_node(key) + return node.table.nrows if "table" in node else node.axis1.shape[0] + + +def replace_when_written(frame, path): + frame.to_pickle(f"{path}.tmp", compression=GZ) + os.replace(f"{path}.tmp", path) + + +threading.Thread(target=watch, daemon=True).start() + + +with open_store() as store: + n = nrows(store, "person") + print("source", type(store).__name__, "people", n, "chunk", CHUNK, flush=True) + # A stopped run's finished chunks count only if the next run cuts the table the same way. + plan, wanted = f"{out}/parts/plan.json", {"people": int(n), "chunk": CHUNK} + if os.path.exists(plan): + with open(plan) as f: + held = json.load(f) + if held != wanted: + sys.exit( + f"{out}/parts holds a run cut as {held}, and this run wants {wanted}; remove it to start over" + ) + else: + with open(f"{plan}.tmp", "w") as f: + json.dump(wanted, f) + os.replace(f"{plan}.tmp", plan) + state_file = f"{out}/parts/states.pkl" + if os.path.exists(state_file): + states = pd.read_pickle(state_file) + else: + gate() + households = store.select("household") + print("households", households.shape, "peak GiB", peak(), flush=True) + for state, rows in households.groupby("state_fips", sort=False): + replace_when_written(rows, f"{out}/{int(state):02d}-household.pkl.gz") + states = households.set_index("household_id")["state_fips"] + del households + states.to_pickle(f"{state_file}.tmp") + os.replace(f"{state_file}.tmp", state_file) + ids = {g: [] for g in GROUPS} + fips_all, columns, seen = [], None, 0 + for i, a in enumerate(range(0, n, CHUNK)): + marker = f"{out}/parts/chunk-{i:05d}.npz" + if os.path.exists(marker): + with np.load(marker) as kept: + fips = kept["fips"] + for g in GROUPS: + ids[g].append(kept[g]) + seen += len(fips) + fips_all.append(fips) + print("chunk", i, "already done", flush=True) + continue + gate() + people = store.select("person", start=a, stop=min(a + CHUNK, n)) + columns = people.shape[1] + seen += len(people) + fips = people["person_household_id"].map(states) + assert fips.notna().all() + for state, rows in people.groupby(fips.values, sort=False): + rows.to_pickle( + f"{out}/parts/{int(state):02d}-person-{i:05d}.pkl.gz", compression=GZ + ) + chunk_ids = {g: people[f"person_{g}_id"].values for g in GROUPS} + for g in GROUPS: + ids[g].append(chunk_ids[g]) + fips_all.append(fips.values) + np.savez(f"{marker}.tmp.npz", fips=fips.values, **chunk_ids) + os.replace(f"{marker}.tmp.npz", marker) + del people, fips, chunk_ids + print( + "chunk", + i, + "seconds", + round(time.time() - t0), + "peak GiB", + peak(), + flush=True, + ) + assert seen == n + print("people", seen, "person columns", columns, flush=True) + fips = np.concatenate(fips_all) + for g in GROUPS: + gate() + pairs = pd.DataFrame( + {"id": np.concatenate(ids[g]), "state": fips} + ).drop_duplicates() + print( + g, + "groups", + pairs.id.nunique(), + "spanning states", + int(pairs.id.duplicated().sum()), + flush=True, + ) + table = store.select(g) + for state, members in pairs.groupby("state", sort=False): + replace_when_written( + table[table[f"{g}_id"].isin(members.id)], + f"{out}/{int(state):02d}-{g}.pkl.gz", + ) + del table, pairs, members + print(g, "peak GiB", peak(), flush=True) +for state in sorted({int(s) for s in states.unique()}): + final, merged = ( + f"{out}/{state:02d}-person.pkl.gz", + f"{out}/parts/merged-{state:02d}", + ) + parts = sorted(glob.glob(f"{out}/parts/{state:02d}-person-*.pkl.gz")) + if not os.path.exists(merged): + replace_when_written(pd.concat([pd.read_pickle(p) for p in parts]), final) + open(merged, "w").close() + for p in parts: + os.remove(p) +# The rename settles that the split is whole, so no stop can leave a chunk's marker without its parts for a later run to trust. +os.replace(f"{out}/parts", finished) +shutil.rmtree(finished) +print( + "done files", + len(glob.glob(f"{out}/*.pkl.gz")), + "seconds", + round(time.time() - t0), + "peak GiB", + peak(), + flush=True, +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/acsrent_parts.sh b/docs/evidence/us-state-child-spm-2026-11/scripts/acsrent_parts.sh new file mode 100644 index 0000000000..af4e66a251 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/acsrent_parts.sh @@ -0,0 +1,10 @@ +#!/bin/zsh +# The corrected-rent states whose baseline step passed the 8 GiB stop (New York, Florida, Texas, California), each in household +# parts through acs_parts.sh, one process at a time. The corrected-rent baseline computes SNAP and housing subsidy too, so it +# needs more parts than the published-rent pass did. +SP=${0:a:h}; cd $SP +LOG=run/acs_parts.log +for f k in 36 3 12 3 48 4 6 5; do + zsh acs_parts.sh $f acsrent $k || print -r -- "$(date -u +%TZ) $f acsrent parts failed" >> $LOG +done +print -r -- "$(date -u +%TZ) corrected-rent parts ended" >> $LOG diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/blank_holders.py b/docs/evidence/us-state-child-spm-2026-11/scripts/blank_holders.py new file mode 100644 index 0000000000..59fc99253b --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/blank_holders.py @@ -0,0 +1,87 @@ +"""Who holds a blank parent link in the ACS-local file, by channel, household and state. Reads the split's tables, with no simulation. +Usage: blank_holders.py """ + +import glob +import os +import sys + +import pandas as pd + +d = sys.argv[1] +rows = [] +for f in sorted(glob.glob(d + "/*-person.pkl.gz")): + fips = int(os.path.basename(f)[:2]) + p = pd.read_pickle(f) + q = p[ + [ + "parent_1_id", + "parent_2_id", + "person_support_channel", + "person_household_id", + "age", + ] + ].copy() + del p + h = pd.read_pickle(f.replace("-person", "-household"))[ + ["household_id", "household_weight"] + ] + q = q.merge(h, left_on="person_household_id", right_on="household_id", how="left") + q["fips"] = fips + rows.append(q) +a = pd.concat(rows, ignore_index=True) +print("people", len(a), "households", a.person_household_id.nunique()) +b1, b2 = a.parent_1_id.isna(), a.parent_2_id.isna() +a["blank"] = b1 | b2 +w = a.household_weight +kids = a.age < 18 +print( + "blank parent_1", + int(b1.sum()), + "parent_2", + int(b2.sum()), + "both", + int((b1 & b2).sum()), + "either", + int(a.blank.sum()), +) +print( + "weighted share of people", + round(float((w * a.blank).sum() / w.sum()), 4), + "of children", + round(float((w * (a.blank & kids)).sum() / (w * kids).sum()), 4), +) +print( + "parent_1 zero", + int((a.parent_1_id == 0).sum()), + "positive", + int((a.parent_1_id > 0).sum()), + "negative", + int((a.parent_1_id < 0).sum()), +) +print( + a.groupby("person_support_channel", observed=True) + .blank.agg(["size", "sum"]) + .to_string() +) +hh = a.groupby("person_household_id").agg(blank=("blank", "sum"), n=("blank", "size")) +print( + "households with a blank", + int((hh.blank > 0).sum()), + "of them all blank", + int(((hh.blank > 0) & (hh.blank == hh.n)).sum()), +) +st = a.groupby("fips").apply( + lambda g: pd.Series( + { + "people": len(g), + "blank": int(g.blank.sum()), + "weighted_share": round( + float((g.household_weight * g.blank).sum() / g.household_weight.sum()), + 4, + ), + } + ), + include_groups=False, +) +st.to_csv(sys.argv[2]) +print(st.loc[[6, 10, 12, 25, 29]].to_string()) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/cutrun.py b/docs/evidence/us-state-child-spm-2026-11/scripts/cutrun.py index cca48fc264..a084e9de97 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/cutrun.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/cutrun.py @@ -43,10 +43,10 @@ def cut(h5, d): def fix(frame): - """Blank parent links stored in the ACS-local file fail integer casts from pe-us 2.30.2; -1 means no parent.""" + """Blank parent links fail integer casts from pe-us 2.30.2, and the model reads 0 as unknown. The default and dense files store no blanks, so this leaves them unchanged.""" for c in frame.columns: if c.startswith("parent_") and c.endswith("_id__2024"): - frame[c] = frame[c].fillna(-1).astype(np.int64) + frame[c] = frame[c].fillna(0).astype(np.int64) return frame diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/dash_swing.py b/docs/evidence/us-state-child-spm-2026-11/scripts/dash_swing.py index 5656ad245e..27d95e5d3b 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/dash_swing.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/dash_swing.py @@ -8,24 +8,28 @@ SP = os.path.dirname(os.path.abspath(__file__)) pd.set_option("display.width", 200) -d = {} -for tag, f in ( - ("p24", "state_audit_buildp_v2_2024_raw.json"), - ("p25", "state_audit_buildp_v2_y25_2025_raw.json"), - ("o24", "state_audit_o1017_2301_2024_raw.json"), - ("o25", "state_audit_o1017_2301_y25_2025_raw.json"), - ("o25_18252", "state_audit_o1017_18252_2025_raw.json"), - ("o24_221", "state_audit_o1017_221_2024_raw.json"), -): - x = json.load(open(f"{SP}/dash/{f}")) - if tag == "p24": - print(list(x[0].keys())[:20]) - key = [k for k in x[0] if k in ("state", "state_code", "state_abbr")][0] - d[tag] = pd.Series( - {r[key]: r.get("ref_ctc2021_child_pov_change_pp_measured") for r in x}, - dtype=float, - ) -t = pd.DataFrame(d) +if os.path.isdir(f"{SP}/dash"): + d = {} + for tag, f in ( + ("p24", "state_audit_buildp_v2_2024_raw.json"), + ("p25", "state_audit_buildp_v2_y25_2025_raw.json"), + ("o24", "state_audit_o1017_2301_2024_raw.json"), + ("o25", "state_audit_o1017_2301_y25_2025_raw.json"), + ("o25_18252", "state_audit_o1017_18252_2025_raw.json"), + ("o24_221", "state_audit_o1017_221_2024_raw.json"), + ): + x = json.load(open(f"{SP}/dash/{f}")) + if tag == "p24": + print(list(x[0].keys())[:20]) + key = [k for k in x[0] if k in ("state", "state_code", "state_abbr")][0] + d[tag] = pd.Series( + {r[key]: r.get("ref_ctc2021_child_pov_change_pp_measured") for r in x}, + dtype=float, + ) + t = pd.DataFrame(d) +else: + # A host restart wiped the stored audits; dash_swing.csv holds the same columns, written from them. + t = pd.read_csv(f"{SP}/run/dash_swing.csv", index_col=0) print(t.isna().sum().to_dict(), len(t)) for a, b in (("p24", "o24"), ("p25", "o25")): e = (t[a] - t[b]).dropna() diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/fill_cmp.py b/docs/evidence/us-state-child-spm-2026-11/scripts/fill_cmp.py new file mode 100644 index 0000000000..feeda1b962 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/fill_cmp.py @@ -0,0 +1,52 @@ +"""What the fill moves: each ACS-local evaluation under the -1 fill against the same evaluation under fill 0.""" + +import os + +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +rows = [] +for name in ("acs_eval", "acsrent_eval"): + a = pd.read_csv(f"{SP}/run/{name}_fill_minus1.csv", index_col=0) + b = pd.read_csv(f"{SP}/run/{name}.csv", index_col=0) + for col in ( + "acs_local", + "se", + "acs_only", + "acs_only_se", + "donor_only", + "donor_only_se", + "delta", + "delta_se", + "kish_src", + "acs_share", + ): + both = pd.concat([a[col], b[col]], axis=1, keys=("m1", "z")).dropna() + d = both.z - both.m1 + rows.append( + dict( + file=name, + measure=col, + states=len(both), + largest_move=d.abs().max(), + state=d.abs().idxmax(), + states_past_1e6=int((d.abs() > 1e-6).sum()), + states_past_01=int((d.abs() > 0.1).sum()), + ) + ) +t = pd.DataFrame(rows) +t.to_csv(f"{SP}/run/fill_moves.csv", index=False) +print(t.round(4).to_string(index=False)) +for name in ("acs_solves", "acsrent_solves"): + a = pd.read_csv(f"{SP}/run/{name}_fill_minus1.csv", index_col=0) + b = pd.read_csv(f"{SP}/run/{name}.csv", index_col=0) + print(name) + print( + pd.concat( + [a[["mean_gap", "mad", "beyond"]], b[["mean_gap", "mad", "beyond"]]], + axis=1, + keys=("fill_minus1", "fill_0"), + ) + .round(2) + .to_string() + ) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/fill_trace.py b/docs/evidence/us-state-child-spm-2026-11/scripts/fill_trace.py new file mode 100644 index 0000000000..6ff0f7cd94 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/fill_trace.py @@ -0,0 +1,84 @@ +"""Which units carry a state's move between the -1 fill and fill 0, for the baseline and for the 2021 CTC reform. + +Usage: fill_trace.py []. The folders sit under run/; the second defaults to acs. +A unit counts as moved when its baseline or reform poverty status differs between the fills. The rate and effect moves come +from the units, weighted by household weight times children, as acs_eval.py weights them. +It prints each moved source household's channel, status changes and share of the state's child weight, as fl_reform.py +does, and no incomes. UNIT_DETAIL=1 adds each unit's net income and threshold, for a local check only. +""" + +import os +import re +import sys + +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +FIPS = eval( + re.search(r"FIPS\s*=\s*(\{.*?\})", open(f"{SP}/acs_eval.py").read(), re.S).group(1) +) +st, m1 = sys.argv[1], sys.argv[2] +z = sys.argv[3] if len(sys.argv) > 3 else "acs" +fips = FIPS[st] +h = pd.read_parquet(f"{SP}/run/acs_hh.parquet") +uh = pd.read_parquet(f"{SP}/run/acs_unit_hh.parquet").drop_duplicates( + "person_spm_unit_id" +) +a = pd.read_parquet(f"{SP}/run/{z}/{fips:02d}.parquet") +b = pd.read_parquet(f"{SP}/run/{m1}/{fips:02d}.parquet") +assert a.spm_unit_id.is_unique and set(a.spm_unit_id) == set(b.spm_unit_id), ( + "the fills hold different units" +) +m = a.merge(b, on="spm_unit_id", suffixes=("_0", "_m1")) +assert (m.kids_0 == m.kids_m1).all(), "the fills count children differently" +m = ( + m[m.kids_0 > 0] + .merge(uh, left_on="spm_unit_id", right_on="person_spm_unit_id") + .merge(h, left_on="person_household_id", right_on="household_id") +) +assert (m.state_fips == fips).all() +m["W"] = m.household_weight * m.kids_0 +T = m.W.sum() + + +def rate(col): + return 100 * (m.W * m[col]).sum() / T + + +out = {"state": st, "child_units": len(m)} +for f in ("0", "m1"): + out[f"rate_{f}"] = rate(f"poor_{f}") + if f"poor_r_{f}" in m: + out[f"reform_rate_{f}"] = rate(f"poor_r_{f}") + out[f"effect_{f}"] = out[f"reform_rate_{f}"] - out[f"rate_{f}"] +moved = m.poor_0 != m.poor_m1 +if "poor_r_0" in m and "poor_r_m1" in m: + moved |= m.poor_r_0 != m.poor_r_m1 +mv = m[moved].copy() +out["units_moved"] = len(mv) +out["source_households"] = mv.household_source_id.nunique() +out["by_channel"] = mv.household_support_channel.astype(str).value_counts().to_dict() +out["moved_child_weight_share_pct"] = 100 * mv.W.sum() / T +out["largest_source_household_share_pct"] = ( + 100 * mv.groupby("household_source_id").W.sum().max() / T if len(mv) else 0.0 +) +for k, v in out.items(): + print(k, round(v, 6) if isinstance(v, float) else v) +status = ["poor_0", "poor_m1"] + [c for c in ("poor_r_0", "poor_r_m1") if c in mv] +mv["share_pct"] = 100 * mv.W / T +mv["src"] = ( + mv.household_support_channel.astype(str) + ":" + mv.household_source_id.astype(str) +) +by_src = mv.groupby("src").agg( + units=("spm_unit_id", "size"), + share_pct=("share_pct", "sum"), + **{c: (c, "max") for c in status}, +) +print(by_src.sort_values("share_pct", ascending=False).round(4).to_string()) +if os.environ.get("UNIT_DETAIL") == "1": + mv["net_move"] = mv.net_m1 - mv.net_0 + print( + mv[["src", "kids_0"] + status + ["share_pct", "net_0", "net_move", "thr_0"]] + .round(4) + .to_string(index=False) + ) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/host_wait.py b/docs/evidence/us-state-child-spm-2026-11/scripts/host_wait.py new file mode 100644 index 0000000000..f59b9418e4 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/host_wait.py @@ -0,0 +1,34 @@ +"""Wait until this host may take the next step, on Fleet ops' terms: no booking refuses this caller, and available memory +(psutil's virtual_memory().available) and free disk (statvfs, decimal GB) clear their floors. + +Usage: host_wait.py . Returns as soon as all three hold. Writes a line to the log every 30 minutes while it waits. +""" + +import os +import subprocess +import sys +import time +from datetime import UTC, datetime + +import psutil + +need_mem, need_disk, log = float(sys.argv[1]), float(sys.argv[2]), sys.argv[3] +CALLER = "claude-state-child-spm" +RES = os.path.expanduser("~/reviews/fleet-ops/tools/reservation.py") +t = 0 +while True: + mem = psutil.virtual_memory().available / 2**30 + s = os.statvfs("/System/Volumes/Data") + disk = s.f_bavail * s.f_frsize / 1e9 + booked = subprocess.run( + [sys.executable, RES, "allowed", CALLER], capture_output=True + ).returncode + if mem >= need_mem and disk >= need_disk and booked == 0: + sys.exit(0) + if t % 30 == 0: + with open(log, "a") as f: + f.write( + f"{datetime.now(UTC):%H:%M:%SZ} hold: available {mem:.1f} GiB of {need_mem:.0f}, free {disk:.1f} GB of {need_disk:.0f}, booking exit {booked}\n" + ) + t += 1 + time.sleep(60) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py b/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py index 7429b5beae..1b5d23dcaf 100644 --- a/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/overlap.py @@ -258,74 +258,4 @@ def Qf(t): # noqa: N802 b.to_csv(f"{SP}/run/overlap_benchmark.csv", index=False) print(b.round(2).to_string(index=False)) -s = pd.read_csv(f"{SP}/run/initial_fit_states.csv", index_col=0) -e = pd.read_csv(f"{SP}/run/acs_eval.csv", index_col=0) -t = pd.DataFrame( - { - "dense_initial": s.dense_W0, - "dense_initial_se": s.dense_W0_se, - "acs_rows": e.acs_only - e.census, - "acs_rows_se": e.acs_only_se, - "census_se": cse, - } -) -t["z_dense"] = t.dense_initial / np.sqrt(t.dense_initial_se**2 + t.census_se**2) -t["z_acs"] = t.acs_rows / np.sqrt(t.acs_rows_se**2 + t.census_se**2) -t.to_csv(f"{SP}/run/state_persistence.csv") -# ACS rows share no household with Census, so the gaps' sampling covariance equals Var(Census) less Cov(dense, Census). -print( - f"gap corr dense initial, ACS rows {t.dense_initial.corr(t.acs_rows):.2f}; p {stats.pearsonr(t.dense_initial, t.acs_rows)[1]:.3f}" -) -print( - f" Census noise alone would give about {(t.census_se**2 - covs[('dense', 'initial', 'all')]).mean() / (t.dense_initial.std() * t.acs_rows.std()):.2f}" -) -print(f"gap corr dense published, ACS rows {s.dense_W1.corr(t.acs_rows):.2f}") -print( - f" Census noise alone would give about {(t.census_se**2 - covs[('dense', 'published', 'all')]).mean() / (s.dense_W1.std() * t.acs_rows.std()):.2f}" -) -rng = np.random.default_rng(0) -same = lambda z1, z2, th: ( - (np.sign(z1) == np.sign(z2)) & (np.abs(z1) > th) & (np.abs(z2) > th) -).sum() -for th in (1.28, 1.645, 1.96): - obs = same(t.z_dense.values, t.z_acs.values, th) - sim = np.array( - [ - same(t.z_dense.values, t.z_acs.values[rng.permutation(51)], th) - for _ in range(20000) - ] - ) - pick = t.index[ - (np.sign(t.z_dense) == np.sign(t.z_acs)) - & (t.z_dense.abs() > th) - & (t.z_acs.abs() > th) - ].tolist() - print( - f"|z|>{th}: {obs} states {pick}, permutation mean {sim.mean():.2f}, p {(sim >= obs).mean():.3f}" - ) -t["joint_z"] = np.where( - np.sign(t.z_dense) == np.sign(t.z_acs), - np.minimum(t.z_dense.abs(), t.z_acs.abs()), - 0, -) - - -def largest(z2): - return np.where( - np.sign(t.z_dense.values) == np.sign(z2), - np.minimum(np.abs(t.z_dense.values), np.abs(z2)), - 0, - ).max() - - -sim = np.array([largest(t.z_acs.values[rng.permutation(51)]) for _ in range(200000)]) -print( - f"largest joint z {t.joint_z.max():.3f}, permutation median {np.median(sim):.2f}, p {(sim >= t.joint_z.max()).mean():.3f}" -) -t.to_csv(f"{SP}/run/state_persistence.csv") -print( - t.sort_values("joint_z", ascending=False) - .head(8)[["dense_initial", "acs_rows", "z_dense", "z_acs", "joint_z"]] - .round(2) - .to_string() -) +# persist.py holds the test of state misses that persist, so it can rerun from saved fits. diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/parent_blanks.py b/docs/evidence/us-state-child-spm-2026-11/scripts/parent_blanks.py new file mode 100644 index 0000000000..b4b739150c --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/parent_blanks.py @@ -0,0 +1,34 @@ +"""Blank, zero, negative and positive parent links on the default and dense files, which take no fill.""" + +import glob +import os + +import pandas as pd + +S = os.path.expanduser( + "~/.cache/huggingface/hub/datasets--policyengine--populace-us/snapshots/" +) +for tag, rev in (("default", "9a814a3b"), ("dense", "15cefac4")): + p = pd.read_hdf( + [x for x in glob.glob(S + rev + "*/*.h5") if "calib" not in x][0], "person" + ) + print(tag, "people", len(p)) + cols = [c for c in ("parent_1_id", "parent_2_id") if c in p] + if not cols: + print(" stores no parent columns") + for c in cols: + v = p[c] + print( + " ", + c, + v.dtype, + "blank", + int(v.isna().sum()), + "zero", + int((v == 0).sum()), + "negative", + int((v < 0).sum()), + "positive", + int((v > 0).sum()), + ) + del p diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/parts_check.sh b/docs/evidence/us-state-child-spm-2026-11/scripts/parts_check.sh new file mode 100644 index 0000000000..ae12ba6988 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/parts_check.sh @@ -0,0 +1,33 @@ +#!/bin/zsh +# Hold the ACS-local rerun between states, check that states run in household parts give exactly what whole-state runs give, +# run the published-rent states whose baseline alone passes 8 GiB (Texas in 3 parts, California in 4), and let the rerun go +# on. Every exit path releases the hold. +# Usage: parts_check.sh +SP=${0:a:h}; cd $SP +DRIVER=$1 +export IGNORE_HOLD=1 PARTS_LOG=run/parts_check.log +LOG=run/parts_check.log; PY=env/.venv/bin/python +note() { print -r -- "$(date -u +%TZ) $*" >> $LOG; } +[[ "$(ps -p $DRIVER -o args=)" == "zsh acs_rerun.sh" ]] || { note "stopped: pid $DRIVER is not the rerun driver"; exit 1; } +release() { rm -f run/hold && note "hold released"; } +trap release EXIT +trap 'exit 130' INT TERM HUP +: > run/hold +note "hold set" +# The driver's next run waits at its start. Wait for a run that started before the hold, which has no held. mark. +busy() { local pid; for pid in $(pgrep -P $DRIVER -f acs_rerun.py); do [[ -e run/held.$pid ]] || return 0; done; return 1; } +while busy; do sleep 20; done +note "rerun held between states" +fail=0 +zsh acs_parts.sh 56 acs 2 run/parts_check/acs || fail=1 +zsh acs_parts.sh 10 acs 3 run/parts_check/acs || fail=1 +zsh acs_parts.sh 5 acs 2 run/parts_check/acs || fail=1 +zsh acs_parts.sh 56 acsrent 2 run/parts_check/acsrent || fail=1 +zsh acs_parts.sh 50 acsrent 3 run/parts_check/acsrent || fail=1 +$PY -I acs_parts_cmp.py >> $LOG 2>&1 || fail=1 +if (( fail )); then note "parts did not reproduce whole-state runs, so Texas and California wait"; exit 1; fi +: > run/parts_ok +note "parts reproduce whole-state runs" +zsh acs_parts.sh 48 acs 3 || note "Texas did not finish" +zsh acs_parts.sh 6 acs 4 || note "California did not finish" +note "Texas and California runs ended" diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/parts_ids.py b/docs/evidence/us-state-child-spm-2026-11/scripts/parts_ids.py new file mode 100644 index 0000000000..bf3ace0576 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/parts_ids.py @@ -0,0 +1,74 @@ +"""Split one state's households into parts for acs_parts.sh: contiguous in the split's household order, with about equal +numbers of people. + +policyengine-us 2.90.2 resolves parent links within a household or a tax unit, and reads across households only when a tax +unit spans households or a Medicaid claiming tax unit is set (_parent_links.py). Model formulas cannot draw random numbers +(policyengine-core 3.34.2's random raises). So this refuses a state where any tax unit, SPM unit, family or marital unit spans +households, or where any table carries a claiming tax unit column. acs_parts_cmp.py checks the parts against whole-state runs. +Stops itself with exit 75 if peak RSS passes RSS_CAP_GIB (default 8). +Usage: parts_ids.py +""" + +import os +import resource +import sys +import threading +import time + +import numpy as np +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +fips, K, out = int(sys.argv[1]), int(sys.argv[2]), sys.argv[3] +GROUPS = ("tax_unit", "spm_unit", "family", "marital_unit") +CAP = float(os.environ.get("RSS_CAP_GIB", "8")) * 2**30 + + +def watch(): + while True: + time.sleep(2) + if resource.getrusage(resource.RUSAGE_SELF).ru_maxrss > CAP: + print("rss stop parts_ids", fips, flush=True) + os._exit(75) + + +threading.Thread(target=watch, daemon=True).start() +h = pd.read_pickle(f"{SP}/run/acs_split/{fips:02d}-household.pkl.gz") +p = pd.read_pickle(f"{SP}/run/acs_split/{fips:02d}-person.pkl.gz") +claiming = [c for c in [*h.columns, *p.columns] if "claiming" in c] +for g in GROUPS: + claiming += [ + c + for c in pd.read_pickle(f"{SP}/run/acs_split/{fips:02d}-{g}.pkl.gz").columns + if "claiming" in c + ] +assert not claiming, f"claiming tax unit columns {claiming}" +p = p.loc[ + p.person_household_id.isin(h.household_id), + ["person_household_id", *[f"person_{g}_id" for g in GROUPS]], +] +for g in GROUPS: + spans = p.groupby(f"person_{g}_id").person_household_id.nunique() + assert (spans == 1).all(), ( + f"{int((spans > 1).sum())} of {len(spans)} {g}s span households" + ) +people = ( + p.person_household_id.value_counts().reindex(h.household_id, fill_value=0).values +) +edges = np.searchsorted(np.cumsum(people), np.arange(1, K) * people.sum() / K) +parts = np.split(h.household_id.values, edges) +assert len(parts) == K and all(len(ids) for ids in parts), [len(ids) for ids in parts] +os.makedirs(out, exist_ok=True) +for k, ids in enumerate(parts): + np.save(f"{out}/p{k}.tmp.npy", ids) + os.replace(f"{out}/p{k}.tmp.npy", f"{out}/p{k}.npy") + print( + fips, + "part", + k, + "households", + len(ids), + "people", + int(people[np.isin(h.household_id.values, ids)].sum()), + flush=True, + ) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/parts_merge.py b/docs/evidence/us-state-child-spm-2026-11/scripts/parts_merge.py new file mode 100644 index 0000000000..8be92eee97 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/parts_merge.py @@ -0,0 +1,40 @@ +"""Merge one state's parts from acs_parts.sh into the state's output, once the parts hold each of the state's SPM units exactly +once. Rows go in SPM unit id order, the order a whole-state run writes. +Usage: parts_merge.py +""" + +import os +import sys + +import pandas as pd + +SP = os.path.dirname(os.path.abspath(__file__)) +fips, tag, K, parts, dest = ( + int(sys.argv[1]), + sys.argv[2], + int(sys.argv[3]), + sys.argv[4], + sys.argv[5], +) +u = pd.concat( + [pd.read_parquet(f"{parts}/p{k}/{fips:02d}.parquet") for k in range(K)], + ignore_index=True, +) +assert u.spm_unit_id.is_unique, "an SPM unit sits in two parts" +hh = pd.read_parquet(f"{SP}/run/acs_hh.parquet", columns=["household_id", "state_fips"]) +uh = pd.read_parquet(f"{SP}/run/acs_unit_hh.parquet") +want = set( + uh.person_spm_unit_id[ + uh.person_household_id.isin(hh.household_id[hh.state_fips == fips]) + ] +) +got = set(u.spm_unit_id) +assert got == want, ( + f"parts hold {len(got)} SPM units and the state has {len(want)}: {len(got - want)} extra, {len(want - got)} missing" +) +u = u.sort_values("spm_unit_id", kind="stable").reset_index(drop=True) +os.makedirs(dest, exist_ok=True) +target = f"{dest}/{fips:02d}.parquet" +u.to_parquet(target + ".tmp", compression="zstd") +os.replace(target + ".tmp", target) +print(fips, tag, "parts", K, "units", len(u), "merged into", dest, flush=True) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/persist.py b/docs/evidence/us-state-child-spm-2026-11/scripts/persist.py new file mode 100644 index 0000000000..d14b4e2434 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/persist.py @@ -0,0 +1,97 @@ +"""State misses that persist: dense initial-weight gaps against ACS-row gaps, which share no household. + +The covariance comes from overlap_fits.csv, which overlap.py writes. +""" + +import json +import os + +import numpy as np +import pandas as pd +from scipy import stats + +SP = os.path.dirname(os.path.abspath(__file__)) +c = pd.DataFrame(json.load(open(f"{SP}/census_child_spm.json"))["rows"]).set_index( + "state" +) +cse = c.moe / 1.645 +fits = pd.read_csv(f"{SP}/run/overlap_fits.csv") + + +def cov(weights): + return fits[ + (fits.file == "dense") & (fits.weights == weights) & (fits.rows == "all") + ].mean_cov.iloc[0] + + +s = pd.read_csv(f"{SP}/run/initial_fit_states.csv", index_col=0) +e = pd.read_csv(f"{SP}/run/acs_eval.csv", index_col=0) +t = pd.DataFrame( + { + "dense_initial": s.dense_W0, + "dense_initial_se": s.dense_W0_se, + "acs_rows": e.acs_only - e.census, + "acs_rows_se": e.acs_only_se, + "census_se": cse, + } +) +t["z_dense"] = t.dense_initial / np.sqrt(t.dense_initial_se**2 + t.census_se**2) +t["z_acs"] = t.acs_rows / np.sqrt(t.acs_rows_se**2 + t.census_se**2) +t.to_csv(f"{SP}/run/state_persistence.csv") +# ACS rows share no household with Census, so the gaps' sampling covariance equals Var(Census) less Cov(dense, Census). +print( + f"gap corr dense initial, ACS rows {t.dense_initial.corr(t.acs_rows):.2f}; p {stats.pearsonr(t.dense_initial, t.acs_rows)[1]:.3f}" +) +print( + f" Census noise alone would give about {((t.census_se**2).mean() - cov('initial')) / (t.dense_initial.std() * t.acs_rows.std()):.2f}" +) +print(f"gap corr dense published, ACS rows {s.dense_W1.corr(t.acs_rows):.2f}") +print( + f" Census noise alone would give about {((t.census_se**2).mean() - cov('published')) / (s.dense_W1.std() * t.acs_rows.std()):.2f}" +) +rng = np.random.default_rng(0) +same = lambda z1, z2, th: ( + (np.sign(z1) == np.sign(z2)) & (np.abs(z1) > th) & (np.abs(z2) > th) +).sum() +for th in (1.28, 1.645, 1.96): + obs = same(t.z_dense.values, t.z_acs.values, th) + sim = np.array( + [ + same(t.z_dense.values, t.z_acs.values[rng.permutation(51)], th) + for _ in range(20000) + ] + ) + pick = t.index[ + (np.sign(t.z_dense) == np.sign(t.z_acs)) + & (t.z_dense.abs() > th) + & (t.z_acs.abs() > th) + ].tolist() + print( + f"|z|>{th}: {obs} states {pick}, permutation mean {sim.mean():.2f}, p {(sim >= obs).mean():.3f}" + ) +t["joint_z"] = np.where( + np.sign(t.z_dense) == np.sign(t.z_acs), + np.minimum(t.z_dense.abs(), t.z_acs.abs()), + 0, +) + + +def largest(z2): + return np.where( + np.sign(t.z_dense.values) == np.sign(z2), + np.minimum(np.abs(t.z_dense.values), np.abs(z2)), + 0, + ).max() + + +sim = np.array([largest(t.z_acs.values[rng.permutation(51)]) for _ in range(200000)]) +print( + f"largest joint z {t.joint_z.max():.3f}, permutation median {np.median(sim):.2f}, p {(sim >= t.joint_z.max()).mean():.3f}" +) +t.to_csv(f"{SP}/run/state_persistence.csv") +print( + t.sort_values("joint_z", ascending=False) + .head(8)[["dense_initial", "acs_rows", "z_dense", "z_acs", "joint_z"]] + .round(2) + .to_string() +) diff --git a/docs/evidence/us-state-child-spm-2026-11/scripts/post_acs.sh b/docs/evidence/us-state-child-spm-2026-11/scripts/post_acs.sh new file mode 100644 index 0000000000..dbe1a47028 --- /dev/null +++ b/docs/evidence/us-state-child-spm-2026-11/scripts/post_acs.sh @@ -0,0 +1,15 @@ +#!/bin/zsh +# The post-run scripts that need only the published-rent pass, one at a time: the 51-state check against the deck, then the +# ACS-local evaluation and the scripts that read it. Each script's output goes to run/logs/