DAST (DisAggregation in Space and Time)
DAST fits spatial disaggregation models for areal data observed on maps where polygon boundaries change over time. It combines polygon responses, optional fine-scale covariates, and population rasters to infer fine-scale spatial risk surfaces.
Installation
You can install from GitHub with:
# install.packages("remotes") remotes::install_github("nripstein/DAST")
or the development branch from
remotes::install_github("nripstein/DAST", ref = "development")
Data Requirements
-
polygon_shapefile_list: onesfpolygon object per time point, witharea_idandresponsecolumns by default. -
covariate_rasters_list: optional matching list ofterra::SpatRastercovariate stacks. -
aggregation_rasters_list: optional matching list ofterra::SpatRasteraggregation or population rasters; if omitted, uniform aggregation weights are used. -
Polygon and raster inputs should use compatible coordinate reference systems and aligned raster grids within each time point.
Workflow
# polygon_list: list of sf polygon objects, one per time point # covariate_list: optional list of terra::SpatRaster covariate stacks # aggregation_list: optional list of terra::SpatRaster aggregation/population rasters dat <- prepare_data_mmap( polygon_shapefile_list = polygon_list, covariate_rasters_list = covariate_list, aggregation_rasters_list = aggregation_list ) fit <- disag_model_mmap(dat, engine = "AGHQ") pred <- predict(fit)
Predictions are returned as fine-scale rate or risk surfaces. When the aggregation raster represents population or exposure, expected fine-cell counts can be obtained by multiplying the predicted surface by the matching aggregation raster.
Fitting Algorithms
It is straightforward to use the model-fitting algorithm of your choice by specifying an engine argument in disag_model_mmap().
| Engine | Description | Recommended use |
|---|---|---|
AGHQ |
Approximate Bayesian inference using Adaptive Gauss-Hermite Quadrature. | Default option for fast approximate fully Bayesian inference. |
TMB |
Laplace approximation through Template Model Builder. | Fastest option, using Empirical Bayes instead of full Bayes. |
MCMC |
NUTS algorithm implimented in tmbstan. | Provides asymptotically exact posterior sampling, but is very slow; predict() is not currently implemented. |
Passing Engine-Specific Arguments
Use engine.args to pass arguments specific to the fitting algorithm selected.
# AGHQ controls fit_aghq <- disag_model_mmap( dat, engine = "AGHQ", engine.args = list( aghq_k = 2, optimizer = "BFGS" ) ) # TMB controls fit_tmb <- disag_model_mmap( dat, engine = "TMB", engine.args = list( iterations = 1000, hess_control_ndeps = 1e-4 ) ) # MCMC controls via tmbstan fit_mcmc <- disag_model_mmap( dat, engine = "MCMC", engine.args = list( chains = 4, iter = 2000, warmup = 1000 ) ) summary(fit_mcmc)
Citation
If you use DAST, please cite:
@misc{ripstein2026spatiotemporal, title = {Spatio-Temporal Disaggregation with Changing Areal Boundaries}, author = {Ripstein, Noah and Brown, Patrick and Stafford, Jamie}, year = {2026}, eprint = {2606.25074}, archivePrefix = {arXiv}, url = {https://arxiv.org/abs/2606.25074} }