Learn R Programming

roll (version 1.0.0)

roll_pcr: Rolling Principal Component Regressions

Description

A parallel function for computing rolling principal component regressions of time-series data.

Usage

roll_pcr(x, y, width, comps = 1:ncol(x), weights = rep(1, width),
  center = TRUE, scale = FALSE, min_obs = width, complete_obs = TRUE,
  na_restore = FALSE, parallel_for = c("rows", "cols"))

Arguments

x
matrix or xts object. Rows are observations and columns are the independent variables.
y
matrix or xts object. Rows are observations and column is the dependent variable.
width
integer. Window size.
comps
integer vector. Select a subset of principal components.
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:
  • coefficientsAn object of the same class and dimension as x with the rolling coefficients.
  • r.squaredAn object of the same class as x with the rolling r-squareds.

See Also

setThreadOptions for thread options via RcppParallel.

Examples

Run this code
n_vars <- 10
n_obs <- 1000
x <- matrix(rnorm(n_obs * n_vars), nrow = n_obs, ncol = n_vars)
y <- matrix(rnorm(n_obs), nrow = n_obs, ncol = 1)

# 252-day rolling principal component regression
result <- roll_pcr(x, y, 252, comps = 1)

# Equivalent to 'na.rm = TRUE'
result <- roll_pcr(x, y, 252, comps = 1, min_obs = 1)

# Expanding window
result <- roll_pcr(x, y, n_obs, comps = 1, min_obs = 1)

# Exponential decay
weights <- 0.9 ^ (251:0)
result <- roll_pcr(x, y, 252, comps = 1, weights, min_obs = 1)

Run the code above in your browser using DataLab