A parallel function for computing rolling eigenvalues and eigenvectors of time-series data.
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"))
matrix or xts object. Rows are observations and columns are variables.
integer. Window size.
vector. Weights for each observation within a window.
logical. If TRUE
then the weighted mean of each variable is used,
if FALSE
then zero is used.
logical. If TRUE
then the weighted standard deviation of each variable is used,
if FALSE
then no scaling is done.
integer. Minimum number of observations required to have a value within a window,
otherwise result is NA
.
logical. If TRUE
then rows containing any missing values are removed,
if FALSE
then pairwise is used.
logical. Should missing values be restored?
character. Executes a "for" loop in which iterations run in parallel by
rows
or cols
.
A list containing the following components:
An object of the same class and dimension as data
with the rolling eigenvalues.
A cube with each slice the rolling eigenvectors.
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.
# 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