recoverlite (Python)
Pre-data recovery tests for planned study designs — the Python mirror of the R package.
A planned study can be unable to support its intended inferential claim
even when the researcher's substantive assumptions are correct.
recoverlite simulates a declared design–analysis pair over a crossed
scenario grid — null and target effects, each under declared and
pessimistically perturbed nuisance assumptions — and converts the
diagnosands into a PASS / RISK / FAIL verdict under a pre-specified,
versioned threshold profile.
Mirror contract
This package is protocol-identical to the R implementation: same
declaration API, same scenario grid, same diagnosands (including the
exact decomposition target bias = estimator bias + estimand drift),
same threshold profiles (shared version string
recoverlite-thresholds-0.2), same verdict rule, same report structure.
Simulated numbers agree within Monte Carlo error, not byte-identically
— R and Python cannot share RNG streams. The test suite enforces the
contract by reproducing the R package's archived worked-example
diagnosands within 4× combined MCSE.
| R package | Python mirror | |
|---|---|---|
| Two-arm trial (baseline, additive measurement error, MAR/MCAR attrition, noncompliance) | ✅ | ✅ |
| Complete-case linear model | ✅ | ✅ |
| MI baseline-adjusted estimator (Rubin + Barnard-Rubin) | ✅ | ✅ |
| Cluster trial, LMM (Wald-z / Satterthwaite / Kenward–Roger) | ✅ lme4 + lmerTest + pbkrtest | ✅ internal exact REML fitter |
| Cluster-level t-test | ✅ | ✅ |
| Fragility curves (effect + nuisance) | ✅ | ✅ |
The mixed-model machinery is self-contained (numpy/scipy only — no
statsmodels): a closed-form REML fitter for the random-intercept model
with Satterthwaite df (observed REML Hessian, the lmerTest algorithm)
and Kenward–Roger adjusted covariance + df (expected REML information,
the pbkrtest algorithm). Because these methods are deterministic given
data, they are validated against lmerTest/pbkrtest to numerical
precision (rel. ≤ 1e-4) on shared fixture datasets — balanced,
unbalanced, near-boundary, and null — in
tests/data/, a stronger contract than the MCSE-level
simulation cross-checks.
Install
pip install recoverlite # numpy + scipy only
Not yet on PyPI? Install from source:
pip install git+https://github.com/heidihelena/recoverlite-py.
The workflow in one block
import recoverlite as rl
design = rl.declare_recovery(
target=rl.target_estimand(
estimand="ITT mean difference at 12 weeks",
scale="latent-outcome standardized mean difference",
sesoi=0.40,
),
data_strategy=rl.two_arm_trial(n_per_arm=115),
measurement=rl.measured_outcome(reliability=0.70),
missingness=rl.attrition_model(rate=0.15, mechanism="differential"),
answer_strategy=rl.planned_analysis(
estimator="linear_model",
formula="y_observed ~ treatment",
),
)
result = rl.recovery_test(design, sims=2000,
scenarios="confirmatory_grid", seed=1)
print(rl.verdict(result)) # PASS / RISK / FAIL (+ strict/lenient recompute)
rl.report(result) # the standalone report always travels with it
Cluster designs use cluster_trial() with
planned_analysis("lmm_random_intercept", "y_observed ~ treatment + (1 | cluster)")
(Wald-z) or "cluster_mean_ttest". Fragility curves —
effect_fragility(), nuisance_fragility() — are deliberately outside
the verdict.
Citation
Andersen, H. H. (2026). Recovery before data: pre-data simulation diagnosis of planned study designs. Working paper; preprint forthcoming. https://github.com/heidihelena/recoverlite
A PASS is evidence about the instrument, not about the world.
License
Metadata
Release files for recoverlite 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| recoverlite-0.2.0.tar.gz | 43.3 kB | With provenance | Details for recoverlite-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| recoverlite-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for recoverlite-0.2.0-py3-none-any.whl |
Total release size: 83.5 kB
Release files / recoverlite-0.2.0.tar.gz
| Download URL | recoverlite-0.2.0.tar.gz |
|---|---|
| Size | 43.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ed4f683df7a78ecef2997a4e542f6b6c87ba206129322379bf7b721caf9a01ce
|
|
BLAKE2b-256 checksum How to use checksums |
1be0e32bd2ee52c6085479ccc2df80b1716a5942943c3192c6e7e06d97e3307e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.
Transparency logRelease files / recoverlite-0.2.0-py3-none-any.whl
| Download URL | recoverlite-0.2.0-py3-none-any.whl |
|---|---|
| Size | 40.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7779fe8657692251438d4332d09d889b378df432696b73d001679aa8e082fc08
|
|
BLAKE2b-256 checksum How to use checksums |
0c836407c52b2556c306ce8ed0a6607322d65199623d69979c50d59b5041e226
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.
Transparency logSecurity for recoverlite 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for recoverlite-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.