Hierarchical Bayesian Modeling of the Two-Step Task using Hybrid Model, with 4 parameters.
It has the following parameters: `a`

(learning rate for both stages 1 & 2), `beta`

(inverse temperature for both stages 1 & 2), `pi`

(perseverance), `w`

(model-based weight).

**Task**: Two-Step Task (Daw et al., 2011)**Model**: Hybrid Model, with 4 parameters (Daw et al., 2011; Wunderlich et al., 2012)

```
ts_par4(
data = NULL,
niter = 4000,
nwarmup = 1000,
nchain = 4,
ncore = 1,
nthin = 1,
inits = "vb",
indPars = "mean",
modelRegressor = FALSE,
vb = FALSE,
inc_postpred = FALSE,
adapt_delta = 0.95,
stepsize = 1,
max_treedepth = 10,
...
)
```

- data
Data to be modeled. It should be given as a data.frame object, a filepath for a tab-seperated txt file,

`"example"`

to use example data, or`"choose"`

to choose data with an interactive window. Columns in the dataset must include: "subjID", "level1_choice", "level2_choice", "reward". See**Details**below for more information.- niter
Number of iterations, including warm-up. Defaults to 4000.

- nwarmup
Number of iterations used for warm-up only. Defaults to 1000.

- nchain
Number of Markov chains to run. Defaults to 4.

- ncore
Number of CPUs to be used for running. Defaults to 1.

- nthin
Every

`i == nthin`

sample will be used to generate the posterior distribution. Defaults to 1. A higher number can be used when auto-correlation within the MCMC sampling is high.- inits
Character value specifying how the initial values should be generated. Possible options are "vb" (default), "fixed", "random", or your own initial values.

- indPars
Character value specifying how to summarize individual parameters. Current options are: "mean", "median", or "mode".

- modelRegressor
Whether to export model-based regressors (

`TRUE`

or`FALSE`

). Not available for this model.- vb
Use variational inference to approximately draw from a posterior distribution. Defaults to

`FALSE`

.- inc_postpred
Include trial-level posterior predictive simulations in model output (may greatly increase file size). Defaults to

`FALSE`

. If set to`TRUE`

, it includes: "y_pred_step1", "y_pred_step2"- adapt_delta
Floating point value representing the target acceptance probability of a new sample in the MCMC chain. Must be between 0 and 1. See

**Details**below.- stepsize
Integer value specifying the size of each leapfrog step that the MCMC sampler can take on each new iteration. See

**Details**below.- max_treedepth
Integer value specifying how many leapfrog steps the MCMC sampler can take on each new iteration. See

**Details**below.- ...
For this model, it's possible to set

**model-specific argument(s)**as follows:- trans_prob
Common state transition probability from Stage (Level) 1 to Stage (Level) 2. Defaults to 0.7.

A class "hBayesDM" object `modelData`

with the following components:

- model
Character value that is the name of the model (\code"ts_par4").

- allIndPars
Data.frame containing the summarized parameter values (as specified by

`indPars`

) for each subject.- parVals
List object containing the posterior samples over different parameters.

- fit
A class

`stanfit`

object that contains the fitted Stan model.- rawdata
Data.frame containing the raw data used to fit the model, as specified by the user.

- modelRegressor
List object containing the extracted model-based regressors.

This section describes some of the function arguments in greater detail.

**data** should be assigned a character value specifying the full path and name (including
extension information, e.g. ".txt") of the file that contains the behavioral data-set of all
subjects of interest for the current analysis. The file should be a **tab-delimited** text
file, whose rows represent trial-by-trial observations and columns represent variables.

For the Two-Step Task, there should be 4 columns of data with the
labels "subjID", "level1_choice", "level2_choice", "reward". It is not necessary for the columns to be in this particular order,
however it is necessary that they be labeled correctly and contain the information below:

- subjID
A unique identifier for each subject in the data-set.

- level1_choice
Choice made for Level (Stage) 1 (1: stimulus 1, 2: stimulus 2).

- level2_choice
Choice made for Level (Stage) 2 (1: stimulus 3, 2: stimulus 4, 3: stimulus 5, 4: stimulus 6).

Note that, in our notation, choosing stimulus 1 in Level 1 leads to stimulus 3 & 4 in Level 2 with a common (0.7 by default) transition. Similarly, choosing stimulus 2 in Level 1 leads to stimulus 5 & 6 in Level 2 with a common (0.7 by default) transition. To change this default transition probability, set the function argument `trans_prob` to your preferred value.- reward
Reward after Level 2 (0 or 1).

*****Note: The file may contain other columns of data (e.g. "ReactionTime", "trial_number",
etc.), but only the data within the column names listed above will be used during the modeling.
As long as the necessary columns mentioned above are present and labeled correctly, there is no
need to remove other miscellaneous data columns.

**nwarmup** is a numerical value that specifies how many MCMC samples should not be stored
upon the beginning of each chain. For those familiar with Bayesian methods, this is equivalent
to burn-in samples. Due to the nature of the MCMC algorithm, initial values (i.e. where the
sampling chains begin) can have a heavy influence on the generated posterior distributions. The
`nwarmup`

argument can be set to a high number in order to curb the effects that initial
values have on the resulting posteriors.

**nchain** is a numerical value that specifies how many chains (i.e. independent sampling
sequences) should be used to draw samples from the posterior distribution. Since the posteriors
are generated from a sampling process, it is good practice to run multiple chains to ensure
that a reasonably representative posterior is attained. When the sampling is complete, it is
possible to check the multiple chains for convergence by running the following line of code:
`plot(output, type = "trace")`

. The trace-plot should resemble a "furry caterpillar".

**nthin** is a numerical value that specifies the "skipping" behavior of the MCMC sampler,
using only every `i == nthin`

samples to generate posterior distributions. By default,
`nthin`

is equal to 1, meaning that every sample is used to generate the posterior.

**Control Parameters:** `adapt_delta`

, `stepsize`

, and `max_treedepth`

are
advanced options that give the user more control over Stan's MCMC sampler. It is recommended
that only advanced users change the default values, as alterations can profoundly change the
sampler's behavior. Refer to 'The No-U-Turn Sampler: Adaptively Setting Path Lengths in
Hamiltonian Monte Carlo (Hoffman & Gelman, 2014, Journal of Machine Learning Research)' for
more information on the sampler control parameters. One can also refer to 'Section 34.2. HMC
Algorithm Parameters' of the Stan User's Guide
and Reference Manual, or to the help page for `stan`

for a less technical
description of these arguments.

Daw, N. D., Gershman, S. J., Seymour, B., Ben Seymour, Dayan, P., & Dolan, R. J. (2011). Model-Based Influences on Humans' Choices and Striatal Prediction Errors. Neuron, 69(6), 1204-1215. https://doi.org/10.1016/j.neuron.2011.02.027

Daw, N. D., Gershman, S. J., Seymour, B., Ben Seymour, Dayan, P., & Dolan, R. J. (2011). Model-Based Influences on Humans' Choices and Striatal Prediction Errors. Neuron, 69(6), 1204-1215. https://doi.org/10.1016/j.neuron.2011.02.027

Wunderlich, K., Smittenaar, P., & Dolan, R. J. (2012). Dopamine enhances model-based over model-free choice behavior. Neuron, 75(3), 418-424.

We refer users to our in-depth tutorial for an example of using hBayesDM: https://rpubs.com/CCSL/hBayesDM

```
if (FALSE) {
# Run the model with a given data.frame as df
output <- ts_par4(
data = df, niter = 2000, nwarmup = 1000, nchain = 4, ncore = 4)
# Run the model with example data
output <- ts_par4(
data = "example", niter = 2000, nwarmup = 1000, nchain = 4, ncore = 4)
# Visually check convergence of the sampling chains (should look like 'hairy caterpillars')
plot(output, type = "trace")
# Check Rhat values (all Rhat values should be less than or equal to 1.1)
rhat(output)
# Plot the posterior distributions of the hyper-parameters (distributions should be unimodal)
plot(output)
# Show the WAIC and LOOIC model fit estimates
printFit(output)
}
```