spca {sparsepca} | R Documentation |
Sparse Principal Component Analysis (spca).
Description
Implementation of SPCA, using variable projection as an optimization strategy.
Usage
spca(X, k = NULL, alpha = 1e-04, beta = 1e-04, center = TRUE,
scale = FALSE, max_iter = 1000, tol = 1e-05, verbose = TRUE)
Arguments
X |
array_like; |
k |
integer; |
alpha |
float; |
beta |
float; |
center |
bool; |
scale |
bool; |
max_iter |
integer; |
tol |
float; |
verbose |
bool; |
Details
Sparse principal component analysis is a modern variant of PCA. Specifically, SPCA attempts to find sparse
weight vectors (loadings), i.e., a weight vector with only a few 'active' (nonzero) values. This approach
leads to an improved interpretability of the model, because the principal components are formed as a
linear combination of only a few of the original variables. Further, SPCA avoids overfitting in a
high-dimensional data setting where the number of variables is greater than the number of
observations
.
Such a parsimonious model is obtained by introducing prior information like sparsity promoting regularizers.
More concreatly, given an data matrix
, SPCA attemps to minimize the following
objective function:
where is the sparse weight (loadings) matrix and
is an orthonormal matrix.
denotes a sparsity inducing regularizer such as the LASSO (
norm) or the elastic net
(a combination of the
and
norm). The principal components
are formed as
and the data can be approximately rotated back as
The print and summary method can be used to present the results in a nice format.
Value
spca
returns a list containing the following three components:
loadings |
array_like; |
transform |
array_like; |
scores |
array_like; |
eigenvalues |
array_like; |
center , scale |
array_like; |
Author(s)
N. Benjamin Erichson, Peng Zheng, and Sasha Aravkin
References
[1] N. B. Erichson, P. Zheng, K. Manohar, S. Brunton, J. N. Kutz, A. Y. Aravkin. "Sparse Principal Component Analysis via Variable Projection." Submitted to IEEE Journal of Selected Topics on Signal Processing (2018). (available at 'arXiv https://arxiv.org/abs/1804.00341).
See Also
Examples
# Create artifical data
m <- 10000
V1 <- rnorm(m, 0, 290)
V2 <- rnorm(m, 0, 300)
V3 <- -0.1*V1 + 0.1*V2 + rnorm(m,0,100)
X <- cbind(V1,V1,V1,V1, V2,V2,V2,V2, V3,V3)
X <- X + matrix(rnorm(length(X),0,1), ncol = ncol(X), nrow = nrow(X))
# Compute SPCA
out <- spca(X, k=3, alpha=1e-3, beta=1e-3, center = TRUE, scale = FALSE, verbose=0)
print(out)
summary(out)