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

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

## <font color = "#880000">I. Štatistický software R (úvod a základy)</font>

Účelom prvého cvičenia z predmetu NMSA230 je oboznámiť sa so štatistickým softwarom R (R Development Core Team, 2016), ktorý je 
najčastejšie používaným softwarovým nástrojom určeným k spracovaniu, príprave a následnej štatistickej analýze dat. Jedná sa 
o GNU projekt, podobný programu  S a primárne je navrhnutý a určený pre štatisticku analýzu dat. 

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>). Jednotlivé R knižnice sú tvorené samotnými užívateľmi softwaru R a ich správne 
fungovanie nie je garantované - je preto namieste určitá opatrnosť a hlavne aktívne premýšľanie 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 najlepších R interfacov je <a href = "https://www.rstudio.com">RStudio</a>.<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>
V nasledujúcom uvedieme niekoľko jednoduchých príkladov a úloh, ktoré maju primárne slúžiť
ako názorné ukážky toho, ako funguje program R, ako sa v ňom implementuju jednotlivé príkazy a 
akym spôsobom načítať vlastny datový súbor (nejedná sa ale o kompletný súhrn jdnotlivých možnosti, 
ktoré sú v programe R k dispozícii).

V prípade potreby/záujimu je možné využiť podrobnejšieho "sprievodcu" na cestu základmi Rka: <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>)<br><br>


### <font color = "#880000">1. Základné matematické operácie v R</font>

```{r, eval=FALSE}
2 + (4 * 5)^2 ## za '#' nasleduje komentar, ktory R ignoruje
1:5 * 2
rep(4,3)
```

Výsledky je možné vždy uložiť do nejakého vhodne zvoleného objektu, na ktorý sa následne môžeme odvolávať. 

```{r, eval=FALSE}
v1 <- 2 + (4 * 5)^2 ## za '#' nasleduje komentar, ktory R ignoruje
v2 <- 1:5 * 2
v3 <- seq(1,5, length = 3)
v4 <- rep(4,3)
```

Jednotlivé výsledky je možné kombinovať a opäť uložiť ako nový výsledok (resp. prepísať pôvodný).

```{r, eval=FALSE}
v1 + v2
v5 <- v3 - 2
v5 <- v5 * 2
```

<br><br>

#### <font color = "#880000">Užitočné</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
Program R je objektový nástroj a zvláda aj matematické operacie, ktoré štandardne nie sú definované. 
Napr. súčet dvoch vektorov, ktoré maj rôznu dĺžku, operácie s maticami, ktoré maju rôzne typy/dimenzie. Je podstatné správne pochopiť, 
ako R v takýchto prípadoch funguje. Zabráni sa možným problémom v budúcnosti a v mnohých prípadoch to zase na druhu stranu može zjednodušiť výpočet a ušetriť čas. 

<ul>
<li>V programe R existuje niekoľko prikazov, ktoré vytvoria vektor: napr. `c()`, `seq()`, `rep()`, `repliate()` a pod.; </li>
<li>Podobne existuje niekoľko príkazov, ktoré vytvoria maticu: napr. `cbind()`, `rbind()`, `matrix()`, a pod.; </li>
<li>Ku každému príkazu v R je k dispozícii návod, ako príkaz funguje - help sa zavolá zadaním samotného príkazu, ktorému predchádza otazník: napr. `?c()`, `?seq()`, `?rep()`; </li>
</ul>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<br>


### <font color = "#880000">2. Práca s vektormi a maticami</font>
V prípade, že máme v objektoch uložené nejake štruktúry (vektor, maticu, pole, list, atď.), je možné sa v Rku odkazovať 
aj na jednotlivé elementy v daných objektoch. 

```{r, eval=FALSE}
v3[1] ### zobrazi prvu zlozku vektora v3
v3[-c(2,3)] ### rovnaky vystup, vektor v3 bez druhej a tretej zlozky
```

A to isté platí aj pre matice (a analogicky aj pre pole).

```{r, eval=FALSE}
m1 <- rbind(v3, v3 * 2, v3 * 3)
m1[1:2,1:2] ## elementy z prveho a druheho riadku a stlpca matice m1
```

Príkazy je možné ľubovoľne kombinovať a vytvárať nové, zložitejšie objekty. 
```{r, eval=FALSE}
m2 <- rbind(cbind(m1[1:2,1:2], c(0,0)), seq(10,11, length = 3))
l1 <- list(m1, m2) ## list, ktory obsahuje dve rozne matice, m1 a m2
l1[[2]][1,] # vypise na obrazovku prvy riadok matice m2 
```

<br><br>

#### <font color = "#880000">Užitočné</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<ul>
<li> Pre maticové násobenie je užitočné poznať operátor `%*%`, ktorý výnasobi dve matice (ak majú správne rozmery). 
Vhodnosť rozmerov sa jednoducho skontroluje pomocou príkazu `dim()` (užitočne je poznať tiež príkazy `nrow()` a `ncol()`).</li>
<li>Štandardne binárne operátory `+`, `-`, `*`, `/`, `^` fungujú 'po zložkách' - toto 'fungovanie' je ale R-špecifické - porovnajte nasledujúce výstupy:
```{r, eval=FALSE}
1:4 + 1 ### sucet po zlozkach
1:4 * 1:2 ### nasobenie po zlozkach v paroch (dlzka jedneho vektora je celociselny nasobok dlzky druheho)
1:4 / 1:4 ### nasobenie v paroch (rovnake dlzky oboch vektorov)
1:5 + 1:2 ## Error - preco?
```
</li>
</ul>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<br>


### <font color = "#880000">3. Náhodné data - generátory náhodných čísel</font>
Program R je primárne štatistický nástroj - umožňuje preto aj prácu s náhodnymi hodnotami. Implementované je celá rada rôznych generátorov 
náhodných čísel. Pre rôzne pravdepodobnostné rozdelenia sú k dispozícii príslušne generátory, ktoré simulujú náhodné hodnoty z daného pravdepodobnostného rozdelenia. 

<ul>
<li> <b>Diskrétne rozdelenia:</b> `rbinom()`,  `rpois()`, `rgeom()`,  a ďalšie;</li>
<li> <b>Spojité rozdelenia:</b> `runif()`,  `rexp()`, `rnorm()`,  a ďalšie;</li>
</ul>

Pre správne použitie geneátorov je potrebné preštudovať prislušný návod - napr. `?rnorm` zobrazí help pre generátor náhodných čísel s normálnym rozdelením. Je vhodné si tiež všimnúť, že existujú podobné príkazy, označené ako `pnorm()`, `dnorm()` a `rnorm()`, ktoré postupne značia 
distribučnú funkciu daného rozdelenia, hustotu a kvantilovú funkciu. <br><br>



#### <font color = "#880000">Užitočné</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<ul>
<li> Je nutné dôsledne si preštudovať implementáciu jednotlivých generátorov a funkcií, ktoré súvisia s 
pravdepodobnostnými rozdeleniami - je totiž pomerne časté, že parametre, ktoré špecifikujú nejaké rozdelenie, majú iný význam. Napríklad:
```{r, eval=FALSE}
rnorm(10, 0, 2) ## simuluje 10 pozorovani z N(0, 4) - sigma^2 = 4
rexp(10, 4) ## simuluje 10 pozorovani z Exp(lambda = 4), kde EX = 1/4
```
</li>
</ul>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<br>


### <font color = "#880000">4. Reálne data - načítanie vlastných datových súborov</font>

V prvom rade, v programe R je k dispozícii niekoľko skutočných datových súborov. Ich zoznam je možne zobrazit 
zavolaním príkazu `data()`. Konkrétny datovy súbor následne zobrazíme pomocou názvu prislušného súboru - napr. `Orange`. Vo väčšíne 
sa jedná o data.frame - resp. datovu maticu. Na rozdiel od klasickej matice umožňuje data.frame rôzne datové typy v jednotlivých stĺpcoch. 

```{r, eval=FALSE}
stlpec1 <- seq(1:5)
stlpec2 <- c(rep("male", 3), rep("female", 2))
stlpec3 <- c("a", "b", "c", "d", "e")

### nie je mozne vytvorit maticu
cbind(stlpec1, stlpec2, stlpec3)
### ale je mozne vytvorit data.frame
data.frame(stlpec1, stlpec2, stlpec3)
```

K načítaniu vlastných datových súborov slúži niekoľko príkazov. V programe R je technicky možné načítať vpodstate akýkoľvek datovy súbor (txt, csv, xls, ale aj jpg, png, mp3 a mnoho ďalších). Najčastejšie používané sú `read.table()` a `read.csv()`, ktoré vyžaduju súbor uložený vo formáte txt resp. csv. Dodatočné parametre je možné využiť pri volani príkazu - tieto parametre upresňujú format súboru a spôsob načítania do R. Viac podrobnosti v príslušnom helpe `?read.table` prípadne `?read.csv`. <br><br>

#### <font color = "#880000">Užitočné</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<ul>
<li> Program R umožňuje priamo načítať aj online zdroje. Potrebné je iba špecifikovať link a použiť vhodny príkaz. Napríklad:</li>
</ul>

```{r}
test.data <- read.table("http://www.karlin.mff.cuni.cz/~maciak/NMSA407/NMSA407-1617-HW1.txt", header=T)
```
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<br>


### <font color = "#880000">5. Štatistická analýza dat</font>
V programe R máme momentálne v objekte `test.data` načítaný datový súbor. Jedné sa o niekoľko pozorovaní a niekoľko sledovaných premenných. 
Niečo o datovom súbore zistíme pomocou nasledujúcich príkazov: 
```{r}
dim(test.data)
head(test.data)
summary(test.data)
```

Na jednotlivé premenné sa môžeme odkazovať pomocou ich názvu. Môžeme takto spočítať základne emirické charakteristiky pre jednotlivé premenné. 
V programe R je k tomu celá rada rôznych funkcii: `mean()`, `median()`, `min()`, `max()`, `sd()`, `var()`, a mnoho ďalších. Pomocou helpu naštudujte, k čomu jednotlivé funkcie slúžia, ako sú v R implementované a nájdite ďalšie užitočné funkcie, ktoré sú vhodné pre základnú štatisticku analýzu dat. 

```{r, eval=FALSE}
mean(test.data$waitingTime)
```

Analogicky, ako v prípade vektorov a matíc môžeme odkazovať len na určitú časť datového súboru a spočítať empirické charakteristiky 
len pre konkrétnu skupinu: 

```{r, eval=FALSE}
mean(test.data$waitingTime[test.data$driverGender == "male"])
mean(test.data$waitingTime[test.data$driverGender == "female"])
```

<br><br>

#### <font color = "#880000">Užitočné</font>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<ul>
<li> Pomocou helpu naštudujte, k čomu slúžia funcie `apply()`, `tapply()`, `aggregate()` a `by()`;</li>
<li> Použijte tieto funkcie v súvislosti s datovým súborom 'test.data' a pomocou nich spočítajte niektoré empirické charakteristiky;</li>
<li> V pripade, že pracujeme v programe R len s jednym datovým súborom, je možné prácu (resp. implementáciu príkazov) mierne zjednodušiť - pomocou príkazu `attach(test.data)` program R zprístupni jednotlivé premenné, ktoré je potom možne volať priamo pomocou ich názvu:
```{r, eval=FALSE}
attach(test.data)
mean(waitingTime[driverGender == "male"])
mean(waitingTime[driverGender == "female"])
```
V prípade, že takto zprístupnene premenné už neplánujeme využívať, je dobre využiť komplementárny príkaz `detach()`.
</li>
<li> Je dôležité správne pochopiť fungovanie Rka a odkazovanie na premenné po použití príkazu `attach()`. Program R totiž zprístupni premenne v stave, v akom sa v momente volania príkazu `attach()` aktuálne nachádzaju v data.frame. Akýkoľvek následný  zásah do data.framu a zmena hodnôt v ňom, nebude reflektovaná ak sa na premennu odkážeme pomocou jej názvu a nie priamo cez odkaz na data.frame;</li>
</ul>
<hr size="3" width="100%" noshade style="color:#440000" align="left" />
<br>


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

Z datových súborov, ktoré sú defaultne k dispozícii v štandardnej inštalácii programu R (zoznam sa zobrazí po zadaní príkazu `data()`) si vyberte jeden datový súbor, ktorý obsahuje asponň dve numerické (spojité) premenné a aspoň dve kategorické (faktorové) premenné.

<ul>
<li> V programe R si pripravde jednoduchý skript, v ktorom spočítate základne popisné charakteristiky v datach. </li>
<li> Využijte faktorové premenné v datach a pomocou nich definujte podskupiny, v ktorých taktiež spočítate príslušné výberové charakteristiky.</li>
<li> Výsledný R skript si 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>