---
title: "Analýza a vizualizace ekonomických dat"
author: "Michal Kvasnička a Štěpán Mikula"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, message = FALSE)
```

## Co se naučíte?

Tento dokument ukazuje několik příkladů toho, co se můžete naučit v předmětu Analýza a vizualizace ekonomických dat.
Celý dokument je vytvořen pomocí RMarkdownu (13. přednáška), který umožňuje do jednoho souboru spojit psaný text a analýzu dat. Na zdrojový kód, který byl použit pro vytvoření této stránky se můžete podívat [zde](https://is.muni.cz/auth/el/1456/podzim2016/BPE_AVED/um/62799066/priklad_analyzy_a_vizualizace_dat.Rmd).

```{r data_libraries, echo=FALSE}
library(magrittr)
library(dplyr)
library(tidyr)
library(ggplot2)
library(stargazer)
library(knitr)

pandoc.output.format <- function(){
  t <- knitr::opts_knit$get('rmarkdown.pandoc.to')
  if(is.null(t) || !(t %in% c("html", "latex"))){t <- "text"}
  return(t)
}

data("diamonds")
```



## Data a základní operace s daty

Co je náplní kurzu prakticky ukážeme na datasetu "diamonds", který obsahuje údaje o `r nrow(diamonds)` diamantech. Data jsou uložena v tabulce, která je uložena v tabulce (`data.frame`) `diamonds` v následujícím formátu:

```{r data_table}
diamonds %>% print(n=5)
```

Program R umožňuje s daty lehce manipulovat. Jednoduše si můžete zúžit původní data podle vybraných kritérií. Například se můžeme podívat na cenu a váhu u nejlépe zbarvených kamenů:
```{r data_filter}
diamonds %>% filter(color=="D") %>% select(color,price,carat) %>% print(n=5)
```

Data lze i jednoduše řadit. Například je možné se podívat na ty nejdražší kameny:
```{r data_arrange}
diamonds %>% arrange(desc(price)) %>% print(n=5)
```

Jednotlivé operace lze kombinovat do větších celků. Například je možné vybrat nejdražší kámen pro každou barvu:
```{r data_groupby}
diamonds %>% group_by(color) %>% arrange(desc(price)) %>% slice(1L)
```

Data lze jednoduše agregovat. Například spočítat průměrnou cenu pro každou barvu kamenů.
```{r data_summarise}
diamonds %>% group_by(color) %>% summarise(average_price=mean(price,na.rm=TRUE))
```

Kritéria lze i kombinovat. Následující tabulka obsahuje průměrnou cenu kamene pro kombinaci barvy a řezu (pro stručnost je vypsáno jen prvních 10 řádků):
```{r data_summarise2}
diamonds %>% group_by(color,cut) %>% summarise(average_price=mean(price,na.rm=TRUE)) %>% print(n=10)
```



## Vykreslení dat

R obsahuje mocné nástroje pro vizualizaci dat a jejich vztahů. Například odhad hustoty rozdělení ceny pro jednotlivé řezy kamenů.
```{r gr_scatter, fig.width=7, fig.height=4}
diamonds %>% 
  ggplot(aes(price,fill=cut)) + 
  geom_density(alpha=0.35) +
  theme_bw()
```

Vzhled grafů lze modifikovat a přidávat dodatečné funkce -- v tomto případě vyhlazení. Všimněte si, že R nemá problém s češtinou.
```{r gr_scatter2, fig.width=6, fig.height=4}
diamonds %>% 
  ggplot(aes(x=carat,y=price)) + 
  geom_point(alpha=0.05) +
  geom_smooth() +
  xlab("váha") + ylab("cena") +
  theme_bw()
```

Vykreslovat lze i vztahy kategoriálních proměnných. Například vztah ceny podle barvy kamene ve formě boxplotu...
```{r gr_boxplot, fig.width=6, fig.height=4}
diamonds %>% 
  ggplot(aes(color,y=price)) + 
  geom_boxplot() +
  theme_bw()
```

...nebo vykreslením zvláštního grafu pro každou barvu.
```{r gr_scatter3, fig.width=8, fig.height=6}
diamonds %>% 
  ggplot(aes(x=carat,y=price)) + 
  geom_point(alpha=0.05) +
  facet_wrap(~color) +
  theme_bw()
```

## Regrese
V diplomových a bakalářských pracích budete často potřebovat provést kvantitativní analýzu dat. S R to není problém. Například ukážeme odhad rovnice vysvětlující cenu diamantů jejich charakteristikami (váhou, řezem, barvou, jasností a velikostí):
$$price = \alpha + \beta carat + \mathbf{\gamma cut} + \epsilon table + \varepsilon$$
```{r lm}
model <- price ~ carat + cut + table
lm(model, diamonds) -> em
```

Proměnné `cut`, `color` a `clarity` jsou kategoriální. R je automaticky převede na vektor umělých proměnných (a jednu z nich vypustí). Výsledky regrese se dají zobrazit v přehledné tabulce:
```{r stargazer, results='asis', echo=FALSE}
stargazer(em, type=pandoc.output.format(), df=FALSE, notes.append = FALSE, notes="", header=FALSE)
```

Často potřebujete porovnat model odhadnuté v různých specifikacích. Například by mohlo být zajímavé nahradit proměnnou `table` jiným měřítkem velikosti kamene.
```{r lm2}
model <- list(
  model,
  model %>% update(.~.-table+depth),
  model %>% update(.~.-table+x),
  model %>% update(.~.-table+y),
  model %>% update(.~.-table+z)
)

lapply(model,function(x) lm(x, data=diamonds)) -> em
```

A výsledky lze opět porovnat v přehledné tabulce...
```{r stargazer2, results='asis', echo=FALSE}
stargazer(em, type=pandoc.output.format(), df=FALSE, notes.append = FALSE, notes="", header=FALSE)
```



