dynamite

Project Status: Active – The project has reached a stable, usable state and is being actively developed. R-CMD-check Codecov test coverage Status at rOpenSci Software Peer Review

The dynamite R package provides easy-to-use interface for Bayesian inference of complex panel (time series) data comprising of multiple measurements per multiple individuals measured in time. The main features distinguishing the package and the underlying methodology from many other approaches are:

The dynamite package is developed with the support of Academy of Finland grant 331817 (PREDLIFE).

Installation

You can install the development version of dynamite from GitHub by running one of the following lines:

# install.packages("devtools")
devtools::install_github("ropensci/dynamite")
install.packages("dynamite", repos = "https://ropensci.r-universe.dev")

Example

A single-channel model with time-invariant effect of z, time-varying effect of x, lagged value of the response variable y and a group-specific random intercepts:

set.seed(1)
library(dynamite)
gaussian_example_fit <- dynamite(
  obs(y ~ -1 + z + varying(~ x + lag(y)), family = "gaussian") + 
    random() + splines(df = 20),
  data = gaussian_example, time = "time", group = "id",
  iter = 2000, warmup = 1000, thin = 5,
  chains = 2, cores = 2, refresh = 0, save_warmup = FALSE
)

Posterior estimates of the fixed effects:

plot_betas(gaussian_example_fit)

Posterior estimates of time-varying effects

plot_deltas(gaussian_example_fit, scales = "free")

And group-specific intercepts:

plot_nus(gaussian_example_fit)

Traceplots and density plots:

plot(gaussian_example_fit, type = "beta")

Posterior predictive samples for the first 4 groups (samples based on the posterior distribution of model parameters and observed data on first time point):

library(ggplot2)
pred <- predict(gaussian_example_fit, n_draws = 50)
pred |> dplyr::filter(id < 5) |> 
  ggplot(aes(time, y_new, group = .draw)) +
  geom_line(alpha = 0.5) + 
  # observed values
  geom_line(aes(y = y), colour = "tomato") +
  facet_wrap(~ id) +
  theme_bw()

For more examples, see the package vignette.

Contributing

Contributions are very welcome, see CONTRIBUTING.md for general guidelines.