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