Learn R Programming

roll (version 1.0.5)

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, center_x = center, center_y = center, scale = FALSE, scale_x = scale, scale_y = scale, 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 columns are the dependent variables.
width
integer. Window size.
comps
integer vector. Select a subset of principal components.
weights
vector. Weights for each observation within a window.
center
logical. center = z is shorthand for center_x = z and center_y = z, where z is either TRUE or FALSE.
center_x
logical. If TRUE then the weighted mean of each x variable is used, if FALSE then zero is used.
center_y
logical. Analogous to center_x.
scale
logical. scale = z is shorthand for scale_x = z and scale_y = z, where z is either TRUE or FALSE.
scale_x
logical. If TRUE then the weighted standard deviation of each x variable is used, if FALSE then no scaling is done.
scale_y
logical. Analogous to scale_x.
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: A list containing the following components:

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