Learn R Programming

roll (version 1.0.7)

roll_eigen: Rolling Eigenvalues and Eigenvectors

Description

A parallel function for computing rolling eigenvalues and eigenvectors of time-series data.

Usage

roll_eigen(data, width, weights = rep(1, width), center = TRUE,
  scale = FALSE, min_obs = width, complete_obs = TRUE,
  na_restore = FALSE, parallel_for = c("rows", "cols"))

Arguments

data

matrix or xts object. Rows are observations and columns are variables.

width

integer. Window size.

weights

vector. Weights for each observation within a window.

center

logical. If TRUE then the weighted mean of each variable is used, if FALSE then zero is used.

scale

logical. If TRUE then the weighted standard deviation of each variable is used, if FALSE then no scaling is done.

min_obs

integer. Minimum number of observations required to have a value within a window, otherwise result is NA.

complete_obs

logical. If TRUE then rows containing any missing values are removed, if FALSE then pairwise is used.

na_restore

logical. Should missing values be restored?

parallel_for

character. Executes a "for" loop in which iterations run in parallel by rows or cols.

Value

A list containing the following components:

values

An object of the same class and dimension as data with the rolling eigenvalues.

vectors

A cube with each slice the rolling eigenvectors.

Details

The numerical calculations use RcppParallel to parallelize rolling eigenvalues and eigenvectors of time-series data. RcppParallel provides a complete toolkit for creating safe, portable, high-performance parallel algorithms, built on top of the Intel Threading Building Blocks (TBB) and TinyThread libraries.

By default, all the available cores on a machine are used for parallel algorithms. If users are either already taking advantage of parallelism or instead want to use a fixed number or proportion of threads, then set the number of threads in the RcppParallel package with the setThreadOptions function.

Examples

Run this code
# NOT RUN {
n_vars <- 10
n_obs <- 1000
data <- matrix(rnorm(n_obs * n_vars), nrow = n_obs, ncol = n_vars)

# Rolling eigenvalues and eigenvectors
result <- roll_eigen(data, 252)

# Rolling eigenvalues and eigenvectors with exponential decay
weights <- 0.9 ^ (251:0)
result <- roll_eigen(data, 252, weights)
# }

Run the code above in your browser using DataLab