using_time_models

options(width = 300)

```{R, include = FALSE} knitr::opts_chunk$set( fig.width = 7, collapse = TRUE, comment = "#>", message = FALSE, warning = FALSE )

## Time models in calmr

Version 0.5 of `calmr` introduced its first time-based model, 
ANCCR [@jeong_mesolimbic_2022], and with it, 
I wrote several additional tools for future time-based models.

#### Changes to trial-based models

The biggest change in `calmr` version 0.5 is the use of the ">" character and its effect on 
trial-based models. With the advent of time-based models, some generalizations had to be made 
to enable those models to update across adjacent trial periods. You can learn more about this 
in the [directional_models](directional_models.html) vignette.

#### Specifying a design for time-based models

The designs for time-based models are nearly identical to those for trial-based models. 
However, clever use of the ">" character will
enrich them. Let's specify a serial feature discrimination experiment:

```r
library(calmr)
fpfn <- data.frame(
  group = c("FP", "FN"),
  phase1 = c("!100F>T>(US)/100T", "!100F>T/100T>(US)")
)
parse_design(fpfn)

We can manually specify the timing for the above experiment by calling the get_timings() function. Manipulating the list returned by that function will result in a manipulation of the timing between the experimental events.

ts <- get_timings(fpfn, model = "ANCCR")
ts

And now let's get the parameters for the ANCCR model.

pars <- get_parameters(fpfn, model = "ANCCR")
# increase learning rates
pars$alpha_reward <- 0.8
pars$alpha <- 0.08
# increase sampling interval to speed up the model
pars$sampling_interval <- 5
pars

Let's make the model's experience and look at the first 20 entries.

experiment <- make_experiment(fpfn,
  parameters = pars,
  timings = ts,
  model = "ANCCR"
)
head(experiences(experiment)[[1]], 20)

As you can see above, there are several rows per trial, each specifying a different stimulus. Time-based models like ANCCR run over a time log because they make ample use of the temporal difference between events.

Let's run the model and see some plots.

experiment <- run_experiment(experiment)
# Action values
patch_plots(plot(experiment, type = "action_values"))
# ANCCR
patch_plots(plot(experiment, type = "anccrs"))
# Dopamine transients
patch_plots(plot(experiment, type = "dopamines"))

And that's it! Easy, right?

References



Try the calmr package in your browser

Any scripts or data that you put into this service are public.

calmr documentation built on June 8, 2025, 1:03 p.m.