#' Simple icawhitening function.
#'
#' Icawhitens the input matrix using SVD and returns the result.
#'
#'
#' @param Xin input matrix
#' @param n.comp number of components on which to project
#' @param verbose bool
#' @return matrix is output
#' @author Avants BB, fastICA package (see CRAN)
#' @examples
#'
#' mat <- matrix(c(rep(1, 100), rep(0, 200)), ncol = 50)
#' wmat <- icawhiten(mat, 2)
#'
#' @export icawhiten
icawhiten <- function(Xin, n.comp, verbose = FALSE) {
# from the fastICA library
X <- t(Xin)
alpha <- 1
dd <- dim(X)
d <- dd[dd != 1L]
if (length(d) != 2L) {
stop("data must be matrix-conformal")
}
X <- if (length(d) != length(dd)) {
matrix(X, d[1L], d[2L])
} else {
as.matrix(X)
}
if (alpha < 1 || alpha > 2) {
stop("alpha must be in range [1,2]")
}
n <- nrow(X)
p <- ncol(X)
X <- scale(X, scale = FALSE)
X <- t(X)
if (verbose) {
message("Whitening")
}
V <- X %*% t(X) / n
s <- La.svd(V)
D <- diag(c(1 / sqrt(s$d)))
K <- D %*% t(s$u)
K <- matrix(K[1:n.comp, ], n.comp, p)
X1 <- K %*% X
return(X1)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.