Rolling Linear Models

Description

A parallel function for computing rolling linear models of time-series data.

Usage

1
2
3
4
5
roll_lm(x, y, width, weights = rep(1, width), intercept = TRUE,
  center = FALSE, 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.

weights

vector. Weights for each observation within a window.

intercept

logical. Either TRUE to include or FALSE to remove the intercept.

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:

coefficients

A list of objects with the rolling coefficients for each y. An object is the same class and dimension (with an added column for the intercept) as x.

r.squared

A list of objects with the rolling r-squareds for each y. An object is the same class as x.

Note

If users are already taking advantage of parallelism using multithreaded BLAS/LAPACK libraries, then limit the number of cores in the RcppParallel package to one with the setThreadOptions function.

See Also

setThreadOptions for thread options via RcppParallel.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
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 regression
result <- roll_lm(x, y, 252)

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

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

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