---
title: "imabc"
output: rmarkdown::html_vignette
bibliography: references.bib
vignette: >
%\VignetteIndexEntry{imabc}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
# Introduction to IMABC
A thorough introduction to Incremental Mixture Approximate Bayesian Computation (IMABC) method can be found in @rutter_microsimulation_2019. Here we will walk through the code found in @imabc_pkg.
```{r setup}
library(imabc)
```
## Step 1 - Define the priors
For a more detailed explanation of how the priors functions work, see the `vignette("priors")`
```{r priors, eval = FALSE}
priors <- define_priors(
# x1: Uniform Prior (from base R)
x1 = add_prior(
dist_base_name = "unif",
min = 0.2, max = 0.9
),
# x2: Truncated Normal (from truncnorm package)
add_prior(
parameter_name = "x2",
density_fn = "dtruncnorm",
mean = 0.5, sd = 0.05, a = 0.4, b = 0.8, # a = min and b = max
min = 0.4, max = 0.8 # User must specify both in truncnorm
),
# V3: Fixed parameter (not calibrated)
add_prior(0.5)
)
```
## Step 2 - Define target values
A more detailed description will be available in the near future at `vignette("targets")`
```{r targets, eval = FALSE}
targets <- define_targets(
# G1: Grouped targets include T1 and T2
G1 = group_targets(
T1 = add_target(
target = 1.5,
starting_range = c(1.0, 2.0),
stopping_range = c(1.49, 1.51)
),
add_target(
target_name = "T2",
target = 0.5,
starting_range = c(0.2, 0.9),
stopping_range = c(0.49, 0.51)
)
)
)
```
## Step 3 - Define the target function
A more detailed description will be available in the near future at `vignette("target_functions")`
```{r target_fn, eval = FALSE}
fn1 <- function(x1, x2) { x1 + x2 + sample(c(-1, 1), 1)*rnorm(1, 0, 0.1) }
fn2 <- function(x1, x2) { x1 * x2 + sample(c(-1, 1), 1)*rnorm(1, 0, 0.1) }
fn <- function(x1, x2) {
res <- c()
res["T2"] <- fn1(x1, x2)
res["T1"] <- fn2(x1, x2)
return(res)
}
target_fun <- define_target_function(
targets, priors, FUN = fn, use_seed = FALSE
)
```
## Step 4 - Calibrate the model
The primary function is imabc(). The inputs and their descriptions are as follows:
```{r imabc, eval = FALSE}
calibration_results <- imabc(
priors = priors,
targets = targets_nogroup,
target_fun = target_fun,
seed = 54321,
N_start = 2000,
N_centers = 2,
Center_n = 500,
N_cov_points = 50,
N_post = 100
)
```