Nothing
#' @title Construct a CPO for ICA Preprocessing
#'
#' @template cpo_doc_intro
#'
#' @description
#' Use the \code{\link[fastICA]{fastICA}} function implementing the
#' \dQuote{FastICA algorithm}. See the documentation there.
#'
#' @param n.comp [\code{numeric(1)} | \code{NULL}]\cr
#' Number of components to extract. Default is \code{NULL}, which sets it
#' to the number of available numeric columns.
#' @param alg.typ [\code{character(1)}]\cr
#' Algorithm type. One of \dQuote{parallel} (default) or \dQuote{deflation}.
#' @param fun [\code{character(1)}]\cr
#' One of \dQuote{logcosh} (default) or \dQuote{exp}.
#' @param alpha [\code{numeric(1)}]\cr
#' In range [1, 2], Used for negentropy calculation when \code{fun} is \dQuote{logcosh}.
#' Default is 1.0.
#' @param method [\code{character(1)}]\cr
#' Internal calculation method. \dQuote{C} (default) or \dQuote{R}.
#' @param maxit [\code{numeric(1)}]\cr
#' Maximum number of iterations. Default is 200.
#' @param tol [\code{numeric(1)}]\cr
#' Tolerance for convergence, default is \code{1e-4}.
#' @param verbose [\code{logical(1)}]\cr
#' Default is \code{FALSE}.
#'
#' @section CPOTrained State:
#' The state contains a \code{$control} slot with the \code{$K},
#' \code{$W} and \code{$A} slots of the \code{\link[fastICA]{fastICA}} call,
#' as well as a \code{$center} slot indicating the row-wise center of the
#' training data that will be subtracted before rotation.
#'
#'
#' @template cpo_doc_outro
#' @export
cpoIca = makeCPOExtendedTrafo("ica", # nolint
pSS(n.comp = NULL: integer[1, ] [[special.vals = list(NULL)]],
alg.typ = "parallel": discrete[parallel, deflation],
fun = "logcosh": discrete[logcosh, exp],
alpha = 1.0: numeric[1, 2] [[requires = quote(fun == "logcosh")]],
method = "C": discrete[C, R],
maxit = 200: integer[1, ],
tol = 1e-4: numeric[~0, ],
verbose = FALSE: logical),
dataformat = "numeric", packages = "fastICA",
export.params = c("n.comp", "alg.typ", "fun", "alpha"),
cpo.trafo = {
if (!ncol(data)) {
emat = matrix(data = numeric(0), nrow = 0, ncol = 0)
control = list(K = emat, W = emat, A = emat, center = numeric(0))
return(data)
}
if (is.null(n.comp)) {
n.comp = ncol(data)
}
control = fastICA::fastICA(data, n.comp = n.comp, alg.typ = alg.typ, fun = fun, alpha = alpha,
method = method, maxit = maxit, tol = tol, verbose = verbose)
ret = control$S
control$S = NULL
control$X = NULL
control$center = vnapply(data, mean)
ret
},
cpo.retrafo = {
scale(as.matrix(data), scale = FALSE, center = control$center) %*% (control$K %*% control$W)
})
registerCPO(cpoIca, "data", "numeric data preprocessing", "Perform the fastICA algorithm of the fastICA package.")
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.