#' Simple subgradientL1Regression function.
#'
#' SubgradientL1Regression solves y approx x beta
#'
#' @param y outcome variable
#' @param x predictor matrix
#' @param s gradient descent parameter
#' @param percentvals percent of values to use each iteration
#' @param nits number of iterations
#' @param betas initial guess at solution
#' @param sparval sparseness
#' @return output has a list of summary items
#' @author Avants BB
#' @examples
#'
#' mat<-replicate(1000, rnorm(200))
#' y<-rnorm(200)
#' wmat<-subgradientL1Regression( y, mat, percentvals=0.05 )
#' print( wmat$resultcorr )
#'
#' @export subgradientL1Regression
subgradientL1Regression <- function(y, x, s = 0.01,
percentvals = 0.1, nits = 100,
betas = NA, sparval = NA) {
if (nargs() == 0) {
print("Usage: betas<-subgradientL1Regression( y , x) ")
print("Needs to be checked more carefully")
return(1)
}
if (percentvals > 1 | percentvals < 0)
percentvals <- 1
if (is.na(betas))
betas <- rep(0, ncol(x))
nvals <- round(percentvals * ncol(x))
if (nvals > ncol(x))
nvals <- ncol(x)
selectvals <- 1:nvals
deltmag <- rep(0, nits)
for (i in 1:nits) {
mysamp <- sort(sample(1:ncol(x), size = nvals))
delt <- (c(x[, mysamp] %*% betas[mysamp]) - y)
deltmag[i] <- sqrt(sum(delt * delt))
delt <- sign(delt)
subgrad <- rep(0, ncol(x))
subgrad[mysamp] <- t(x[, mysamp]) %*% as.matrix(delt)
tk <- s/sqrt(sum(subgrad * subgrad))
betas <- betas - tk * subgrad
if (!is.na(sparval))
betas <-.eanatsparsify(betas, sparval)
resultcorr <- cor.test(y, x %*% betas)$est
}
resultcorr <- cor.test(y, x %*% betas)$est
return(list(betas = betas, deltmag = deltmag, resultcorr = resultcorr))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.