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

## <b>Grafické nástroje v programe R, Sweave a Knit</b>
### <font color = "#880000"><b>LS 2018/2019 | Pondelok 25/02/19</b></font>
###### <a href = "cvicenie2018_1.Rmd">zdrojový Rmd súbor (kódovanie UTF8)</a>

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

Účelom prvého cvičenia z predmetu NMST539 je oboznámiť sa s niektorými grafickými nástrojmi v programe R (Development Core Team), ktoré 
su užitočné pri vyzualizácii (mnohorozmerných) dátovych súborov. Výuka cvičení z predmetu NMST539 bude počas celého semestra prebiehat s využitím počítačov 
so štatistickým programom R (k dispozícii v posluchárni, alebo na vlastnom notebooku s pripojením na internet), v ktorom sa budú jednotlivé úlohy riešiť. 

Program R (dostupný pod GNU GPL licenciou) je k dispozícii k stiahnutiu (free of charge) na adrese 

<a href = "https://www.r-project.org">https://www.r-project.org</a>

K dispozícii sú distribúcie s priamou podporou pre OS Windows, Linux, aj Macintosh. 

Základnú  inštaláciu programu R je možne jednoducho rozšíriť pomocou dodatočných knižníc (balíčkov), ktoré 
sú k dispozícii na rôznych online repozitároch (zoznam hlavných repozitárov je na adrese <a href = "https://cran.r-project.org/mirrors.html">https://cran.r-project.org/mirrors.html</a>).
V prípade potreby naištalovať dodatočnú knižnicu pre program R, bude tento fakt explicitne uvedený v podkladovom súbore s podrobnym popisom postupu práce. 
Jednotlivé R knižnice sú tvorené samotnými užívateľmi softwaru R a ich správne 
fungovanie nie je preto garantované a je namieste určitá opatrnosť a hlavne aktívne premýšľanie (kontrola) pri ich používaní.

Pre užívateľov programu R sú k dispozícii aj rôzne grafické rozhrania, ktoré je možne dodatočne nainštalovať a umožňujú (v určitých smeroch)
jednoduchšiu a prehľadnejšiu prácu. Najznámejší a pravdepodobne aj jeden z najpoužívanejších grafických rozhraní je <a href = "https://www.rstudio.com">RStudio</a> (s priamou podporou pre MS Windows, Linux, aj Macintosh).<br><br>

<b>Užitočné materiály pre prácu so štatistickým softwarom <i>R</i></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>

### <font color = "#880000"><b>1. Grafika v programe R</b></font>

K dispozícii je veľký výber rôznych funkcii a príkazov určených k vytváraniu rôznych grafických výstupov. Dodatočné príkazy a funkcie je možne získať pri rozšírení základnej inštalácie a pridaní niektorého z dodatočných balíčkov (packages) - tieto dodatočné knižnice sú väčšinou špecifický zamerané na určitú konkrétnu oblasť a knižnica 
často poskytuje komplexnú sadu nástrojov na riešenie daného špecifického problému. 

Grafické funkcie v programe R možeme podľa spôsobu fungovania rozdeliť do troch základných kategórii: 

<ol>
<li><font color = "#880000"><b>Funkcie, ktoré vytvoria nové grafické rozhranie (okno) </b></font><br>
Pri volaní ktorejkoľvek fukcie z tejto kategórie automaticky dôjde k vytvoreniu nového grafického okna (graph window) v ktorom sa vykresli 
samotný  obrázok (graf). Toto okno je ponechané ako aktívne 
a pomocou ďalších funkcii z druhej skupiny (viď nižšie) je možné dopĺňať dodatočne objekty do již existujúceho obrázku, prípadne meniť 
rôzne nastavenia a vlastnosti a dotvoriť tak finálny graficky výstup, obrázok. <br>

Základné príkazy (napr.): `plot()`, `dotchart()`, `hist()`, `barplot()`, `pie()`, `boxplot()`, `pairs()`, atď.;<br><br>
</li>

<li><font color = "#880000"><b>Funkcie, ktoré dopĺňajú již vytvorený graf (okno)</b></font><br>
Do druhej kategórie patria funkcie a príkazy, ktoré fungujú len v prípade, že bola pred ich použitím zavolaná niektorá 
funkcia z prvej kategórie a vytvorené okno je stále aktívne. Pomocou príkazov a funkcii z tejto kategórie je možné dopĺňať 
ďalšie (často netriviálne) objekty do již existujúceho grafu (grafického okna - graph window). <br>

Základné príkazy (napr.): `points()`, `lines()`, `abline()`, `text()`, `polygon()`, `rect()`, `box()`, `segments()`, `arrows()`, `legend()`, atď.;<br><br>
</li>

<li><font color = "#880000"><b>Funkcie určené na manipuláciu s grafmi</b></font><br>
Do tejto kategórie patria funkcie a príkazy, ktoré nevytvárajú samotný obrázok a nedokážu ani dopĺňať 
objekty do již existujúceho obrázku, ale slúžia výhradne na jednoduchú manipuláciu s vytvorenými grafickými oknami (napr. 
uloženie grafu do súboru, rozdelenie grafického okna a vytvorenie niekoľkýh grafov v jednom okne, vytvorenie nového okna, a pod.)<br>

Základné príkazy (napr.): `dev.new()`, `X11()`, `dev.off()`, `postscript()`, `pdf()`, `png()`, `par()`, `layout()`, atď.;<br><br>
</li>
</ol>

Pomocou R helpu zistite, k čomu jednotlivé príkazy a funkcie slúžia, ako sú implementované, aké dodatočné parametre je možné pri volaní funkcie 
využiť a každú z uvedených funkcii použijte aspoň v jednom grafe, ktorý samostatne vytvoríte. <br><br>


#### <font color = "#880000"><b>Scatterploty</b></font>

Na úvod použijeme data `mtcars` ktoré sú štandardne obsiahnuté v distribúcii Rka. Pozrieme sa na základné popisné charakteristiky pomocou 
štandardných R funkcii

```{r, eval = FALSE}
head(mtcars)
dim(mtcars)
summary(mtcars)
```

```{r, echo=FALSE}
attach(mtcars)
```

a nasledujúcim kódom vykreslíme obrázok, ktorú nam odhalí určitú časť závislostnej štruktúry v datach.<br>
Základna ídea pri vytváraní grafov je pokúsiť sa o jednoduchý (dvojrozmerný) a intuitivný obrázok, ktorý ale bude obsahovať čo najviac důležitej informácie (dosiahneme vhodným použitím různých farieb, zobrazovacích metod a pod.). 

```{r, fig.width = 10}
x <- mtcars[order(mtcars$mpg),] # sort by mpg
x$cyl <- factor(x$cyl) # it must be a factor
x$color[x$cyl==4] <- "red"
x$color[x$cyl==6] <- "blue"
x$color[x$cyl==8] <- "darkgreen"  
dotchart(x$mpg,labels=row.names(x),cex=.7,groups= x$cyl,
  	main="Gas Milage for Car Models\ngrouped by cylinder",
   xlab="Miles Per Gallon", gcolor="black", color=x$color)
```

Alternatívný náhľad dostaneme prostredníctvom matice scatterplotov, pomocou príkazu `pairs()`:

```{r, fig.width = 10}
pairs(mtcars[,c(1,3,4,6)], col=mtcars$cyl, pch = mtcars$am)
```

Sofistikovanejšie verzie napríklad s príslušným odhadom hustoty, miery vzájomnej korelácie, či regresnej závislosti (a mnohem více) možeme konštruovať (napríklad) pomocou knižnice `library(psych)` príkazom `pairs.panels()`:

```{r, message=F, warning=F, fig.width = 10}
library(psych)
pairs.panels(mtcars[,c("mpg", "disp", "hp", "wt")], 
             method = "pearson", # correlation method
             hist.col = "#00AFBB",
             density = TRUE,  # show density plots
             ellipses = TRUE # show correlation ellipses
             )
```

Existujú samozrejme mnohé iné možnosti a ďalšie grafiké nástroje v Rku (doplňujúce knižnice), pomocou ktorých vytvoriť 'case-specific' obrázky a grafy. 
Hlavný dôraz je pritom kladený na vizuálnu stránku, graf by mal dostatočne názorne zobrazovať podstatnú štruktúru datového súboru. 

V prípade menšieho počtu premenných je celkom zaujímavou možnosťou aj zobrazenie marginálnych hustot pre dve konkrétne veličíny (z dôvodu 
obmedzeného vnímania viac-rozmerných grafov sa väčšinou nepoužíva vyšší počet veličin súčastne): 

```{r, fig.width = 10}
library(MASS)
library("RColorBrewer")
colors <- brewer.pal(5, "Reds")

z <- kde2d(mtcars[,1], mtcars[,4], n=5)

plot(mtcars[,c(1,4)], xlab="Miles per Galon", ylab="Horse Power", pch=21, bg = "yellow")
contour(z, drawlabels=FALSE, nlevels=4, col=colors, add=TRUE)
```

<u>Poznámka:</u><br>
Knižnica `MASS` je potrebná k spočítaniu jadrového odhadu dvojrozmernej hustoty (príkaz `kde2d()`) a knižnica `RColorBrewer` je potrebná na vytvorenie farebnej palety, podľa ktorej 
sú vyfarbené kontúry. <br><br>


#### <font color = "#880000"><b>Boxploty</b></font>

Predstavu o štruktúre datového súboru získame (aj keď len v určitej obmedzenej miere) aj pomocou boxplotov

```{r, fig.width = 10}
boxplot(mpg ~ cyl, col = brewer.pal(3, "Blues"), xlab = "number of cylinders", ylab = "miles per galon", main= "")
```

prípadne verzia, ktorá zohľadňuje dve rôzne kategorické premenné (v tomto konkrétnom prípade spotrebu udávanu v míľach prejdených 
na jeden galón a identifikátor automatickej prevodovky: <i>Automatic = 0</i> a <i>Manual = 1</i>).

```{r, fig.width = 10}
boxplot(mpg ~ cyl + am, col = c(brewer.pal(3, "Greens"), brewer.pal(3, "Blues")), xlab = "No. of cylinders(.)Auto Transmission Indicator")
```


Alebo dokonca zložitejší prípad zobrazujúci spotrebu v závislosti na dvoch rôznych faktoroch a 95% konfidenčným intervalom pre skutočnú hodnotu 
médianu (s voľbou parametru `notched = TRUE`). 

```{r, fig.width = 10, warning = FALSE}
boxplot(mpg ~ cyl * am, col = c(brewer.pal(3, "Greens"), brewer.pal(3, "Blues")), xlab = "Number of Cylinders", ylab = "Miles per Galon | Automatic Transmission", main= "", notch = T)
```

Alebo celkom sofistikovany 'histogram', ktorý inkorporuje aj odhad hustoty (pomocou príkazu `vioplot()` z knižnice 'vioplot'). 
```{r, message=F, warning=F}
library(vioplot)
```

```{r, fig.width = 10}
x1 <- mtcars$mpg[mtcars$cyl==4]
x2 <- mtcars$mpg[mtcars$cyl==6]
x3 <- mtcars$mpg[mtcars$cyl==8]
vioplot(x1, x2, x3, names=c("4 cyl", "6 cyl", "8 cyl"), col="gold")
title("Violin Plots of Miles Per Gallon")
```

Podobný, ale interpretačne odlišný graficky výstup dostaneme pomocou príkazu `pirateplot()` z knižnice 'yarrr'. Pre správnu interpretáciu 
obrázku je vhodné naštudovať príslušný <a href = "https://cran.r-project.org/web/packages/yarrr/vignettes/pirateplot.html">manuál</a> k danej knižnici.

```{r, fig.width = 10, warning = F, message=F}
#install.packages("yarrr")
library("yarrr")
pirateplot(mpg ~ cyl, data = mtcars, xlab = "number of cylinders", ylab = "miles per galon", main= "", inf.method = "iqr")
```

Funkcia `pirateplot()` umožňuje rôzne ďalšie modifikácie a požadované užívateľské nastavenia výsledného grafického vystupu 
(viď <a href = "https://cran.r-project.org/web/packages/yarrr/vignettes/pirateplot.html">manuál</a>).

Napr. s intervalmi spoľahlivosti namiesto boxplotov 
```{r, fig.width = 10, warning = F, message=F}
pirateplot(mpg ~ cyl, data = mtcars, xlab = "number of cylinders", ylab = "miles per galon", main= "", inf.method = "ci")
```



<br><br>

#### <font color = "#880000"><b>Parallel Coordinates Plot </b></font>

S využitím  knižnice `MASS` je možné zavolať funkciu `parcoord()`, ktorá je užitočna, keď chceme vizuálne posúdiť mieru korelácie 
medzi jednotlivými sledovanými premennými. Ako by ste nasledujúci graf interpretovali? Resp. aké závery je možné z tohto grafu vyvodiť?

```{r, fig.width = 10, message = FALSE}
library(MASS)
attach(mtcars)
```

```{r, fig.width = 10, message = FALSE}
colorVector <- rep("brown", dim(mtcars)[1])
colorVector[am == 0] <- "brown1"
colorVector[cyl == 6] <- "blue4"
colorVector[cyl == 6 & am == 0] <- "blue1"
colorVector[cyl == 4] <- "darkgreen"
colorVector[cyl == 4 & am == 0] <- "green"
parcoord(mtcars, col = colorVector, lty = gear)
```



Samozrejme existuje mnoho iných možnosti, ako graficky nahliadnuť do štruktúry datového súboru, ktorý chceme následne štatisticky analyzovať. 
Vždy je potrebné zvážiť, aký graf a ktoré grafické nástroje sú ideálne vzhľadom 
k problému a akým spôsobom vytvorený graf/obrázok náležite okomentovať a interpretovať.

<br><br>

#### <font color = "#880000"><b>Knižnica ggplot2 </b></font>

Alternatívu ku klasickým grafickým nástrojom, ktoré su k dispozícii v programe R, ponúka dodatočna knižnica `ggplot2`, ktorú naištalujete a inicializujete štandardnými príkazmi

```{r, fig.width = 10, message = FALSE, eval = FALSE}
install.packages("ggplot2")
```

```{r, fig.width = 10, message = FALSE}
library(ggplot2)
```

Základnou funkciou v tejto knižnici je funkcia `qplot()`, ktorá na rozdiel od štandardnej funkcie `plot()`, ponúka ďaleko väčšie možnosti 
pri vytváraní grafov a obrázkov (pozri help `?qplot()`).  

V datovom súbore `mtcars` najprv upravíme niektoré premenné - faktorizujeme ich a priradíme príslušne názvý jednotlivých úrovni.

```{r, fig.width = 10, message = FALSE}
mtcars$gear <- factor(mtcars$gear,levels=c(3,4,5), labels=c("3gears","4gears","5gears")) 
mtcars$am   <- factor(mtcars$am,levels=c(0,1), labels=c("Automatic","Manual")) 
mtcars$cyl  <- factor(mtcars$cyl,levels=c(4,6,8),  labels=c("4cyl","6cyl","8cyl"))
```

Následne už možeme použiť funkciu `qplot()` a vykresliť odhad hustoty pre spotrebu (miles per gallon) v závislosti na počte prevodových stupňov (premenná `gear`). 

```{r, fig.width = 10, message = FALSE}
qplot(mpg, data=mtcars, geom="density", fill=gear, alpha=I(.5), main="Distribution of Gas Milage", xlab="Miles Per Gallon",  ylab="Density")
```

Pomocou tej istej funkcie `qplot()`, ale s inou voľbou parametru `geom = "..."`, je možne celkovo meniť vzhľad a typ výsledného grafu. 

```{r, fig.width = 10, message = FALSE}
qplot(gear, mpg, data=mtcars, geom=c("boxplot", "jitter"), fill=gear, main="Mileage by Gear Number", xlab="", ylab="Miles per Gallon")
```

Prípadne vykresliť regresnú závislosť spotreby na váhe automobilu (aj s príslušnými pásmi spoľahlivosti pre regresnú přímku). 

```{r, fig.width = 10, message = FALSE, warning = FALSE}
qplot(wt, mpg, data=mtcars, geom=c("point", "smooth"), method="lm", formula=y~x, color=cyl, main="Regression of MPG on Weight", xlab="Weight", ylab="Miles per Gallon")
```   
   
<br><br>   
   
#### <font color = "#880000">Užitočné</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
Knižnica `ggplot2` funguje na princípe postupných vrstiev (layers), v ktorých sa vykresľuje výsledný graf. Jednotlivé vrstvy sa prídávajú pomocou 
vhodných príkazov, ako napr. `geom_points()`, `geom_abline()`, `geom_area()` `geom_bar()`, `geom_contour()`, `geom_polygon()`, atď. (zoznam napr. na stránke <a href = "http://sape.inf.usi.ch/quick-reference/ggplot2/geom">http://sape.inf.usi.ch/quick-reference/ggplot2/geom</a>). 

Jednoduchý príklad s využitím niekoľkých vrstiev: 

```{r, fig.width = 10, message = FALSE, warning = FALSE}
dataSum <- plyr::ddply(mtcars, "gear", plyr::summarise, mean = mean(mpg), sd = sd(mpg))

ggplot() +
  geom_point(data = mtcars, aes(x = gear, y = mpg)) +
  geom_point(data = dataSum, aes(x = gear, y = mean), colour = 'red', size = 3) +
  geom_errorbar(data = dataSum, aes(x = gear, y = mean,  ymin = mean - sd, ymax = mean + sd), colour = 'red', width = 0.4) +
  ggtitle("Car consumption summary given the number of gears")
``` 

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




<br><br>

### <font color = "#880000"><b>2. Práca so Sweave a Knit</b></font>

Jednoduchý návod na používanie Sweave a tiež Knit (ktorým bol vytvorený tento dokument) je na webovej stránke 

<a href = "https://support.rstudio.com/hc/en-us/articles/200552056-Using-Sweave-and-knitr"> https://support.rstudio.com/ </a>

Povedane stručne a veľmi jednoducho, `Sweave` je knižnica a tiež funkcia v programe R (teda `Sweave()`), ktorá integruje Rko a LaTeX. 
Analogicky je tomu tak v pripade knižnice a funkcie `Knit` (resp. `Knit()`), ktorá integruje (kompiluje) Rko do HTML kódu.

Základom je vytvorenie klasického `tex` súboru (pre Sweave) a `html` súboru (pre Knit), ktoré sú ale uložené vo formáte `*.Rnw` (Sweave) a `*.Rmd` (Knit). 

Do týchto suborov je potom možné okrem štandardného tex kódu (Sweave), alebo html kódu (Knit) vkládať aj vhodne označený Rkový kód. Následne volaním funkcie `Sweave("nazov_suboru.Rnw")` alebo `Knit(nazov_suboru.Rmd)` program R prebehne celý dokument a Rkový kód spracuje a na dané miesto doplní výsledok získaný vyhodnotením daného Rkového kódu. 
 Podkladový <i>tex</i> kód (prípadne <i>html</i> kód) R program ignoruje a výstupom je  buď `*.tex` súbor (po použití Sweave), alebo `*.html` súbor
(po použití Knit). S týmito súbormi je ďalej možné pracovať ako s klasickými `tex`, alebo `html` súbormi. 

V prípade, že použijeme k práci user-friendly interface (asi jedna z najlepších možnosti je `RStudio`)

<a href = "https://www.rstudio.com"> https://www.rstudio.com </a>

tak je možné okamžite vytvárať PDF a HTML súbory priamo z `Rnw` a `Rmd` súborov a to pouze stlačením príslučného tlačítka v menu RStudia. 

Podrobnejší návod na prácu so Sweave napr. tu: 

<a href = "http://gosset.wharton.upenn.edu/teaching/471/EPFL-Sweave-powerdot.pdf">http://gosset.wharton.upenn.edu/</a>

<br><br>

#### <font color = "#880000"><b>Sweave a Knit</b></font>

<ul>
<li>Pre ilustráciu, ako vkládať Rkový kód do `Rnw` súboru, slúži táto malá ukážka:<br>
<a href = "sweave_test.Rnw">Download Rnw súbor</a> (Sweave | UTF 8 kódovanie)<br> 
Následná kompilácia a teda aj automatické vytvorenie finálneho PDF súboru sa dosiahne pomocou stlačenia tlačítka `Compile PDF` (v interface RStudio) - viď 
obrázok nižšie.</li>

<li>Pre ilustráciu, ako vkládať Rkový kód do `Rmd` súboru, poslúži zdrojový súbor tejto stránky:<br>
<a href = "cvicenie2019_1.Rmd">Download Rnw súbor</a> (Knit | UTF 8 kódovanie)<br>
Následná kompilácia a vytvorenie finálneho HTML dokumentu pomocou stlačenia tlačítka `Knit HTML` - viď obrázok nižšie.</li><br><br>
</ul>


<center>
<img src = "rnw.png" width = "900">
<br><br><br>
<img src = "rmd.png" width = "900">
</center>
<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 úloha </b></font>
### (Deadline: druhé cvičenie / 04.03.2019)

Jednou z podmienok získania zápočtu z predmetu NMST539 je odovzdanie PDF reportu na konci semestra, ktorý bude obsahovať 
vypracované domáce úlohy, postupne zadávané v priebehu semestra. Výsledný PDF súbor musí mať ucelený a dobre čitateľný format štandardného reportu
a musí obsahovať  

<ul>
<li>titulnú stranu, resp. hlavičku;</li>
<li>úvod a základný popis datového súboru, s ktorým budete pracovať;</li>
<li>prehľadne štrukturované kapitoly/sekcie, ktoré sa budu venovať jednotlivým úloham;</li>
<li>záver, prípadne diskusia;</li>
</ul>

Pomocou nasledujúceho príkazu nainštalujte knižnicu `SMSdata` s rôznými datovými súbormi:

```{r, eval = F}
install.packages(pkgs="http://www.karlin.mff.cuni.cz/~hlavka/sms2/SMSdata_1.0.tar.gz", repos=NULL, type="source")
```

Zo zoznamu datových súborov ktoré sú v knižnici k dispozícii a ktorý získate príkazom

```{r, eval = F}
data(package = "SMSdata") 
```
 
 
si vyberte jeden dataset na základe ktorého vypracujete jednotlivé úlohy počas semestru. K dispozícii je 21 dátových súborov, ktoré do Rka stačí načítať pomocou príkazu
`data(nazov_datasetu)`, napríklad

```{r, eval = F}
data(plasma) 
```

<ul>
<li>vyberte si jeden dátový súbor a načítajte ho v programe R;</li>
<li>vytvorte `Rnw` súbor, ktorý bude obsahovať základný popis datového súboru, niektoré dôležité výberové popisné charakteristiky a ich stručnú interpretáciu;</li>
<li>využijte niektoré grafické nástroje v programe R a vhodne ich aplikujte na niektoré premenné v zvolenom datovom súbore; vytvorte niekoľko vhodných obrázkov
a výsledne obrazky náležite okomentujte a interpretujte;</li>
</ul>

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