Package 'NVAR'

Title: Nonlinear Vector Autoregression Models
Description: Estimate nonlinear vector autoregression models (also known as the next generation reservoir computing) for nonlinear dynamic systems. The algorithm was described by Gauthier et al. (2021) <doi:10.1038/s41467-021-25801-2>.
Authors: Jingmeng Cui [aut, cre]
Maintainer: Jingmeng Cui <[email protected]>
License: GPL (>= 3)
Version: 0.1.0
Built: 2025-02-12 05:26:39 UTC
Source: https://github.com/Sciurus365/NVAR

Help Index


Fit a nonlinear vector autoregression model

Description

Described by Gauthier et al. (2021), also known as the "next generation reservoir computing" (NG-RC).

Usage

NVAR(data, vars, s, k, p, constant = TRUE, alpha = 0.05)

Arguments

data

A tibble, data.frame, or matrix that represents a time series of vectors, with each row as a time step.

vars

A character vector of the variable names used in the model.

s

The number of time steps skipped between each two used time steps.

k

The number of time steps used for constructing features.

p

The order of polynomial feature vector.

constant

Whether there should be a constant value (1) in the feature set? Default is TRUE.

alpha

The α\alpha value for ridge regression. Default is 0.05.

Details

The feature vector is as follows (from the reference):

Ototal =Olin Ononlinear (p)\mathbb{O}_{\text {total }}=\mathbb{O}_{\text {lin }} \oplus \mathbb{O}_{\text {nonlinear }}^{(p)}

Olin,i=XiXisXi2sXi(k1)s\mathbb{O}_{\operatorname{lin}, i}=\mathbf{X}_i \oplus \mathbf{X}_{i-s} \oplus \mathbf{X}_{i-2 s} \oplus \ldots \oplus \mathbf{X}_{i-(k-1) s}

Ononlinear (p)=Olin Olin Olin \mathbb{O}_{\text {nonlinear }}^{(p)}=\mathbb{O}_{\text {lin }}\lceil\otimes\rceil \mathbb{O}_{\text {lin }}\lceil\otimes\rceil \ldots\lceil\otimes\rceil \mathbb{O}_{\text {lin }}

The feature vector Ototal \mathbb{O}_{\text {total }} is then used as input for a ridge regression with alpha.

Value

An NVAR object that contains data, data_td (a tidy form of tibble that contains the training data), W_out (the fitted coefficients), and parameters.

References

Gauthier, D. J., Bollt, E., Griffith, A., & Barbosa, W. A. S. (2021). Next generation reservoir computing. Nature Communications, 12(1), 5564. https://doi.org/10.1038/s41467-021-25801-2

See Also

sim_NVAR() for simulating the NVAR model.

Examples

# generate test data from the Lorenz system
testdata <- nonlinearTseries::lorenz()
testdata <- tibble::as_tibble(testdata)
# fit an NVAR model for the Lorenz system
t1 <- NVAR(data = testdata, vars = c("x", "y", "z"), s = 2, k = 2, p = 2, alpha = 1e-3)
# simulate the NVAR model
t1_sim <- sim_NVAR(t1, length = 5000)
# (also see README for the plots of the results and the comparison with the true model)

Time series simulation with an NVAR model

Description

Time series simulation with an NVAR model

Usage

sim_NVAR(
  model,
  init = NULL,
  length = 1000,
  noise = 0,
  upper_lim = Inf,
  lower_lim = -Inf
)

Arguments

model

An NVAR model, fitted by NVAR().

init

A tibble, data.frame, or matrix that specify the initial values for a simulation. Should contain the variables used to fit the model and be at least s(k1)s * (k - 1) long. NULL by default, in which case the data used for fitting the model will be used for simulation.

length

How many time steps should be simulated? 1e3 by default.

noise

A number indicating the standard deviation of the Gaussian noise added to each time step. 0 by default (no noise).

upper_lim, lower_lim

The upper and lower limit for the simulation. Once the simulated value is out of the limits, it will be taken back to avoid instability of the simulation. Both should either be a single number or a numeric vector with the same length as the number of variables in the model. Inf and -Inf by default, which means no limits.

Value

A tibble with the simulated time series.