Type: | Package |
Title: | Estimation of Low Rank Plus Sparse Structured Vector Auto-Regressive (VAR) Model |
Version: | 1.2 |
Author: | Peiliang Bai [aut, cre] |
Maintainer: | Peiliang Bai <baipl92@ufl.edu> |
Description: | Implementations of estimation algorithm of low rank plus sparse structured VAR model by using Fast Iterative Shrinkage-Thresholding Algorithm (FISTA). It relates to the algorithm in Sumanta, Li, and Michailidis (2019) <doi:10.1109/TSP.2018.2887401>. |
License: | GPL-2 |
Encoding: | UTF-8 |
Imports: | igraph, mvtnorm, pracma |
Suggests: | rmarkdown, knitr |
VignetteBuilder: | knitr |
RoxygenNote: | 7.1.1 |
NeedsCompilation: | no |
Packaged: | 2021-05-25 15:55:28 UTC; baipl |
Repository: | CRAN |
Date/Publication: | 2021-05-26 12:00:02 UTC |
An auxiliary function in FISTA algorithm
Description
Auxiliary function for FISTA implementation
Usage
Q.func(x, y, A, b, L, AtA, Atb)
Arguments
x |
Model parameter for previous update |
y |
Model parameter for updating |
A |
An n by p design matrix |
b |
A correspond vector, or matrix with size of n by 1 or n by p |
L |
Learning rate |
AtA |
Gram matrix for design matrix A |
Atb |
Inner product for design matrix A and correspond vector b |
Value
Value of function Q
Main loss function for quardratic loss
Description
Main loss function
Usage
f.func(x, A, b)
Arguments
x |
Model parameters |
A |
Design matrix with size of n by p |
b |
Correspond vector or matrix |
Value
Value of objective function
A function to solve low rank plus sparse model estimation using FISTA algorithm
Description
A function to solve low rank plus sparse model estimation
Usage
fista.LpS(
data,
lambda,
mu,
alpha_L = 0.25,
niter = 100,
backtracking = TRUE,
x.true = NULL
)
Arguments
data |
A numeric dataset with size of n by p |
lambda |
A positive numeric value, indicating the tuning parameter for sparse component |
mu |
A positive numeric value, indicating the tuning parameter for low rank component |
alpha_L |
The constraint coefficient of low rank component, default is 0.25 |
niter |
The maximum number of iterations required for FISTA |
backtracking |
A boolean argument, indicating that use backtracking in the FISTA |
x.true |
A p by p matrix, the true model parameter. Only available for simulation. |
Value
A S3 object of class LSVAR
, including
- est_phi
estimated model parameter
- sparse.comp
Estimated sparse component
- lr.comp
Estimated low-rank component
- obj.val
Values of objective function
- rel.err
Relative errors compared with the true model parameters if available
Examples
n <- 300
p <- 20
try <- testVAR(n, p, struct = "LS", signal = 0.75, rank = 2,
singular_vals = c(1, 0.8))
data <- as.matrix(try$series)
lambda <- 0.1; mu <- 1
fit <- fista.LpS(data, lambda = lambda, mu = mu, x.true = try$model_param)
summary(fit, threshold = 0.2)
Gradient function of quardratic loss
Description
Gradient function of quardratic loss
Usage
gradf.func(x, AtA, Atb)
Arguments
x |
A vector, or matrix, indicating the model parameter |
AtA |
A p by p Gram matrix for corresponding design matrix A |
Atb |
An inner product for design matrix A and corresponding matrix (vector) b |
Value
Value of gradients
Nuclear norm penalty for low-rank component
Description
Nuclear norm penalty for low-rank component
Usage
nuclear.pen(x, lambda)
Arguments
x |
Model parameter |
lambda |
Tuning parameter |
Value
Value of nuclear norm penalty term
Objective function
Description
objective function, main loss function and penalties
Usage
obj.func(x.lr, x.sparse, A, b, lambda, mu)
Arguments
x.lr |
low-rank component |
x.sparse |
sparse component |
A |
design matrix |
b |
correspond vector |
lambda |
a tuning parameter for sparse component |
mu |
a tuning parameter for low-rank component |
Value
value of objective function
plot sparse component for use igraph and network layout
Description
Plot a network to illustrate the estimated sparse component
Usage
plot_network(mat, threshold = 0.1)
Arguments
mat |
a p by p matrix, indicating the sparse component |
threshold |
the threshold for presenting the edges in the network |
Value
A network plot for the sparse component
Examples
set.seed(1)
est_mats <- matrix(rnorm(400, 0, 1), 20, 20)
plot_network(est_mats, threshold = 0.1)
Proximal function with nuclear norm penalty updating
Description
Proximal function with nuclear norm
Usage
prox.nuclear.func(w1, y, A, b, L, lambda, AtA, Atb)
Arguments
w1 |
previously updated model parameter |
y |
updated model parameter |
A |
design matrix |
b |
correspond vector, or matrix |
L |
learning rate |
lambda |
tuning parameter for low-rank component |
AtA |
Gram matrix of design matrix A |
Atb |
inner product of design matrix A and correspond vector b |
Value
Value of proximal function with nuclear norm penalty
Proximal function with l1-norm penalty updating
Description
Proximal function with l1-norm
Usage
prox.sparse.func(w1, y, A, b, L, lambda, AtA, Atb)
Arguments
w1 |
previously updated model parameter |
y |
updated model parameter |
A |
design matrix |
b |
correspond vector, or matrix |
L |
learning rate |
lambda |
tuning parameter for sparse component |
AtA |
Gram matrix of design matrix A |
Atb |
inner product of design matrix A and correspond vector b |
Value
Value of proximal function with l1-norm penalty
Shrinkage function for sparse soft-thresholding
Description
Shrinkage function for sparse soft-thresholding
Usage
shrinkage(y, tau)
Arguments
y |
A matrix, or a vector for thresholding |
tau |
A positive number, threshold |
Value
A thresholded matrix, or vector
Shrinkage function for low-rank soft-thresholding
Description
Shrinkage function for low-rank soft-thresholding
Usage
shrinkage.lr(y, tau)
Arguments
y |
A matrix, or a vector for thresholding |
tau |
A positive number, threshold |
Value
A thresholded matrix, or vector
L1-norm penalty for sparse component
Description
L1-norm penalty for sparse component
Usage
sparse.pen(x, lambda)
Arguments
x |
Model parameter |
lambda |
Tuning parameter |
Value
Value of l1-norm penalty term
Summary of LSVAR S3 class
Description
summary function for S3 class for the fitting result
Usage
## S3 method for class 'LSVAR'
summary(object, threshold = 0.2, ...)
Arguments
object |
the S3 class object of |
threshold |
the threshold for sparse component visualization |
... |
not in use |
Value
A series of summary for the S3 result
Examples
n <- 300
p <- 20
try <- testVAR(n, p, struct = "LS", signal = 0.75, rank = 2,
singular_vals = c(1, 0.8))
data <- as.matrix(try$series)
lambda <- 0.1; mu <- 1
fit <- fista.LpS(data, lambda = lambda, mu = mu, x.true = try$model_param)
summary(fit, threshold = 0.2)
Function to generate a VAR process
Description
A function to generate synthetic time series process based on the given structure
Usage
testVAR(
n,
p,
struct = c("sparse", "low rank", "LS")[1],
sp_density = 0.1,
signal = NULL,
rank = NULL,
singular_vals,
spectral_radius = 0.9,
sigma = NULL,
skip = 50,
seed = 1
)
Arguments
n |
the length of time series |
p |
the number of multivariate time series |
struct |
a character string indicating the structure of the transition matrix, here are three options: sparse, low rank and LS (low rank plus sparse) |
sp_density |
a numeric value, indicating the sparsity density of sparse components, default is 0.1 |
signal |
a numeric value, indicating the magnitude of transition matrix |
rank |
a positive integer, the rank for low rank component |
singular_vals |
a numeric vector, indicating the singular values for the low rank component, the length of singular value must equal to the rank |
spectral_radius |
a numeric value, controlling the stability of the process, default is 0.9 |
sigma |
a numeric matrix, indicating the covariance matrix of noise term |
skip |
a numeric value, indicating the number of skipped time points in the beginning of the process |
seed |
an integer, indicating the seed for random seed. |
Value
A list object, including
- series
the generated time series
- noise
the noise term
- model_param
true transition matrix
Examples
n <- 300; p <- 15
signal <- 0.75
rank <- 3
singular_vals <- c(1, 0.75, 0.5)
try <- testVAR(n, p, struct = "LS", signal = signal, rank = rank,
singular_vals = singular_vals)
data <- as.matrix(try$series)