| dcorICA | R Documentation |
Estimate an unmixing matrix by sequentially minimizing a distance-correlation criterion on whitened data. The method can be run either with the ordinary distance correlation criterion or with a robustified criterion based on the bowl transformation.
dcorICA(
X,
mu = NULL,
scatter = NULL,
transform = c("none", "bowl"),
alpha = 0.9975,
sweeps = ncol(X) + 1,
seed = NULL,
block_size = NULL,
optimizer = c("cobyla", "bobyqa"),
control = list()
)
X |
A numeric data matrix or an object coercible to a matrix. Rows are observations and columns are variables. |
mu |
Optional location vector used for whitening and centering. If
|
scatter |
Optional positive definite scatter matrix used for whitening.
If |
transform |
Character string specifying the dependence criterion.
Possible values are |
alpha |
Probability level passed to |
sweeps |
Number of sweeps through the sequential optimization scheme. |
seed |
Optional integer random seed for the random sweep permutations. |
block_size |
Either |
optimizer |
Character string specifying the optimizer to use. Either
|
control |
A named list of control parameters passed to
|
The returned object has class "bss" so that common extractor methods
from package JADE, such as JADE::bss.components() and stats::coef()
can be used directly.
The algorithm first whitens the observations using the supplied location and scatter estimates. It then searches for an orthogonal rotation that minimizes the distance correlation between one component and the remaining components, proceeding sequentially until all components have been extracted.
The dependence criterion is evaluated using dcor_large(). If
block_size = NULL, the standard full pairwise-distance computation is
used. If block_size is a positive integer, the same criterion is
computed blockwise in order to reduce memory usage. The block size does not
need to divide the sample size; if it does not, the final block is simply
smaller.
When the sample mean and sample covariance matrix are used for whitening and the ordinary, non-transformed distance-correlation criterion is minimized, the resulting procedure is closely related in spirit to the distance covariance ICA method of Matteson and Tsay (2017). That paper develops ICA based on distance covariance and distance correlation under classical whitening. When robust location and scatter estimates such as MCD are used for whitening and the bowl-transformed distance-correlation criterion is minimized, the procedure corresponds to the robust approach referred to as PICARD (Leyder et al. 2026).
An object of class "bss", implemented as a list with components:
Estimated unmixing matrix in the convention
S = (X - \mu) W^T.
Estimated independent components.
Location vector used for centering.
Selected dependence criterion.
Bowl-transform tuning parameter.
Block size used in the distance-correlation criterion,
or NULL if the standard full computation was used.
Optimization diagnostics from the sequential optimization steps.
Matteson, D. S. and Tsay, R. S. (2017). Independent component analysis via distance covariance. Journal of the American Statistical Association, 112(518), 623–637. doi:10.1080/01621459.2016.1150851
Leyder, S., Raymaekers, J., Rousseeuw, P. J., Van Deuren, T., and Verdonck, T. (2026). Independent component analysis by robust distance correlation. Advances in Data Analysis and Classification, 20, 727–765. doi:10.1007/s11634-026-00674-9
bowl_transform(), dcor_large(), JADE::bss.components(),
stats::coef()
n <- 400
S <- cbind(runif(n), rnorm(n), rchisq(n, df = 3))
A <- matrix(rnorm(ncol(S)^2), ncol = ncol(S))
X <- tcrossprod(S, A)
fit_default <- dcorICA(X, seed = 1)
fit_block <- dcorICA(X, seed = 1, block_size = 128L)
fit_bobyqa <- dcorICA(X, seed = 1, optimizer = "bobyqa")
fit_default$W
fit_block$W
fit_bobyqa$W
head(fit_default$S)
if (requireNamespace("JADE", quietly = TRUE)) {
coef(fit_default)
plot(fit_default)
}
# PICARD: Robust whitening + bowl criterion
if (requireNamespace("robustbase", quietly = TRUE)) {
mcd <- robustbase::covMcd(X)
fit_picard <- dcorICA(
X,
mu = mcd$center,
scatter = mcd$cov,
transform = "bowl",
seed = 1
)
if (requireNamespace("JADE", quietly = TRUE)) {
JADE::MD(fit_picard$W, A)
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.