# 03: The CAR Models

## Overview

The `*car()` functions (`rcar()`, `car()`, `mcar()`, `mstcar()`) build the necessary features needed to run RSTr and places them in the specified directory. In this vignette, we will talk in detail about each model, the arguments used in `*car()` functions, and how to use them.

## The `*car()` functions

The current version of RSTr features four models to choose from: the Besag-York-Mollié (BYM) CAR model (also known as just the CAR model), the Restricted CAR (RCAR) model, the Multivariate CAR (MCAR) model, and the Multivariate Spatiotemporal CAR (MSTCAR) model. We will now compare these models and their use cases.

### The CAR model

The CAR model (function call `car()`) is the basis of all models used in RSTr. The premise of the CAR is to spatially smooth estimates across spatial regions using a random effects estimator `Z`. The intensity of its smoothing in a region is based on the event and population counts of that region and the counts in its neighboring regions.

The CAR model only smooths across spatial regions and not across sociodemographic groups or time periods. While datasets that include these stratifications can be run with `car()`, the user would be effectively running several concurrent CAR models. The CAR model is recommended if the user is only has data for one sociodemographic group of interest and one time-period.

### The RCAR model

The RCAR model (function call `rcar()`) is the most recent BYM implementation in RSTr. The RCAR model follows the same general paradigm as the CAR model, but prevents oversmoothing by capping the spatial and non-spatial variance. Even though the RCAR only smooths across spatial regions, the estimates generated by `rcar()` are nuanced and strike a happy medium between the use of crude rate estimates and the oversmoothing of the standard CAR model.

To learn more about restricted CAR models, read `vignette("RSTr-informativeness")`.

### The MCAR model

The MCAR model (function call `mcar()`) is an extension of the CAR model: whereas the CAR model can only smooth over spatial regions, the MCAR model can smooth over spatial regions and sociodemographic groups. The MCAR model is ideal for datasets that include multiple sociodemographic groups. A restricted MCAR (RMCAR) model is currently under development and will be implemented in RSTr once its methodology is finalized.

### The MSTCAR model

The MSTCAR model (function call `mstcar()`) is an extension of the MCAR model, allowing for smoothing over spatial regions, sociodemographic groups, and time periods. The MSTCAR model is ideal for investigating trends in rate estimates over a specified time period.

## Arguments of the `*car()` function

All `*car()` functions provide several arguments:

- `name`: The name of the folder your model information lives in;

- `data`: The `list` object containing the event `Y` and population `n` data. For more information on `data` setup, read `vignette("RSTr-event")`;

- `adjacency`: The adjacency structure for your event and population data. For more information on adjacency structure setup, read `vignette("RSTr-adjacency")`;

- `dir`: The directory where the model folder lives. By default, this saves into your temporary directory, so the model information will be lost after the R session ends. Should you want to save your model to be analyzed at a later date or ensure that your samples are intact if R crashes during runtime, specify a different directory;

- `seed`: Allows the user to specify the random seed used for replication purposes;

- `perc_ci`: A number between 0 and 1 which specifies the desired credible interval to use when calculating the relative precision of estimates. By default, set to 0.95;

- `iterations`: The number of iterations to run the model for;

- `show_plots`: If set to `FALSE`, hides traceplots during model execution;

- `verbose`: If set to `FALSE`, hides the progress bar and messages in the console;

- `ignore_checks`: If set to `TRUE`, skips model validation;

- `method`: Chooses whether the event data is either Binomial (`"binomial"`) or Poisson (`"poisson"`) distributed. By default, RSTr uses Binomial updates for event data;

- `impute_lb`: Specifies a lower bound for imputed data for event information that is missing or suppressed;

- `impute_ub`: Specifies an upper bound for imputed data for event information that is missing or suppressed;

- `inits`: This is a `list` of initial values for each parameter. This can be specified by the user or generated by default. For more information on specification of `inits`, see `vignette("RSTr-initialvalues")`; and

- `priors`: This is a `list` of all prior information for each parameter. This can be specified by the user or generated by default. For more information on specification of `priors`, see `vignette("RSTr-priors")`.

Most of these arguments are not needed, as the model has defaults for many of them. `rcar()` and `mstcar()` have additional arguments only used by them:

- `A`: In the RCAR model, describes the limit of the smoothing intensity between regions;

- `m0`: In the RCAR model, specifies the baseline neighbor count; and

- `update_rho`: In the MSTCAR model, allows for updates of the temporal correlation parameter `rho`. By default, RSTr does not update `rho`.

If you run into errors when trying to initialize your model, read `vignette("RSTr-troubleshoot")`. Below, we will go into detail regarding what each argument does specifically and what to keep in mind when setting these values.

### The `inits` argument

`inits` is a `list` specifying the starting values for parameters in the model. Details around the initial value parameters can be found in `vignette("RSTr-initialvalues")`.

### The `priors` argument

`priors` behaves similar to `inits`, except that it contains all information related to parameter priors. Details around the initial value parameters can be found in `vignette("RSTr-priors")`.

### The `method` argument

`method` offers two values: `"binomial"` and `"poisson"`. These values determine how the data is transformed and how the `lambda` Metropolis update is performed: `"binomial"` treats the event data as Binomial-distributed and `"poisson"` treats the event data as Poisson-distributed. Depending on your use case, you’ll want to choose between the two: for example, if you are working with very small mortality rates, `"poisson"` will work well, but if you are working with birth rates, for example, then `"binomial"` will work better. Note that `"binomial"` works in most general use cases and `"poisson"` only works well for datasets with small rates under approximately 1%.

### `m0` and `A`

`m0` and `A` are two components that determine the intensity of the smoothing of Restricted CAR models. `m0` should be a positive scalar, and the size of `A` is dependent on the group/time structure of your data: `A` will be a positive scalar for region-only models, a `vector` of size `n_group` for region-group models, and a matrix of size `n_group` x `n_time` for region-group-time models. Note, however, that these informativeness restriction measures are currently only developed for the CAR model, and restrictions for more complex models will be added to the RSTr package as their respective methods are developed.

### The `update_rho` argument

In the MSTCAR model, `update_rho` is a `logical` that specifies whether to calculate estimates for the temporal correlation `rho`. By default, it is set to `FALSE`. In empirical testing, this estimate was found to not be very sensitive to changes when specified prudently and also increases runtime by an order of magnitude due to its complexity.

### The `seed` argument

Because of the stochastic nature of Bayesian inference and the inherent instability of the MSTCAR model, replicability is extremely important. `seed` allows the user to specify a seed for generating similar estimates.

### The `ignore_checks` argument

As development continues on RSTr, there are occasions where the checks performed on the inputs of `*car()` throw an error, even though you may be certain that all of your inputs are behaving as expected. To override the checks, you can use the `ignore_checks` argument. Set this to `TRUE` to skip this step.

## Closing Thoughts

Initialization is one of the most important steps of running the model, as it’s where virtually all choices regarding the model are made. In this vignette, we explored each available type of CAR model in RSTr, the arguments of the `*car()` functions, and how to appropriately choose values for each argument.