# pmwg - Particle Metropolis within Gibbs

## Installation

To install the currently recommended method is via devtools.

`devtools::install_github('newcastlecl/pmwg', ref="release")`

Instructions on installing to an earlier version of R are included below.

## Using the package

The best introduction to the package can be found at the bookdown site located at: https://newcastlecl.github.io/samplerDoc/ The documentation there includes the motivation for the approach, several detailed examples of the package in action and a list of common problems and troubleshooting techniques. Included here is a skeleton of the required steps to run the sampler.

### Quickstart Guide

```
library(pmwg)
# Create a log likelikhood function for your model
loglikelihood_func <- function(x, data) {
# x are the current model parameter values
# return the log likelihood for the data (for the subject) given x
}
# Create the sampler object with your data, parameter names, loglike function and
# A list of priors for theta_mu_mean (mean of model parameters) and theta_mu_var (covariance of model parameters)
sampler <- pmwgs(
data = my_data_source,
pars = c("a", "list", "of", "par", "names"),
ll_func = loglikelihood_func,
prior = list(theta_mu_mean = rep(0, length(pars)), theta_mu_var = diag(rep(1, length(pars))))
)
# Initialise (generate first random effects for sampler)
sampler <- init(sampler) # Can also pass start points for sampler
# Run each stage of the sampler, can adjust number of particles on each
sampler <- run_stage(sampler, stage="burn")
sampler <- run_stage(sampler, stage="adapt")
sampler <- run_stage(sampler, stage="sample")
```

The `run_stage`

command can also be passed other arguments such as `iter`

for number of iterations, `particles`

for number of particles among others. For a full list see the description in the PMwG Tutorial Book.

## Installing to an older version of R (< 3.6)

**Terminal**

```
wget https://github.com/newcastlecl/pmwg/archive/reduce_requirements.zip
unzip reduce_requirements.zip
```

**R**

```
devtools::install_version('mvtnorm', version='1.0-0')
# (Maybe need install.packages("mcmc")
devtools::install_version('MCMCpack', version='1.4-0')
install.packages(c("pmwg-reduce_requirements/"), repos=NULL)
```