Resume Buku: Quantitative Economics with R by Vikram Dayal

Author

Nurul Yasin Gaea

Published

May 30, 2025

1 Kata Pengantar

Puji syukur saya panjatkan ke hadirat Tuhan Yang Maha Esa atas limpahan rahmat dan karunia-Nya sehingga saya dapat menyelesaikan penyusunan resume buku Quantitative Economics with R: A Data Science Approach karya Vikram Dayal ini dengan lancar. Resume ini disusun sebagai upaya untuk memahami lebih dalam konsep dan aplikasi metode kuantitatif dalam ilmu ekonomi dengan pendekatan data science berbasis perangkat lunak R

Buku ini merupakan penghargaan terhadap kontribusi global dari ilmuwan, ekonom, dan komunitas data science. Penulis mengakui inspirasi dari tokoh-tokoh besar seperti Daron Acemoglu, Esther Duflo, Judea Pearl, Hadley Wickham, dan lainnya. Mereka telah membentuk dasar teori dan praktik dalam analisis data, kausalitas, dan pemrograman. Pengalaman penulis di Institute of Economic Growth memberikan landasan akademik dan praktis dalam menyusun buku ini. Buku ini juga merupakan hasil kolaborasi tidak langsung dengan komunitas pengguna R global.

Akhir kata, saya mengucapkan terima kasih kepada semua pihak yang telah memberikan dukungan moral maupun teknis dalam proses penyusunan resume ini. Semoga ringkasan ini dapat bermanfaat bagi para pembaca, khususnya mahasiswa, dosen, peneliti, dan praktisi yang tertarik pada ekonomi kuantitatif dan data science.

Tak lupa, saya ucapkan terima kasih yang sebesar-besarnya kepada Dr. Indraswati T.R., S.E., M.A., selaku ketua Program Studi Magister Ekonomi Pembanguan dan Perencanaan Universitas Hasanuddin dan Dr. Ir. Muhammad Jibril Tajibu, S.E., M.Si., selaku dosen pengampuh mata kuliah yang telah memberikan bimbingan dan inspirasi dalam penyusunan resume buku ini. Kami juga berterima kasih kepada semua pihak yang telah memberikan dukungan, baik secara langsung maupun tidak langsung, hingga resume ini dapat dipublikasikan. Makassar, Mei 2025 Nurul Yasin Gaea

2 Pendahuluan

Pendahuluan menjelaskan pendekatan data science untuk ekonomi kuantitatif, penggunaan R, dan struktur buku. Disarankan untuk membaca sambil praktik langsung di RStudio, termasuk eksplorasi fungsi dan visualisasi data.

3 BAB 1: Introduction

Memperkenalkan pendekatan data science dalam ekonomi dengan R, pentingnya visualisasi dan wrangling data, serta gambaran isi buku secara keseluruhan.

3.1 1. Pendekatan Ilmu Data

Pendekatan ilmu data dalam ekonomi mencakup integrasi statistik, ilmu komputer, dan ilmu ekonomi. R digunakan sebagai alat utama dalam buku ini, dengan dukungan dari ekosistem tidyverse.

“Kemampuan memahami dan mengekstrak nilai dari data akan menjadi keterampilan penting di masa depan.” — Hal Varian

Buku ini menekankan pentingnya tidak hanya statistik, tetapi juga kemampuan visualisasi dan komunikasi data.

3.2 2. Ikhtisar Isi Buku

3.2.1 2.1 Bagian 1: Pengantar R dan tidyverse

  • Cocok untuk pemula.
  • Fokus pada input data, wrangling, dan visualisasi.
  • Tersedia latihan praktis “Your Turn”.

3.2.2 2.2 Bagian 2: Wrangling dan Visualisasi

  • Visualisasi efektif membutuhkan data yang telah dirapikan.
  • Diperkenalkan pula konsep data jaringan (network data).

3.2.3 2.3 Bagian 3: Matematika Dasar

  • Penerapan matematika numerik dalam R.
  • Fokus pada persamaan beda (difference equations).

3.2.4 2.4 Bagian 4: Inferensi Statistik

  • Menggunakan simulasi untuk menjelaskan konsep statistik.
  • Metode: Central Limit Theorem, bootstrap, randomization.
  • Inferensi kausal menggunakan:
    • Eksperimen
    • Regresi
    • Regression Discontinuity
    • Difference-in-Differences
    • Instrumental Variables
  • Dibahas juga: Matching, Sensitivity Analysis, Manski Bounds.

3.2.5 2.5 Bagian 5: Pertumbuhan Ekonomi

  • Visualisasi fakta-fakta pertumbuhan.
  • Studi kasus: Acemoglu et al. (2001) tentang peran institusi.

3.2.6 2.6 Bagian 6: Data Time Series

  • Grafik dan analisis runtun waktu dasar.
  • Pembedaan antara deskripsi, prediksi, dan inferensi kausal.

3.2.7 2.7 Bagian 7: Pembelajaran Mesin Statistik

  • Teknik modern: GAMs dan Random Forests.
  • Pembelajaran mesin sebagai pelengkap ekonometrika klasik.

3.3 3. Cara Menggunakan Buku

  • Gunakan RStudio untuk mengetik dan menjalankan kode.
  • Eksplorasi dan eksperimen dengan kode sangat disarankan.
  • Gunakan latihan “Your Turn” untuk latihan praktis.

3.4 4. Bantuan dalam R

help(mean)       # Membuka dokumentasi fungsi
help.start()     # Membuka manual R lengkap

3.5 5. Format dan Contoh Kode

Struktur umum:

objek_baru <- function(objek_lama, informasi, opsi)

Contoh:

# Membuat vektor dan mengakses elemen
Price <- c(21, 31, 34)
Price[3]
[1] 34
# Membaca data dan mengambil kolom kedua
myfile <- read.csv("C:/Users/Nurul Yasin Gaea/Downloads/ilovepdf_split-range (1)/UjiCoba.csv")
Warning in read.table(file = file, header = header, sep = sep, quote = quote, :
incomplete final line found by readTableHeader on 'C:/Users/Nurul Yasin
Gaea/Downloads/ilovepdf_split-range (1)/UjiCoba.csv'
second.column <- myfile[, 2]

# Visualisasi
x=1
y=1
z=1
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.2     ✔ tibble    3.2.1
✔ lubridate 1.9.4     ✔ tidyr     1.3.1
✔ purrr     1.0.4     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
ggplot(myfile, aes(x = x)) + geom_histogram()
Warning in geom_histogram(): All aesthetics have length 1, but the data has 2 rows.
ℹ Please consider using `annotate()` or provide this layer with data containing
  a single row.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggplot(myfile, aes(x = x, y = y)) + geom_point()
Warning in geom_point(): All aesthetics have length 1, but the data has 2 rows.
ℹ Please consider using `annotate()` or provide this layer with data containing
  a single row.

# Regresi linear
reg.mod <- lm(y ~ x + z, data = myfile)
summary(reg.mod)

Call:
lm(formula = y ~ x + z, data = myfile)

Residuals:
ALL 1 residuals are 0: no residual degrees of freedom!

Coefficients: (2 not defined because of singularities)
            Estimate Std. Error t value Pr(>|t|)
(Intercept)        1        NaN     NaN      NaN
x                 NA         NA      NA       NA
z                 NA         NA      NA       NA

Residual standard error: NaN on 0 degrees of freedom

3.6 6. Referensi

  • Grolemund, G. & Wickham, H. (2017). R for Data Science. O’Reilly.
  • Angrist, J.D. & Pischke, J. (2015). Mastering Metrics. Princeton University Press.
  • Acemoglu, D., Johnson, S., & Robinson, J.A. (2001). The Colonial Origins of Comparative Development.
  • Varian, H. (2014). Big Data: New Tricks for Econometrics. JEP.

4 BAB 2: RStudio and R

Dasar penggunaan R dan RStudio, objek penting dalam R (vector, matrix, data frame, list), serta pengantar tidyverse dan model regresi.

4.1 1. Mengenal R dan RStudio

  • R: perangkat lunak statistik yang gratis dan open source.
  • RStudio: antarmuka pengguna grafis (GUI) yang memudahkan penggunaan R.

Tampilan RStudio terdiri dari: - Script editor (kiri atas): tempat menulis kode. - Console (kiri bawah): tempat melihat output. - Environment/History (kanan atas): menampilkan objek yang dibuat. - Plots/Files/Packages/Help (kanan bawah): untuk grafik, file, dokumentasi.

4.2 2. Menggunakan Projects dan Script

Fitur Project membantu organisasi file. Gunakan file skrip (.R) untuk mengetik dan menjalankan perintah secara terstruktur.

2 + 3
[1] 5
## [1] 5

4.3 3. Objek di R

4.3.1 3.1 Vektor

Price <- c(10,3,15)
Quantity <- c(25,3,20)
Expenditure <- Price * Quantity
sum(Expenditure)
[1] 559

4.3.2 3.2 Matriks

Matrix_PQE <- matrix(data = cbind(Price, Quantity, Expenditure), ncol=3)
Matrix_PQE[1,2]
[1] 25

4.3.3 3.3 Data Frame

Exp_data <- data.frame(Price, Quantity)
Exp_data$Quantity
[1] 25  3 20

4.3.4 3.4 List

Expenditure_list <- list(Price, Quantity, Expenditure, sum(Expenditure))
Expenditure_list[[2]]
[1] 25  3 20

4.4 4. Contoh Sederhana: Net Present Value

Menghitung nilai saat ini dari pembayaran masa depan:

Amount <- 121
discount_rate <- 0.10
time <- 2
NPV <- Amount / (1 + discount_rate)^time

Contoh dengan profil biaya dan manfaat:

Cost_benefit_profile <- c(-150,135,140)
time_profile <- c(0,1,2)
Net_present_value <- sum(Cost_benefit_profile / (1 + discount_rate)^time_profile)
round(Net_present_value, 0)
[1] 88

4.5 5. Pendekatan Tidyverse

4.5.1 5.1 Workflow Analisis Data

  1. Masukkan data ke R
  2. Rapikan dan transformasi
  3. Visualisasi dan model
  4. Komunikasi hasil

4.5.2 5.2 Instalasi dan Penggunaan

# install.packages("tidyverse")
library(tidyverse)

4.5.3 5.3 Contoh Data Sintetis

labour <- tibble(
  surv_id = 1:6,
  payment = c(1000,700,600,1200,800,500),
  hours = c(7,5,3,6,7,4),
  gender = c("F","M","F","M","M","M"),
  age = c(28,52,37,35,59,43)
)

4.5.4 5.4 Lima Data Verbs

labour %>% filter(gender == "F")
# A tibble: 2 × 5
  surv_id payment hours gender   age
    <int>   <dbl> <dbl> <chr>  <dbl>
1       1    1000     7 F         28
2       3     600     3 F         37
labour %>% mutate(wage = payment/hours)
# A tibble: 6 × 6
  surv_id payment hours gender   age  wage
    <int>   <dbl> <dbl> <chr>  <dbl> <dbl>
1       1    1000     7 F         28  143.
2       2     700     5 M         52  140 
3       3     600     3 F         37  200 
4       4    1200     6 M         35  200 
5       5     800     7 M         59  114.
6       6     500     4 M         43  125 
labour %>% arrange(hours)
# A tibble: 6 × 5
  surv_id payment hours gender   age
    <int>   <dbl> <dbl> <chr>  <dbl>
1       3     600     3 F         37
2       6     500     4 M         43
3       2     700     5 M         52
4       4    1200     6 M         35
5       1    1000     7 F         28
6       5     800     7 M         59
labour %>% select(hours, gender)
# A tibble: 6 × 2
  hours gender
  <dbl> <chr> 
1     7 F     
2     5 M     
3     3 F     
4     6 M     
5     7 M     
6     4 M     
labour %>% group_by(gender) %>% summarize(mean_hours = mean(hours))
# A tibble: 2 × 2
  gender mean_hours
  <chr>       <dbl>
1 F             5  
2 M             5.5

4.5.5 5.5 Visualisasi dengan ggplot2

ggplot(labour, aes(x = age, y = payment/hours)) +
  geom_point(aes(colour = gender)) +
  facet_wrap(~gender)

4.5.6 5.6 Model Linier

fit <- lm(payment/hours ~ age, data = labour)
summary(fit)

Call:
lm(formula = payment/hours ~ age, data = labour)

Residuals:
      1       2       3       4       5       6 
-37.780   4.483  36.283  32.523  -8.072 -27.437 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)  233.276     57.844   4.033   0.0157 *
age           -1.880      1.326  -1.417   0.2293  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 34.06 on 4 degrees of freedom
Multiple R-squared:  0.3343,    Adjusted R-squared:  0.1679 
F-statistic: 2.009 on 1 and 4 DF,  p-value: 0.2293

4.6 6. Daftar Pustaka

5 BAB 3: Getting Data into R

Cara mengimpor data ke R dari berbagai sumber: CSV, Stata, dan WDI (World Bank).

5.1 1. Pendahuluan

Bab ini menjelaskan berbagai cara untuk memasukkan data ke dalam R, yang merupakan langkah awal penting dalam analisis data.

5.2 2. Data di R atau Paket R

5.2.1 2.1 Data Internal R

Contoh data: anscombe

data(anscombe)
ans <- anscombe
str(ans)
'data.frame':   11 obs. of  8 variables:
 $ x1: num  10 8 13 9 11 14 6 4 12 7 ...
 $ x2: num  10 8 13 9 11 14 6 4 12 7 ...
 $ x3: num  10 8 13 9 11 14 6 4 12 7 ...
 $ x4: num  8 8 8 8 8 8 8 19 8 8 ...
 $ y1: num  8.04 6.95 7.58 8.81 8.33 ...
 $ y2: num  9.14 8.14 8.74 8.77 9.26 8.1 6.13 3.1 9.13 7.26 ...
 $ y3: num  7.46 6.77 12.74 7.11 7.81 ...
 $ y4: num  6.58 5.76 7.71 8.84 8.47 7.04 5.25 12.5 5.56 7.91 ...
head(ans)
  x1 x2 x3 x4   y1   y2    y3   y4
1 10 10 10  8 8.04 9.14  7.46 6.58
2  8  8  8  8 6.95 8.14  6.77 5.76
3 13 13 13  8 7.58 8.74 12.74 7.71
4  9  9  9  8 8.81 8.77  7.11 8.84
5 11 11 11  8 8.33 9.26  7.81 8.47
6 14 14 14  8 9.96 8.10  8.84 7.04

5.2.2 2.2 Data dari Paket

Contoh paket: wooldridge

library(wooldridge)
data(injury)
str(injury)
'data.frame':   7150 obs. of  30 variables:
 $ durat   : num  1 1 84 4 1 1 7 2 175 60 ...
 $ afchnge : int  1 1 1 1 1 1 1 1 1 1 ...
 $ highearn: int  1 1 1 1 1 1 1 1 1 1 ...
 $ male    : int  1 1 1 1 1 1 1 1 1 1 ...
 $ married : int  0 1 1 1 1 1 1 1 1 1 ...
 $ hosp    : int  1 0 1 1 0 0 0 1 1 1 ...
 $ indust  : int  3 3 3 3 3 3 3 3 3 3 ...
 $ injtype : int  1 1 1 1 1 1 1 1 1 1 ...
 $ age     : int  26 31 37 31 23 34 35 45 41 33 ...
 $ prewage : num  405 644 398 528 529 ...
 $ totmed  : num  1188 361 8964 1100 373 ...
 $ injdes  : int  1010 1404 1032 1940 1940 1425 1110 1207 1425 1010 ...
 $ benefit : num  247 247 247 247 212 ...
 $ ky      : int  1 1 1 1 1 1 1 1 1 1 ...
 $ mi      : int  0 0 0 0 0 0 0 0 0 0 ...
 $ ldurat  : num  0 0 4.43 1.39 0 ...
 $ afhigh  : int  1 1 1 1 1 1 1 1 1 1 ...
 $ lprewage: num  6 6.47 5.99 6.27 6.27 ...
 $ lage    : num  3.26 3.43 3.61 3.43 3.14 ...
 $ ltotmed : num  7.08 5.89 9.1 7 5.92 ...
 $ head    : int  1 1 1 1 1 1 1 1 1 1 ...
 $ neck    : int  0 0 0 0 0 0 0 0 0 0 ...
 $ upextr  : int  0 0 0 0 0 0 0 0 0 0 ...
 $ trunk   : int  0 0 0 0 0 0 0 0 0 0 ...
 $ lowback : int  0 0 0 0 0 0 0 0 0 0 ...
 $ lowextr : int  0 0 0 0 0 0 0 0 0 0 ...
 $ occdis  : int  0 0 0 0 0 0 0 0 0 0 ...
 $ manuf   : int  0 0 0 0 0 0 0 0 0 0 ...
 $ construc: int  0 0 0 0 0 0 0 0 0 0 ...
 $ highlpre: num  6 6.47 5.99 6.27 6.27 ...
 - attr(*, "time.stamp")= chr "25 Jun 2011 23:03"
names(injury)
 [1] "durat"    "afchnge"  "highearn" "male"     "married"  "hosp"    
 [7] "indust"   "injtype"  "age"      "prewage"  "totmed"   "injdes"  
[13] "benefit"  "ky"       "mi"       "ldurat"   "afhigh"   "lprewage"
[19] "lage"     "ltotmed"  "head"     "neck"     "upextr"   "trunk"   
[25] "lowback"  "lowextr"  "occdis"   "manuf"    "construc" "highlpre"

5.3 3. Data dari File CSV

Contoh data: Chhatre dan Agrawal (2009)

library(readr)
ifri_car_liv <- read_csv("C:/Users/Nurul Yasin Gaea/Downloads/ilovepdf_split-range (1)/UjiCoba.csv")
Rows: 2 Columns: 3
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): 'x'
dbl (2): 78, 12

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
str(ifri_car_liv)
spc_tbl_ [2 × 3] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ 'x': chr [1:2] "'y'" "'z'"
 $ 78 : num [1:2] 85 93
 $ 12 : num [1:2] 20 23
 - attr(*, "spec")=
  .. cols(
  ..   `'x'` = col_character(),
  ..   `78` = col_double(),
  ..   `12` = col_double()
  .. )
 - attr(*, "problems")=<externalptr> 

5.4 4. Data dari File Stata

library(haven)
ifri_car_liv <- read_dta("C:/Users/Nurul Yasin Gaea/Downloads/ilovepdf_split-range (1)/rice.dta")
str(ifri_car_liv)
tibble [352 × 6] (S3: tbl_df/tbl/data.frame)
 $ firm : num [1:352] 1 1 1 1 1 1 1 1 2 2 ...
  ..- attr(*, "label")= chr "firm number = 1 to 44"
  ..- attr(*, "format.stata")= chr "%9.0g"
 $ year : num [1:352] 1990 1991 1992 1993 1994 ...
  ..- attr(*, "label")= chr "year = 1990 to 1997"
  ..- attr(*, "format.stata")= chr "%9.0g"
 $ prod : num [1:352] 7.87 7.18 8.92 7.31 7.54 ...
  ..- attr(*, "label")= chr "Rice production (tonnes)"
  ..- attr(*, "format.stata")= chr "%9.0g"
 $ area : num [1:352] 2.5 2.5 2.5 2.5 2.5 ...
  ..- attr(*, "label")= chr "Area planted to rice (hectares)"
  ..- attr(*, "format.stata")= chr "%9.0g"
 $ labor: num [1:352] 160 138 140 127 145 123 123 87 184 151 ...
  ..- attr(*, "label")= chr "Hired + family labor (person days)"
  ..- attr(*, "format.stata")= chr "%9.0g"
 $ fert : num [1:352] 208 296 362 338 338 ...
  ..- attr(*, "label")= chr "Fertilizer applied (kilograms)"
  ..- attr(*, "format.stata")= chr "%9.0g"
 - attr(*, "notes")= chr [1:2] "Data source: These data were used by O\x92Donnell, C.J. and W.E. Griffiths (2006),  Estimating State-Contingent Production Fron "1"

5.5 5. Data dari World Development Indicators (WDI)

5.5.1 5.1 Mencari Indikator

library(WDI)
WDIsearch("gdp.*capita.*PPP")
                 indicator                                                 name
692     6.0.GDPpc_constant GDP per capita, PPP (constant 2011 international $) 
13792    NY.GDP.PCAP.PP.CD        GDP per capita, PPP (current international $)
13793    NY.GDP.PCAP.PP.KD  GDP per capita, PPP (constant 2021 international $)
13794 NY.GDP.PCAP.PP.KD.87  GDP per capita, PPP (constant 1987 international $)
13795 NY.GDP.PCAP.PP.KD.ZG                GDP per capita, PPP annual growth (%)
WDIsearch("CO2.*capita")
                indicator
7017       EN.ATM.CO2E.PC
7033       EN.ATM.METH.PC
7044       EN.ATM.NOXE.PC
7080 EN.GHG.ALL.PC.CE.AR5
7102 EN.GHG.CO2.PC.CE.AR5
                                                                           name
7017                                     CO2 emissions (metric tons per capita)
7033                        Methane emissions (kt of CO2 equivalent per capita)
7044         Nitrous oxide emissions (metric tons of CO2 equivalent per capita)
7080 Total greenhouse gas emissions excluding LULUCF per capita (t CO2e/capita)
7102 Carbon dioxide (CO2) emissions excluding LULUCF per capita (t CO2e/capita)

5.5.2 5.2 Mengunduh Data

wdi_data <- WDI(indicator = c("NY.GDP.PCAP.PP.KD", "EN.ATM.CO2E.PC"),
                start = 2010, end = 2010, extra = TRUE)
Warning in WDI(indicator = c("NY.GDP.PCAP.PP.KD", "EN.ATM.CO2E.PC"), start = 2010, : The following indicators could not be downloaded: EN.ATM.CO2E.PC.

Please make sure that you are running the latest version of the `WDI` package, and that the arguments you are using in the `WDI()` function are valid.

Sometimes, downloads will suddenly stop working, even if nothing has changed in the R code of the WDI package. ("The same WDI package version worked yesterday!") In those cases, the problem is almost certainly related to the World Bank servers or to your internet connection.

You can check if the World Bank web API is currently serving the indicator(s) of interest by typing a URL of this form in your web browser:

https://api.worldbank.org/v2/en/country/all/indicator/EN.ATM.CO2E.PC?format=json&date=:&per_page=32500&page=1
names(wdi_data)
 [1] "country"           "iso2c"             "iso3c"            
 [4] "year"              "NY.GDP.PCAP.PP.KD" "status"           
 [7] "lastupdated"       "region"            "capital"          
[10] "longitude"         "latitude"          "income"           
[13] "lending"          

5.6 6. Daftar Pustaka

Referensi penting untuk impor data: - Grolemund & Wickham (2017) – R for Data Science - Paket R: - wooldridge (Shea, 2018) - readr (Wickham et al., 2018) - haven (Wickham & Miller, 2019) - WDI (Arel-Bundock, 2019)

5.7 7. Kesimpulan

Bab ini memperkenalkan berbagai cara memuat data ke dalam R, baik dari: - data internal R, - dataset dari paket, - file CSV, - file Stata, - hingga data dari World Bank.

Pemahaman terhadap berbagai cara ini sangat penting sebelum melakukan analisis lebih lanjut.

6 BAB 4: Wrangling and Graphing Data

Pengolahan dan visualisasi data menggunakan ggplot2, termasuk data karbon dan penghasilan, serta peta dunia.

6.1 1. Pendahuluan

Bab ini menunjukkan pentingnya grafik dan transformasi data (wrangling) dalam ilmu data, serta menunjukkan bahwa analisis visual seringkali memberikan wawasan mendalam terhadap data.

6.2 2. Contoh: Data Sintetis Anscombe

Menggunakan dataset anscombe untuk menunjukkan bahwa statistik deskriptif yang serupa bisa memiliki grafik yang sangat berbeda.

library(tidyverse)
data(anscombe)
ans <- as_tibble(anscombe)

6.2.1 2.1 Rangkuman Statistik

ans %>% summarize(mean.x1 = mean(x1), sd.x1 = sd(x1))
# A tibble: 1 × 2
  mean.x1 sd.x1
    <dbl> <dbl>
1       9  3.32

6.2.2 2.2 Regresi dan Visualisasi

mod1 <- lm(y1 ~ x1, data = ans)
ggplot(ans, aes(x = x1, y = y1)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE)
`geom_smooth()` using formula = 'y ~ x'

6.3 3. Contoh: Data Hutan dan Mata Pencaharian

Menggunakan data dari Chhatre & Agrawal (2009) terkait hutan, karbon, dan kesejahteraan lokal.

6.3.1 3.1 Pembersihan dan Transformasi

ifri <- read_csv("C:/Users/Nurul Yasin Gaea/Downloads/ilovepdf_split-range (1)/xxxx.csv") %>%
  slice(1:80) %>%
  rename(carbon = zbio, liveli = zliv)

6.3.2 3.2 Visualisasi Dasar

ggplot(ifri, aes(x = liveli)) + geom_histogram()
ggplot(ifri, aes(y = liveli)) + geom_boxplot() + coord_flip()

6.3.3 3.3 Interaksi Variabel

ifri2 <- mutate(ifri, f_own_rule = case_when(
  ownstate == 1 & rulematch == 0 ~ "State_low",
  ownstate == 1 & rulematch == 1 ~ "State_high",
  ownstate == 0 & rulematch == 1 ~ "Com_high",
  TRUE ~ "Com_low"
))

Visualisasi kompleks:

ggplot(ifri2, aes(x = liveli, y = carbon, size = lnfsize, colour = f_own_rule)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE)

6.4 4. Contoh: Data WDI (GDP dan Emisi CO2)

6.4.1 4.1 Pengambilan dan Persiapan Data

library(WDI)
library(tidyverse)

wdi_data <- WDI(indicator = c("NY.GDP.PCAP.PP.KD", "EN.ATM.CO2E.PC"),
                start = 2010, end = 2010, extra = TRUE) %>%
  filter(region != "Aggregates") %>%
  rename(GDPpercap = NY.GDP.PCAP.PP.KD,
         Emit_CO2percap = EN.ATM.CO2E.PC)

6.4.2 4.2 Visualisasi dan Skala Log

ggplot(wdi_data, aes(x = GDPpercap, y = Emit_CO2percap)) +
  geom_point() +
  scale_x_log10() + scale_y_log10() +
  geom_smooth(se = FALSE)

6.4.3 4.3 Pemetaan Geografis

library(maps)
library(countrycode)

map_data <- map_data("world") %>%
  mutate(ccode = countrycode(region, "country.name", "wb"))
wdi_data$ccode <- countrycode(wdi_data$country, "country.name", "wb")

merged <- full_join(map_data, wdi_data, by = "ccode")

ggplot(merged, aes(x = long, y = lat, group = group, fill = log10(GDPpercap))) +
  geom_polygon() +
  scale_fill_gradient(low = "green", high = "red")

6.5 5. Daftar Pustaka

  • DataCamp Course: Introduction to the Tidyverse
  • Grolemund & Wickham (2017): R for Data Science
  • Healy (2019): Data Visualization: A Practical Introduction

6.6 6. Kesimpulan

Visualisasi membantu mengungkapkan pola tersembunyi, dan wrangling mempersiapkan data agar siap dianalisis. Kombinasi keduanya sangat penting dalam ilmu data ekonomi.

7 BAB 5: Networks

Analisis jaringan sosial dan ekonomi, termasuk jaringan Medici, teroris Bali, dan rantai pasok otomotif.

7.1 1. Pendahuluan

Bab ini membahas analisis data jaringan (network data) dalam konteks ekonomi. Jaringan menggambarkan hubungan antar entitas, seperti individu atau negara, dan penting untuk memahami penyebaran informasi, pengaruh, dan perilaku ekonomi.

7.2 2. Contoh Sederhana dengan Data Sintetis

Menggunakan tidygraph, intergraph, dan ggnetwork untuk membangun dan memvisualisasikan jaringan.

library(tidygraph)

Attaching package: 'tidygraph'
The following object is masked from 'package:stats':

    filter
library(intergraph)
library(ggnetwork)
edge1 <- tibble(from = c("Asif","Deng","Gita","Paul","Sure","Sure"),
                to = c("Gita","Gita","Anne","Anne","Paul","Asif"))
Talk <- tbl_graph(edges = edge1, directed = FALSE)
Talk_n <- asNetwork(Talk)
Talk_g <- ggnetwork(Talk_n)

Visualisasi:

ggplot(Talk_g, aes(x,y,xend=xend,yend=yend)) +
  geom_edges(color="lightgrey") +
  geom_nodes(size=5, alpha=0.6) +
  geom_nodetext(aes(label = vertex.names), color="blue") +
  theme_blank()

7.3 3. Contoh: Medici Network

Menggunakan data historis jaringan pernikahan keluarga bangsawan Florence.

library(netrankr)
data("florentine_m")
class(florentine_m)
[1] "igraph"
flor <- as_tbl_graph(florentine_m)
class(flor)
[1] "tbl_graph" "igraph"   
flor2 <- flor %>% activate(nodes) %>% mutate(degree = centrality_degree())
class(flor2)
[1] "tbl_graph" "igraph"   
flor3 <- as_tibble(flor2) %>% arrange(-degree)
class(flor3)
[1] "tbl_df"     "tbl"        "data.frame"

Visualisasi hubungan kekayaan dan sentralitas (degree):


ggplot(flor3, aes(x = wealth, y = degree, label = name)) +
  geom_point() +
  geom_text_repel()

7.4 4. Contoh: Bali Terrorist Network

Menggunakan data dari UserNetR untuk memvisualisasi jaringan kelompok teroris:

library(UserNetR)
data("Bali")
Bali_t <- as_tbl_graph(Bali)
ggnet(Bali)

7.5 5. Simulasi Pembentukan Jaringan

7.5.1 5.1 Erdos Renyi Model

Model jaringan acak:

rg <- play_erdos_renyi(n = 30, p = 0.2, directed = FALSE)
Warning: `play_erdos_renyi()` was deprecated in tidygraph 1.3.0.
ℹ Please use `play_gnp()` instead.

Distribusi degree:

rg2 <- rg %>% activate(nodes) %>% mutate(Deg = centrality_degree())
rg3 <- as_tibble(rg2)
ggplot(rg3, aes(x = Deg)) + geom_bar()

7.5.2 5.2 Barabasi Albert Model

Model jaringan preferensial:

ba <- play_barabasi_albert(n = 30, power = 1, directed = FALSE)
ba2 <- ba %>% activate(nodes) %>% mutate(Deg = centrality_degree())
ba3 <- as_tibble(ba2)

Perbandingan distribusi:

grid.arrange(ggplot(rg3, aes(x = Deg)) + geom_bar(),
             ggplot(ba3, aes(x = Deg)) + geom_bar(),
             ncol = 2)

7.6 6. Contoh: Jaringan Produksi Komponen Otomotif

Menggunakan data ELEnet16 dari ITNr untuk menggambarkan jaringan global produksi elektronik otomotif.

data("ELEnet16")
ELE <- as_tbl_graph(ELEnet16)
ELE2 <- ELE %>% activate(nodes) %>% mutate(outdeg = centrality_degree(weights = weight, mode = "out")) %>% as_tibble()

Visualisasi dan analisis regional:

ggplot(ELE2, aes(x = outdeg)) + geom_histogram(bins = 30)
ggplot(ELE2, aes(x = region_name, y = outdeg)) + geom_boxplot() + coord_flip()

7.7 7. Kesimpulan

Analisis jaringan memperkaya pemahaman tentang hubungan sosial, ekonomi, dan produksi global. Model simulasi juga memperlihatkan bagaimana jaringan dapat terbentuk melalui mekanisme berbeda.

7.8 8. Sumber Daya

  • Jackson (2008): Social and Economic Networks
  • Luke (2015): A User’s Guide to Network Analysis in R
  • Barabasi (2016): Video “Networks are everywhere”
  • Paket R: tidygraph, intergraph, ggnetwork, UserNetR, ITNr

8 BAB 6: Functions

Membuat dan memvisualisasi fungsi dalam R, fungsi ekonomi (permintaan, penawaran, Cobb-Douglas), dan fungsi loss statistik.

8.1 1. Pendahuluan

Fungsi sangat penting dalam ekonomi, contohnya kurva penawaran-permintaan dan fungsi produksi Cobb–Douglas. Bab ini memperkenalkan cara membuat, memvisualisasikan, dan menerapkan fungsi dalam R.

8.2 2. Membuat Fungsi Sendiri di R

Contoh fungsi sederhana:

add2 <- function(x) { x + 2 }
mult2 <- function(M = 3) { 2 * M }

Fungsi dengan parameter default akan tetap berjalan meski tidak diberi input:

add2()   # Error karena tidak ada default
mult2()  # Berhasil, menghasilkan 6

8.2.1 Latihan:

Scomp <- function(S = 2) { (2 * (S^2)) + (3 * S) + 1 }
Scomp(S = 333)
[1] 222778

8.3 3. Mem-plot Fungsi dengan curve()

curve(expr = 2 - (x + 2)^2, from = -7, to = 3)

curve(expr = 1/(x - 2) + 3, from = -5, to = 5)

curve(expr = (x - 3)*(x + 7), from = -15, to = 15)

8.4 4. Fungsi Kehilangan Statistik (Loss Functions)

Mean dan median dapat dilihat sebagai hasil dari minimisasi fungsi loss: - Mean → Loss = ∑(Ji − x)² - Median → Loss = ∑|Ji − x|

Contoh:

J <- c(1,2,3,3,4)
J2 <- c(1,2,3,3,9)
 mean(J)
[1] 2.6
 ## [1] 2.6
 median(J)
[1] 3
 ## [1] 3
 mean(J2)
[1] 3.6
 ## [1] 3.6
 median(J2)
[1] 3
 ## [1] 3
 curve(abs(J[1]- x) +abs(J[2]-x) +
 abs(J[3]-x) + abs(J[4]- x) +
 abs(J[5]-x), 1, 7,
 ylab ="Loss")
 curve(abs(J2[1]- x) + abs(J2[2]- x) +
 abs(J2[3]- x) +abs(J2[4]- x) +
 abs(J2[5]- x), 1, 7,
 add = TRUE, lty = 2, ylab = "Loss")

8.5 5. Penawaran dan Permintaan

Kurva permintaan dan penawaran:

curve((125 - 6*x)/8, 0, 30)
curve((150 - 6*x)/8, 0, 30, add = TRUE, lty = 2)
curve((12 + 2*x)/5, add = TRUE)

Plot data harga minyak dunia:

Oil <- read_csv("Oil.csv")
ggplot(Oil, aes(x = Year, y = Price_2018)) + geom_line()

8.6 6. Fungsi Produksi Cobb–Douglas

Menggunakan mosaic package:

plotFun(A * (L^0.7) * (K^0.3) ~ L & K, A = 5, filled = FALSE)

Plot 3D:

plotFun(..., surface = TRUE)

8.6.1 Analisis Produksi Apel (Data micEcon)

 data( "appleProdFr86", package = "micEcon" )
 dat <- appleProdFr86
 rm( appleProdFr86 )
  dat$qCap <- dat$vCap / dat$pCap
 dat$qLab <- dat$vLab / dat$pLab
 dat$qMat <- dat$vMat / dat$pMat
  ggplot(dat, aes(y = log(qOut), x = log(qCap))) + geom_point() +
 geom_smooth(method = "lm")
`geom_smooth()` using formula = 'y ~ x'

 ggplot(dat, aes(y = log(qOut), x = log(qLab))) + geom_point() +
 geom_smooth(method = "lm")
`geom_smooth()` using formula = 'y ~ x'

 ggplot(dat, aes(y = log(qOut), x = log(qMat))) + geom_point() +
 geom_smooth(method = "lm")
`geom_smooth()` using formula = 'y ~ x'

8.6.2 Interpretasi Koefisien

  • Kenaikan 1% pada kapital → output naik 0.16%
  • Tenaga kerja → 0.68%
  • Material → 0.63%

8.7 7. Referensi

  • Varian (2014) – Intermediate Economics with Calculus
  • Henningsen (2018) – Intro to Production Analysis with R
  • Klein (1962), Paolino (2017), Leifeld (2013)

9 BAB 7: Difference Equations

Model persamaan beda untuk dinamika stok karbon, populasi ikan, dan polusi.

9.1 1. Pendahuluan

Persamaan beda digunakan untuk memodelkan bagaimana variabel berubah dari waktu ke waktu. Contohnya dalam karbon, stok ikan, dan polusi.

9.2 2. Contoh Sederhana

Model:

 X<-numeric(10)
 X[1]=10
 for(i in 2:10){
 X[i]<-X[i-1]+2
 }
 X
 [1] 10 12 14 16 18 20 22 24 26 28
 ## [1]10121416182022242628
 Time<-1:10
 X_time<-tibble(X,Time)
 ggplot(X_time,aes(x= Time,y=X))+
 geom_line()

Simulasi:

X <- numeric(10)
X[1] = 10
for(i in 2:10){ X[i] <- X[i -1] + 2 }

Visualisasi dengan ggplot2.

9.3 3. Contoh: Stok Karbon Global

Model:

S<-numeric(500)
 E<-numeric(500)
 S[1]<-750
 E[1]<-6.3
 for(i in 2:500){
 E[i]<-E[i-1]
 S[i]<-S[i-1]+E[i-1]-(0.005*S[i-1])
 }
 Time<-1:500
 C_scenario<-tibble(S,Time,E)
 ggplot(C_scenario,aes(x=Time,
 y=S))+
 geom_line()

Simulasi 500 tahun ke depan:

S[1] = 750; E[1] = 6.3
S[i] <- S[i-1] + E[i-1] - 0.005*S[i-1]

Fungsi untuk variasi pertumbuhan emisi:

CO2(growth = 1.014)

9.4 4. Contoh: Stok Ikan

Model:

 CO2<-function(growth=1.014){
 S<-numeric(500)
 E<-numeric(500)
 S[1]<-750
 E[1]<-6.3
 for(i in 2:50){
 E[i]<-E[i-1]*growth
 S[i]<-S[i-1]+E[i-1]-(0.005*S[i-1])
 }
 for(i in 51:500){
 E[i]<-E[i-1]
 S[i]<-S[i-1]+E[i-1]-(0.005*S[i-1])
 }
 Time<-1:500
 C_scenario<-tibble(S,Time,E)
 ggplot(C_scenario,aes(x=Time,
 y=S))+
 geom_line()
 }

Simulasi dan visualisasi stok, pertumbuhan, dan panen dengan fungsi logistic().

9.4.1 Kasus Nyata: North Sea Herring

Model dinamika:

St = St−1 + r*St−1(1 − St−1/L)

Jika tanpa panen, stok naik ke kapasitas maksimal. Jika ada panen (dengan fungsi produksi Cobb-Douglas):

Kt+1 = Kt + n(aK^{b−1}S^g − c/p)
St+1 = St + rS(1 − S/L) − aK^b S^g

Hasil: Jika open access, stok bisa menurun drastis dan punah.

9.5 5. Contoh: Polusi Stok (Stock Pollutant)

9.5.1 Model:

  • Fungsi transformasi: ( (Q_t, S_t) = 0 ), dengan ( Q_t = + m )
  • Akumulasi limbah:
Z[t+1] = Z[t] - γ*Z[t] + N*S
  • Pendapatan perusahaan:
Revenue = pQ - τS

9.5.2 Optimasi oleh Regulator:

Q* = (n²p(δ+γ)γ / (4cN))^{1/3} + m
Tau* = np / (2(Q* - m))

Visualisasi bagaimana Q* dan τ* berubah terhadap tingkat diskonto ( ).

9.6 6. Referensi

  • Bjorndal & Conrad (1987): Dinamika perikanan open access
  • Common & Stagl (2005): Ecological Economics
  • Conrad (2010): Resource Economics

10 BAB 8: Matrices

Operasi matriks dasar, sistem persamaan linear, dan aplikasi pada kemiskinan dan pendapatan relatif.

10.1 1. Pendahuluan

Matrix, vektor, dan skalar adalah representasi data yang umum dalam ilmu sosial dan ekonomi. Matrix menyimpan informasi lebih banyak daripada vektor atau skalar, dan memiliki aturan operasi aljabar tersendiri.

10.2 2. Statistik Sederhana dengan Vektor

x <- c(1,2,3,4,5)
length(x); sum(x); t(x)
[1] 5
[1] 15
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
ones <- rep(1, length(x))
t(x) %*% ones / length(x)  # mean
     [,1]
[1,]    3

Menghitung varians:

dev.x <- x - mean(x)
Var_calc_x <- t(dev.x) %*% dev.x / (length(x) - 1)

10.3 3. Operasi Matriks

A <- matrix(c(4,3,6,4), ncol=2)
B <- matrix(c(2,5,6,1), ncol=2)
M <- A + B; t(A); t(B)
     [,1] [,2]
[1,]    4    3
[2,]    6    4
     [,1] [,2]
[1,]    2    5
[2,]    6    1

10.3.1 Persamaan Linear: AD = C

C <- c(14,10)
D <- solve(A) %*% C  # solusi untuk D

10.4 4. Contoh: Tingkat Kemiskinan dan Pendapatan Relatif

10.4.1 Data

Poverty_rate <- c(...)
Relative_income <- c(...)
Y <- Poverty_rate
One <- rep(1, length(Y))
X <- cbind(One, Relative_income)

10.4.2 Regresi Linier

lm(Poverty_rate ~ Relative_income)

Visualisasi:

ggplot(..., aes(...)) + geom_point() + geom_smooth(...)

10.4.3 Estimasi Koefisien dengan Matriks

matcoeff <- solve(t(X) %*% X) %*% t(X) %*% Y

10.4.4 Mean dan Varians menggunakan Aljabar Matriks

t(Relative_income) %*% One / length(Relative_income)
var(Relative_income)

10.5 5. Referensi

  • Gill (2006) – Essential Mathematics for Political and Social Research
  • Moore & Siegel (2013) – Mathematics for Political and Social Research
  • Sydsaeter & Hammond (1995) – Mathematics for Economic Analysis

11 BAB 9: Statistical Inference

Inferensi statistik berbasis simulasi, bootstrap, dan permutation test. Contoh kasus: layanan Verizon.

11.1 1. Pendahuluan

Bab ini memperkenalkan inferensi statistik melalui simulasi komputer, bootstrap, dan metode permutasi. Dengan pendekatan ini, kita dapat melakukan inferensi tanpa terlalu bergantung pada asumsi distribusi.

11.2 2. Box Models

Menggunakan analogi kotak berisi tiket, seperti [H, T] untuk mewakili pelemparan koin. Simulasi dilakukan menggunakan fungsi sample() di R.

  • Dengan replacement → observasi independen.
  • Tanpa replacement → observasi tergantung.

11.2.1 Distribusi Binomial

Representasi hasil lemparan koin sebagai 0 dan 1. Menjumlahkan hasil dari banyak percobaan mendekati distribusi normal.

Box01 <- c(0,1)
Samp <- sample(Box01, 30, replace = TRUE)
sum(Samp)
[1] 21

11.3 3. Distribusi Sampling

Konsep: distribusi dari statistik (misal: rata-rata) berdasarkan banyak sampel.

11.3.1 Simulasi Dadu Enam Sisi

Box <- rep(1:6, 10000)
sample(Box, size = 16)
 [1] 5 2 3 6 1 3 2 2 6 1 5 2 3 4 6 5

Rata-rata sampel akan mendekati rata-rata populasi.

11.3.2 Fungsi:

samp_dist_mean_fun <- function(Box, samp_size, simuls) { ... }

11.3.3 Distribusi T

Distribusi statistik t dari banyak sampel mengikuti distribusi t bahkan jika populasi tidak normal.

11.4 4. Inferensi dari Satu Sampel

Gunakan lm() untuk mendapatkan mean, t-statistic, dan confidence interval dari satu sampel.

mod_Samp <- lm(Samp ~ 1)
confint(mod_Samp)
                2.5 %    97.5 %
(Intercept) 0.5259585 0.8740415

11.5 5. Confidence Intervals

Simulasi menunjukkan bahwa ~95% dari interval mencakup nilai rata-rata populasi.

conf_lo[i] <- Conf[1]
conf_hi[i] <- Conf[2]

11.6 6. Bootstrap

Metode resampling dari data yang sama dengan replacement untuk membentuk distribusi statistik.

Boot_sample <- sample(Box_Sample1, size = samp_size, replace = TRUE)

11.6.1 Fungsi:

Boot_understand_fun <- function(...) { ... }

11.7 7. Permutation Tests

Digunakan untuk menguji perbedaan antara dua grup. Misalnya, perbedaan skor siswa kelas A dan B.

mean_diff_P[i] <- mean(scores[index_Ap]) - mean(scores[-index_Ap])

P-value dihitung sebagai proporsi perbedaan ekstrem yang melebihi perbedaan yang diamati.

11.8 8. Studi Kasus: Verizon

Uji apakah waktu perbaikan berbeda antara pelanggan internal (ILEC) dan eksternal (CLEC).

  • Uji permutasi untuk trimmed mean.
  • Bootstrap untuk confidence interval.

11.9 9. Contoh Waspada: Data Sintetis

Contoh dari Gelman menunjukkan bahwa data berisik dengan sinyal lemah bisa menyesatkan, bahkan jika hasilnya signifikan secara statistik.

11.10 10. Sumber Daya

  • Freedman et al. (2009) – Statistics
  • Chihara & Hesterberg (2011) – Mathematical Statistics with Resampling and R
  • Kennedy (2003), Bruce & Bruce (2017)

12 BAB 10: Causal Inference

Pendekatan kausal dengan graf, potential outcomes, eksperimen, matching, dan regresi diskontinuitas. Contoh empiris kebijakan publik.

13 BAB 11: Growth Data and Models

Analisis data pertumbuhan GDP dari berbagai negara dan simulasi model Solow dan Romer.

14 BAB 12: Growth Causes

Analisis pengaruh institusi terhadap pertumbuhan, berdasarkan studi AJR dan variabel instrumental.

15 BAB 13: Graphs for Time Series

Visualisasi data runtut waktu: penumpang pesawat, volatilitas saham, inflasi, pengangguran.

16 BAB 14: Basic Time Series Models

Model AR, MA, ARMA, random walk, forecasting inflasi, dan uji kointegrasi.

17 BAB 15: Smoothers and GAMs

Penggunaan smoother dan Generalized Additive Models (GAM) untuk hubungan non-linear.

18 BAB 16: From Trees to Random Forests

Pengantar pohon keputusan dan random forest. Studi kasus: prediksi kredit dan pencemaran arsenik.