I'm trying to wrap my head around how to interpret the results of CCA. I've got a fairly deep understanding of OLS regression, and I've read a lot of helpful CCA explainers like this one by @ttnphns. However, I'm still struggling with one particular aspect of the logic of what one apparently does with the CCA results. I'll unpack below, using terminology from the R
package CCA
to refer to different elements.
In particular, I understand that the math of CCA treats X and Y identically, i.e., this is correlation, not regression. But, in a situation where Y is logically downstream of X, and where Y comprises multiple theoretically independent outcomes, the idea of using the ycoef
s, which are essentially regression coefficients specifying the linear combination of y
s that produce a given yscore
, and which, like OLS regression, reflect the joint influence of the given y
and all the other y
s, doesn't make sense to me.
Again, I understand the math of how a given yscore
is derived, and how that is reflected in the ycoef
s. What I don't like is the idea of reporting how the various y
s 'contributed to' constructing this synthetic latent variable in a regression sense, because in reality, all the y
s arose independently—or, more in keeping with the logic of CCA, they were all driven by some set of latent variables.
What makes sense to me would be to report the xcoef
s alongside the corr.Y.yscores
, that is, the coefficients for how each x
relates to a given xscore
, and the loadings of each y
on the corresponding yscore
. In a sense, because each yscore
is calculated in a way that accounts for all y
s, the loading of a given y
on a given yscore
already contains information about the joint influence of that y
alongside all the other y
s.
The other wrinkle here is the cross-loadings, i.e., corr.X.yscores
and corr.Y.xscores
. I can imagine looking at corr.X.yscores
, that is, the cross-loading of the X variables on each yscore
, alongside the Y loadings, to get a causal understanding of the interrelationships (that is, as an alternative to the above, mixing xcoef
s with the Y loadings), but I'm less convinced that that makes sense, more or less precisely because it doesn't account for the joint influence of all of the X variables in the way that the xcoef
s do.
Example results
To make all of this a bit more concrete, here are some CCA results. I've got five X variables: Valence, Attention, Reactance, Memory, and Credibility, and five Y variables: Belonging, GovernmentTrust, Intention, DonatedAmount, and Petitition. Very briefly, people are watching videos designed to affect civic attitudes and behaviors, and we have measures of the cognitive and emotional processes evoked by those videos, along with those attitudes and behaviors. A grossly oversimplified, but good enough for these purposes, theoretical model would say that all of those X processes are evoked by the videos roughly simultaneously and independently (in the neural, not statistical, sense), and lead to the roughly independent Y outcomes.
Unsurprisingly, variables within X and Y are strongly correlated:
> cor(X)
Val Att Reac Mem Cred
Val 1.00000000 0.6944754 -0.5855827 -0.07741477 0.6173354
Att 0.69447543 1.0000000 -0.5355258 -0.12540078 0.8046387
Reac -0.58558269 -0.5355258 1.0000000 0.23206895 -0.7537869
Mem -0.07741477 -0.1254008 0.2320690 1.00000000 -0.2560711
Cred 0.61733544 0.8046387 -0.7537869 -0.25607108 1.0000000
> cor(Y)
Belong GovTrust Intent Donate Petit
Belong 1.0000000 0.8850782 0.8711101 0.5380188 0.5216873
GovTrust 0.8850782 1.0000000 0.8733166 0.5410220 0.4790638
Intent 0.8711101 0.8733166 1.0000000 0.6456944 0.6553707
Donate 0.5380188 0.5410220 0.6456944 1.0000000 0.6766341
Petit 0.5216873 0.4790638 0.6553707 0.6766341 1.0000000
The canonical coefficients look like this (standardized for comparability):
> sX %*% cc1$xcoef
[,1] [,2] [,3] [,4] [,5]
Val 0.9176401 -0.13247941 -0.5219492 0.05782512 1.0556544
Att -0.2799927 0.31227055 0.1527990 1.59206208 -1.0665668
Reac 1.1499297 0.05567097 1.0843323 -0.29378942 0.3823064
Mem -0.6465517 -0.21244350 0.4343226 0.20561092 0.6359141
Cred 0.2364174 0.78268081 1.1141411 -1.54444993 0.8824901
> sY %*% cc1$ycoef
[,1] [,2] [,3] [,4] [,5]
Belong -1.3895527 0.3820826 -1.70499039 0.6491265 -0.534639666
GovTrust -0.6988248 -1.0903387 1.36186780 -0.7034744 1.436932238
Intent 2.0947065 1.6494701 -0.07021896 -0.3707711 -0.005935978
Donate -0.3353488 0.3181364 0.77140283 1.1164972 -0.284987733
Petit 0.2998847 -1.3448159 -0.57437068 0.0695898 0.296802850
And the loadings look like this:
> cc1$scores[3:6]
$corr.X.xscores
[,1] [,2] [,3] [,4] [,5]
Val 0.24581469 0.5514077 -0.39662442 0.36615011 0.58664114
Att 0.01277755 0.8468694 0.05164687 0.52104411 0.09216574
Reac 0.43426588 -0.6732564 0.56911672 0.03166090 -0.18232597
Mem -0.47615599 -0.4288490 0.42190857 0.32879813 0.55068044
Cred -0.12362245 0.9645981 -0.01370151 -0.05891412 0.22496523
$corr.Y.xscores
[,1] [,2] [,3] [,4] [,5]
Belong -0.05749260 0.07563841 -0.09272842 0.03313814 0.009171644
GovTrust -0.03802225 0.05055149 -0.01380681 0.01796878 0.011835707
Intent 0.07042491 0.08280543 -0.05089033 0.03375533 0.009924827
Donate 0.02618289 0.02078827 0.03266592 0.08688788 0.005023762
Petit 0.10706576 -0.08687193 -0.06984277 0.05680335 0.006371386
$corr.X.yscores
[,1] [,2] [,3] [,4] [,5]
Val 0.068165987 0.1289231 -0.082571530 0.035632915 0.007335365
Att 0.003543296 0.1980042 0.010752139 0.050706854 0.001152441
Reac 0.120424708 -0.1574122 0.118481960 0.003081168 -0.002279805
Mem -0.132041104 -0.1002680 0.087835329 0.031997903 0.006885712
Cred -0.034281295 0.2255300 -0.002852459 -0.005733391 0.002812967
$corr.Y.yscores
[,1] [,2] [,3] [,4] [,5]
Belong -0.20732517 0.32350757 -0.4454120 0.3405148 0.7334964
GovTrust -0.13711279 0.21621012 -0.0663197 0.1846402 0.9465532
Intent 0.25396065 0.35416113 -0.2444468 0.3468568 0.7937317
Donate 0.09441862 0.08891201 0.1569076 0.8928264 0.4017721
Petit 0.38609191 -0.37155369 -0.3354830 0.5836894 0.5095476
Finally, the canonical correlations themselves; the first three are significant (not shown here):
> cc1$cor
[1] 0.27730640 0.23380722 0.20818570 0.09731778 0.01250401