<table width = 900 border = 0><tr><td>
# <b>NMST539 | Cvičenie 13</b>

## <b>Kanonické korelace a korespondenční analýza</b>
### <font color = "#880000"><b>LS 2020/2021 |  25/05/21 | (online výuka)</b></font>
###### <a href = "cvicenie2021_13.Rmd">zdrojový Rmd súbor (kódovanie UTF8)</a>

**************


<b>Outline 13. cvičenia:</b> 

<ul>
<li>stručné základy metódy kanonických korelácii;</li>
<li>stručné základy korespondenčnej analýzy;</li>
<li>praktické aplikácie a jednoduché ukážky v programe R;</li>
</ul><br>


<b>Štatisticky program R</b> je k dispozícii (GNU public licence) na adrese <a href = "https://www.r-project.org">https://www.r-project.org</a><br><br>

<b>RStudio</b> -- "user-friendly" interface (jeden z mnohých, ktoré na internete nájdete): <a href = "https://www.rstudio.com">RStudio</a>.<br><br>

<b>Užitočné návody a manuály pre prácu s programom R:</b><br>

<ul>
<li>Bína, V., Komárek, A. a Komárková, L.: <i>Jak na jazyk R.</i>  (<a href = "NMFM301/Rmanual2.pdf">PDF súbor</a>)</li>
<li>Komárek, A.: <i>Základy práce s R.</i>  (<a href = "http://msekce.karlin.mff.cuni.cz/~komarek/vyuka/dataRko/Rmanual1.pdf">PDF súbor</a>)</li>
<li>Kulich, M.: <i>Velmi stručný úvod do R.</i> (<a href = "NMFM301/uvodr.pdf" >PDF súbor</a>)</li>
<li>De Vries, A. a Meys, J.: <i>R for Dummies.</i> (ISBN-13: 978-1119055808) </li>		
</ul><br>


<b>Odborná literatúra:</b><br>
<ul>
<li>Bouveyron, C., Celeux , G., Murphy, T.B., and Raftery A.E.: Model-Based Clustering and Classification for Data Science: With Applications in R. Cambridge University Press, 2019.</li>
<li>Hardle, W. and Simar.L.: Applied Multivariate Statistical Analysis. Springer, 2015</li>
<li>Mardia, K., Kent, J., and Bibby, J.:Multivariate Analysis, Academic Press, 1979.</li>
</ul>

<br><br>

**************

### <font color = "#880000"><b>1. Kanonické korelácie</b></font>

Metóda kanonických korelácii patrí medzi mnohorozmerné štatistické postupy. Zhruba řečeno, pracuje na podobnom princípe, ako metóda hlavných komponent (PCA), 
ktorá  vysvetľuje celkovú variabilitu vrámci daného datového súboru. Kanonické korelácie sa ale zameriavajú na vysvetlenie celkovej variability a korelačnej štruktúry 
medzi dvoma datovými súbormi (kvantitatívne premenné sledované na stejných experimentálných jednotkách -- subjektoch). 

Metóda hlavných komponent (PCA) teda vychádza z jedného podkladového datového súboru a snaží sa o redukciu dimenzionality v podobne niekoľkých hlavných komponent, 
ktoré maximulizuju hlavné smery celkovej variability dat. Metóda kanonických korelácii (CCA) vychádza z dvoch podkladových súborov (každý sa skladá z niekoľkých kvantitatívných premenných -- preto "mnohorozmerná" štatistická metóda --
sledovaných na stejných subjektoch) a snaží sa o nájdenie kanonických korelácii (v zmysle lineárných kombinácii pôvodných premenných), tak aby bola maximalizovana korelácia vrámci týchto premenných medzi dvoma podkladovými súbormi dat. <br><br>

Teoretický model lze vyjadriť následovne: pre dva mnohorozmerné náhodné vektory $\boldsymbol{X} = (X_1, \dots, X_p)^p$ a $\boldsymbol{Y} = (Y_1, \dots, Y_q)^\top$ predpokládame spoločnú variančnú-kovariančnú maticu pre $(\boldsymbol{X}^\top, \boldsymbol{Y}^\top)^\top$ v tvare
$$
Var \left(\begin{array}{c}\boldsymbol{X}\\ \boldsymbol{Y}\end{array}\right) = \left(\begin{array}{cc} \Sigma_{XX} & \Sigma_{XY}\\ \Sigma_{YX} & \Sigma_{YY} \end{array}\right).
$$



Je zrejmé, že pre ľubovolnú linárnu kombináciu zložiek vektoru $\boldsymbol{X}$ a ľubovolnú linárnu kombináciu zložiek vektoru $\boldsymbol{Y}$ v tvare
 $\boldsymbol{a}^\top \boldsymbol{X}$ a $\boldsymbol{b}^\top\boldsymbol{Y}$, pre $\boldsymbol{a} \in \mathbb{R}^p$ a $\boldsymbol{b} \in \mathbb{R}^q$ dostaneme pre vzájomnú koreláciu linárných kombinácii vzťah 
 
$$
Cor(\boldsymbol{a}^\top \boldsymbol{X}, \boldsymbol{b}^\top\boldsymbol{Y}) = \boldsymbol{a}^\top \Sigma_{XY} \boldsymbol{b}.
$$

Metóda kanonických korelácii sa snaží nájsť hodnoty neznámych parametrov  $\boldsymbol{a} \in \mathbb{R}^p$ a $\boldsymbol{b} \in \mathbb{R}^q$ (t.j. príslušné lineárne kombinácie zložiek vektorov $\boldsymbol{X}$ a  $\boldsymbol{Y}$) 
tak, aby bola výsledná korelácia maximálna možná. Metóda kanonických korelácii (podobne ako aj metóda hlavných komponent)
ale  nehľadá pouze jednu takúto lineárnu kombináciu, ale výstupom sú dvojice nových premenných (v každej dvojici je jedná premenná vytvorená lineárnou kombináciou $\boldsymbol{a}^\top \boldsymbol{X}$ pre vhodné  $\boldsymbol{a} \in \mathbb{R}^p$ a 
druhá premenná linárnou kombináciou  $\boldsymbol{b}^\top\boldsymbol{Y}$, opäť pre vhodné $\boldsymbol{b} \in \mathbb{R}^q$), pričom celkový počet takto vytvorených párov nových premenných je daný ako  $min(p, q)$. 
Navyše sa požaduje, že kanonické premenné sú vzájomne (vrámci daného datového súboru) nekorelované (teda kanonické premenné $\boldsymbol{a}_1^\top \boldsymbol{X}, \dots \boldsymbol{a}_k^\top \boldsymbol{X}$ sú nekorelované a stejně tak aj 
kanonické premenné $\boldsymbol{b}_1^\top\boldsymbol{Y}, \dots, \boldsymbol{b}_k^\top\boldsymbol{Y}$ sú nekorelované, pričom $k = min(p, q)$).<br><br>

metóda kanonických korelácii je v programe R implementovaná v štandardnej funkcii  `cancor()`. Dodatočné možnosti a rôzne rozšírenia 
sú k dispozícii v knižniciach a balíčkoch -- napr. 'CCA', alebo 'vegan'. <br><br>

Pre ilustráciu funkgovania metódy kanonických korelácii využijeme datový súbor ekologickej kvality a biologickej diverzity rôzných Českých geografických lokalít
v blízkosti významných vodných tokov. Celkové data pozostávaju z dvoch datových súborov: v prvom datovom súbore sú zaznamenané namerané hodnotý rôznych ekologických a biologických indexov/metrík (dohromady 17 premenných)
a v druhom datovom súbore sú na tých istých lokalitách zaznamenané koncentrácie niektorých dôležitých chemických látok (celkovo 7 premenných). 


Idea kanonických korelácii je pokúsiť sa vysvetliť vzájomné vzťahy medzi dvoma datovými súbormi (v oboch prípadoch sa jedná o kvantitatívne premenné sledované na stejných subjektoch -- lokalitách), 
resp. zistiť, ktoré biologické a ekologické ukazatele (biometriky a indexy) korelujú s ktorými chemickými koncentráciami. 



```{r, warning = F, message = F}
rm(list = ls())
bioData <- read.csv("http://msekce.karlin.mff.cuni.cz/~maciak/NMST539/bioData.csv", header = T)
chemData <- read.csv("http://msekce.karlin.mff.cuni.cz/~maciak/NMST539/chemData.csv", header = T)

head(bioData)
head(chemData)
```
<br><br>

V podkladových datach sa vyskytuje jedná lokalita, u ktorej sú namerané biologické premenné, ale chýbajú hodnoty o príslušných chemických koncentráciach. 
Toto pozorovanie je v nasledujúcom kóde odstránene a není viac uvažované pre účely kanonických korelácii.  


```{r, warning = F, message = F}
ind <- match(chemData[,1], bioData[,1])
data <- data.frame(bioData[ind, ], chemData[, 2:8])
```

Príprava jednotlivých datových súborov -- t.j. rozlíšenie náhodného vektoru $\boldsymbol{X}$ a náhodného vektoru $\boldsymbol{Y}$ (vzhľadom k teoretickému modelu popisanému vyššie). 

```{r}
X <- data[,2:9]
Y <- data[,19:25]
```


Celkovú variančnú-kovariančnú maticu náhodného vektoru $(\boldsymbol{X}^\top, \boldsymbol{Y}^\top)^\top$, t.j. výberovú verziu matice na základe dat (realizácie celkového náhodného vektoru)


$$ cor(\mathcal{X}, \mathcal{Y}) = \left(\begin{align}\Sigma_{XX} & \Sigma_{XY}\\\Sigma_{YX} & \Sigma_{YY}\end{align}\right),$$

môžeme vyzualizovať napr. pomocou knižnice  'CCA' (Canonical Correlation Analysis knižnica, ktorú je nutné inštalovať pomocou príkazu `install.packages("CCA")`) a funkcii  `matcor()` a `img.matcor()` :



```{r, warning=F, message = F, fig.width=10, fig.height=8}
library("CCA")
correl <- matcor(X, Y )
img.matcor(correl, type = 2)
```


Metóda kanonických korelácii je aplikovaná priamočiaro volaním funkcie `cancor()`. Podkladové datové súbory sú $\mathcal{X}$ (predstavuje realizáciu teoretického náhodného vektoru $\boldsymbol{X}$) a $\mathcal{Y}$ (realizácia teoretického náhodného vektoru $\boldsymbol{Y}$). Alternatívna možnosť pre metódu kanonických korelácii je napr. funkcia `cc()` (z knižnice 'CCA'). Získané výsledky sú ekvivalentné, aj keď nie nutne identické. Zamyslite sa, do akej miery su kanonické korelácie definované jednoznačne. 

```{r}
cc1 <- cancor(X, Y)  ### function from standard R instalation
cc2 <- cc(X, Y)      ### function for the R package 'CCA'
```

Hodnoty (odhady) kanonických korelácii sú totožné: 

```{r}
cc1$cor  ### function from standard R instalation
cc2$cor  ### function for the R package 'CCA'
```

Jednotlivé kanonické korelácie -- t.j.  prislušné dvojice linárných kombinácii stĺpcov matice biologických data a sĺpcov matice chemických dat 
lze z výstupu zrekonštruovať následovne: 

```{r}
CanX <- as.matrix(X) %*% cc1$xcoef
CanY <- as.matrix(Y) %*% cc1$ycoef

cor(CanX, CanY)
```

Porovnajte s výstupom z funkcie  `cancor()`, alebo  `cc()` vyššie.
Pripomeňme, že v tomto konkrétnom príklade platí, že $p = 8$, $q = 7$ a teda celkov počet jednotlivých párov kanonických korelácii je $k = min(p, q) = 7$.
Všimnite si vpodstate numerické nuly na mimodiagonálných prvkoch matice.  
<br><br>

Kanonické korelácie vizuálne: 

```{r, warning=F, message = F, fig.width=10, fig.height=8}
par(mfrow = c(1,2))
barplot(cc1$cor, main = "Canonical correlations for 'cancor()'", col = "gray")
barplot(cc2$cor, main = "Canonical correlations for 'cc()'", col = "gray")
```


Prislušné lineárne kombinácie stĺpcov datovej matice $\mathcal{X}$ a datovej matice  $\mathcal{Y}$ sa ale líšia v závislosti 
na použitej funkcii. Porovnajte nasledujúce výstupy: 

```{r}
cc1$xcoef  ### function from standard R instalation
cc2$xcoef  ### function for the R package 'CCA'

cc1$ycoef
cc2$ycoef
```


Výsledky kanonickej korelačnej analýzy je možné vyzualizovať pomocou príkazu `plt.cc()`. 

```{r, warning=F, message = F, fig.width=10, fig.height=8}
plt.cc(cc2, var.label = TRUE, ind.names = data[,1])
```
Na ľavom paneli sú znázornené původné premenné z oboch datových súborov (červenou sú biologické metriky a modrou sú chemické koncentrácie). 
Na ľavom paneli sú zobrazené jednotlivé geografické lokality (t.j. subjekty) v závislosti na nameraných hodnotách biologických aj chemických premenných. 

Viacej podrobnosti lze nájsť napr. v tomto <a href = "https://www.researchgate.net/publication/224042572_CCA_An_R_Package_to_Extend_Canonical_Correlation_Analysis">článku</a>.<br><br>



#### <font color = "#880000">Otázky</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
 <ul>
 <li>Jak by ste interpretovali ľavý a pravý panel v obrázku vyššie?</li>
 
 <li>Existuje nejaka súvislosť medzi oboma panelmi v predchádzajúcom obrázku?</li>
 
 <li>Aký záver by ste na základe obrázku udělali? </li>
 </ul>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<br><br>

Nad rámec klasickej metódy kanonických korelácii existujú rôzne rozšírenia -- napr. tzv. regularizovaná verzia kanonických korelácii (resp. regularized canonical correlation analysis -- rcc). 
Regularizovaná verzia je určená pre prípady, keď počet parametrov (resp. premenných) $p \in \mathbb{N}$, prípadne $q \in \mathbb{N}$ je väčší, ako je samotný rozsah náhodných výberov, teda $n \in \mathbb{n}$ (väčšinou dokonca platí, že $p, q \gg n$). 
There is R function `rcc()` available in the R package 'CCA'. <br><br>

K dispozícii sú aj iné rozširujúce balíčky, napr. knižnica  'vegan' (inštalácia pomocou príkazu `install.packages("vegan")`) a následne funkcia `cca()`.<br><br>


#### <font color = "#880000">Poznámka</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
 <ul>
 
 <li><b>Redundančná analýza (RDA - Redundancy Analysis)</b><br></li>
 Metóda podobná k metóde kanonických korelácii je aj tzv. Redundančná analýza. Idea je využiť kvantitatívne premenné v jednom datovom súbore 
a maximalizovať vzájomnú koreláciu medzi lineárnými kombináciami premenných z tohto datového súboru a pôvodnými premennými z druhého datového súboru. 
Jedná sa teda o akúsi asymetrickú verziu metódy kanonických korelácii. Analogicky, môžeme sa na metódu dívať aj na určité zobecnenie lineárnej regresie, 
kde premenné z jedného datového súboru vystupujú ako nezávisle premenné a ich lineárnou kombináciou vysvetľujeme premenné z druhého datového súboru -- závislé premenné. 
Samozrejme záleží, ktorý datový súbor je použitý na vytvorenie lineárnych 
kombinácii a z ktorého datového súboru sa využívajú pôvodné premenné. <br><br>

Vzhľadom k použitému značeniu sa vpodstate jedná o maximalizáciu korelácie $cor(\boldsymbol{a}^\top\boldsymbol{X}, \boldsymbol{b}^\top\boldsymbol{Y})$, 
pri dodatočnom obmedzení, že buď $\boldsymbol{a} \in \mathbb{R}^p$ alebo $\boldsymbol{b} \in \mathbb{R}^q$ je jednotkový vektor (s jednotkou na určitej pozícii 
a nulami jinak). <br><br>

V programe R je pre redundančnú analýzu určených niekoľko baličkov, stručne aspoň knižnica `vegan`, alebo knižnica `segRDA`. 
 
 </ul>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<br><br>






### <font color = "#880000"><b>2. Korespondenčná analýza v R</b></font>

Korespondenčná analýza (CA - Correspondence Analysis) je vpodstate analogickou metódou ako je metóda kanonických korelácii, ale na rozdiel o kvantitatívnych dat je 
určená pre kvalitatívne data -- resp. pre distrétne data. Podobne, ako metóda kanonických korelácii zkúma vzájomnú štruktúru medzi dvoma kvantitativnými vektormi, 
tak korespondenčná analýza zkúma štruktúru, resp. vzájomné závislosti medzi jednotlivými riadkami v kontingenčnej tabuľke. V určitom zmysle môžeme korespondenčnú analýzu opäť chápať 
ako diskrétne zobecnenie metódy hlavných komponent, prípadne kanonických korelácii. 

Klasická otázka v kontingenčnej tabuľke sa týka závislosti medzi multinomickým vektorom $\boldsymbol{X}$ a multinomickým vektorom $\boldsymbol{Y}$. Nad rámec tejto otázky nás
ale môže zaujímať aj mierne komplexnejšia otázka, a totíž čí existujú nejaké závislosti/súvislosti medzi niektorými riadkami a niektorými stĺpcami kontingenčnej tabuľky (teda nie priamo samotné 
kategórie náhodných vektorov, ale skôr ich linárne kombinácie). <br><br>

Štandardný príkaz pre korespondenčnú analýzu v programe R je príkaz `corresp()` (v knižnici 'MASS'). Rozširujúce balíčky sú napr. 'FactoMineR' a 'factoextra'. <br><br>

Pre ilustráciu použijeme datový súbor `matcars` a kontingenčnú tabuľku vytvorenú pre charakteristiku motora (premenná `cyl`) a charakteristiku prevodovky (premenná `cyl`). 

```{r, warning=F, message = F, fig.width=10, fig.height=8}
X <- mtcars[, "cyl"]
Y <- mtcars[, "gear"]

table(X, Y)
```


Korespondenčná analýza pomocou príkazu `corresp()` z knižnice 'MASS': 

```{r, warning=F, message = F, fig.width=10, fig.height=8}
library(MASS)
(corAn <- corresp(~ Y + X))
plot(corAn, xlab = "Motor cylinders", ylab = "Transmission gears")
biplot(corresp(~ Y + X, nf = 2))
```

Ako by ste interpretovali predchádzajúce dva obrázky? Čo na obrázkoch vidíte? Pre pripomenutie, 
premenná `cyl` má tri kategórie (s hodnotami 4, 6 a 8, čo predstavuje počet válcov v motore) a premenná `gear`
ma opäť tri kategórie, ale s hodnotami 3,4 a 5, ktoré predstavujú počet prevodových stupňov. <br><br>

Prvý obrázok vpodstate vizualizuje kontingenčnú tabuľku, ale zároveň pridáva aj informáciu o určitej vnútornej štruktúre -- všímnite 
si  priestorové umietnenie jednotlivých buniek kontingenčnej tabuľky. Tieto bunky nie sú vzdialené medzi sebou ekvidistantne. Podívajte 
sa na podrobnosti funkcie `corresp()` v helpe `?corresp`. <br><br>


#### <font color = "#880000">Samostatne</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
 <ul>
 
 <li>Pokúste sa aplikovať korespondenčnú analýzu na data s väčším počtom kategórii v jednotlivých premenných. Jednotlivé závislosti je možné následne 
 testovať pomocou $\chi^2$ testu, analogicky, ako je tento test aplikovaný na problem nezávilosti v kontingenčnej tabuľke. Použitý príklad 
 je použe ilustrčný a i štandardný $\chi^2$ test nezávislosti odhalí závisostnú štrukturu: 
 
```{r, warning=F, message = F, fig.width=10, fig.height=8}
chisq.test(table(X, Y))
```
 </li>
 
 <li>Stručný návod k rozširujúcim balíčkom lze napr. nájsť na tejto stránke: <a href = "http://www.sthda.com/english/articles/31-principal-component-methods-in-r-practical-guide/113-ca-correspondence-analysis-in-r-essentials/">FactoMineR a factoextra</a></li>.
 
 </ul>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<br><br>

<br><br>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<hr size="3" width="100%" noshade style="color:#440000" align="left" /><br><br> 

## <font color = "#880000"><b>Domáca (samostatná) úloha </b></font>
### (Deadline: Cvičenie č.14 / 01.06.2021)

<hr size="3" width="100%" noshade style="color:#440000" align="left" />

<ul>
<li>Vyberte si jednú z uvedených mnohorozmerných metód spomínaných v tomto týždni (t.j. vrátane tzv. sliced inverse regression) 
a na vhodných datach sa pokúste metódu aspoň stručne aplikovať. Uveďte podstatné výsledky, ktoré aspoň stručne okomentujte 
a výsledky taktiež vhodne graficky ilustrujte. </li>

<li>Využiť lze buď metódy, funkcie a balíčky explicitne uvedené v tomto HTML Markdowne, alebo sa podívať 
po rôznych možnostiach rozširujúcich balíčkov a aplikovať niečo z tejto ponuky. Obecne sa jedná o metódy, ktoré sú pomerné 
populárne v tzv. behaviorálnej sociologíí a psychológii a k dispozícii je množstvo rôznych balíčkov a knižníc. Na druhej 
strane, mnohé z nich asi nefungujú tak, ako by sme z teoretického hľadiska očakávali, takže nikdy nie je na škodu určita 
miera obozretnosti a opatrnosti. </li>


<li> Riešenie umiestnite na svoju webovú stránku, <font color = "red">najneskôr v utorok, 01.06.2021, do 14:00</font>.</li>
</ul>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<br><br>

<br><br>

</td></tr></table>
<br><br><br>