Dear Gabor, thank you for your answer, but I am still a little confused because the values of the xcoef and ycoef are so small. It is true, that I receive very similar results to the cancor, if I use the proposed formula with
z <- svd(cov(x,y) %*% solve(var(y), cov(y,x)) %*% solve(var(x))) sqrt(z$d) # canonical correlations isqrt((nrow(x)-1)*var(x)) %*% z$u # xcoef But, why do I need the nrow(x)-1)* in isqrt()? In the literature, if you use the proposed calculation, the a's are calculated as z$u %*% isqrt(var(x)). I have this problem, because I need structural coefficients to calculate Redundancy measure and according to literature, they are calculated as a's%*%var(x). The coefficients from cancor are so small that my redundancy measure iz almost zero, despite the high correlation coefficient. I have, on the other hand, calculated correlation between x and their corresponding canonical variables as: cor(x, x%*%xcoef) and results were good. Can I use these results as structural correlations in Redundancy measure calculation? Thank you again and best regards Irena Komprej ________________________________________________________________ Irena Komprej <irena.komprej <at> telemach.net> writes: > > I am strugling with cancor procedure in R. I cannot figure out the > meaning of xcoef and of yxcoef. > Are these: > 1. standardized coefficients > 2. structural coefficients > 3. something else? > Look at the examples at the bottom of ?cancor from which its evident xcoef is such that x %*% cxy$xcoef are the canonical variables. (More at the end of this post.) > I have tried to simulate canonical correlation analysis by checking the > eigenstructure of the expression: > > Sigma_xx %*% Sigma_xy %*% Sigma_yy %*% t(Sigma_xy). > > The resulting eigenvalues were the same as the squared values of > cancor$cor. I have normalized the resulting eigenvectors, the a's with > > sqrt(a'%*%Sigma_xx%*%t(a)), and similarly the b's with > sqrt(b'%*%Sigma_yy%*%t(b)). > > The results differed considerably from xcoef and ycoef of the cancor. Run the example in the help page to get some data and some output: set.seed(1) example(cancor) # Also, define isqrt as the inverse square root of a postive def matrix isqrt <- function(x) { e <- eigen(x) stopifnot( all(e$values > 0) ) e$vectors %*% diag(1/sqrt(e$values)) %*% solve(e$vectors) } # we can reconstruct the canonical correlations and xcoef # in the way you presumably intended like this: z <- svd(cov(x,y) %*% solve(var(y), cov(y,x)) %*% solve(var(x))) sqrt(z$d) # canonical correlations isqrt((nrow(x)-1)*var(x)) %*% z$u # xcoef Another thing you can do is to type cancor at the R prompt to view its source and see how it works using the QR decomposition. ______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html