class: center, middle, inverse # Эконометрикт R программыг ашиглах ## Card and Krueger (1996) - ийн жишээн дээр ### Д. Хашбаатар ### 2017/01/24 --- # Introduction Хэрэглээний эдийн засагт гарсан хувьсгал - Рандом туршилт (randomised controlled experiment) - Instrumental Variables - Difference-in-Difference - Regression Discontinuity Design - Зан төлөвийн эдийн засаг (behavioral economics). - Machine learning - статистикийн аргачлал: регресс (regression), ангилал(classification) - random forest, bagging, boosting - deep learning, enforcement learning --- class: center # Эмпирик аргууд  --- # Эконометрик ба Статистик - эконометрикт ихэвчлэн шалтгаан, үр дагаварын асуудлууд чухал (causality) - статистикт моделчлол (modelling) - identification of causal effect **Causality**: `\(X\)` хувьсагчийн тодорхой өөрчлөлт, `\(Y\)`-ийн тодорхой, хэмжигдэхүйц өөрчлөлтийг үүсгэж байвал `\(X\)` нь `\(Y\)`-ийн шалтгаан болно гэдэг. **Counterfactual Framework** Counterfactual world: тритмент авсан хүмүүс хэрэвзээ тритмент аваагүй байсан бол `\(Y\)` ямар байх вэ? --- # Reproducible Research - **ШУ Судалгаа**: Таамаг, Туршилт, Анализ, Үр дүнгийн цикл - "full software environment, code, and data that produced the results" (Donoho, 2010) - **Reproducibility**: Яг адил дататай, яг адил алгоритмээр үр дүнг яв цав гаргах (replication) - үндсэн зарчим: дата, код. - үр дүнг гаргах явцад copy-paste орсон байвал reproducible биш --- class: inverse, middle, center # Introduction to R --- class: center # Why R?  [source](http://spectrum.ieee.org/static/interactive-the-top-programming-languages-2016) --- ## R-ийн давуу талууд - **хүчин чадал**: - CRAN-д бүртгэлтэй 7000 орчим package-ууд бол R-ийн гол хүчин чадал юм. - Статистикийн ямар ч тооцоололыг R дээр хийж болно - **үнэгүй**: - MATLAB(student version) 150 ам.доллар, STATA 1200 ам.доллар, GAUSS 1500 ам.доллар, EViews 1400 ам.доллар - **олон хэрэглэгчтэй** - **мэдлэг, чадвар нэмэгдэнэ** - Статистик болон machine learning-ийн мэдлэг нэмэгдэнэ. - Код бичих чадвар сайжрана. --- ## R болон Rstudio компьютерт суулгах - R <http://www.r-project.org> - Rstudio <https://www.rstudio.com/products/RStudio/#Desktop> --- ## Rstudio дээр ажиллах **Source** - Код, комманд оруулах - `Run` or <kbd>ctrl</kbd>+<kbd>enter</kbd> - `R` код, `Rmarkdown` эсвэл `С++` зэрэг хэд хэдэн формат сонгон бичиж болно. **Console** - Гүйцэтгэсэн кодын үр дүн харагдана. **Environment, History** - Тухайн орчинд үүсгэсэн `R object`-уудыг (дата, функц зэрэг) харуулна. `Clear`-г товшиход бүх обьектуудыг устгаж, санах ойг чөлөөлнө. (`rm(list=ls())` коммандтай ижил.) - Гүйцэтгэсэн коммандуудын жагсаалтыг харуулна. **Plot, Packages, Help etc** - Plots дээр графикуудыг үзүүлнэ, формат сонгон хадгалах, өмнөх графикийг үзэх зэрэг сонголттой. - `Packages`дээр аль хэдийн суулгагдсан `package`-уудын жагсаалт гарна. --- class: inverse, middle, center # `R`-ийн үндсэн ажиллагаа --- ## Энгийн арифметик үйлдлүүд `log(), exp(), sin(), asin(), cos(), acos(), tan(), atan(), sign(), sqrt(), abs(), min(), max()` ```r > 1 + 2 + 3 + 4 [1] 10 > (2/3) + 23 [1] 23.66667 > 3^4 [1] 81 > 4^(1/2) [1] 2 > sin(0) [1] 0 > log(1) [1] 0 > pi [1] 3.141593 > exp(1) [1] 2.718282 > log(exp(sin(pi/4)^2) * exp(cos(pi/4)^2)) [1] 1 ``` --- ## Хувьсагчид утга оноох ```r x <- 20 # x-t 20 utga onoono x # ``` ``` ## [1] 20 ``` ```r x + 10 # ``` ``` ## [1] 30 ``` ```r y = exp(1) + 2*x ``` Хувьсагчийн нэрийг ерөнхийдөө дураар сонгож болно. Цифрээр эхэлж болохгүй. --- ## Өгөгдөлийн төрлүүд Өгөгдөлийн хамгийн бага нэгжийн (atomic types) авч болох утгууд үндсэн 4 төрөл байдаг. - тоо (numeric - тоон утга авна) - үсэг (character - үсэг, үг, өгүүлбэр) - логик (logical - `TRUE`, `FALSE`) ```r x <- 1 mode(x) ``` ``` ## [1] "numeric" ``` ```r x <- "Introduction to R" mode(x) ``` ``` ## [1] "character" ``` ```r x <- TRUE mode(x) ``` ``` ## [1] "logical" ``` --- ## Vectors (Вектор) `R`-ийн өгөгдөлийн үндсэн нэгж нь вектор юм. Векторийг гараас оруулахдаа `c` (concatenate) функцыг ашиглана. ```r num_vector <- c(1, 3, 5, 10, 10) # 5 urttai vector uusgene num_vector ``` ``` ## [1] 1 3 5 10 10 ``` ```r char_vector <- c("R", "Matlab", "Python", "Stata") char_vector ``` ``` ## [1] "R" "Matlab" "Python" "Stata" ``` ```r logic_vector <- c(TRUE, FALSE, TRUE) logic_vector ``` ``` ## [1] TRUE FALSE TRUE ``` --- ## Векторийн арифметик - `Matlab`, `Julia`, `numpy` зэрэг бусад төстэй программуудаас ялгаатай нь векторийн бүх арифметик үйлдэл элемент бүрийн хувьд хийгддэг. Ижил урттай 2 векторыг нэмэхэд элемент тус бүрийн нийлбэр вектор үүснэ. ```r x <- c(1, 3, 5, 10, 10) y <- c(1, 2, 3, 4, 5) x + y ``` ``` ## [1] 2 5 8 14 15 ``` ```r x*y ``` ``` ## [1] 1 6 15 40 50 ``` ```r x/y ``` ``` ## [1] 1.000000 1.500000 1.666667 2.500000 2.000000 ``` --- ## Recycling Ялгаатай урттай 2 векторийн хувьд арифметик үйлдэл хийхэд богино урттай нь давтах замаар уртыг нь тэнцүүлжүйлдлийг гүйцэтгэнэ. Үүнийг `recycling` гэж нэрлэдэг. Хэрэв бага урттай векторийн урт нь нийцгүй тохиолдолд сануулга гарна (Warning!) ```r x <- c(1, 2, 3, 4, 5, 6) z <- c(1, 2, 3, 4) x + z ``` ``` ## Warning in x + z: longer object length is not a multiple of shorter object ## length ``` ``` ## [1] 2 4 6 8 6 8 ``` ```r x + 1 ``` ``` ## [1] 2 3 4 5 6 7 ``` --- ## Coercion `R`-вектор объекттой ажиллахад анхаарах гол зүйл: **Векторийн элементүүд бүгд адил төрөл байх ёстой.** Энгийнээр хэлбэл үсэг тоо 2 холилдохгүй байх гол дүрэмтэй. ```r v <- c(1:3, 5, "R", "Rstudio") v ``` ``` ## [1] "1" "2" "3" "5" "R" "Rstudio" ``` ```r mode(v) ``` ``` ## [1] "character" ``` R автоматаар бүх элементийг `character` болгон хувиргах бөгөөд үүнийг `coercion` гэж нэрлэдэг. --- ## Вектор дээр ашиглагдах функцууд ```r x <- c(1, 2, 3) length(x) # векторийн уртыг олно ``` ``` ## [1] 3 ``` ```r sum(x) # векторийн бүх элемэнтийн нийлбэр ``` ``` ## [1] 6 ``` ```r cumsum(x) # хуримтлагдсан нийлбэр ``` ``` ## [1] 1 3 6 ``` ```r mean(x) # дундаж ``` ``` ## [1] 2 ``` ```r sd(x) # стандарт хазайлт ``` ``` ## [1] 1 ``` --- ## Вектор дээр ашиглагдах функцууд `Base R`-д 700 орчим функц бий. Түгээмэл хэрэглэгддэгээс дурдвал `cummax, cummin, cumprod, cumsum, diff, sort, rank, quantile, unique, duplicated, rev, range, rle` зэрэг юм. `R` хэрэглэгч бүр эзэмших шаардлагатай үгийн жагсаалтыг [эндээс](http://adv-r.had.co.nz/Vocabulary.html) харж болно. --- ## Вектор үүсгэх аргууд Зарим тохиолдолд тодорхой зүй тогтолтой вектор үүсгэх хэрэгцээ гарах нь бий. (Simulation, grid-search гэх мэт) **Дараалал** ```r seq(from=1, to=100, by=2) # 1-ээс 100 хүртэлх 2 зайтай тоонууд seq(1, 100, length=20) # 1-ээс 100 хүртэлх ижил зайтай 20 ширхэг тоо 1:10 # 1-ээс 10 хүртэлх бүхэл тоонууд 1:-7 # 1-ээс -7 хүртэлх бүхэл тоонууд ``` **Давтагдсан тоонууд** ```r rep(1:5, 3) # 1:5 векторийг 3 удаа давтана rep(1:5, each=3) # элемент тус бүрийг 3 удаа давтана ``` --- ## Логик харьцаа болоно логик вектор Logical operations `==`, `>=`, `<=`, `>`, `<` ```r x = 10:20 # x <= 14 # x-iin elementuud 14-s baga esehiig iltgeh vector ``` ``` ## [1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE ``` ```r g14 = x > 14 # 14-s ih esehiig iltgeh vector g14 ``` ``` ## [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE ``` Логик векторийн `TRUE` утгуудын индексийг олохын тулд `which()` функцыг ашиглана. Дараахь команд нь `x`-ийн 14-с их элементуудийн дугаарыг олно. ```r which(g14) ``` ``` ## [1] 6 7 8 9 10 11 ``` --- ## Индексээр элементүүд сонгох (subsetting and indexing) Элемент сонгохдоо дөрвөлжин хаалт ашиглана (`[]`) **Дугаараар (бүхэл тоо вектор) сонгох** ```r x[2] # x-ийн 2 дахь элемент ``` ``` ## [1] 11 ``` ```r x[2:4] # x - ийн 2-оос 4дэх элементүүд ``` ``` ## [1] 11 12 13 ``` ```r x[c(1, 4)] # x - ийн 1 дэх болох 4 дэх элементүүд ``` ``` ## [1] 10 13 ``` --- Индексийгсөрөг тоогоор өгвөл тухайн индексээс бусад тоонууд сонгогдоно. ```r x[c(-1, -4)] # x - ийн 1 дэх болон 4 дэх элементүүдээс бусад нь ``` ``` ## [1] 11 12 14 15 16 17 18 19 20 ``` **Логик вектороор сонгох** Логик вектороор сонгохо `TRUE` утгад харгалзах элементүүд сонгогдоно. Өмнөх жишээнд `x`-ийн 14-с их элементүүдийг `x[which(g14)]` гэж олж болох боловч илүү үйлдэл багатайгаар ```r x[g14] ``` ``` ## [1] 15 16 17 18 19 20 ``` **Дасгал: 1-100 хүртэлх бүх сондгой тоог ол** --- ## Санамсаргүй тоо үүсгэх (Random Number Generation) **Дэд-түүвэр сонгох** ```r x <- c(1, 2, 3, 4, 5, 6) #1:6 sample(x, size=3, replace=TRUE) # x-с 3 хэмжээтэй түүвэр буцаалттай сонгох ``` ``` ## [1] 4 4 5 ``` ```r sample(x, size=3, replace=FALSE) # x-с 3 хэмжээтэй түүвэр буцаалтгүй сонгох ``` ``` ## [1] 3 6 1 ``` --- ## (Хуурмаг) санамсаргүй тоо үүсгэх - `?distributions` гэж console-д бичин ашиглаж болох магадлалын тархалтуудыг харж болно. ### `p`, `d`, `r`, `q` тэмдэглэгээ - `pnorm()` бол тархалтын функц (probability distribution буюу cumulative distribution function), - `dnorm` нь тархалтын нягтын функц (`density` function), - `rnorm` санамсаргүй түүвэр үүсгэх функц (`random sample`), - `qnorm` нь квантилийг тооцох фукц болно(quantile function). Нэмэлт сонголтгүй дефолт утга нь стандарт нормал тархалт юм. ```r pnorm(1.96) # стандарт нормал тархалтын функцын 1.96 цэг дээрхи утга pnorm(1.96, mean=1, sd=5) # дундаж, болон стандарт хазайлтыг сонгож болно dnorm(0) qnorm(0.975, mean=1, sd=5) ``` --- - `\(N(1, 2)\)` тархалттай 1000 хэмжээтэй түүвэр үүсгэх ```r normal <- rnorm(1000, mean=1, sd=4) hist(normal) ``` <!-- --> --- - `\(U(0, 4)\)` тархалттай 1000 хэмжээтэй түүвэр үүсгэх ```r uniform <- runif(1000, min=0, max=4) # hist(uniform) ``` <!-- --> --- # Матриц (Matrices and Arrays) Матриц бол хэмжээс (`dim`) гэсэн нэмэлт мэдээлэлтэй (`attributes`) вектор юм. Матриц үүсгэхдээ `matrix` команд ашиглана. Элементүүд баганын дагуу дүүргэгдэнэ. ```r m <- matrix(1:12, ncol=4, nrow=3) m ``` ``` ## [,1] [,2] [,3] [,4] ## [1,] 1 4 7 10 ## [2,] 2 5 8 11 ## [3,] 3 6 9 12 ``` Мөрийн дагуу дүүргэх бол, `byrow=TRUE` сонголтыг нэмэхэд хангалттай. Илүү мэдээллийг console дээр `?matrix` гэж оруулан харж болно. ```r matrix(1:12, ncol=4, nrow=3, byrow = TRUE) ``` ``` ## [,1] [,2] [,3] [,4] ## [1,] 1 2 3 4 ## [2,] 5 6 7 8 ## [3,] 9 10 11 12 ``` --- ## Subsetting `i`-р мөрний `j`-р баганыг `m[i, j]` командаар сонгож болно. ```r m[1:2, 3:4] ``` ``` ## [,1] [,2] ## [1,] 7 10 ## [2,] 8 11 ``` --- ## Матриц дээрхи үйлдлүүд **Үржих үйлдэл** `%*%`: Нийцтэй матриц `\(A\)`, `\(B\)`-ийн хувьд `\(AB\)`-г олно. ```r A <- matrix(1:6, 2, 3) B <- matrix(1:12, 3, 4) A %*% B ``` ``` ## [,1] [,2] [,3] [,4] ## [1,] 22 49 76 103 ## [2,] 28 64 100 136 ``` **Transpose** `\(A'\)` or `\(A^T\)` ```r t(A) ``` ``` ## [,1] [,2] ## [1,] 1 2 ## [2,] 3 4 ## [3,] 5 6 ``` --- `\(Ax=b\)` тэгшитгэлийн шийд ```r A <- matrix(rnorm(9), 3, 3) b <- rnorm(3) sol <- solve(A, b) ``` **Урвуу матриц**: `\(A^{-1}\)`-ийн хувьд `\(AA^{-1}=I\)` биелэх учир ```r solve(A) ``` ``` ## [,1] [,2] [,3] ## [1,] -1.090728 1.049618 0.07366905 ## [2,] -1.509047 1.159322 -1.29927090 ## [3,] -2.771996 1.539846 -0.85387973 ``` - `\(A'B\)`-г бодоход `t(A) %*% B`-с зайлсхийж ```r crossprod(A, B) ``` ``` ## [,1] [,2] [,3] [,4] ## [1,] 5.9721275 15.060616 24.149104 33.23759 ## [2,] -0.2941563 1.679959 3.654075 5.62819 ## [3,] -2.5505353 -8.283627 -14.016718 -19.74981 ``` ```r # A'A bol crossprod(A) ``` - `\(B'*A\)` ```r tcrossprod(t(B), t(A)) ``` ``` ## [,1] [,2] [,3] ## [1,] 5.972127 -0.2941563 -2.550535 ## [2,] 15.060616 1.6799592 -8.283627 ## [3,] 24.149104 3.6540746 -14.016718 ## [4,] 33.237592 5.6281901 -19.749809 ``` --- `\(y=X\beta+u\)` шугаман регрессийн коэффициентийн үнэлгээ `\((X'X)^{-1}X'y\)`-г ```r solve(t(X) %*% X) %*% t(X) %*% y ``` or ```r solve(crossprod(X), crossprod(X, y)) ``` --- ## Матрицийн арифметик үйлдэл болон `apply` - Матриц нь бүтцийн хувьд вектор учир векторийн бүх үйлдэл адилхан үйлчилгээтэй. Жишээ `sum(m)` нь `m` матрицийн бүх элементуудийн нийлбэрийг олно. - Мөр, эсвэл багана болгоноор нийлбэр, дундаж олох шаардлагатай бол`rowSums, colSums, rowMeans, rowSums` функцуудыг ашиглана. - Хэрэв мөр, багана болгоны хувьд ямар нэг функцээр үйлчлэх шаардлагатай үед `apply` функцыг ашиглана. `apply`-г ашиглах ерөнхий формат нь `apply(X, MARGIN, FUN)`. `FUN` нь функц, `MARGIN=1` мөрийн дагуу, `MARGIN=2` бол баганын дагуу бодно. ```r apply(m, 1, min) # багана бүрийн минимум ``` ``` ## [1] 1 2 3 ``` ```r apply(m, 2, max) # мөр бүрийн максимум ``` ``` ## [1] 3 6 9 12 ``` --- ## Шугаман Регресс ```r x <- runif(100, 0, 4) u <- 5*rnorm(100) y <- 3 + 4*x + u fit <- lm(y~x) attributes(fit) ``` ``` ## $names ## [1] "coefficients" "residuals" "effects" "rank" ## [5] "fitted.values" "assign" "qr" "df.residual" ## [9] "xlevels" "call" "terms" "model" ## ## $class ## [1] "lm" ``` ```r fit$coefficients coef(fit) ``` --- ```r plot(x, y, pch=19, col="blue") abline(fit, col="red", lwd=2) ``` <!-- --> --- class: inverse, middle, center # Дата (data.frame object) --- # data.frame (дата) - Дата хадгалах зориулалттай өгөгдлийн бүтцийг `data.frame` гэх бөгөөд багана бүр нь ижил урттай вектороос бүрдэнэ. - Өнгөц харахад `Excel`-ийн хүснэгттэй төстэй. Багана бүр тусдаа вектор учир олон төрөлтэй дата хадгалж болно. - Мөн багана бүр вектор тул нэг баганад зөвхөн нэг төрлийн өгөгдөл хадгалагдана. (`Julia` программын `DataFrames` пакеж, `Python`-ий `pandas` бүгд `R`-ийн data.frame-ийн үндсэн бүтцийг дуурайсан байдаг.) Гараас үүсгэхэд ```r dat <- data.frame(Name = c("Bold","Dulam","Tsetseg"), SID = letters[1:3], Point = c(98, 74, 81), Score = c("A", "D", "B"), stringsAsFactors = FALSE) ``` --- ```r dat ``` ``` ## Name SID Point Score ## 1 Bold a 98 A ## 2 Dulam b 74 D ## 3 Tsetseg c 81 B ``` ```r str(dat) ``` ``` ## 'data.frame': 3 obs. of 4 variables: ## $ Name : chr "Bold" "Dulam" "Tsetseg" ## $ SID : chr "a" "b" "c" ## $ Point: num 98 74 81 ## $ Score: chr "A" "D" "B" ``` ```r nrow(dat) # moriin too ``` ``` ## [1] 3 ``` ```r ncol(dat) # bagany too ``` ``` ## [1] 4 ``` --- ```r names(dat) #bagany ners ``` ``` ## [1] "Name" "SID" "Point" "Score" ``` Баганын нэрийг өөрчлөх ```r names(dat) <- c("Ner", "Dugaar", "Onoo", "Dun") dat ``` ``` ## Ner Dugaar Onoo Dun ## 1 Bold a 98 A ## 2 Dulam b 74 D ## 3 Tsetseg c 81 B ``` --- **Багана сонгох** ```r dat[, 2] # baganyn dugaaraar ``` ``` ## [1] "a" "b" "c" ``` ```r dat$Dugaar # baganyn nereer ``` ``` ## [1] "a" "b" "c" ``` Дээрхи 2 үйлдэл аль аль нь дата.фрамэ биш вектор болохыг анзаараарай. --- ## `data.frame` дээрхи үйлдлүүд `data.frame`--ийн үйлдлүүд хийхийн тулд `base R`-н нилээд олон төрлийн функц мэдэх шаардлагатай.(`aggregate`, `ave`, `xtabs`), - амархан мартагддаг - ашиглахад ярвигтай Сүүлийн үед ашиглахад илүү хялбар, гэүйцэтгэл хурдан `dplyr`, `data.table` гэсэн package-ууд голчлон ашиглагдаж байна. --- ## `R`--ийн орчинд `data.frame` оруулах Set working directory `Session > Set Working Directory > Choose Directory` ##`Rdata` file ```r load("card_krueger.Rdata") ``` ---
--- ### `csv`, `txt` file `csv` (comma-separated values), `txt`, `fwf` (fixed-width file) өргөтгөлтэй файлуудыг `read.table`, `read.csv`, `read.fwf` командаар уншуулна. ```r df <- read.table (file = "filename.csv", header = TRUE, sep = ",", stringsAsFactors = FALSE) ``` --- ### `Stata`, `SPSS`, `SAS` file зэрэг программын файлийг `foreign` package ашиглан уншиж болох боловч `Stata13`-с хойшхи хувилбарын файл болон `SAS`-ийн `SAS7BDAT` форматыг дэмждэггүй. Иймд `RStudio`-оос гаргасан [`haven`](http://blog.rstudio.org/2015/03/04/haven-0-1-0/) package-г ашиглан ачааллах нь тохиромжтой. ```r library(haven) # url <- "http://ocw.mit.edu/courses/economics/14-32-econometrics-spring-2007/assignments/wine.sas7bdat" wine <- read_sas("wine.sas7bdat") #SAS file #url <- "http://wps.aw.com/wps/media/objects/11422/11696965/empirical/empex_tb/cps08.dta" cps8 <- read_stata("cps08.dta") # Stata file ``` --- ### Excel Spreadsheet - Excel-ийн file уншиг `xlsx`, `openxlsx` зэрэг маш олон package бий - Эдгээрээс хамгийн сайн нь `RStudio`-ийн Hadley Wickham гаргасан [`readxl`](http://blog.rstudio.org/2015/04/15/readxl-0-1-0/) юм ```r library(readxl) cig <- read_excel("cig_ch12.xlsx") ``` --- ### Web-Scraping `R` -с web-scraping хийх тийм ч амар биш. [`rvest`](http://blog.rstudio.org/2014/11/24/rvest-easy-web-scraping-with-r/) package бий --- ### API (Эдийн засаг, санхүүгийн дата) - [Google Finance](https://www.google.com/finance), [Yahoo Finance](http://finance.yahoo.com/) дээрхи мэдээллийг [`quantmod`](http://www.quantmod.com/) package-г ашиглан авч болно. Жишээлбэл доорхи кодоор Mongolian Mining Corporation-ий 2010-10-13-с хойшхи өдөр тутмын ханшийг yahoo-с татаж авна. ```r library(quantmod) getSymbols("0975.HK", src= "yahoo", from = "2010-10-13", to ="2017-01-25") tail(`0975.HK`) # toogoor ehelsen ner uchir back-tick ``` - [Bloomberg](http://www.bloomberglabs.com/api/) дээрхи мэдээллийг [`Rblpapi`](http://dirk.eddelbuettel.com/code/rblpapi.html). - [Quandl](https://www.quandl.com/home) site-ийн датаг `Quandl` package ашиглан. Жишээлбэл [Монгол Улсын ДНБ мэдээллийг](https://www.quandl.com/search?query=Mongolian%20GDP) ```r library(Quandl) gdp <- Quandl("WWDI/MNG_NY_GDP_MKTP_KN") head(gdp) ``` --- Дэлхийн банкны (world development indicator) датаг `WDI` package ашиглан татаж болно. Жишээлбэл хэд хэдэн улсын ДНБ-ийн мэдээллийн панел датаг ```r library(WDI) gdps <- WDI(country=c("US", "CA", "GB", "DE", "CN", "JP", "SG", "IL"), indicator=c("NY.GDP.PCAP.CD", "NY.GDP.MKTP.CD"), start=1960, end=2016) names(gdps) <- c("iso2c", "Country", "Year", "PerCapGDP", "GDP") ``` --- class: inverse, middle, center # Data manipulation with dplyr --- ## Verbs - mutate: багана үүсгэх - select: багана сонгох - filter: мөр сонгох - summarise: - group_by: группт хуваан, групп тус бүрийн хувьд үйлдэл хийх ```r library(dplyr) select(cps8, age) filter(cps8, age > 33) summarise(cps8, mean(ahe)) summarise(group_by(cps8, female), mean(age)) summarise(group_by(cps8, bachelor, female), n()) ``` [гарын авлага](http://www.dataschool.io/dplyr-tutorial-for-faster-data-manipulation-in-r/) --- # magrittr piping ```r plot(cumsum(rnorm(100)), type = "l") ``` ```r rnorm(100) %>% cumsum %>% plot(., type="l") ``` <!-- --> --- # dplyr pipeline ```r cps8 %>% selec(age) cps8 %>% filter(age > 33) ``` ```r summarise(group_by(cps8, bachelor, female), n()) cps8 %>% group_by(bachelor, female) %>% summarise(n=n(), dundaj_tsalin=mean(ahe)) ``` --- ## Visualization (if time permits) ```r plot(mtcars`\(disp, mtcars\)`mpg) ``` <!-- --> ```r plot(mtcars`\(disp, mtcars\)`mpg, xlab="Engine displacement", ylab="mpg", main="MPG compared with engine displacement") ``` <!-- --> ```r plot(mtcars`\(disp, mtcars\)`mpg, xlab="Engine displacement", ylab="mpg", main="MPG vs engine displacement", las=1) ``` <!-- --> --- ```r barplot(BOD$demand, main="Graph of demand") ``` <!-- --> --- ```r boxplot(mtcars$mpg) ``` <!-- --> --- ## Нэмэлт материал - [CRAN Task View](https://cran.r-project.org/web/views/) - online courses [coursera](https://www.coursera.org/courses?languages=en&query=R), [edx](https://www.edx.org/course?search_query=R) - Асуулт, хариулт [stackoverflow](http://stackoverflow.com/questions/tagged/r) - Хэрэглээний эконометрик хичээлийн материал [1](http://rpubs.com/Hasha/), [2](http://rpubs.com/khashaa)