Description Usage Arguments Value References Examples
Implementation of the rank-1 penalized matrix decomposition of Witten et al. (2009). This
function applies lasso penalties to the left and right singular vectors. This function
is called by mpmd
, which should be used in applications.
1 2 3 4 5 6 7 8 |
Z |
Matrix to be decomposed |
c1 |
L1-norm bound for u, the left singular vector. Feasible solutions are available
when values greater than or equal to 1. For values larger than |
c2 |
L1-norm bound for v, the right singular vector. Feasible solutions are available
when values greater than or equal to 1. For values larger than |
maxit |
Maximum number of iterations |
eps |
Stopping criterion, an absolute error tolerance on the mean squared reconstruction error |
centre |
Logical indicating whether to centre the matrix Z using the overall mean before analysis |
A list with the penalized singular value decomposition(d
, u
, v
),
the vector of errors (error
), and the number of iterations (iteration
).
Witten, D. M., Tibshirani, R., & Hastie, T. (2009). A penalized matrix decomposition, with applications to sparse principal components and canonical correlation analysis. Biostatistics, 10(3), 515-534.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | ## Simple random matrix
set.seed(1)
Z <- matrix(rnorm(100), nrow = 20, ncol = 5)
## Default result
pmd(Z)
## Equivalent to rank-1 SVD (almost)
pmd_Z <- pmd(Z, c1 = sqrt(nrow(Z)), c2 = sqrt(ncol(Z)))
all.equal(pmd_Z[-1], svd(Z, nu = 1, nv = 1)[-1],
tolerance = (.Machine$double.eps)^0.25)
## Increasing c2 incrementally
pts <- seq(from = 1, to = sqrt(ncol(Z)), length.out = 10)
vmat <- matrix(NA, nrow = ncol(Z), ncol = length(pts))
for (i in seq_along(pts)) {
vmat[, i] <- pmd(Z, c1 = sqrt(nrow(Z)), c2 = pts[i])$v
}
vmat
## Increasing c1 incrementally
pts <- seq(from = 1, to = sqrt(nrow(Z)), length.out = 10)
umat <- matrix(NA, nrow = nrow(Z), ncol = length(pts))
for (i in seq_along(pts)) {
umat[, i] <- pmd(Z, c1 = pts[i], c2 = sqrt(ncol(Z)))$u
}
umat
## Testing reconstruction error
res <- pmd(Z, c1 = 3, c2 = 1.75)
plot(res$error)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.