[R] canonical variates

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Feb 24 18:28:23 CET 2000

> Date: Thu, 24 Feb 2000 16:46:59 +0100 (MET)
> From: Mauro Andrea Cremonini <mac at foodsci.unibo.it>
> Dear all, I am a new R user so forgive my perhaps naive question.
> I am looking for a R canonical variates routine, which as far as I
> understand it is not contained in the mva multivariate package.
> Anybody has already written this routine? And where can I find it?

Not that I know of, but it is fairly simple. Suppose you have data matrices
A and B on the same observations. Then

cancor <- function(A, B) 
   Ap <- prcomp(scale(A, T, F), retx=T)
   Apc <- Ap$x %*% diag(1/Ap$sdev)
   Bp <- prcomp(scale(B, T, F), retx=T)
   Bpc <- Bp$x %*% diag(1/Bp$sdev)
   Sigma <- crossprod(Apc, Bpc)/(nrow(A) - 1)
   s <- svd(Sigma, ncol(A), ncol(B))
   return(list(cor=s$d, canvar.x=Apc %*% s$u, canvar.y=Bpc %*% s$v))
should do the trick. The canonical variates are zero-mean, unit-variance
(unlike S-PLUS).

I have only done some simple checks, but this seems to agree with
S-PLUS up to the different normalizations.

Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch

More information about the R-help mailing list