Skip to content

Releases: heidihelena/assesslite

AssessLite 0.4.0

Choose a tag to compare

@heidihelena heidihelena released this 11 Jul 22:33
d44203c

Ships the three items previously marked as future work, each in a scoped, honest form. Native in R and Python against one shared schema; R CMD check clean.

New

  • spatial_autocorrelation — the random-field diagnostic: Moran's I on the outcome-model residuals (martingale for Cox via a Breslow baseline hazard, response for GLMs) over a k-nearest-neighbour weight matrix, attacking a new spatial_independence invariance. Resolved residual autocorrelation means the effective sample size is smaller than n and i.i.d.-style intervals overstate precision. Deterministic (Cliff-Ord moments); R and Python agree bit-for-bit.
  • Interference exposure mapsinterference_check(..., exposure_map=) declares how spillover aggregates: mean (exposed fraction), any (contagion), sum (dose). The chosen map is recorded in the audit.
  • Identification repair — when the effect is not identifiable, adjustment_check names which latent node(s), if measured, would restore identifiability by adjustment (adjustment.repair): "measuring {U} would make the effect identifiable."

No new dependencies (numpy/pandas and base R).

Acknowledgement

AssessLite's assumptions-first framing is indebted to Weinstein & Blei, "Geometric Causal Models" (arXiv:2607.05153, 2026).

Publishes to PyPI and archives on Zenodo.

AssessLite 0.3.0

Choose a tag to compare

@heidihelena heidihelena released this 11 Jul 15:58
4daea6b

Reaches into genuinely dependent data (spatial, networked) and completes the identification story (latent-node non-identifiability, positivity), with a correctness fix that makes every holdout verdict honest. Native in R and Python against one shared schema.

New attacks

  • confounding_scenarios — a deterministic bias-analysis array (Lin-Psaty-Kronmal; VanderWeele-Arah): the estimator-failure map complementing the E-value, targetable at a declared decision threshold, not just the null.
  • graph_check / adjustment_check — declare a causal DAG (declare_graph) and test its implied conditional independencies against the data, and whether your adjusted set satisfies the backdoor criterion. Mark unmeasured confounders latent= and it reports non-identifiability. Self-contained d-separation, no dagitty.
  • positivity_check — propensity-overlap trimming: does the finding lean on units with near-deterministic exposure?
  • spatial_holdout — leave-one-spatial-block-out over a coordinate grid (coords=).
  • interference_check — does the outcome depend on neighbours' exposure? (unit_id=, edges=); attacks SUTVA.
  • assumption_lattice() — the pooling commitments as a Hasse diagram.

Correctness

  • The holdout verdict rule now uses a Bonferroni-adjusted shift p-value: the old max-shift rule flagged ~m times too often with m variants (a false-positive cluster_holdout -> abstain in the worked example). Applies to every holdout attack.
  • mark_tested keeps the worst verdict when several attacks share an invariance.

No new dependencies (numpy/pandas and base R). The pure-numpy Cox reproduces R's coxph(ties="breslow") exactly, including stratification.

Acknowledgement

AssessLite's assumptions-first framing is indebted to Weinstein & Blei, "Geometric Causal Models" (arXiv:2607.05153, 2026).

Publishes to PyPI and archives on Zenodo.

AssessLite 0.2.0

Choose a tag to compare

@heidihelena heidihelena released this 11 Jul 11:12
a7a32c1

Four new attacks/analyses, all folding into the same three-way verdicts and decision rules, native in both R and Python, with audit records validated against one shared JSON Schema.

New in 0.2.0

  • confounding_sensitivity — E-value (VanderWeele & Ding): how strong an unmeasured confounder would have to be to move the interval to no effect. Ratio-scale estimators (Cox HR, logistic OR).
  • graph_check — declare a causal DAG with declare_graph(); the engine tests the conditional independencies the graph implies against the data (partial correlation, self-contained d-separation).
  • adjustment_check — given the declared DAG, does your adjusted covariate set satisfy the backdoor criterion? Flags open backdoor paths (under-adjustment) and adjusted descendants of the exposure (over-adjustment / collider or mediator bias), and reports a minimal sufficient set. Verified on the confounding triangle, mediator, and M-bias.
  • assumption_lattice() — the pooling commitments (cluster / time) as a Hasse lattice: refit the exposure estimate under every pool-or-stratify combination and see whether the conclusion depends on them.

No new dependencies (numpy/pandas and base R). The pure-numpy stratified Cox reproduces R's coxph(ties="breslow") exactly.

Acknowledgement

AssessLite's assumptions-first framing is indebted to Weinstein & Blei, "Geometric Causal Models" (arXiv:2607.05153, 2026).

This release publishes assesslite 0.2.0 to PyPI and archives it on Zenodo.

AssessLite 0.1.0

Choose a tag to compare

@heidihelena heidihelena released this 11 Jul 07:22
c3377ea

First release. Structural assumption assessment for causal analysis, for R and Python.

  • R package (repo root) and Python package (python/) implement one shared spec (spec/).
  • Attacks: unit permutation, cluster holdout, temporal split, subgroup stability.
  • Three-way verdicts (stable / unstable / not resolvable) and proceed / conditional / abstain decisions.
  • Exports an auditable JSON record (validated against spec/schema/audit.schema.json) and an HTML report.
  • Python engine is pure numpy/pandas; its Cox fit reproduces R coxph(ties=breslow) exactly.

This release publishes the Python package to PyPI via trusted publishing.