# SDALGCP2 0.1.0

First public version.

* **Raster, misaligned, and restricted-regression covariates for the
  spatio-temporal model.** `SDALGCP2_ST()` (and `sdalgcp(..., time =)`) now accept
  `rasters =` (intensity-scale continuous covariates), `covariates =` (kriged
  covariates measured on a different support, with the Berkson correction), and
  `confounding = "restricted"` (restricted spatial regression against space-time
  confounding) — the same extensions previously available only for spatial fits.
  The raster/misaligned fits use a Gauss-Newton tilting loop around the
  Kronecker-free space-time likelihood; the restricted fit reduces exactly to the
  spatial restricted fit at `T = 1`.

* **Spatio-temporal prediction now returns a long `sf` too.** `predict()` on an
  `SDALGCP2_ST` fit returns a one-row-per-region-time `sf` (class
  `"SDALGCP2_ST_pred"`) with the same `relative_risk`/`adjusted_rr` columns as the
  spatial predictor, so both can be mapped or `st_write()`-en the same way;
  posterior draws are kept as attributes.
* **Bundled datasets.** `sdalgcp_data` — a small simulated `sf` of 64 regions
  (`cases`, `x1`, `pop`) used by the help-page examples and the intro vignette;
  and `liver` — a real example, incident primary biliary cirrhosis counts by LSOA
  in North East England (Johnson et al. 2019), for realistic case studies.
* **The introductory vignette now runs live on `sdalgcp_data`** (no precomputed
  figures), so it is fully reproducible.
* **Runnable examples on the exported functions**, all using `sdalgcp_data`.
* **Prediction output is now an `sf` with clear public-health column names.**
  `predict()` returns an `sf` (class `"SDALGCP2_pred"`) you can map or `st_write()`
  directly, with columns `relative_risk`/`relative_risk_se` (the relative risk
  `exp(d'beta + S)`) and `adjusted_rr`/`adjusted_rr_se` (the covariate-adjusted
  relative risk `exp(S)`). The previous `RR`/`ARR` names are replaced everywhere
  (`plot()`, `exceedance()`, `map_exceedance()`, the spatio-temporal predictor) —
  `ARR` was dropped because it conventionally means *absolute risk reduction* in
  epidemiology. Posterior draws are retained as object attributes so exceedance
  probabilities still work for either quantity.
* **Kronecker-free spatio-temporal model** (`SDALGCP2_ST()`): separable space-time
  SDA-LGCP for counts over the same regions at several times. The likelihood never
  forms the `(N*T)x(N*T)` covariance, using `tr(Rs^-1 M Rt^-1 M')` for the
  quadratic form and `N log|Rt| + T log|Rs|` for the log-determinant (both verified
  vs the brute-force Kronecker product). Spatial scale on a grid, temporal Matern
  range estimated continuously (analytic gradient verified vs numDeriv). No `geoR`.
* **Covariate-tilted raster model** (`SDALGCP2_raster(tilt_spatial = TRUE)`):
  rebuilds the correlation from intensity-tilted weights with a log-normal
  aggregation correction.
* **General Matern smoothness for the direct method**: `corr_and_grad_cpp` now
  provides closed-form phi-derivatives for Matern `kappa` in {0.5, 1.5, 2.5}, so
  continuous-phi (`phi_method = "direct"`) estimation works for all three (was
  exponential only). Derivatives verified against finite differences.
* **Nugget / overdispersion term** (`nugget = TRUE`, with `phi_method = "direct"`):
  fits covariance `sigma2 (R(phi) + nu I)` and estimates the relative nugget
  `nu = tau2/sigma2` with a standard error, absorbing region-level overdispersion
  beyond the spatial structure. Analytic gradient and Hessian (including the nugget
  and all cross terms) verified against numerical differentiation.
* **Re-anchored (iterated) MCML** (`reanchor =`): re-simulates the latent field at
  the current optimum and refits, keeping the importance weights near-uniform. On a
  64-region example it lifts the effective sample size from ~0% to ~96% and cuts the
  log-likelihood MC standard error ~100x, correcting the variance estimate.
* **Importance-sampling diagnostics** (`mc_diagnostics()`, shown in `summary()`):
  effective sample size of the importance weights at the optimum and a Monte Carlo
  SE for the maximised log-likelihood; warns on collapse.
* **Spatially continuous (raster) covariates** (`SDALGCP2_raster()`): covariates
  given as rasters enter the LGCP intensity at the candidate-point level and are
  aggregated on the intensity (exp) scale via a log-sum-exp offset
  `b_i(beta) = log sum_k w_ik exp(z(x_ik)'beta)` -- the correct alternative to
  averaging the predictor over polygons (which is biased under the log link). Fit
  by a Gauss-Newton fixed point reusing `mcml_fit()`. On a sharp-peak covariate,
  naive areal averaging is biased +67% while this recovers the truth to ~6%.
* **Continuous-phi ("direct") estimation** (`phi_method = "direct"`): optimises the
  spatial scale `phi` continuously inside the MCML objective instead of profiling a
  grid, using analytic first/second derivatives of the aggregated double integral
  (`corr_and_grad_cpp`). Gives a genuine standard error for `phi` from the joint
  Hessian and avoids grid-boundary artefacts; `phi_method = "grid"` stays the
  default. Gradient and Hessian verified against numerical differentiation. The
  full derivation is in `math/continuous-phi-derivation.pdf`.
* Post-fit visualisation & diagnostics: relative-risk / uncertainty / exceedance
  maps, `phi_profile()`, `coef_plot()`, `model_check()` (residual Moran's I),
  `report()`.
* C++ (RcppArmadillo + OpenMP) aggregated correlation assembly (`precompute_corr`).
* C++ Newton Laplace mode + adaptive MALA sampler (`laplace_sampling`); reproducible
  given the same mode and seed.
* Vectorised, Cholesky-based Monte Carlo likelihood with analytic gradient/Hessian
  (`mcml_fit`).
* One-call spatial fit `SDALGCP2()` (points -> correlation -> MCML).
* Candidate-point generation `sda_points()` (SSI / uniform / regular; sf + spatstat
  + terra).
* Prediction `predict.SDALGCP2()` (discrete + continuous) with an MCMC or a no-MCMC
  Laplace fast path; `exceedance()` probabilities.
* Vignette and reproducible benchmark scripts using entirely simulated data.
