1
$\begingroup$

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 ycoefs, which are essentially regression coefficients specifying the linear combination of ys that produce a given yscore, and which, like OLS regression, reflect the joint influence of the given y and all the other ys, 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 ycoefs. What I don't like is the idea of reporting how the various ys 'contributed to' constructing this synthetic latent variable in a regression sense, because in reality, all the ys 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 xcoefs 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 ys, the loading of a given y on a given yscore already contains information about the joint influence of that y alongside all the other ys.

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 xcoefs 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 xcoefs 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
$\endgroup$

1 Answer 1

0
$\begingroup$

After some further reading, I'm satisfied that my intuition was correct. I was assuming that this explainer represented the gold standard for using CCA results. However, the majority of published examples I found the fields I work in do in fact using loadings, generally on the X as well as Y side (see, e.g., here), although I could also find published examples that used the coefficients for both X and Y (e.g., here).

And perhaps most confusingly, one of the most-cited CCA references (within psychology and communication) recommends relying on coefficients and loadings, but seems to switch back and forth between advocating for favoring one or the other in understanding the overall pattern for a given canonical root (see here). Even this highly-cited reference uses several rules of thumb and doesn't offer any final insight into my original question, but given the diversity of approaches in the wild, I suspect any set of results can be used, with appropriate justification.

$\endgroup$
1
  • $\begingroup$ Welcome to CV. If you have answered your own question, then can you click the "accept" button? If this is not an answer, then please delete it and edit the question. $\endgroup$
    – Peter Flom
    Commented Jan 19 at 10:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.