Project status¶
The canonical feature-maturity table. Other pages (README, examples, algorithm docs) should defer to this file rather than restate status; detailed exact-vs-approximate computation claims live only in the algorithm pages.
Version: 0.1.0a3 (see RELEASE_NOTES.md). Public API is experimental —
expected to stabilize after the simulation grid below is complete.
Feature maturity¶
| Feature | Implementation | Unit tests | Numerical diagnostics | R parity | Simulation bias/coverage | API status |
|---|---|---|---|---|---|---|
LongitudinalData / completion invariants |
complete | complete | n/a | n/a | n/a | experimental |
pool_rubin (Rubin + Barnard–Rubin) |
complete | complete | n/a | complete — bit-compatible with mice::pool.scalar, verified at 1e-12 incl. boundary cases |
n/a | experimental |
JointGaussianImputer |
complete | complete | chain autocorrelation/ESS per run | pending | initial matrix passing (MCAR, monotone & intermittent MAR, expected-failure demos; see below) | experimental |
NegativeBinomialImputer |
complete | complete | optimizer, curvature, quadrature, grid boundary mass | pending | initial matrix passing (monotone & intermittent MAR, high-missingness stress, expected-failure demos, delta curve; see below) | experimental |
StatsmodelsGEE adapter |
complete | complete — exact agreement with direct statsmodels fits, incl. the motivating registry analysis (private data, external harness) | n/a | n/a | covered via NB study | experimental |
StatsmodelsGLM adapter |
complete | complete | n/a | n/a | pending | experimental |
| Delta-adjusted MNAR sensitivity | complete (scalar delta; group/wave-specific deltas planned) | complete | n/a | pending | pending | experimental |
BernoulliImputer (binary outcomes) |
complete | complete | optimizer, curvature, separation, grid | pending | smoke matrix (MCAR/MAR validated vs marginal GEE target; omitted-interaction & MNAR expected failures; delta curve) | experimental |
Targeted delta rules (where/times, DeltaScenario) |
complete (wired in Bernoulli backend) | complete | n/a | pending | via delta curve | experimental |
| Response-model arm (IPW/IPCW: stabilized weights, weighted GEE, respondent bootstrap) | planned (0.3) — currently hand-built analysis-side; identified as the largest scope gap by applied use | — | — | — | — | — |
| Sensitivity bounds (partial identification over a delta class) | planned (0.3) — complements DeltaScenario | — | — | — | — | — |
| Internal predictor standardization with back-transform (GLMM fits) | planned — a scale diagnostic warns and failure messages hint at rescaling meanwhile | — | — | — | — | — |
| Bootstrap-then-impute pooling | planned | — | — | — | — | — |
| Eligibility indicators (structural missingness) | planned | — | — | — | — | — |
Simulation evidence to date¶
Seeded studies in tests/simulation/ (pytest -m slow) with
pre-specified, Monte-Carlo-aware gates. Release-scale run archived at
500 replicates/scenario in validation/releases/0.1.0a1/
(simulation_summary.md is the authoritative table; source commit
recorded there). Standardized bias = bias / empirical SD; SE ratio =
mean reported SE / empirical SD. Headline 500-rep results:
Validated scenarios (correct model; gates: low failure rate, unbiasedness, nominal coverage, SE calibration):
| Study | Std. bias | Coverage | SE ratio | Mean FMI | Failures |
|---|---|---|---|---|---|
| Gaussian, MCAR 25%, wave-3 treatment effect | −0.07 | 0.948 | 0.98 | 0.24 | 0/500 |
| Gaussian, monotone MAR, same target | +0.01 | 0.944 | 0.96 | 0.35 | 0/500 |
| Gaussian, intermittent (non-monotone) MAR | −0.08 | 0.964 | 1.03 | 0.22 | 0/500 |
| NB + Poisson GEE + Rubin, monotone MAR, treat×wave-3 | +0.01 | 0.960 | 1.03 | 0.39 | 0/500 |
| NB + GEE, intermittent MAR | −0.08 | 0.948 | 1.00 | 0.25 | 0/500 |
| NB + GEE, high-missingness stress (ORR-like attrition) | +0.11 | 0.942 | 0.94 | 0.63 | 4/500 (0.8%) |
(MCSE of coverage at S=500 is ~0.0097.)
Expected-failure demonstrations (one assumption deliberately violated; gates: the violation must visibly bite):
| Study | Violated | Std. bias | Coverage | Note |
|---|---|---|---|---|
| NB imputation omitting the exposure-by-time interaction | A8 | −1.48 (attenuation) | 0.950 | bias is masked by conservative Rubin SEs (SE ratio 1.63) — the Meng (1994) uncongeniality phenomenon in action |
| MNAR generation analyzed under MAR (NB, wave-3 mean) | A2 | −7.38 | 0.018 | MAR MI does not rescue MNAR |
| Gaussian imputation omitting a covariate driving outcome and dropout | A5/A8 | −1.10 | 0.798 | conditioning on too little turns MAR into effective MNAR |
Delta-response curve (NB, shared randomness across scenarios): the pooled wave-3 mean is strictly increasing in delta (×0.70 → 6.28, MAR → 7.92, ×1.40 → 9.66), brackets the MAR result, and its spread matches the imputed share of wave-3 cells.
Not yet demonstrated: wider grids over sample size / missingness fraction / correlation / overdispersion, misspecified dependence structures, R parity for the imputation backends. The backends should not be described as statistically validated beyond this table.
Cross-language validation¶
- Rubin pooling: exact parity with
mice(complete). - epil example: Python (statsmodels) vs R (geepack) complete-data and available-case GEE agree within 2e-3 (cross-implementation, numerical agreement); the MI arm is additionally compared cross-method against R (mice wide-PMM + geepack + mice::pool on the same mask) — statistical agreement: pooled estimates within 0.5 pooled SEs, SE ratios 0.88-1.21. The full narrative (complete / available-case / MI / IPW / MNAR failure / delta curve) is implemented; see examples/epil_count.
- CATS tutorial parity: external checkout pinned and verified; the statistical comparison is in progress.