<table width = 900 border = 0><tr><td>
# NMSA230 - Cvičenie 2
## Softwarové prostředky pro matematiku a stochastiku
### Po: 24/10/16 |  (týždeň 4)

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

## <font color = "#880000">II. Štatistický software R (štatistika a grafika)</font>

<br>
<b>Všeobecné informáie</b><br>
<ul>
<li>Na cvičeni budeme pracovať s programom R (Team Development Core, 2016), ktorý je 
dostupný pod GNU GPL licenciou  (free of charge) na nasledujúcej adrese 
<a href = "https://www.r-project.org">https://www.r-project.org</a>.<br>
K dispozícii sú distribúcie s priamou podporou pre OS Windows, Linux aj Macintosh.</li>

<li>Základnú inštaláciu programu R je možne rozšíriť o ďalšie dodatočné knižníce (packages), 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>. Na inštaláciu baličku v programe R slúži príkaz `install.packages("***")`, kde namiesto `***`
je potrebné uviesť správne meno príslušného balíčka.</li>

<li>Okrem samotného programu R a rozširujúcich knižníc sú k dispozícii aj rôzne užívateľské rozhrania (user interfaces) , ktoré je možne dodatočne nainštalovať a umožňujú (v určitých smeroch) jednoduchšiu a prehľadnejšiu prácu s Rkom. Najznámejší a pravdepodobne aj jeden z najlepších R interface je <a href = "https://www.rstudio.com">RStudio</a> (defaultne nainštalované na každom počítači v tejto posluchárni).
</li>
</ul>

<br>
<b>Program druhého cvičenia NMSA 230</b><br>
<ul>
<li>Oboznámenie sa so zkladnými funkciami a nástrojmi, ktoré su v programe R určené k vytváraniu rôznych grafických 
výstupov (grafy, boxploty, diagramy).</li>

<li>Práca s reálnymi datami: vytvorenie jednoduchých popisných štatistík, ich interpretácia a následne zobrazeie pomocou 
vhodných graficých výstupov.</li>

<li>Práca s niektorými komplexnejšími príkazmi, pomocou ktorých je možné vytvárať automatizované R skripty (napr. `for`, `while`, `if`, `list.files()`, `which()`, `match()`, a mnoho ďalších)</li>

<li>Podrobnejšieho "sprievodca" pre jednoduchú prácu s R programom: <a href = "NMSA230/introR-2015.pdf">Hrátky s R</a> (autor: <a href = "http://www.karlin.mff.cuni.cz/~komarek">doc. Arnošt Komárek</a>).<br>
(k Hrátkam s R sú potrebné datove súbory: <a href = "NMSA230/auta2004.dat">auta2004.dat</a>, <a href = "NMSA230/auta2004.csv">auta2004.csv</a> a <a href = "NMSA230/auta2004.xls">auta2004.xls</a>)
</li>
</ul>

<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>



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

### <font color = "#880000">1. Grafické nástroje v programe R</font>

V programe R je k dispozícii veľký výber rôznych funkcii a príkazov určených k vytváraniu variabilných grafických výstupov.
Dalšíe dodatočné príkazy a funkcie je možne získať pri rozšírení základnej nainštalovaním niektorých odatočných balíčkov (packages) - tie sú väčšinou špecificky zamerané na konkrétnu oblasť, balíček často poskytuje komplexnú sadu nástrojov na riešenie určitého špecifického problému. <br>

Okrem toho je samozrejme možné vytvárať si vlastne príkazy a funkcie a defaultne grafické nástroje v Rku v mnohom zmeniť, vylepšiť a zdokonaliť. <br>

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

<ol>
<li><font color = "#880000"><b>Funkcie, ktoré vytvárajú nové grafické rozhranie</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ý výsledný 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ť ďalšie objekty do již existujúceho obrázku, prípadne meniť 
rôzne nastavenia a vlastnosti. <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</b></font><br>
Do druhej kategórie patria funkcie a príkazy, ktoré fungujú len v prípade, že bol 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()`, `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é primárne nie su schopné vytvárať obrázok, ani dopĺňať 
objekty do již existujúceho obrázku, ale služia na jednoduchú manipuláciu s vytvorenými grafickými oknami (napr. 
uloženie obr., 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>

Niekoľko názorných príkladov, ktoré využívajú niektoré z uvedených funkcii, sú uvedené nižšie.
Všimnite si aj úlohu dodatočných parametrov, ktoré sa pri volaní konkrétnej funkcie spomínaju. <br><br>

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

#### Príklad 1 | datový súbor 'mtcars'

Datový súbor 'mtcars', ktorý je štandardne k dispozícii v klasickej inštalácii programu R obsahuje údaje o 32 rôznych automobiloch predávaných v USA (typ auta, motoru, spotreba, atď.).

```{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)
```

S využitím dodatočnej 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}
library(MASS)
attach(mtcars)
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)
```

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

#### Príklad 2 | datový súbor 'Orange'

V druhom príklade použijeme datový súbor 'Orange', s ktorým sme už pracovali. V datasete sú zaznamenané 
informácie o piatich druhoch pomarančovníkoch - zaznamenaváme vek stromu v dňoch a priemer kmeňa v cm. <br><br>

Najprv využijeme štandardný príkaz `plot()` a následne sa pokusíme graf vylepšiť pomocou dodatočných parametrov
a dalších funkcii a príkazov z druhej kategórie. 

```{r, fig.width = 10}
plot(Orange[,"circumference"] ~ Orange[,"age"])
```

A teraz vylepšená (snáď krajšia) verzia toho istého grafu:

```{r, fig.width = 10}
plot(0,0, xlim = c(0, 1800), ylim = c(0, 250), pch = "",
          xlab = "age [days]", ylab = "circumference [cm]", main = "Orange Trees")
for (i in 1:5){
  points(Orange[Orange[,1] == i,3] ~ Orange[Orange[,1] == i,2], pch = 21, bg = i)
  lines(Orange[Orange[,1] == i,3] ~ Orange[Orange[,1] == i,2], col = i)
}
legend(0, 250, legend = c("Tree type #1", "Tree type #2", "Tree type #3", "Tree type #4", "Tree type #5"), 
               col = "black", bg = "gray" , pch = 21, lty = c(1,1,1,1,1), pt.bg = 1:5)
```

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

#### Príklad 3 | multiple plot output

Pomocou príkazov `par()` a `layout()` je možné kombinovať niekoľko grafov/obrázkov v jednom grafickom okne. 

```{r, fig.width = 10}
par(mfrow = c(1,2))
hist(Orange[,"circumference"], col = "lightblue", xlab = "Circumference [cm]", ylab = "Frequency", freq = F, main = "")
lines(density(Orange[,3]), col = "red", lwd = 2, lty = 2)
barplot(Orange[,3], col = sort(rep(1:5,7)), xlab = "Measurements by Trees", ylab = "Circumference [cm]")
```


<br><br>

#### <font color = "#880000">Užitočné</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
Program R poskytuje obrovskú škálu nástrojov a funkcii k vytváraniu a modifikovaniu grafickych výstpov. Ako názorná ukážka možnosti, ktoré sú k dispozícii, môže poslúžiť jednoduché demo, ktoré je defaultne k dispozícii v Rku: príkaz `demo("graphics")`. <br>

Analogickym spôsobom funguje demo ku všetkym knižniciam, ktoré su v Rku nainštalované (príkaz `demo()` a následne `demo("***")`, kde namiesto `***` je potrebné dopĺniť názov príslušného balíčku - package. <br>

Každá zo spomínaných funkcii je implementována s dodatočnými parametrami, ktore menia jej nastavenie a ovplyvňujú finálny vysledok 
výsledného grafu (viď help k príslušnej funkcii). Je dôležité tieto parametre poznať a náležite ich pri práci aj využívať. 
<hr size="3" width="100%" noshade style="color:#440000" align="left" /><br><br>

### <font color = "#880000">2. Použitie na reálnych datach</font>

Z datovych súborov, ktoré sú defaultne k dispozícii v štandardnej inštalácii programu R (príkaz `data()`) si vyberte jeden datový súbor 
a pomocou grafických nástrojov zostrojte niekoľko obrázkov, ktoré nejakým spôsobom vypovedajú o nameraných hodnotách. Pomocov príkazov a funkcii z tretej kategórie (`postscript()`, `pdf()`, `dev.off()` a pod.) tieto obrázky uložte. 

```{r, eval=FALSE}
pdf("obrazok1.pdf", width = 6, height = 4)
par(mfrow = c(1,2))
hist(Orange[,"circumference"], col = "lightblue", xlab = "Circumference [cm]", ylab = "Frequency", freq = F, main = "")
lines(density(Orange[,3]), col = "red", lwd = 2, lty = 2)
barplot(Orange[,3], col = sort(rep(1:5,7)), xlab = "Measurements by Trees", ylab = "Circumference [cm]")
dev.off()
```

<br><br>

#### <font color = "#880000">Užitočné</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<ul>
<li> Ako už bolo uvedené, v programe R je k dispozícii celá škála rôznych balíčkov a knižníc, z ktorých su mnohé
venované aj grafike. Podrobnosti sú napr. na webovej stranke <a href = "http://www.r-graph-gallery.com">http://www.r-graph-gallery.com</a>.
</li>
<li> Vôčšína z uvedených príkladov vyžaduje inštaláciu potrebnej knižnice (package) - inštalácia pomocou príkazu `install.packages()` a 
následna inicializácia knižnice pomocou príkazu `library()`. 
</li>
</ul>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<br>


## <font color = "#880000">Domáca úloha</font>
### (Deadline: 3. cvičenie | Po: 07.11.2016)

Použijte stejný datový súbor, ktorý ste použili pri prvej domácej úlohe (výpočet základných popisných charakteritik)
a k napočítaným popisným štatistikam vytvorte vhodný graf (obrárok), na ktorom bude možné spočítané hodnoty vizuálne 
odčítať a v kontexte súboru dat interpretovať. 

<ul>
<li> Skript, v ktorom počítate základne popisné charakteristiky v datach, doplňte o časti kódu, ktorý bude vytvárať príslušne obrázky. </li>
<li> Vytvorené grafické výstupy náležite okomentujte a finálne grafy uložte ako <i>eps</i>, alebo <i>pdf</i> súbory.</li>
<li> Výsledný R skript si opäť uložte (napr. ako 'Rskript.R', alebo plain txt 'Rskript.txt'). V prípade, že si skript uložíte ako 'R script' (súbor 'menoSuboru.R'), je možné tento súbor priamo načítať do programu R pomocou príkazu `source("menoSuboru.R")`.<br>
Po načítaní súboru programautomaticky spracuje predpripravené príkazy. </li>
</ul>

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