Overview
This guide shows how to run MOSAIC simulations with parameter
stochasticity using the run_MOSAIC() function.
This workflow samples parameters from prior distributions and runs
multiple simulations to quantify uncertainty.
For running single deterministic simulations, see the Running simulations vignette.
Before you begin: Complete the Installation vignette
to set up MOSAIC and its dependencies. Calibration is pure R, so the
optional Python environment is not needed and there is no need to call
attach_mosaic_env().
Run a fixed number of simulations for one location
# Load required packages
library(MOSAIC)
# Create output directory and set up logging
dir_output <- path.expand("~/MOSAIC/output/ETH_fixed")
if (!dir.exists(dir_output)) dir.create(dir_output, recursive = TRUE)
set_root_directory("~/MOSAIC")
priors_ETH <- get_location_priors(iso="ETH")
config_ETH <- get_location_config(iso="ETH")
control_ETH <- mosaic_control_defaults()
control_ETH$calibration$n_simulations <- 500
control_ETH$calibration$n_iterations <- 2
control_ETH$parallel$enable <- TRUE
control_ETH$parallel$n_cores <- parallel::detectCores()-1
control_ETH$targets$ESS_param <- 100
control_ETH$targets$ESS_param_prop <- 0.9
control_ETH$targets$ESS_best <- 50
control_ETH$targets$ESS_method <- 'perplexity'
control_ETH$sampling$sample_tau_i <- FALSE # Travel probability
control_ETH$sampling$sample_mobility_gamma <- FALSE # Gravity model exponent
control_ETH$sampling$sample_mobility_omega <- FALSE # Mobility rate
control_ETH$likelihood$weight_cases <- 1
control_ETH$likelihood$weight_deaths <- 0.05
control_ETH$predictions$n_iter_best <- 30
control_ETH$predictions$n_iter_ensemble <- 5
control_ETH$paths$clean_output <- TRUE
control_ETH$io <- mosaic_io_presets("fast")
result_ETH <- run_MOSAIC(
dir_output = dir_output,
config = config_ETH,
priors = priors_ETH,
control = control_ETH,
resume = FALSE
)Run the adaptive simulation algorithm for one location
# Load required packages
library(MOSAIC)
# Create output directory and set up logging
dir_output <- path.expand("~/MOSAIC/output/ETH_auto")
if (!dir.exists(dir_output)) dir.create(dir_output, recursive = TRUE)
set_root_directory("~/MOSAIC")
priors_ETH <- get_location_priors(iso="ETH")
config_ETH <- get_location_config(iso="ETH")
control_ETH <- mosaic_control_defaults()
control_ETH$calibration$n_simulations <- 'auto'
control_ETH$calibration$n_iterations <- 2
control_ETH$calibration$batch_size_adaptive <- 500
control_ETH$calibration$min_batches_adaptive <- 5
control_ETH$calibration$max_batches_adaptive <- 10
control_ETH$calibration$target_r2_adaptive <- 0.95
control_ETH$calibration$max_simulations_total <- 1e+06
control_ETH$parallel$enable <- TRUE
control_ETH$parallel$n_cores <- parallel::detectCores()-1
control_ETH$targets$ESS_param <- 100
control_ETH$targets$ESS_param_prop <- 0.9
control_ETH$targets$ESS_best <- 50
control_ETH$targets$ESS_method <- 'perplexity'
control_ETH$sampling$sample_tau_i <- FALSE
control_ETH$sampling$sample_mobility_gamma <- FALSE # Gravity model exponent
control_ETH$sampling$sample_mobility_omega <- FALSE # Mobility rate
control_ETH$likelihood$weight_cases <- 1
control_ETH$likelihood$weight_deaths <- 0.05
control_ETH$predictions$n_iter_best <- 30
control_ETH$predictions$n_iter_ensemble <- 5
control_ETH$paths$clean_output <- TRUE
control_ETH$io <- mosaic_io_presets("fast")
result_ETH <- run_MOSAIC(
dir_output = dir_output,
config = config_ETH,
priors = priors_ETH,
control = control_ETH,
resume = FALSE
)Run the adaptive simulation algorithm for multiple locations
# Load required packages
library(MOSAIC)
# Create output directory and set up logging
dir_output <- path.expand("~/MOSAIC/output/ETH_KEN")
if (!dir.exists(dir_output)) dir.create(dir_output, recursive = TRUE)
set_root_directory("~/MOSAIC")
iso_codes <- c("ETH", "KEN")
priors <- get_location_priors(iso=iso_codes)
config <- get_location_config(iso=iso_codes)
control <- mosaic_control_defaults()
control$calibration$n_simulations <- 'auto'
control$calibration$n_iterations <- 3
control$calibration$batch_size_adaptive <- 500
control$calibration$min_batches_adaptive <- 5
control$calibration$max_batches_adaptive <- 10
control$calibration$target_r2_adaptive <- 0.95
control$calibration$max_simulations_total <- 1e+06
control$parallel$enable <- TRUE
control$parallel$n_cores <- parallel::detectCores()-1
control$targets$ESS_param <- 100
control$targets$ESS_param_prop <- 0.95
control$targets$ESS_best <- 30
control$targets$ESS_method <- 'perplexity'
control$sampling$sample_tau_i <- length(iso_codes) > 1 # Travel probability
control$sampling$sample_mobility_gamma <- length(iso_codes) > 1 # Gravity model exponent
control$sampling$sample_mobility_omega <- length(iso_codes) > 1 # Mobility rate
control$likelihood$weight_cases <- 1
control$likelihood$weight_deaths <- 0.05
control$predictions$n_iter_best <- 50
control$predictions$n_iter_ensemble <- 10
control$paths$clean_output <- TRUE
control$io <- mosaic_io_presets("fast")
control$logging$verbose <- TRUE
result <- run_MOSAIC(
dir_output = dir_output,
config = config,
priors = priors,
control = control,
resume = FALSE
)