Changelog
Changelog
v0.2.1 (2026-07-28)
Authorship metadata only; no functional change.
- Carlos Mendez is the sole author of the software, in
CITATION.cffand in the package metadata. Shosei Sakaguchi and Hayato Tagawa authored the method and the R/C++ implementation thesarmodel ports, and they are credited where that belongs: as the authors of the article and of the replication package, both listed underreferencesinCITATION.cff, and in the acknowledgements. Cite their article whenever you fitsar. LICENSEis unchanged and still carries their copyright notice. That is a condition of reusing their MIT-licensed code, and is independent of who authored this package.
v0.2.0 (2026-07-28)
scspill is now presented as what it is becoming: a package of synthetic control models with spillover effects, of which Sakaguchi & Tagawa’s is the first and, today, the only one. Estimation is unchanged — same samplers, same numbers, same public API.
SCSPILLConfiggainsmethod, aLiteral["sar"]defaulting to the only implemented model, so existing code is unaffected. Results carry the value asSCSPILLResults.method, andmethod_details.method_nameis now"SCSPILL/sar". Models added later become a new value plus a subpackage rather than a new class. The literal deliberately lists only what exists: the roadmap names are rejected, not silently accepted.- Internal layout separates the shared spillover layer from the model. The
sarmodel’s samplers, kernels, identification formulas, inference assembly and pipeline moved toscspill/utils/scspill_helpers/sar/; the MCMC diagnostics and classical-SCM baseline moved up toscspill/utils/, and the spatial-weight primitives to a newscspill/utils/spatial.py. The shared root now mirrors mlsynth’s equivalent level exactly. Public imports are unaffected; code importing private helper paths must follow the move. - Documentation gains a Models section — a catalogue with a clearly labelled roadmap (Cao & Dowd, the inclusive SCM of Di Stefano & Mellace, and Grossi et al.’s partial-interference SCG, none implemented) and a page per model. The method article is now the
sarmodel’s page; its published URL still resolves. - Fixes a latent crash: the default plot filename is derived from
method_name, so a name containing/madesave=Truewrite into a directory that does not exist. The slug is now sanitized.
v0.1.1 (2026-07-28)
Attribution and citation metadata only — no functional change to the estimator, and results are bit-for-bit identical to v0.1.0.
- The software’s citation title is now Synthetic Control Models with Spillovers in Python, and Shosei Sakaguchi and Hayato Tagawa are credited as co-authors alongside Carlos Mendez, in
CITATION.cffand in the package metadata. They authored the method and the R/C++ implementation this package ports; the Python implementation is Carlos Mendez’s. LICENSEnow retains the original implementation’s MIT copyright notice (Shosei Sakaguchi and Hayato Tagawa) alongside this package’s.- Citations throughout the README, documentation, and module docstrings now carry the article’s year (2026) and DOI (
10.1093/ectj/utag006), andCITATION.cffadditionally references the replication package (10.5281/zenodo.19066186). - The documentation site gained a “Citing” section, which it previously lacked entirely.
v0.1.0 (2026-07-28)
Initial release: a Python implementation of the Bayesian spatial-spillover synthetic control of Sakaguchi & Tagawa, architecturally aligned with mlsynth.
SCSPILL(config).fit() -> SCSPILLResults: two-step sampler (horseshoe synthetic weights via Makalic–Schmidt Gibbs; SAR block with AR(1) latent factors, horseshoe or ridge covariate priors, and adaptive random-walk Metropolis for the spillover intensity), effects via the identification formulas with an eigendecomposition + Sherman–Morrison fast path, credible bands, a time-by-donor spillover panel, MCMC diagnostics, and R-parity plot kinds.- Paper-correct defaults with R-compatibility escape hatches: proper covariate arrays (the R replication package’s fits received scrambled covariates), horseshoe on the covariate coefficients (
beta_prior), paired posterior draws in the effect intervals (propagate_alpha), and burn-in step adaptation for the Metropolis step (adapt_rho). - A coherent latent-factor block: the Geweke joint distribution test caught two mutually inconsistent conditionals in the reference implementation (the omega parametrization and the FFBS initialization); both follow the paper’s parametrization here, and every isolated sampler block passes the test.
scspill.validation: the Geweke joint distribution test (simplified and production kernels), prior-sensitivity grids, and prior predictive checks whose nine statistics are pinned to the R package’s frozen California table to three decimals.scspill.simulate: the paper’s Monte Carlo engine (rook-lattice SAR DGP, SCM/BSCM/SCSPILL comparison, the Tables 1-2 grid) with a loader for the frozen R results.scspill.data: the bundled California Proposition 99 and Sudan secession case studies with label-aligned spatial weights.- Optional numba backend compiling the same kernel source (~10x faster sampling); single-threaded BLAS inside the samplers for reproducibility.
- Cross-validation benchmarks against the frozen R results (
benchmarks/run_benchmarks.py).