\documentclass[article,nojss]{jss} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% declarations for jss.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% almost as usual \author{Andreas Alfons\\ Erasmus Universiteit Rotterdam \And Christophe Croux\\ KU Leuven \And Peter Filzmoser\\ Vienna University of Technology} \title{Robust Maximum Association Between Data Sets: The \proglang{R} Package \pkg{ccaPP}} %% for pretty printing and a nice hypersummary also set: \Plainauthor{Andreas Alfons, Christophe Croux, Peter Filzmoser} %% comma-separated \Plaintitle{Robust Maximum Association Between Data Sets: The R Package ccaPP} %% without formatting \Shorttitle{\pkg{ccaPP}: Robust Maximum Association} %% a short title (if necessary) %% an abstract and keywords \Abstract{ This package vignette is an up-to-date version of \citet{alfons16b}, published in the \emph{Austrian Journal of Statistics}. An intuitive measure of association between two multivariate data sets can be defined as the maximal value that a bivariate association measure between any one-dimensional projections of each data set can attain. Rank correlation measures thereby have the advantage that they combine good robustness properties with good efficiency. The software package \pkg{ccaPP} provides fast implementations of such maximum association measures for the statistical computing environment \proglang{R}. We demonstrate how to use \pkg{ccaPP} to compute the maximum association measures, as well as how to assess their significance via permutation tests. } \Keywords{multivariate analysis, outliers, projection pursuit, rank correlation, \proglang{R}} \Plainkeywords{multivariate analysis, outliers, projection pursuit, rank correlation, R} %% without formatting %% at least one keyword must be supplied %% publication information %% NOTE: Typically, this can be left commented and will be filled out by the technical editor % \Volume{45} % \Issue{1} % \Month{March} % \Year{2016} % \Submitdate{2014-11-05} % \Acceptdate{2015-12-11} % \setcounter{page}{71} % \Pages{71--79} %% The address of (at least) one author should be given %% in the following format: \Address{ Andreas Alfons\\ Erasmus Universiteit Rotterdam\\ PO Box 1738, 3000DR Rotterdam\\ E-mail: \email{alfons@ese.eur.nl}\\ URL: \url{http://people.few.eur.nl/alfons/} } %% It is also possible to add a telephone and fax number %% before the e-mail in the following format: %% Telephone: +43/512/507-7103 %% Fax: +43/512/507-2851 %% for those who use Sweave please include the following line (with % symbols): %% need no \usepackage{Sweave.sty} %%\VignetteIndexEntry{Robust Maximum Association Between Data Sets: The R Package ccaPP} %%\VignetteDepends{ccaPP} %%\VignetteKeywords{multivariate analysis, outliers, projection pursuit, rank correlation, R} %%\VignettePackage{ccaPP} %%\VignetteEngine{knitr::knitr} %% end of declarations %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% additional packages \usepackage{algorithm} \usepackage{amsmath} \usepackage{amssymb} \usepackage{enumerate} %% additional commands \newcommand{\vect}[1]{\boldsymbol{#1}} \newcommand{\mat}[1]{\boldsymbol{#1}} \newcommand{\obs}[1]{\bold{#1}} \newcommand{\Corr}{\text{Corr}} \newcommand{\Cov}{\text{Cov}} \newcommand{\Var}{\text{Var}} \newcommand{\R}{\mathbb{R}} \newcommand{\argmax}{\mathop{\text{argmax}}} \newcommand{\eps}{\varepsilon} \newcommand{\rank}{\text{rank}} \newcommand{\sgn}{\text{sign}} \newcommand{\trans}[1]{{#1}^{t}} \begin{document} %% include your article here, just as usual <>= knitr::opts_chunk$set(highlight=FALSE) # remove candy shop colors # options(prompt="R> ", continue="+ ", width=75, useFancyQuotes=FALSE) # opts_chunk$set(fig.path="figures/figure-", fig.align="center") # render_sweave() # use Sweave environments # set_header(highlight="") # do not use the Sweave.sty package @ % ------------ % Introduction % ------------ \section{Introduction} \label{sec:intro} Projection pursuit allows to introduce intuitive and therefore appealing association measures between two multivariate data sets. Suppose that the data sets $\mat{X}$ and $\mat{Y}$ consist of $p$ and $q$ variables, respectively. A measure of multivariate association between $\mat{X}$ and $\mat{Y}$ can be defined by looking for linear combinations $\mat{X} \vect{\alpha}$ and $\mat{Y} \vect{\beta}$ having maximal association. Expressed in mathematical terms, we define an estimator \begin{equation} \label{eq:rho} \hat{\rho}_{R}(\mat{X}, \mat{Y}) = \max_{\|\vect{\alpha} \| = 1, \|\vect{\beta}\| = 1} \hat{R}(\mat{X} \vect{\alpha}, \mat{Y} \vect{\beta}), \end{equation} where $\hat{R}$ is an estimator of a bivariate association measure $R$ such as the Pearson correlation, or the Spearman or Kendall rank correlation. Using the projection pursuit terminology, $\hat{R}$ is the \emph{projection index} to maximize. The projection directions corresponding to the maximum association are called \emph{weighting vectors} and are estimated by \begin{equation} \label{eq:vectors} (\hat{\vect{\alpha}}_{R}(\mat{X}, \mat{Y}), \hat{\vect{\beta}}_{R}(\mat{X}, \mat{Y})) = \argmax_{\|\vect{\alpha} \| = 1, \|\vect{\beta}\| = 1} \hat{R}(\mat{X} \vect{\alpha}, \mat{Y} \vect{\beta}). \end{equation} \citet{AlfCXX} developed the \emph{alternate grid algorithm} for the computation of such maximum association estimators and studied their theoretical properties for various association measures. It turns out that the Spearman and Kendall rank correlation yield maximum association estimators with good robustness properties and good efficiency. This paper is a companion paper to \citet{AlfCXX} that demonstrates how to apply the maximum association estimators in the statistical environment \proglang{R} \citep{RDev} using the add-on package \pkg{ccaPP} \citep{ccaPP}. The package is freely available on CRAN (Comprehensive \proglang{R} Archive Network, \url{http://CRAN.R-project.org}). Note that using the Pearson correlation as the projection index of the maximum association estimator corresponds to the first step of canonical correlation analysis \citep[CCA; see, e.g.,][]{JohW02}, hence the package name \pkg{ccaPP}. Since CCA is a widely applied statistical technique, various algorithms and extensions are implemented in \proglang{R} packages on CRAN. Two important examples are briefly discussed in the following. The package \pkg{CCA} \citep{GonD08, CCA} extends the built-in \proglang{R} function \code{cancor()} with additional numerical and graphical output. Moreover, it provides a regularized version of CCA for data sets containing a large number of variables. Bayesian models and inference methods for CCA are implemented in the package \pkg{CCAGFA} \citep{KlaV13, CCAGFA}. The remainder of the paper is organized as follows. In Section~\ref{sec:design}, the design and implementation of the package are briefly discussed. Section~\ref{sec:measures} demonstrates how to compute the maximum association estimators, and Section~\ref{sec:tests} illustrates how to test for their significance. A comparison of computation times is given in Section~\ref{sec:CPU}. The final Section~\ref{sec:conclusions} concludes the paper. % ------------------------- % Design and implementation % ------------------------- \section{Design and implementation} \label{sec:design} Various bivariate association measures and the alternate grid algorithm for the maximum association estimators are implemented in \proglang{C++}, and integrated into \proglang{R} via the package \mbox{\pkg{RcppArmadillo}} \citep{EddS14, RcppArmadillo}. % Therefore they are very fast to compute. The following bivariate association measures are available in the package \pkg{ccaPP}: \begin{description} \item[\code{corPearson()}:] Pearson correlation \item[\code{corSpearman()}:] Spearman rank correlation \item[\code{corKendall()}:] Kendall rank correlation, also known as Kendall's $\tau$ \item[\code{corQuadrant()}:] Quadrant correlation \citep{Blo50} \item[\code{corM()}:] Association based on a bivariate M-estimator of location and scatter with a Huber loss function \citep{HubR09} \end{description} It should be noted that these are barebones implementations without proper handling of missing values. Hence the first three functions come with a substantial speed gain compared to \proglang{R}'s built-in function \code{cor()}. Moreover, the fast $O(n \log(n))$ algorithm for the Kendall correlation \citep{Kni66} is implemented in \code{corKendall()}, whereas \code{cor()} uses the naive $O(n^2)$ algorithm. The alternate grid algorithm for the maximum association estimators is implemented in the function \code{maxCorGrid()}. Any of the bivariate association measures above can be used as projection index, with the Spearman rank correlation being the default. We do not recommend to use the quadrant correlation since its influence function is not smooth, which may result in unstable estimates of the weighting vectors. For more details on the theoretical properties of the maximum association estimators, the reader is referred to \citet{AlfCXX}. To assess the significance of a maximum association estimate, a permutation test %for independence of two multivariate random variables is provided via the function \code{permTest()}. Parallel computing to increase computational performance is implemented via the package \pkg{parallel}, which is part of \proglang{R} since version 2.14.0. % ------------------- % Maximum association % ------------------- \section{Maximum association measures} \label{sec:measures} In this section, we show how to apply the function \code{maxCorGrid()} from the package \pkg{ccaPP} to compute the maximum association estimators. We thereby use the classic \code{diabetes} data \citep[page 215]{AndH85}, which are included as example data in the package. First we load the package and the data. All measurements are taken for a group of $n = 76$ persons. <>= library("ccaPP") data("diabetes") x <- diabetes$x y <- diabetes$y @ Component \code{x} consists of $p = 2$ variables measuring \emph{relative weight} and \emph{fasting plasma glucose}, while component \code{y} consists of $q = 3$ variables measuring \emph{glucose intolerance}, \emph{insulin response to oral glucose} and \emph{insulin resistance}. It is of medical interest to establish a relation between the two data sets. The function \code{maxCorGrid()} by default uses the Spearman rank correlation as \mbox{projection index}. \vspace{-2.5ex} <<>>= spearman <- maxCorGrid(x, y) spearman @ The estimated weighting vectors can be accessed through components \code{a} and \code{b} of the returned object, respectively. <<>>= spearman$a spearman$b @ With the argument \code{method}, another bivariate association measure can be set as projection index, e.g., the Kendall rank correlation, the M-association or the Pearson correlation. <<>>= maxCorGrid(x, y, method = "kendall") maxCorGrid(x, y, method = "M") maxCorGrid(x, y, method = "pearson") @ Note that the Spearman and Kendall rank correlation estimate different population quantities than the Pearson correlation. Thus the above values of the different maximum association measures are not directly comparable. The argument \code{consistent} can be used for the former two methods to get consistent estimates of the maximum correlation under normal distributions. <<>>= maxCorGrid(x, y, consistent = TRUE) maxCorGrid(x, y, method = "kendall", consistent = TRUE) @ The M-association measure is consistent at the normal model and estimates the same population quantity as the Pearson correlation. % ----------------- % Permutation tests % ----------------- \section{Permutation tests} \label{sec:tests} To assess the significance of maximum association estimates, permutation tests can be performed with the function \code{permTest()}. The number of random permutations to be used can be set with the argument \code{R}, which defaults to 1000. On machines with multiple processor cores, only the argument \code{nCores} needs to be set to take advantage of parallel computing in order to reduce computation time. If \code{nCores} is set to \code{NA}, all available processor cores are used. In the examples in this section, we use 2 processor cores. To keep computation time minimal, we set the number of random permutations to 100. Furthermore, we set the seed of the random number generator via the argument \code{seed} for reproducibility of the results. Since we employ parallel computing, \pkg{ccaPP} uses random number streams \citep{EcuS02} from the package \pkg{parallel} rather than the default \proglang{R} random number generator. <<>>= permTest(x, y, R = 100, nCores = 2, seed = 2016) @ Again, the Spearman rank correlation is used as projection index by default. A different bivariate association measure can be specified via the argument \code{method}, which is passed down to the function \code{maxCorGrid()}. <<>>= permTest(x, y, R = 100, method = "kendall", nCores = 2, seed = 2016) permTest(x, y, R = 100, method = "M", nCores = 2, seed = 2016) permTest(x, y, R = 100, method = "pearson", nCores = 2, seed = 2016) @ Clearly, all four tests strongly reject the null hypothesis of % independence of no association between the two data sets. % Since the focus of package \pkg{ccaPP} is on robust maximum association % measures, we follow the procedure of \citet{TasK03} to introduce an outlier % into the data. Since the focus of \pkg{ccaPP} is on robustness, we introduce an outlier into the \code{diabetes} data as in \citet{TasK03}. More precisely, we replace the value 0.81 of the first observation of variable \emph{glucose intolerance} by~8.1, i.e., by a simple shift of the comma. \vspace{-0.75ex} <<>>= y[1, "GlucoseIntolerance"] <- 8.1 @ \vspace{-0.5ex} Now we repeat the four permutation tests with the contaminated data. \vspace{-0.75ex} <<>>= permTest(x, y, R = 100, nCores = 2, seed = 2016) permTest(x, y, R = 100, method = "kendall", nCores = 2, seed = 2016) permTest(x, y, R = 100, method = "M", nCores = 2, seed = 2016) permTest(x, y, R = 100, method = "pearson", nCores = 2, seed = 2016) @ \vspace{-0.5ex} The test based on the maximum Pearson correlation is highly influenced by the outlier and no longer rejects the null hypothesis. The tests based on the maximum Spearman and Kendall rank correlation, as well as the test based on maximum M-association, remain stable. % ----------------- % Computation times % ----------------- \section{Computation times} \label{sec:CPU} This section analyzes the computation times of the methods implemented in \pkg{ccaPP}. All computations are performed in \proglang{R} version~3.2.2 on a machine with an Intel Xeon X5670 CPU. The computation times are recorded with the \proglang{R} package \pkg{microbenchmark} \citep{microbenchmark}. First, we compare the barebones implementations of the Pearson, Spearman and Kendall correlations (functions \code{corPearson()}, \code{corSpearman()} and \code{corKendall()} in \pkg{ccaPP}) with their counterparts from the base \proglang{R} function \code{cor()}. We also include the M-association measure from the function \code{corM()} in the comparison. The bivariate association measures are computed for 10 random draws from a bivariate normal distribution with true correlation $\rho = 0.5$ and sample size $n = 100, 1\,000, 10\,000, 100\,000$. For each random sample, computation times from 10 independent runs are recorded. \begin{table}[t] \begin{center} \caption{Average computation time (in milliseconds) of the bivariate association measures in base \proglang{R} and the package \pkg{ccaPP}.} \label{tab:CPU-cor} \smallskip % \setlength{\tabcolsep}{4.5pt} \begin{tabular}{rcrrrcrrrr} \hline\noalign{\smallskip} & & \multicolumn{3}{c}{Base \proglang{R}} & & \multicolumn{4}{c}{Package \pkg{ccaPP}} \\ \multicolumn{1}{c}{$n$} & & Spearman & \multicolumn{1}{c}{Kendall} & Pearson & & Spearman & Kendall & Pearson & \multicolumn{1}{c}{M} \\ \noalign{\smallskip}\hline\noalign{\smallskip} 100 & & 0.20 & 0.40 & 0.08 & & 0.03 & 0.03 & 0.01 & 0.11 \\ 1\,000 & & 0.41 & 18.73 & 0.08 & & 0.18 & 0.16 & 0.01 & 0.32 \\ 10\,000 & & 3.38 & 1761.71 & 0.19 & & 2.06 & 1.84 & 0.05 & 2.42 \\ 100\,000 & & 54.88 & 176431.15 & 1.34 & & 25.21 & 22.46 & 0.41 & 27.42 \\ \noalign{\smallskip}\hline \end{tabular} \end{center} \end{table} Table~\ref{tab:CPU-cor} contains the average computation times of the bivariate association measures. Clearly, the fast $O(n \log(n))$ algorithm for the Kendall correlation \citep{Kni66} in \pkg{ccaPP} is a huge improvement over the naive $O(n^2)$ algorithm in base \proglang{R}. Time savings for the Spearman and Pearson correlation are also substantial, considering that they are only due to a lack of missing data handling. For the M-association, the computation time is somewhat higher than that of the Spearman and Kendall correlation. Since the projection pursuit algorithm for the maximum association measures involves computing a large number of bivariate associations \citep[see][]{AlfCXX}, the faster barebones implementations are crucial to keep the computation of the maximum association feasible. We employ the same procedure as above to record the computation time of the maximum association measures, except that each of the random samples is drawn from a multivariate normal distribution such that the true maximum correlation is $\rho = 0.5$ and the corresponding weighting vectors are $\alpha = (1, 0, \ldots, 0)'$ and $\beta = (1, 0, \ldots, 0)'$. The sample size is set to $n = 100, 1\,000, 10\,000$, the dimension of $\mat{X}$ is $p = 5, 10, 50$, and the dimension of $\mat{Y}$ is $q = 1, 5, 10, 50$. Inspired by canonical correlation analysis (CCA), we also compute other association measures for comparison. In CCA, the first canonical correlation is given by the square root of the largest eigenvalue of the matrix \begin{equation}\label{eq:prodmat} \mat{\Sigma}_{XX}^{-1} \mat{\Sigma}_{XY} \mat{\Sigma}_{YY}^{-1} \mat{\Sigma}_{YX}, \end{equation} where $\mat{\Sigma}_{XX} = \Cov(\vect{X}), \mat{\Sigma}_{YY} = \Cov(\vect{Y})$, $\mat{\Sigma}_{XY} = \Cov(\vect{X},\vect{Y})$ and $\mat{\Sigma}_{YX} = \mat{\Sigma}_{XY}'$ \citep[see, e.g.,][]{JohW02}. This is of course identical to the maximum association measure with the Pearson correlation as projection index. Other association measures are obtained by plugging different scatter matrices into \eqref{eq:prodmat}. However, such a measure is in general different from the maximum association measure based on the corresponding bivariate association, with the maximum association being much easier to interpret. Here we plug in scatter matrices corresponding to the Pearson, Spearman and Kendall correlation. For the Pearson correlation, the corresponding scatter matrix is the sample covariance matrix. For the Spearman and Kendall correlation, the scatter matrices are given by the respective pairwise associations multiplied with scale estimates of the corresponding variables. Furthermore, since a multivariate M-estimator of the covariance matrix is not robust, we instead use the minimum covariance determinant estimator \citep[MCD; see][]{RouD99}. \begin{table}[t!] \begin{center} \caption{Average computation time (in seconds) of the maximum association measures in package \pkg{ccaPP}, as well as association measures based on corresponding full correlation matrix.} \label{tab:CPU-maxCor} \smallskip \setlength{\tabcolsep}{4pt} \begin{tabular}{rrrcrrrrcrrrr} \hline\noalign{\smallskip} & & & & \multicolumn{4}{c}{Package \pkg{ccaPP}} & & \multicolumn{4}{c}{Full scatter matrix} \\ \multicolumn{1}{c}{$n$} & \multicolumn{1}{c}{$p$} & \multicolumn{1}{c}{$q$} & & Spearman & Kendall & Pearson & \multicolumn{1}{c}{M} & & Spearman & \multicolumn{1}{c}{Kendall} & Pearson & \multicolumn{1}{c}{MCD} \\ \noalign{\smallskip}\hline\noalign{\smallskip} % 100 & 5 & 1 & & 0.014 & 0.011 & 0.001 & 0.036 & & 0.001 & 0.005 & 0.001 & 0.020 \\ % 100 & 5 & 5 & & 0.073 & 0.049 & 0.006 & 0.242 & & 0.002 & 0.010 & 0.001 & 0.038 \\ % 100 & 10 & 1 & & 0.029 & 0.022 & 0.003 & 0.091 & & 0.002 & 0.012 & 0.001 & 0.044 \\ % 100 & 10 & 5 & & 0.115 & 0.083 & 0.012 & 0.396 & & 0.002 & 0.021 & 0.001 & 0.075 \\ % 100 & 10 & 10 & & 0.172 & 0.098 & 0.021 & 0.773 & & 0.002 & 0.036 & 0.001 & 0.129 \\ % 100 & 50 & 1 & & 0.183 & 0.130 & 0.046 & 0.665 & & 0.007 & 0.223 & 0.003 & 0.925 \\ % 100 & 50 & 5 & & 0.653 & 0.434 & 0.340 & 6.452 & & 0.008 & 0.259 & 0.003 & 1.095 \\ % 100 & 50 & 10 & & 0.682 & 0.460 & 0.475 & 10.596 & & 0.008 & 0.308 & 0.003 & 1.349 \\ % 100 & 50 & 50 & & 1.274 & 0.870 & 0.972 & 33.607 & & & & & \\ 100 & 5 & 1 & & 0.014 & 0.011 & 0.001 & 0.036 & & 0.001 & 0.005 & 0.001 & 0.020 \\ 100 & 5 & 5 & & 0.073 & 0.049 & 0.006 & 0.244 & & 0.002 & 0.010 & 0.001 & 0.038 \\ 100 & 10 & 1 & & 0.030 & 0.023 & 0.003 & 0.088 & & 0.002 & 0.012 & 0.001 & 0.044 \\ 100 & 10 & 5 & & 0.114 & 0.083 & 0.012 & 0.473 & & 0.002 & 0.021 & 0.001 & 0.075 \\ 100 & 10 & 10 & & 0.180 & 0.107 & 0.021 & 0.658 & & 0.003 & 0.037 & 0.001 & 0.130 \\ 100 & 50 & 1 & & 0.174 & 0.137 & 0.047 & 0.641 & & 0.007 & 0.224 & 0.003 & 0.926 \\ 100 & 50 & 5 & & 0.588 & 0.429 & 0.365 & 5.777 & & 0.008 & 0.259 & 0.003 & 1.096 \\ 100 & 50 & 10 & & 0.692 & 0.435 & 0.426 & 8.249 & & 0.009 & 0.307 & 0.003 & 1.348 \\ 100 & 50 & 50 & & 1.257 & 0.824 & 0.993 & 33.368 & & 0.013 & 0.839 & 0.005 & \\ \noalign{\smallskip} 1\,000 & 5 & 1 & & 0.189 & 0.152 & 0.005 & 0.219 & & 0.002 & 0.324 & 0.001 & 0.075 \\ 1\,000 & 5 & 5 & & 1.143 & 0.961 & 0.035 & 1.280 & & 0.003 & 0.860 & 0.001 & 0.143 \\ 1\,000 & 10 & 1 & & 0.408 & 0.342 & 0.018 & 0.532 & & 0.004 & 1.034 & 0.001 & 0.165 \\ 1\,000 & 10 & 5 & & 1.837 & 1.620 & 0.072 & 2.239 & & 0.005 & 1.890 & 0.001 & 0.271 \\ 1\,000 & 10 & 10 & & 2.567 & 2.145 & 0.110 & 3.693 & & 0.006 & 3.320 & 0.001 & 0.459 \\ 1\,000 & 50 & 1 & & 2.285 & 2.055 & 0.293 & 3.567 & & 0.019 & 21.126 & 0.005 & 2.805 \\ 1\,000 & 50 & 5 & & 8.728 & 7.611 & 1.188 & 14.019 & & 0.020 & 24.544 & 0.006 & 3.264 \\ 1\,000 & 50 & 10 & & 10.264 & 8.661 & 1.271 & 16.524 & & 0.024 & 29.184 & 0.006 & 3.938 \\ 1\,000 & 50 & 50 & & 21.192 & 16.785 & 3.448 & 39.227 & & 0.038 & 80.656 & 0.011 & 14.740 \\ \noalign{\smallskip} 10\,000 & 5 & 1 & & 1.933 & 1.895 & 0.043 & 1.472 & & 0.018 & 32.153 & 0.002 & 0.115 \\ 10\,000 & 5 & 5 & & 12.136 & 10.695 & 0.251 & 8.958 & & 0.036 & 85.527 & 0.004 & 0.214 \\ 10\,000 & 10 & 1 & & 4.783 & 4.113 & 0.140 & 3.223 & & 0.032 & 102.857 & 0.003 & 0.234 \\ 10\,000 & 10 & 5 & & 19.922 & 19.365 & 0.539 & 17.111 & & 0.043 & 188.259 & 0.004 & 0.369 \\ 10\,000 & 10 & 10 & & 32.188 & 24.658 & 0.856 & 22.533 & & 0.063 & 330.891 & 0.006 & 0.618 \\ 10\,000 & 50 & 1 & & 28.747 & 26.078 & 3.150 & 29.440 & & 0.153 & 2107.029 & 0.028 & 3.374 \\ 10\,000 & 50 & 5 & & 116.614 & 100.885 & 9.538 & 114.121 & & 0.160 & 2448.142 & 0.032 & 3.917 \\ 10\,000 & 50 & 10 & & 134.916 & 103.590 & 10.014 & 123.863 & & 0.179 & 2910.402 & 0.035 & 4.706 \\ 10\,000 & 50 & 50 & & 244.389 & 209.834 & 20.318 & 224.293 & & 0.320 & 8045.749 & 0.082 & 16.556 \\ \noalign{\smallskip}\hline \end{tabular} \end{center} \end{table} Table~\ref{tab:CPU-maxCor} lists average computation times for various values of $n$, $p$ and $q$. The function \code{maxCorGrid()} is thereby used with the default values for all control parameters of the algorithm % (see the corresponding \proglang{R} help file by typing \code{?maxCorGrid} into % the \proglang{R} console when \pkg{ccaPP} is loaded). (see the corresponding \proglang{R} help file). For the maximum association measures, the number of bivariate associations that have to be computed clearly takes a toll on computation time compared to the association measures based on the full scatter matrices. Note that the Kendall correlation is the exception, as the computation of the full scatter matrix uses \proglang{R}'s built-in \code{cor()} function, and therefore the naive $O(n^2)$ algorithm. Also note that computing the full MCD scatter matrix requires more observations than variables, i.e., $n > p+q$, hence it cannot be computed for $n=100$ and $p=q=50$. For the Pearson correlation, the projection pursuit algorithm to find the maximum association cannot be recommended since the first canonical correlation is much faster to compute. However, the focus of \pkg{ccaPP} is on the Spearman and Kendall rank correlation, for which the maximum association measures are much more intuitive than the association measures based on the full scatter matrix. In our opinion, the gain of easy interpretability outweighs the increased computational cost. In any case, the maximum association measures are still reasonably fast to compute for many problem sizes due to our \proglang{C++} implementation. It is also worth noting that the association measures based on a full scatter matrix require the number of observations to be larger than the number of variables in each of the two data sets, i.e., $n > \max(p, q)$. The maximum association measures do not have this limitation, although computation time increases considerably in high dimensions. % ----------- % Conclusions % ----------- \section{Conclusions} \label{sec:conclusions} The package \pkg{ccaPP} provides functionality for the statistical computing environment \proglang{R} to compute intuitive measures of association between two data sets. These maximum association measures seek the maximal value of a bivariate association measure between one-dimensional projections of each data set. We recommend the maximum Spearman and Kendall rank correlation measures because of their good robustness properties and efficiency. For details on the theoretical properties of the estimators, as well as the alternate grid algorithm and extensive numerical results, the reader is referred to \citet{AlfCXX}. Due to our \proglang{C++} implementation, the maximum association measures are reasonably fast to compute. The significance of maximum association estimates can be assessed via permutation tests, which allow for parallel computing to decrease computation time. In addition, the corresponding functions in \pkg{ccaPP} are easy to use. % ---------- % References % ---------- %\bibliographystyle{plainat} \bibliography{maxCor} \end{document}