# Sparse SVD

### Description

The function ssvd combines two functions ssvd.initial and ssvd.iter.thresh into one. Obtain sparse SVD using fast iterative thresholding method, together with a fast initialization algorithm

### Usage

1 2 3 |

### Arguments

`x` |
Input matrix, for which one would like to get a sparse SVD. |

`method` |
If method = "theory", then a theoretical procedure is adopted which is based on normal assumption on the noise. If method = "method", then the function bypass the normal assumption by some robust statistics. These two choices typically give similar solutions, but "theory" is much faster. |

`alpha.method` |
Alpha.method is the level of the hypothesis test when one performs Holm multiple hypothesis testing, which is used to select the candidate rows and columns in the initialization step. The value is usually set to be 0.05. |

`alpha.theory` |
Alpha.theory is a scaler that is used when normal assumption is true, method="theory", and a chisq tail bound is used to select the candidate rows and columns in the initialization step. Most of the time, users should keep it as it is. |

`huber.beta` |
Huber.beta is a scaler which is the cut-off point in the Huber function. The huberization is utilized to achieve robustness when normal assumption is violated in the initialization step. |

`sigma` |
Sigma is a scaler for the noise level. The user can set it to be NA, and the function will estimate it automatically. |

`r` |
A scaler, the number of components, i.e., the number of singular vectors to be computed. |

`gamma.u` |
When the method="theory", gamma.u=sqrt(2) corresponds to the sqrt(2 log(p)), which is the largest magnitude of p iid standard normals. If gamma.u is manually set to be smaller or larger than sqrt2, the left singular vectors will be denser or sparser respectively. |

`gamma.v` |
When the method="theory", gamma.u=sqrt(2) corresponds to the sqrt(2 log(p)), which is the largest magnitude of p iid standard normals. If gamma.u is manually set to be smaller or larger than sqrt2, the right singular vectors will be denser or sparser respectively. |

`dothres` |
Dothres has two choices, either "hard" or "soft", which means hard-thresholding or soft-thresholding. |

`tol` |
The tolerance level that determines when the algorithm stops. |

`n.iter` |
Maximum number of iterations allowed. |

`n.boot` |
Number of bootstrap to estimate the threshold level when method = "method" |

`non.orth` |
If non.orth=TRUE, then the last iteration of the algorithm will not involve orthoganolization, which should produce sparse solutions. |

### Value

`u` |
A matrix containing left singular vectors |

`v` |
A matrix containing right singular vectors |

`d` |
A vector containing singular values |

`niter` |
Number of iterations for the algorithm to converge |

`sigma.hat` |
An estimate of the noise level |

`dist.u` |
The distance between the left singular vectors of the last two iterations, can be used to see whether the algorithm indeed converges. |

`dist.v` |
The distance between the right singular vectors of the last two iterations, can be used to see whether the algorithm indeed converges. |

### Author(s)

Dan Yang

### References

A Sparse SVD Method for High-dimensional Data

### See Also

ssvd.initial and ssvd.iter.thresh

### Examples

1 |