From 983f5084ff512360a621627fae6aae1c1366b7ae Mon Sep 17 00:00:00 2001 From: Adrien Le Guillou Date: Tue, 7 Nov 2023 14:05:13 +0100 Subject: [PATCH] update vignette --- vignettes/param-output.png | Bin 0 -> 62317 bytes vignettes/swfcalib.Rmd | 340 +++++++++++++++++++++++++++++++++---- 2 files changed, 309 insertions(+), 31 deletions(-) create mode 100644 vignettes/param-output.png diff --git a/vignettes/param-output.png b/vignettes/param-output.png new file mode 100644 index 0000000000000000000000000000000000000000..57dc47f00bfac3213080ec3ad9c85dc67dc89150 GIT binary patch literal 62317 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 t1{cc.dx} +# p2[hiv.test.rate_2] ==> t2{cc.dx.H} +# p3[hiv.test.rate_3] ==> t3{cc.dx.W} +# end +# +# subgraph Treatments +# p4[tx.init.rate_1] ==> t4{cc.linked1m.B} +# p5[tx.init.rate_2] ==> t5{cc.linked1m.H} +# p6[tx.init.rate_3] ==> t6{cc.linked1m.W} +# end +# +# t1 -.-> Prevalence +# t2 -.-> Prevalence +# t3 -.-> Prevalence +# t4 -.-> Prevalence +# t5 -.-> Prevalence +# t6 -.-> Prevalence +# +# subgraph Prevalence +# p7[hiv.trans.scale_1] +# p8[hiv.trans.scale_2] +# p9[hiv.trans.scale_3] +# +# t7{ +# i.prev.dx.B +# i.prev.dx.H +# i.prev.dx.W +# } +# end +# +# p7 ==> t7 +# p8 ==> t7 +# p9 ==> t7 +# +``` + +![Parameters - Output relationship](param-output.png) + + ## Calibration structure Knowing these parameters - outputs relationship, we can define a calibration structure to minimize the number of simulations required. -A first wave will calibrate simulateanously the 3 `hiv.test.rate` and the +A first wave will calibrate simultaneously the 3 `hiv.test.rate` and the 3 `tx.init.rate` parameters. This means that each run of the simulation will test a value for each of these 6 parameters. This idea is similar [factorial experiment design](https://en.wikipedia.org/wiki/Factorial_experiment) and is -only possible because of the independance between the parameters and their +only possible because of the independence between the parameters and their respective outcomes. After these 6 parameters are calibrated (i.e. given fixed and final values), @@ -148,7 +199,7 @@ outcomes to their target values. ## Waves and jobs To express this structure, we need to define calibration *jobs* that are -be run in parallel within several *waves*. +going to be run in parallel within several *waves*. In our example we will have two *waves*, the first one for the `hiv.test.rate` and `tx.init.rate` parameters and a second for the `hiv.trans.scale` parameters. @@ -219,7 +270,7 @@ model <- function(proposal) { init <- init_msm() control <- control_msm( - nsteps = 250, + nsteps = 52 * 60, nsims = 1, ncores = 1 ) @@ -377,7 +428,7 @@ n_sims <- 400 calib_object <- list( config = list( - simulator = model_fun, + simulator = model, default_proposal = dplyr::tibble( hiv.test.rate_1 = 0.004123238, hiv.test.rate_2 = 0.003771226, @@ -466,7 +517,9 @@ As mentioned earlier, each calibration *job* needs a function to define which proposal to make at the next iteration (`make_next_proposals`) and a function to assess if the calibration is finished (`get_result`). -In this section we will explore these functions and what they do in each job. +We won't get into the details of how these functions work but focus instead on +their practical use. You can have a look at their respective documentation for +more details. ### HIV test rate @@ -478,12 +531,10 @@ The proposer function is generated by a [function factory](https://adv-r.hadley. of proposals by a factor 2 around the best guess so far. The calibration assessor is made by `determ_poly_end(0.001, poly_n = 5)`. This -function fits a linear model with a degree 5 polynomial between the parameter -and the output. It then predict the best value for the parameter. This value -is later shared to the proposer to shrink the range around it. The calibration -is considered finished when the predicted value is less than `threshold` away -from the target (here `0.001`) AND when the prediction is not improving after -the last iteration. +function uses linear model with a degree 5 polynomial to predict the best value +for the parameter. The calibration is considered finished when the predicted +value is less than `threshold` away from the target (here `0.001`) AND when the +prediction is not improving after the last iteration. ### Linkage to care @@ -497,16 +548,243 @@ linkage to care and treatment uptake rate is consistent over the three groups. HIV prevalence and transmission scale is harder to calibrate as the 3 parameters and outputs are linked together. -Therefore a more basic approach is used, for the proposals, at each iteration -the squared error over all 3 targets is calculated for each proposal, then -the 30% best are kept. The ranges for the next round of proposals are the -ranges of these best previous rounds. The function factory here is +At each iteration the squared error over all 3 targets is calculated for each +proposal. The ranges for the next round of proposals are the ranges of these +best 30% proposals of the previous rounds. The function factory here is `make_proposer_se_range`. It takes a `retain_prop` argument that governs which proportion of the simulations are used to define the new ranges. -The calibration is considered when 100 simulations where the 3 outputs are less -than `thresholds` away from there respective targets. The `determ_end_thresh` -function factory allow us to define the number of *good* simulations required -and the thresholds for each output. +The calibration is considered done when 100 simulations where the 3 outputs are +less than `thresholds` away from there respective targets. The +`determ_end_thresh` function factory allow us to define the number of *good* +simulations required and the thresholds for each output. ## Running a calibration system + +Now that all the pieces are ready, we can setup the workflow using the +[`slurmworkflow`](https://github.com/EpiModel/slurmworkflow) package. + +This will allow the HPC to run the calibration steps in a loop until the +calibration is finished. + +The following script setup a complete calibration workflow with what was defined +so far. + +The main thing you may want to change in this script is the `batch_size` +variable that governs how many sims are run in parallel on a single cluster. +On the RSPH HPC we set it to 8. Therefore, 50 batches of 8 are submitted to +`slurm` at once to make the 400 simulations requested per iteration. + +A mail is sent if a job fails or at the end of the 3rd calibration step. This +latter indicate that the calibration process is done. + +```r +library("slurmworkflow") + +# Define the `model` function +model <- function(proposal) { + # Load all required elements + library(EpiModelHIV) + library(dplyr) + + epistats <- readRDS("data/input/epistats.rds") + netstats <- readRDS("data/input/netstats.rds") + netest <- readRDS("data/input/netest.rds") + + param <- param.net( + data.frame.params = read.csv("data/input/params.csv"), + netstats = netstats, + epistats = epistats + ) + + init <- init_msm() + + control <- control_msm( + nsteps = 52 * 60, + nsims = 1, + ncores = 1 + ) + + # Proposal to scenario ------------------------------------------------------- + scenario <- EpiModelHPC::swfcalib_proposal_to_scenario(proposal) + param_sc <- EpiModel::use_scenario(param, scenario) + + # Run the simulation --------------------------------------------------------- + sim <- netsim(est, param_sc, init, control) + + # Process the results ------------------------------------------------------- + results <- as_tibble(sim) |> + mutate_calibration_targets() |> + filter(time >= max(time) - 52) |> + select( + cc.dx.B, cc.dx.H, cc.dx.W, + cc.linked1m.B, cc.linked1m.H, cc.linked1m.W, + i.prev.dx.B, i.prev.dx.H, i.prev.dx.W, + ) |> + summarise(across( everything(), ~ mean(.x, na.rm = TRUE))) + + # Return the one row `tibble` + return(results) +} + +# Create the `calib_object` +n_sims <- 400 +calib_object <- list( + config = list( + simulator = model, + default_proposal = dplyr::tibble( + hiv.test.rate_1 = 0.004123238, + hiv.test.rate_2 = 0.003771226, + hiv.test.rate_3 = 0.005956663, + tx.init.rate_1 = 0.2981623, + tx.init.rate_2 = 0.3680919, + tx.init.rate_3 = 0.358254, + hiv.trans.scale_1 = 2.470962, + hiv.trans.scale_2 = 0.4247816, + hiv.trans.scale_3 = 0.3342994 + ), + root_directory = "data/calib", + max_iteration = 100, + n_sims = n_sims + ), + waves = list( + wave1 = list( + job1 = list( + targets = "cc.dx.B", + targets_val = 0.847, + params = c("hiv.test.rate_1"), # target: 0.00385 + initial_proposals = dplyr::tibble( + hiv.test.rate_1 = seq(0.002, 0.006, length.out = n_sims), + ), + make_next_proposals = swfcalib::make_shrink_proposer(n_sims, shrink = 2), + get_result = swfcalib::determ_poly_end(0.001, poly_n = 5) + ), + job2 = list( + targets = "cc.dx.H", + targets_val = 0.818, + params = c("hiv.test.rate_2"), # target: 0.0038 + initial_proposals = dplyr::tibble( + hiv.test.rate_2 = seq(0.002, 0.006, length.out = n_sims), + ), + make_next_proposals = swfcalib::make_shrink_proposer(n_sims, shrink = 2), + get_result = swfcalib::determ_poly_end(0.001, poly_n = 5) + ), + job3 = list( + targets = "cc.dx.W", + targets_val = 0.862, + params = c("hiv.test.rate_3"), # target: 0.0069 + initial_proposals = dplyr::tibble( + hiv.test.rate_3 = seq(0.004, 0.008, length.out = n_sims), + ), + make_next_proposals = swfcalib::make_shrink_proposer(n_sims, shrink = 2), + get_result = swfcalib::determ_poly_end(0.001, poly_n = 5) + ), + job4 = list( + targets = paste0("cc.linked1m.", c("B", "H", "W")), + targets_val = c(0.829, 0.898, 0.881), + params = paste0("tx.init.rate_", 1:3), + initial_proposals = dplyr::tibble( + tx.init.rate_1 = sample(seq(0.1, 0.5, length.out = n_sims)), + tx.init.rate_2 = sample(tx.init.rate_1), + tx.init.rate_3 = sample(tx.init.rate_1), + ), + make_next_proposals = swfcalib::make_shrink_proposer(n_sims, shrink = 2), + get_result = swfcalib::determ_poly_end(0.001, poly_n = 3) + ) + ), + wave2 = list( + job1 = list( + targets = paste0("i.prev.dx.", c("B", "H", "W")), + targets_val = c(0.33, 0.127, 0.09), + params = paste0("hiv.trans.scale_", 1:3), + initial_proposals = dplyr::tibble( + hiv.trans.scale_1 = sample(seq(1, 4, length.out = n_sims)), + hiv.trans.scale_2 = sample(seq(0.2, 0.6, length.out = n_sims)), + hiv.trans.scale_3 = sample(seq(0.2, 0.6, length.out = n_sims)) + ), + make_next_proposals = + swfcalib::make_proposer_se_range(n_sims, retain_prop = 0.3), + get_result = swfcalib::determ_end_thresh( + thresholds = rep(0.02, 3), + n_enough = 100 + ) + ) + ) + ) +) + +# Workflow --------------------------------------------------------------------- + +# Use preconfigured HPC settings +hpc_configs <- EpiModelHPC::swf_configs_rsph( + partition = "epimodel", + r_version = "4.3", + mail_user = "user@emory.edu" +) + +wf <- create_workflow( + wf_name = "Vignette_auto_calib", + default_sbatch_opts = hpc_configs$default_sbatch_opts +) + +# Calibration step 1 +wf <- add_workflow_step( + wf_summary = wf, + step_tmpl = step_tmpl_do_call( + what = swfcalib::calibration_step1, + args = list( + n_cores = 8, + calib_object = calib_object + ), + setup_lines = hpc_configs$r_loader + ), + sbatch_opts = list( + "cpus-per-task" = 8, + "time" = "00:20:00", + "mem-per-cpu" = "4G", + "mail-type" = "FAIL" + ) +) + +# Calibration step 2 +batch_size <- 8 +batch_numbers <- swfcalib:::get_batch_numbers(calib_object, batch_size) +wf <- add_workflow_step( + wf_summary = wf, + step_tmpl = step_tmpl_map( + FUN = swfcalib::calibration_step2, + batch_num = batch_numbers, + setup_lines = hpc_configs$r_loader, + max_array_size = 500, + MoreArgs = list( + n_cores = batch_size, + n_batches = max(batch_numbers), + calib_object = calib_object + ) + ), + sbatch_opts = list( + "cpus-per-task" = batch_size, + "time" = "05:00:00", + "mem-per-cpu" = "5G", + "mail-type" = "FAIL" + ) +) + +# Calibration step 3 +wf <- add_workflow_step( + wf_summary = wf, + step_tmpl = step_tmpl_do_call( + what = swfcalib::calibration_step3, + args = list( + calib_object = calib_object + ), + setup_lines = hpc_configs$r_loader + ), + sbatch_opts = list( + "cpus-per-task" = 1, + "time" = "00:20:00", + "mem-per-cpu" = "8G", + "mail-type" = "END" + ) +) +```