Parity coverage gap inventory (dev / planning)¶
Judgment only — no counts. Live coverage numbers come from
sp.parity_summary()and the auto-generated parity matrix. This page holds the prioritization and the candidate references that the machine index deliberately does not assert.
Where the numbers live¶
This page carries judgment, not counts. Every count it used to hardcode is now generated from the committed artifacts:
docs/parity.md— "Coverage at a glance" (evidence kinds split), "Honest denominators" (estimator / infrastructure / result-class strata), and "Coverage by estimator family" (the gap map that used to be transcribed below).sp.parity_summary()— the same numbers at call time, includingby_evidence_kindanddenominators.
The snapshot this page previously froze (2026-07-01, 1.20.0) drifted within
weeks: network was recorded as EMPTY 0/33 and now holds four
cross-language rows, robustness's three bit-exact closed forms had moved
to the causal category, and the "213 / 964 estimators" denominator no
longer matched any live computation. A hand-maintained coverage table in a
repository that regenerates its own parity index is a drift surface with no
compensating benefit, so the counts were removed rather than re-pinned.
Two framing rules survive from that snapshot because they are judgment, not arithmetic:
- Report cross-language coverage separately from known-truth coverage. Only the first answers "does StatsPAI agree with Stata/R". Summing them lets the smaller claim borrow the larger one's authority.
- Use the estimator denominator. Result classes can never carry a parity grade and infrastructure functions render tables or load data; including them dilutes the metric without making it more honest.
Candidate reference ecosystems named below are leads to verify before alignment, not parity claims (CLAUDE.md §10).
Prioritization — where to spend alignment effort¶
Tier 1 — high leverage, clear cross-language sibling, large family.
One module here verifies many functions and closes an EMPTY row.
- spatial (30 gap) — SAR/SEM/SDM ML and SAR-2SLS/SEM-GMM now bit-exact vs
spatialreg (modules 65--66). Remaining leads to verify: spatial panels
(R splm, Stata spxtregress), GWR (GWmodel), and the SARAR GMM /
heteroskedastic-GM estimators (reconcile the joint moment sequence against
spatialreg::gstsls / sphet).
- panel (29 gap) — extend the existing Track A panel module: dynamic
(xtdpdgmm, plm::pgmm beyond xtabond), spatial panels.
- epi (20) — candidate refs: R epiR / survival / metafor, Stata
epitab / st suite (several already have external_parity via NHEFS).
- survival (11 gap) — R survival (KM/AFT), cmprsk (Fine-Gray), Stata
stcox / streg / stcrreg.
- timeseries (17 gap) — R vars / urca / rugarch, Stata var /
vec / arch.
Tier 2 — alignable, partial families to finish.
- decomposition (27 gap) — extend the _common.py-backed family
(Gelbach, Das-Gupta, inequality) against R oaxaca / dineq / ddecompose.
- inference (23 gap) — bootstrap / wild-cluster / MHT vs R fwildclusterboot,
sandwich, multcomp (CR2/CR3/multiway already bit-exact).
- mendelian (31 gap) — R MendelianRandomization / TwoSampleMR
(MR core already has analytical recovery).
- frontier / structural / transport / survey / bartik — established R/Stata
siblings exist for most; verify per-method.
Tier 3 — frontier methods, analytical/simulation is the honest ceiling.
neural_causal, conformal_causal, causal_llm, causal_rl, causal_text,
fairness, ope, surrogate, bridge, most of bayes (where the right
evidence is convergence diagnostics + Monte-Carlo coverage, not bit-for-bit
parity). For these the target is a documented analytical-only record
(DGP recovery / closed-form / MC calibration), not a cross-package grade —
and that is the honest top grade, stated as such.
The closing loop¶
- Pick a Tier-1 family; add a Track A module (
tests/r_parity/NN_*.{py,R}+ Stata.do) or areference_parityfrozen fixture. - Regenerate:
python scripts/build_parity_index.py— the new function(s) flip fromunverifiedto a graded record automatically; the matrix, summary, anddocs/parity.mdupdate; the drift gate stays green. sp.parity_summary()'s estimator-verified fraction is the metric of record; report it per release inCHANGELOG.md.