RStudio untuk Penelitian Ekonomi dan Bisnis

Data Input merupakan file excel berformat (.xlsx) yang berisi data IHK, Uang Beredar, BI Rate, dan IHSG.

Tahapan Analisis Data

1. Persiapan Data
  • Install Packages ‘openxlsx’ agar dapat membuka data berformat .xlsx
install.packages('openxlsx')
  • Panggil Packages ‘openxlsx’
library(openxlsx)
  • Masukkan File Data Input ke dalam R
dt <- read.xlsx('dataset.xlsx')
  • Install Packages ‘DT’ untuk menampilkan data secara rapi
install.packages('DT')
  • Tampilan Data
library(DT)
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
datatable(dt)
2. Mengubah Format Data Menjadi Time-Series dan Plotting Data
  • Ubah format data menjadi time series
ts_dt <- ts(dt, start=c(2018,1),frequency = 12)
  • Install Packages untuk plotting data
install.packages('ggplot2')
install.packages('forecast')
  • Plotting Data Laju IHK
library(ggplot2)
library(forecast)
autoplot(ts_dt[,'IHK']) +
  ggtitle('IHK Indonesia Januari 2018 - Juli 2023') +
  xlab('Tahun') +
  ylab('IHK') +
  theme_bw()

  • Dekomposisi IHK
autoplot(decompose(ts_dt[,'IHK'])) +
  theme_bw()

  • Plotting Data M2
autoplot(ts_dt[,'M2']) +
  ggtitle('Uang Beredar (M2) di Indonesia Januari 2018 - Juli 2023') +
  xlab('Tahun') +
  ylab('Jumlah Uang Beredar (Trilyun Rupiah)') +
  theme_bw()

  • Dekomposisi Data M2
autoplot(decompose(ts_dt[,'M2'])) +
  theme_bw()

  • Plotting Data IHSG
autoplot(ts_dt[,'IHSG']) +
  ggtitle('IHSG di Indonesia Januari 2018 - Juli 2023') +
  xlab('Tahun') +
  ylab('IHSG (Rupiah)') +
  theme_bw()

  • Dekomposisi Data IHSG
autoplot(decompose(ts_dt[,'IHSG'])) +
  theme_bw()

  • Plotting Semua Grafik
autoplot(ts_dt[,c('M2','Suku.Bunga','IHSG','IHK')],facets=T) +
  ggtitle('IHK, Uang Beredar M2, Suku Bunga, dan IHSG di Indonesia') +
  xlab('Tahun') +
  ylab(NULL) +
  theme_bw()

3. Menampilkan Korelasi Antar Variabel
  • Install packages menampilkan korelasi ‘GGally’
install.packages('GGally')
  • Menampilkan Analisis Korelasi antarvariabel
library(GGally)
ggpairs(as.data.frame(ts_dt[,c('M2','Suku.Bunga','IHSG','IHK')])) +
  theme_bw()

4. Cek Autokrelasi
ggtsdisplay(ts_dt[,'IHK']) + ggtitle('Cek Autokorelasi IHK')

Data IHK tidak Stasioner

ggtsdisplay(ts_dt[,'M2']) + ggtitle('Cek Autokorelasi M2')

Data M2 tidak stasioner

ggtsdisplay(ts_dt[,'Suku.Bunga']) + ggtitle('Cek Suku Bunga IHK')

Data suku bunga tidak stasioner

ggtsdisplay(ts_dt[,'IHSG']) + ggtitle('Cek Autokorelasi IHSG')

Data IHSG tidak stasioner

5. Membuat Model Autoregressive Integrated Moving Average (ARIMA)
  • Auto Arima untuk IHK
fit <- auto.arima(ts_dt[,"IHK"], seasonal=F,trace=T,stepwise = F)

 ARIMA(0,1,0)                               : 63.96537
 ARIMA(0,1,0)            with drift         : 30.1593
 ARIMA(0,1,1)                               : 53.75137
 ARIMA(0,1,1)            with drift         : 31.18333
 ARIMA(0,1,2)                               : 52.96979
 ARIMA(0,1,2)            with drift         : 33.39428
 ARIMA(0,1,3)                               : 47.72036
 ARIMA(0,1,3)            with drift         : 34.36805
 ARIMA(0,1,4)                               : 50.0605
 ARIMA(0,1,4)            with drift         : 35.69836
 ARIMA(0,1,5)                               : 51.36456
 ARIMA(0,1,5)            with drift         : 37.74061
 ARIMA(1,1,0)                               : 47.53273
 ARIMA(1,1,0)            with drift         : 31.09527
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1)            with drift         : 32.62519
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2)            with drift         : 34.9523
 ARIMA(1,1,3)                    : Inf
 ARIMA(1,1,3)            with drift         : 36.19476
 ARIMA(1,1,4)                               : Inf
 ARIMA(1,1,4)            with drift         : 38.13893
 ARIMA(2,1,0)                               : 44.61598
 ARIMA(2,1,0)            with drift         : 33.21201
 ARIMA(2,1,1)                               : Inf
 ARIMA(2,1,1)            with drift         : 34.95499
 ARIMA(2,1,2)                               : 39.27146
 ARIMA(2,1,2)            with drift         : 36.74261
 ARIMA(2,1,3)                               : Inf
 ARIMA(2,1,3)            with drift         : Inf
 ARIMA(3,1,0)                               : 41.30163
 ARIMA(3,1,0)            with drift         : 34.41963
 ARIMA(3,1,1)                               : 43.61032
 ARIMA(3,1,1)            with drift         : 35.85304
 ARIMA(3,1,2)                    : Inf
 ARIMA(3,1,2)            with drift         : 36.98618
 ARIMA(4,1,0)                               : 43.63873
 ARIMA(4,1,0)            with drift         : 35.90691
 ARIMA(4,1,1)                               : 45.86665
 ARIMA(4,1,1)            with drift         : 37.97268
 ARIMA(5,1,0)                               : 41.33319
 ARIMA(5,1,0)            with drift         : 36.67773



 Best model: ARIMA(0,1,0)            with drift         
summary(fit)
Series: ts_dt[, "IHK"] 
ARIMA(0,1,0) with drift 

Coefficients:
       drift
      0.2506
s.e.  0.0363

sigma^2 = 0.08826:  log likelihood = -12.98
AIC=29.97   AICc=30.16   BIC=34.35

Training set error measures:
                      ME      RMSE       MAE           MPE
Training set 0.001469404 0.2926206 0.2256332 -0.0009377039
                  MAPE       MASE      ACF1
Training set 0.2114929 0.07371692 0.1368385
checkresiduals(fit)

    Ljung-Box test

data:  Residuals from ARIMA(0,1,0) with drift
Q* = 11.129, df = 13, p-value = 0.6

Model df: 0.   Total lags used: 13

forecast(fit,h=10) %>% autoplot() + theme_bw() + ylab('IHK')

forecast(fit,h=10) %>% as.data.frame() %>% datatable() %>% 
  formatRound(columns=colnames(forecast(fit,h=10) %>% as.data.frame()),digits = 3)
  • Arima Manual untuk IHK
fit_manual <- Arima(ts_dt[,'IHK'], order=c(1,1,0))
checkresiduals(fit_manual)

    Ljung-Box test

data:  Residuals from ARIMA(1,1,0)
Q* = 18.881, df = 12, p-value = 0.09144

Model df: 1.   Total lags used: 13

forecast(fit_manual,h=10) %>% autoplot() + theme_bw() + ylab('IHK')

forecast(fit_manual,h=10) %>% as.data.frame() %>% datatable() %>% 
  formatRound(columns=colnames(forecast(fit,h=10) %>% as.data.frame()),digits = 3)
  • Auto Seasonal Arima untuk IHK
fit_S <- auto.arima(ts_dt[,"IHK"], seasonal=T,trace=T,stepwise = F)

 ARIMA(0,1,0)                               : 63.96537
 ARIMA(0,1,0)            with drift         : 30.1593
 ARIMA(0,1,0)(0,0,1)[12]                    : 54.13993
 ARIMA(0,1,0)(0,0,1)[12] with drift         : 31.42573
 ARIMA(0,1,0)(1,0,0)[12]                    : 50.56691
 ARIMA(0,1,0)(1,0,0)[12] with drift         : 31.39962
 ARIMA(0,1,0)(1,0,1)[12]                    : Inf
 ARIMA(0,1,0)(1,0,1)[12] with drift         : 33.52479
 ARIMA(0,1,1)                               : 53.75137
 ARIMA(0,1,1)            with drift         : 31.18333
 ARIMA(0,1,1)(0,0,1)[12]                    : 49.72827
 ARIMA(0,1,1)(0,0,1)[12] with drift         : 32.66809
 ARIMA(0,1,1)(1,0,0)[12]                    : 47.40822
 ARIMA(0,1,1)(1,0,0)[12] with drift         : 32.62651
 ARIMA(0,1,1)(1,0,1)[12]                    : Inf
 ARIMA(0,1,1)(1,0,1)[12] with drift         : 34.8635
 ARIMA(0,1,2)                               : 52.96979
 ARIMA(0,1,2)            with drift         : 33.39428
 ARIMA(0,1,2)(0,0,1)[12]                    : 49.06578
 ARIMA(0,1,2)(0,0,1)[12] with drift         : 34.82526
 ARIMA(0,1,2)(1,0,0)[12]                    : 46.44393
 ARIMA(0,1,2)(1,0,0)[12] with drift         : 34.73816
 ARIMA(0,1,2)(1,0,1)[12]                    : Inf
 ARIMA(0,1,2)(1,0,1)[12] with drift         : 36.89772
 ARIMA(0,1,3)                               : 47.72036
 ARIMA(0,1,3)            with drift         : 34.36805
 ARIMA(0,1,3)(0,0,1)[12]                    : 43.72743
 ARIMA(0,1,3)(0,0,1)[12] with drift         : 34.9602
 ARIMA(0,1,3)(1,0,0)[12]                    : 41.53349
 ARIMA(0,1,3)(1,0,0)[12] with drift         : 34.7085
 ARIMA(0,1,3)(1,0,1)[12]                    : 42.4861
 ARIMA(0,1,3)(1,0,1)[12] with drift         : 36.90096
 ARIMA(0,1,4)                               : 50.0605
 ARIMA(0,1,4)            with drift         : 35.69836
 ARIMA(0,1,4)(0,0,1)[12]                    : 46.04979
 ARIMA(0,1,4)(0,0,1)[12] with drift         : 36.24567
 ARIMA(0,1,4)(1,0,0)[12]                    : 43.84213
 ARIMA(0,1,4)(1,0,0)[12] with drift         : 36.05335
 ARIMA(0,1,5)                               : 51.36456
 ARIMA(0,1,5)            with drift         : 37.74061
 ARIMA(1,1,0)                               : 47.53273
 ARIMA(1,1,0)            with drift         : 31.09527
 ARIMA(1,1,0)(0,0,1)[12]                    : 46.27816
 ARIMA(1,1,0)(0,0,1)[12] with drift         : 32.54956
 ARIMA(1,1,0)(1,0,0)[12]                    : 44.74604
 ARIMA(1,1,0)(1,0,0)[12] with drift         : 32.49737
 ARIMA(1,1,0)(1,0,1)[12]                    : 44.9799
 ARIMA(1,1,0)(1,0,1)[12] with drift         : 34.71532
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1)            with drift         : 32.62519
 ARIMA(1,1,1)(0,0,1)[12]                    : 36.22448
 ARIMA(1,1,1)(0,0,1)[12] with drift         : 33.69162
 ARIMA(1,1,1)(1,0,0)[12]                    : 35.85543
 ARIMA(1,1,1)(1,0,0)[12] with drift         : 33.50995
 ARIMA(1,1,1)(1,0,1)[12]                    : 37.2407
 ARIMA(1,1,1)(1,0,1)[12] with drift         : 35.48998
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2)            with drift         : 34.9523
 ARIMA(1,1,2)(0,0,1)[12]                    : 38.53287
 ARIMA(1,1,2)(0,0,1)[12] with drift         : 36.05997
 ARIMA(1,1,2)(1,0,0)[12]                    : 38.05073
 ARIMA(1,1,2)(1,0,0)[12] with drift         : 35.83026
 ARIMA(1,1,2)(1,0,1)[12]                    : 39.22798
 ARIMA(1,1,2)(1,0,1)[12] with drift         : 37.74478
 ARIMA(1,1,3)                    : Inf
 ARIMA(1,1,3)            with drift         : 36.19476
 ARIMA(1,1,3)(0,0,1)[12]                    : 45.93221
 ARIMA(1,1,3)(0,0,1)[12] with drift         : 36.56609
 ARIMA(1,1,3)(1,0,0)[12]                    : 40.0253
 ARIMA(1,1,3)(1,0,0)[12] with drift         : 36.2986
 ARIMA(1,1,4)                               : Inf
 ARIMA(1,1,4)            with drift         : 38.13893
 ARIMA(2,1,0)                               : 44.61598
 ARIMA(2,1,0)            with drift         : 33.21201
 ARIMA(2,1,0)(0,0,1)[12]                    : 43.39623
 ARIMA(2,1,0)(0,0,1)[12] with drift         : 34.53657
 ARIMA(2,1,0)(1,0,0)[12]                    : 41.99017
 ARIMA(2,1,0)(1,0,0)[12] with drift         : 34.41978
 ARIMA(2,1,0)(1,0,1)[12]                    : 42.51044
 ARIMA(2,1,0)(1,0,1)[12] with drift         : 36.54602
 ARIMA(2,1,1)                               : Inf
 ARIMA(2,1,1)            with drift         : 34.95499
 ARIMA(2,1,1)(0,0,1)[12]                    : 38.53893
 ARIMA(2,1,1)(0,0,1)[12] with drift         : 36.07173
 ARIMA(2,1,1)(1,0,0)[12]                    : 38.0803
 ARIMA(2,1,1)(1,0,0)[12] with drift         : 35.85353
 ARIMA(2,1,1)(1,0,1)[12]                    : 39.30966
 ARIMA(2,1,1)(1,0,1)[12] with drift         : 37.80028
 ARIMA(2,1,2)                               : 39.27146
 ARIMA(2,1,2)            with drift         : 36.74261
 ARIMA(2,1,2)(0,0,1)[12]                    : Inf
 ARIMA(2,1,2)(0,0,1)[12] with drift         : 37.95994
 ARIMA(2,1,2)(1,0,0)[12]                    : 40.28788
 ARIMA(2,1,2)(1,0,0)[12] with drift         : 37.8167
 ARIMA(2,1,3)                               : Inf
 ARIMA(2,1,3)            with drift         : Inf
 ARIMA(3,1,0)                               : 41.30163
 ARIMA(3,1,0)            with drift         : 34.41963
 ARIMA(3,1,0)(0,0,1)[12]                    : 38.54012
 ARIMA(3,1,0)(0,0,1)[12] with drift         : 34.76954
 ARIMA(3,1,0)(1,0,0)[12]                    : 37.05266
 ARIMA(3,1,0)(1,0,0)[12] with drift         : 34.38598
 ARIMA(3,1,0)(1,0,1)[12]                    : 38.16694
 ARIMA(3,1,0)(1,0,1)[12] with drift         : 36.28734
 ARIMA(3,1,1)                               : 43.61032
 ARIMA(3,1,1)            with drift         : 35.85304
 ARIMA(3,1,1)(0,0,1)[12]                    : 39.60608
 ARIMA(3,1,1)(0,0,1)[12] with drift         : 35.49473
 ARIMA(3,1,1)(1,0,0)[12]                    : 37.91567
 ARIMA(3,1,1)(1,0,0)[12] with drift         : 35.10857
 ARIMA(3,1,2)                    : Inf
 ARIMA(3,1,2)            with drift         : 36.98618
 ARIMA(4,1,0)                               : 43.63873
 ARIMA(4,1,0)            with drift         : 35.90691
 ARIMA(4,1,0)(0,0,1)[12]                    : 40.63615
 ARIMA(4,1,0)(0,0,1)[12] with drift         : 35.84255
 ARIMA(4,1,0)(1,0,0)[12]                    : 38.9049
 ARIMA(4,1,0)(1,0,0)[12] with drift         : 35.46566
 ARIMA(4,1,1)                               : 45.86665
 ARIMA(4,1,1)            with drift         : 37.97268
 ARIMA(5,1,0)                               : 41.33319
 ARIMA(5,1,0)            with drift         : 36.67773



 Best model: ARIMA(0,1,0)            with drift         
summary(fit_S)
Series: ts_dt[, "IHK"] 
ARIMA(0,1,0) with drift 

Coefficients:
       drift
      0.2506
s.e.  0.0363

sigma^2 = 0.08826:  log likelihood = -12.98
AIC=29.97   AICc=30.16   BIC=34.35

Training set error measures:
                      ME      RMSE       MAE           MPE
Training set 0.001469404 0.2926206 0.2256332 -0.0009377039
                  MAPE       MASE      ACF1
Training set 0.2114929 0.07371692 0.1368385
checkresiduals(fit_S)

    Ljung-Box test

data:  Residuals from ARIMA(0,1,0) with drift
Q* = 11.129, df = 13, p-value = 0.6

Model df: 0.   Total lags used: 13

forecast(fit_S,h=10) %>% autoplot() + theme_bw() + ylab('IHK')

forecast(fit_S,h=10) %>% as.data.frame() %>% datatable() %>% 
  formatRound(columns=colnames(forecast(fit_S,h=10) %>% as.data.frame()),digits = 3)
  • Auto Arima untuk M2
fit_M2 <- auto.arima(ts_dt[,"M2"], seasonal=F,trace=T,stepwise = F)

 ARIMA(0,1,0)                               : 816.7799
 ARIMA(0,1,0)            with drift         : 807.9048
 ARIMA(0,1,1)                               : 817.9273
 ARIMA(0,1,1)            with drift         : 801.2732
 ARIMA(0,1,2)                               : 815.024
 ARIMA(0,1,2)            with drift         : 803.4078
 ARIMA(0,1,3)                               : 817.2804
 ARIMA(0,1,3)            with drift         : 803.7743
 ARIMA(0,1,4)                               : 819.5586
 ARIMA(0,1,4)            with drift         : 805.3923
 ARIMA(0,1,5)                               : 818.9004
 ARIMA(0,1,5)            with drift         : 807.8882
 ARIMA(1,1,0)                               : 817.3944
 ARIMA(1,1,0)            with drift         : 800.7321
 ARIMA(1,1,1)                               : 816.9464
 ARIMA(1,1,1)            with drift         : 802.9981
 ARIMA(1,1,2)                               : 817.2764
 ARIMA(1,1,2)            with drift         : 804.0087
 ARIMA(1,1,3)                               : Inf
 ARIMA(1,1,3)            with drift         : Inf
 ARIMA(1,1,4)                               : Inf
 ARIMA(1,1,4)            with drift         : 807.8953
 ARIMA(2,1,0)                               : 815.2402
 ARIMA(2,1,0)            with drift         : 802.9992
 ARIMA(2,1,1)                               : Inf
 ARIMA(2,1,1)            with drift         : Inf
 ARIMA(2,1,2)                               : Inf
 ARIMA(2,1,2)            with drift         : 805.6541
 ARIMA(2,1,3)                               : Inf
 ARIMA(2,1,3)            with drift         : Inf
 ARIMA(3,1,0)                               : 816.2715
 ARIMA(3,1,0)            with drift         : 804.9364
 ARIMA(3,1,1)                    : Inf
 ARIMA(3,1,1)            with drift         : 805.9745
 ARIMA(3,1,2)                               : Inf
 ARIMA(3,1,2)            with drift         : Inf
 ARIMA(4,1,0)                               : 817.6938
 ARIMA(4,1,0)            with drift         : 806.8768
 ARIMA(4,1,1)                    : Inf
 ARIMA(4,1,1)            with drift         : Inf
 ARIMA(5,1,0)                               : 819.9861
 ARIMA(5,1,0)            with drift         : 807.5715



 Best model: ARIMA(1,1,0)            with drift         
summary(fit_M2)
Series: ts_dt[, "M2"] 
ARIMA(1,1,0) with drift 

Coefficients:
          ar1    drift
      -0.3625  45.8975
s.e.   0.1140   9.0043

sigma^2 = 10161:  log likelihood = -397.17
AIC=800.34   AICc=800.73   BIC=806.91

Training set error measures:
                     ME    RMSE      MAE         MPE     MAPE
Training set -0.1224509 98.5202 74.01026 -0.02690376 1.067594
                  MASE        ACF1
Training set 0.1234757 -0.00296349
checkresiduals(fit_M2)

    Ljung-Box test

data:  Residuals from ARIMA(1,1,0) with drift
Q* = 21.628, df = 12, p-value = 0.04191

Model df: 1.   Total lags used: 13

forecast(fit_M2,h=10) %>% autoplot() + theme_bw() + ylab('M2')

forecast(fit_M2,h=10) %>% as.data.frame() %>% datatable() %>% 
  formatRound(columns=colnames(forecast(fit_M2,h=10) %>% as.data.frame()),digits = 3)
  • Auto Seasonal Arima untuk M2
fit_M2_S <- auto.arima(ts_dt[,"M2"], seasonal=T,trace=T,stepwise = F)

 ARIMA(0,1,0)                               : 816.7799
 ARIMA(0,1,0)            with drift         : 807.9048
 ARIMA(0,1,0)(0,0,1)[12]                    : 803.8486
 ARIMA(0,1,0)(0,0,1)[12] with drift         : 798.8955
 ARIMA(0,1,0)(1,0,0)[12]                    : 799.193
 ARIMA(0,1,0)(1,0,0)[12] with drift         : 796.9098
 ARIMA(0,1,0)(1,0,1)[12]                    : Inf
 ARIMA(0,1,0)(1,0,1)[12] with drift         : 799.1764
 ARIMA(0,1,1)                               : 817.9273
 ARIMA(0,1,1)            with drift         : 801.2732
 ARIMA(0,1,1)(0,0,1)[12]                    : 803.0051
 ARIMA(0,1,1)(0,0,1)[12] with drift         : 791.5686
 ARIMA(0,1,1)(1,0,0)[12]                    : 795.9565
 ARIMA(0,1,1)(1,0,0)[12] with drift         : 789.7735
 ARIMA(0,1,1)(1,0,1)[12]                    : Inf
 ARIMA(0,1,1)(1,0,1)[12] with drift         : 792.0481
 ARIMA(0,1,2)                               : 815.024
 ARIMA(0,1,2)            with drift         : 803.4078
 ARIMA(0,1,2)(0,0,1)[12]                    : 800.6183
 ARIMA(0,1,2)(0,0,1)[12] with drift         : 793.4395
 ARIMA(0,1,2)(1,0,0)[12]                    : 794.6645
 ARIMA(0,1,2)(1,0,0)[12] with drift         : 791.3371
 ARIMA(0,1,2)(1,0,1)[12]                    : Inf
 ARIMA(0,1,2)(1,0,1)[12] with drift         : 793.7393
 ARIMA(0,1,3)                               : 817.2804
 ARIMA(0,1,3)            with drift         : 803.7743
 ARIMA(0,1,3)(0,0,1)[12]                    : 802.451
 ARIMA(0,1,3)(0,0,1)[12] with drift         : 792.7162
 ARIMA(0,1,3)(1,0,0)[12]                    : 794.3209
 ARIMA(0,1,3)(1,0,0)[12] with drift         : 789.2983
 ARIMA(0,1,3)(1,0,1)[12]                    : Inf
 ARIMA(0,1,3)(1,0,1)[12] with drift         : 791.7786
 ARIMA(0,1,4)                               : 819.5586
 ARIMA(0,1,4)            with drift         : 805.3923
 ARIMA(0,1,4)(0,0,1)[12]                    : 804.8714
 ARIMA(0,1,4)(0,0,1)[12] with drift         : 794.5953
 ARIMA(0,1,4)(1,0,0)[12]                    : 796.7426
 ARIMA(0,1,4)(1,0,0)[12] with drift         : 791.3529
 ARIMA(0,1,5)                               : 818.9004
 ARIMA(0,1,5)            with drift         : 807.8882
 ARIMA(1,1,0)                               : 817.3944
 ARIMA(1,1,0)            with drift         : 800.7321
 ARIMA(1,1,0)(0,0,1)[12]                    : 801.4298
 ARIMA(1,1,0)(0,0,1)[12] with drift         : 790.2275
 ARIMA(1,1,0)(1,0,0)[12]                    : 793.2994
 ARIMA(1,1,0)(1,0,0)[12] with drift         : 787.8235
 ARIMA(1,1,0)(1,0,1)[12]                    : Inf
 ARIMA(1,1,0)(1,0,1)[12] with drift         : 790.1607
 ARIMA(1,1,1)                               : 816.9464
 ARIMA(1,1,1)            with drift         : 802.9981
 ARIMA(1,1,1)(0,0,1)[12]                    : 802.0482
 ARIMA(1,1,1)(0,0,1)[12] with drift         : 792.4549
 ARIMA(1,1,1)(1,0,0)[12]                    : 793.8329
 ARIMA(1,1,1)(1,0,0)[12] with drift         : 789.6291
 ARIMA(1,1,1)(1,0,1)[12]                    : Inf
 ARIMA(1,1,1)(1,0,1)[12] with drift         : 792.3657
 ARIMA(1,1,2)                               : 817.2764
 ARIMA(1,1,2)            with drift         : 804.0087
 ARIMA(1,1,2)(0,0,1)[12]                    : 802.5546
 ARIMA(1,1,2)(0,0,1)[12] with drift         : 794.4904
 ARIMA(1,1,2)(1,0,0)[12]                    : 795.459
 ARIMA(1,1,2)(1,0,0)[12] with drift         : 791.6121
 ARIMA(1,1,2)(1,0,1)[12]                    : Inf
 ARIMA(1,1,2)(1,0,1)[12] with drift         : 794.375
 ARIMA(1,1,3)                               : Inf
 ARIMA(1,1,3)            with drift         : Inf
 ARIMA(1,1,3)(0,0,1)[12]                    : 804.8742
 ARIMA(1,1,3)(0,0,1)[12] with drift         : 794.8219
 ARIMA(1,1,3)(1,0,0)[12]                    : 796.744
 ARIMA(1,1,3)(1,0,0)[12] with drift         : 791.5384
 ARIMA(1,1,4)                               : Inf
 ARIMA(1,1,4)            with drift         : 807.8953
 ARIMA(2,1,0)                               : 815.2402
 ARIMA(2,1,0)            with drift         : 802.9992
 ARIMA(2,1,0)(0,0,1)[12]                    : 800.7882
 ARIMA(2,1,0)(0,0,1)[12] with drift         : 792.4816
 ARIMA(2,1,0)(1,0,0)[12]                    : 793.4842
 ARIMA(2,1,0)(1,0,0)[12] with drift         : 789.7552
 ARIMA(2,1,0)(1,0,1)[12]                    : Inf
 ARIMA(2,1,0)(1,0,1)[12] with drift         : Inf
 ARIMA(2,1,1)                               : Inf
 ARIMA(2,1,1)            with drift         : Inf
 ARIMA(2,1,1)(0,0,1)[12]                    : Inf
 ARIMA(2,1,1)(0,0,1)[12] with drift         : 794.5513
 ARIMA(2,1,1)(1,0,0)[12]                    : 795.8261
 ARIMA(2,1,1)(1,0,0)[12] with drift         : 791.6086
 ARIMA(2,1,1)(1,0,1)[12]                    : Inf
 ARIMA(2,1,1)(1,0,1)[12] with drift         : 793.9977
 ARIMA(2,1,2)                               : Inf
 ARIMA(2,1,2)            with drift         : 805.6541
 ARIMA(2,1,2)(0,0,1)[12]                    : Inf
 ARIMA(2,1,2)(0,0,1)[12] with drift         : Inf
 ARIMA(2,1,2)(1,0,0)[12]                    : Inf
 ARIMA(2,1,2)(1,0,0)[12] with drift         : Inf
 ARIMA(2,1,3)                               : Inf
 ARIMA(2,1,3)            with drift         : Inf
 ARIMA(3,1,0)                               : 816.2715
 ARIMA(3,1,0)            with drift         : 804.9364
 ARIMA(3,1,0)(0,0,1)[12]                    : 802.5371
 ARIMA(3,1,0)(0,0,1)[12] with drift         : 794.6623
 ARIMA(3,1,0)(1,0,0)[12]                    : 795.8251
 ARIMA(3,1,0)(1,0,0)[12] with drift         : 791.7634
 ARIMA(3,1,0)(1,0,1)[12]                    : Inf
 ARIMA(3,1,0)(1,0,1)[12] with drift         : 794.3689
 ARIMA(3,1,1)                    : Inf
 ARIMA(3,1,1)            with drift         : 805.9745
 ARIMA(3,1,1)(0,0,1)[12]                    : Inf
 ARIMA(3,1,1)(0,0,1)[12] with drift         : Inf
 ARIMA(3,1,1)(1,0,0)[12]                    : Inf
 ARIMA(3,1,1)(1,0,0)[12] with drift         : 793.2387
 ARIMA(3,1,2)                               : Inf
 ARIMA(3,1,2)            with drift         : Inf
 ARIMA(4,1,0)                               : 817.6938
 ARIMA(4,1,0)            with drift         : 806.8768
 ARIMA(4,1,0)(0,0,1)[12]                    : 804.9205
 ARIMA(4,1,0)(0,0,1)[12] with drift         : 796.1133
 ARIMA(4,1,0)(1,0,0)[12]                    : 798.154
 ARIMA(4,1,0)(1,0,0)[12] with drift         : 793.2257
 ARIMA(4,1,1)                    : Inf
 ARIMA(4,1,1)            with drift         : Inf
 ARIMA(5,1,0)                               : 819.9861
 ARIMA(5,1,0)            with drift         : 807.5715



 Best model: ARIMA(1,1,0)(1,0,0)[12] with drift         
summary(fit_M2_S)
Series: ts_dt[, "M2"] 
ARIMA(1,1,0)(1,0,0)[12] with drift 

Coefficients:
          ar1    sar1    drift
      -0.3973  0.4935  42.6043
s.e.   0.1124  0.1117  12.9758

sigma^2 = 7793:  log likelihood = -389.58
AIC=787.17   AICc=787.82   BIC=795.93

Training set error measures:
                   ME    RMSE      MAE        MPE      MAPE
Training set 2.704755 85.6001 65.44454 0.02983104 0.9494215
                 MASE       ACF1
Training set 0.109185 0.01805996
checkresiduals(fit_M2_S)

    Ljung-Box test

data:  Residuals from ARIMA(1,1,0)(1,0,0)[12] with drift
Q* = 11.727, df = 11, p-value = 0.3845

Model df: 2.   Total lags used: 13

forecast(fit_M2_S,h=10) %>% autoplot() + theme_bw() + ylab('M2')

forecast(fit_M2_S,h=10) %>% as.data.frame() %>% datatable() %>% 
  formatRound(columns=colnames(forecast(fit_M2_S,h=10) %>% as.data.frame()),digits = 3)
  • Manual Sarima untuk M2
fit_M2_manual <- Arima(ts_dt[,'M2'], order=c(1,1,0),seasonal=c(1,0,0))
summary(fit_M2_manual)
Series: ts_dt[, "M2"] 
ARIMA(1,1,0)(1,0,0)[12] 

Coefficients:
          ar1    sar1
      -0.3541  0.6249
s.e.   0.1190  0.0956

sigma^2 = 8298:  log likelihood = -393.46
AIC=792.91   AICc=793.3   BIC=799.48

Training set error measures:
                   ME     RMSE      MAE       MPE      MAPE
Training set 27.91175 89.03268 65.95447 0.4248966 0.9617459
                  MASE        ACF1
Training set 0.1100358 -0.04705863
  • Auto SArima untuk IHSG
fit_IHSG_S <- auto.arima(ts_dt[,"IHSG"], seasonal=T,trace=T,stepwise = F)

 ARIMA(0,1,0)                               : 938.6773
 ARIMA(0,1,0)            with drift         : 940.7864
 ARIMA(0,1,0)(0,0,1)[12]                    : 940.7322
 ARIMA(0,1,0)(0,0,1)[12] with drift         : 942.9115
 ARIMA(0,1,0)(1,0,0)[12]                    : 940.7177
 ARIMA(0,1,0)(1,0,0)[12] with drift         : 942.8974
 ARIMA(0,1,0)(1,0,1)[12]                    : 942.962
 ARIMA(0,1,0)(1,0,1)[12] with drift         : 945.2075
 ARIMA(0,1,1)                               : 939.9251
 ARIMA(0,1,1)            with drift         : 942.1006
 ARIMA(0,1,1)(0,0,1)[12]                    : 942.0862
 ARIMA(0,1,1)(0,0,1)[12] with drift         : 944.3352
 ARIMA(0,1,1)(1,0,0)[12]                    : 942.0798
 ARIMA(0,1,1)(1,0,0)[12] with drift         : 944.329
 ARIMA(0,1,1)(1,0,1)[12]                    : 944.3536
 ARIMA(0,1,1)(1,0,1)[12] with drift         : 946.6782
 ARIMA(0,1,2)                               : 942.0624
 ARIMA(0,1,2)            with drift         : 944.3071
 ARIMA(0,1,2)(0,0,1)[12]                    : 944.2931
 ARIMA(0,1,2)(0,0,1)[12] with drift         : 946.615
 ARIMA(0,1,2)(1,0,0)[12]                    : 944.2864
 ARIMA(0,1,2)(1,0,0)[12] with drift         : 946.6086
 ARIMA(0,1,2)(1,0,1)[12]                    : 946.6545
 ARIMA(0,1,2)(1,0,1)[12] with drift         : 949.0539
 ARIMA(0,1,3)                               : 944.1653
 ARIMA(0,1,3)            with drift         : 946.4761
 ARIMA(0,1,3)(0,0,1)[12]                    : 946.4993
 ARIMA(0,1,3)(0,0,1)[12] with drift         : 948.8914
 ARIMA(0,1,3)(1,0,0)[12]                    : 946.4973
 ARIMA(0,1,3)(1,0,0)[12] with drift         : 948.8897
 ARIMA(0,1,3)(1,0,1)[12]                    : 948.8648
 ARIMA(0,1,3)(1,0,1)[12] with drift         : 951.3424
 ARIMA(0,1,4)                               : 945.5913
 ARIMA(0,1,4)            with drift         : 947.9968
 ARIMA(0,1,4)(0,0,1)[12]                    : 948.015
 ARIMA(0,1,4)(0,0,1)[12] with drift         : 950.5041
 ARIMA(0,1,4)(1,0,0)[12]                    : 948.015
 ARIMA(0,1,4)(1,0,0)[12] with drift         : 950.5041
 ARIMA(0,1,5)                               : 939.0305
 ARIMA(0,1,5)            with drift         : 941.0672
 ARIMA(1,1,0)                               : 939.9801
 ARIMA(1,1,0)            with drift         : 942.1567
 ARIMA(1,1,0)(0,0,1)[12]                    : 942.1415
 ARIMA(1,1,0)(0,0,1)[12] with drift         : 944.3914
 ARIMA(1,1,0)(1,0,0)[12]                    : 942.1349
 ARIMA(1,1,0)(1,0,0)[12] with drift         : 944.385
 ARIMA(1,1,0)(1,0,1)[12]                    : 944.398
 ARIMA(1,1,0)(1,0,1)[12] with drift         : 946.7278
 ARIMA(1,1,1)                               : 941.9961
 ARIMA(1,1,1)            with drift         : Inf
 ARIMA(1,1,1)(0,0,1)[12]                    : 944.2371
 ARIMA(1,1,1)(0,0,1)[12] with drift         : Inf
 ARIMA(1,1,1)(1,0,0)[12]                    : 944.2321
 ARIMA(1,1,1)(1,0,0)[12] with drift         : 946.5477
 ARIMA(1,1,1)(1,0,1)[12]                    : 946.5864
 ARIMA(1,1,1)(1,0,1)[12] with drift         : 948.9791
 ARIMA(1,1,2)                               : Inf
 ARIMA(1,1,2)            with drift         : Inf
 ARIMA(1,1,2)(0,0,1)[12]                    : Inf
 ARIMA(1,1,2)(0,0,1)[12] with drift         : Inf
 ARIMA(1,1,2)(1,0,0)[12]                    : Inf
 ARIMA(1,1,2)(1,0,0)[12] with drift         : Inf
 ARIMA(1,1,2)(1,0,1)[12]                    : Inf
 ARIMA(1,1,2)(1,0,1)[12] with drift         : Inf
 ARIMA(1,1,3)                               : 938.1728
 ARIMA(1,1,3)            with drift         : 940.529
 ARIMA(1,1,3)(0,0,1)[12]                    : 940.2546
 ARIMA(1,1,3)(0,0,1)[12] with drift         : 942.6798
 ARIMA(1,1,3)(1,0,0)[12]                    : 940.202
 ARIMA(1,1,3)(1,0,0)[12] with drift         : 942.626
 ARIMA(1,1,4)                               : 939.1764
 ARIMA(1,1,4)            with drift         : 941.6579
 ARIMA(2,1,0)                               : 942.1143
 ARIMA(2,1,0)            with drift         : 944.3611
 ARIMA(2,1,0)(0,0,1)[12]                    : 944.3384
 ARIMA(2,1,0)(0,0,1)[12] with drift         : 946.6623
 ARIMA(2,1,0)(1,0,0)[12]                    : 944.3304
 ARIMA(2,1,0)(1,0,0)[12] with drift         : 946.6546
 ARIMA(2,1,0)(1,0,1)[12]                    : 946.7088
 ARIMA(2,1,0)(1,0,1)[12] with drift         : 949.1042
 ARIMA(2,1,1)                               : Inf
 ARIMA(2,1,1)            with drift         : Inf
 ARIMA(2,1,1)(0,0,1)[12]                    : Inf
 ARIMA(2,1,1)(0,0,1)[12] with drift         : Inf
 ARIMA(2,1,1)(1,0,0)[12]                    : Inf
 ARIMA(2,1,1)(1,0,0)[12] with drift         : Inf
 ARIMA(2,1,1)(1,0,1)[12]                    : Inf
 ARIMA(2,1,1)(1,0,1)[12] with drift         : Inf
 ARIMA(2,1,2)                               : Inf
 ARIMA(2,1,2)            with drift         : Inf
 ARIMA(2,1,2)(0,0,1)[12]                    : Inf
 ARIMA(2,1,2)(0,0,1)[12] with drift         : Inf
 ARIMA(2,1,2)(1,0,0)[12]                    : Inf
 ARIMA(2,1,2)(1,0,0)[12] with drift         : Inf
 ARIMA(2,1,3)                               : 943.5181
 ARIMA(2,1,3)            with drift         : Inf
 ARIMA(3,1,0)                               : 944.035
 ARIMA(3,1,0)            with drift         : 946.347
 ARIMA(3,1,0)(0,0,1)[12]                    : 946.3789
 ARIMA(3,1,0)(0,0,1)[12] with drift         : 948.7706
 ARIMA(3,1,0)(1,0,0)[12]                    : 946.3788
 ARIMA(3,1,0)(1,0,0)[12] with drift         : 948.7706
 ARIMA(3,1,0)(1,0,1)[12]                    : 948.6612
 ARIMA(3,1,0)(1,0,1)[12] with drift         : 951.1362
 ARIMA(3,1,1)                               : 941.4681
 ARIMA(3,1,1)            with drift         : 943.8501
 ARIMA(3,1,1)(0,0,1)[12]                    : 943.6367
 ARIMA(3,1,1)(0,0,1)[12] with drift         : 946.0934
 ARIMA(3,1,1)(1,0,0)[12]                    : 943.5912
 ARIMA(3,1,1)(1,0,0)[12] with drift         : 946.0466
 ARIMA(3,1,2)                               : 937.5612
 ARIMA(3,1,2)            with drift         : 940.0436
 ARIMA(4,1,0)                               : 945.8152
 ARIMA(4,1,0)            with drift         : 948.219
 ARIMA(4,1,0)(0,0,1)[12]                    : 948.2389
 ARIMA(4,1,0)(0,0,1)[12] with drift         : 950.7263
 ARIMA(4,1,0)(1,0,0)[12]                    : 948.2389
 ARIMA(4,1,0)(1,0,0)[12] with drift         : 950.7263
 ARIMA(4,1,1)                               : 942.252
 ARIMA(4,1,1)            with drift         : 944.7392
 ARIMA(5,1,0)                               : 943.2228
 ARIMA(5,1,0)            with drift         : 945.6396



 Best model: ARIMA(3,1,2)                               
summary(fit_IHSG_S)
Series: ts_dt[, "IHSG"] 
ARIMA(3,1,2) 

Coefficients:
          ar1      ar2      ar3     ma1     ma2
      -1.5408  -0.9915  -0.2914  1.5673  0.8543
s.e.   0.1400   0.2194   0.1227  0.0907  0.1225

sigma^2 = 74739:  log likelihood = -462.07
AIC=936.14   AICc=937.56   BIC=949.28

Training set error measures:
                   ME     RMSE      MAE         MPE     MAPE
Training set 4.391526 260.8553 177.1598 -0.06077829 3.017928
                  MASE       ACF1
Training set 0.2513588 0.02987347
checkresiduals(fit_IHSG_S)

    Ljung-Box test

data:  Residuals from ARIMA(3,1,2)
Q* = 8.2026, df = 8, p-value = 0.4139

Model df: 5.   Total lags used: 13

forecast(fit_IHSG_S,h=10) %>% autoplot() + theme_bw() + ylab('IHSG')

forecast(fit_IHSG_S,h=10) %>% as.data.frame() %>% datatable() %>% 
  formatRound(columns=colnames(forecast(fit_IHSG_S,h=10) %>% as.data.frame()),digits = 3)
6. Analisa Tematik Simulasi Forecasting IHK berdasarkan Kebijakan Moneter
Grafik Jumlah Uang Beredar dan Suku Bunga

Analisis Korelasi antara Jumlah Uang Beredar dan IHSG
ggpairs(dt[,c('IHK','M2','IHSG')]) + theme_bw()

Membuat Model ARIMA X Jumlah Uang Beredar berdasarkan Suku Bunga
fit_M2_arimax <- auto.arima(ts_dt[,'IHK'],
                            xreg = ts_dt[,c('IHSG','M2')],
                            seasonal=T,trace=T,stepwise=T)

 Regression with ARIMA(2,0,2)(1,0,1)[12] errors : Inf
 Regression with ARIMA(0,0,0)            errors : 219.1605
 Regression with ARIMA(1,0,0)(1,0,0)[12] errors : Inf
 Regression with ARIMA(0,0,1)(0,0,1)[12] errors : 182.6329
 Regression with ARIMA(0,0,0)            errors : 466.0125
 Regression with ARIMA(0,0,1)            errors : 180.3338
 Regression with ARIMA(0,0,1)(1,0,0)[12] errors : 182.7234
 Regression with ARIMA(0,0,1)(1,0,1)[12] errors : 181.7997
 Regression with ARIMA(1,0,1)            errors : Inf
 Regression with ARIMA(0,0,2)            errors : 154.8949
 Regression with ARIMA(0,0,2)(1,0,0)[12] errors : 155.4894
 Regression with ARIMA(0,0,2)(0,0,1)[12] errors : 153.7999
 Regression with ARIMA(0,0,2)(1,0,1)[12] errors : 154.9567
 Regression with ARIMA(1,0,2)(0,0,1)[12] errors : Inf
 Regression with ARIMA(0,0,3)(0,0,1)[12] errors : 138.0388
 Regression with ARIMA(0,0,3)            errors : 141.1436
 Regression with ARIMA(0,0,3)(1,0,1)[12] errors : 140.6475
 Regression with ARIMA(0,0,3)(1,0,0)[12] errors : 139.0141
 Regression with ARIMA(1,0,3)(0,0,1)[12] errors : Inf
 Regression with ARIMA(0,0,4)(0,0,1)[12] errors : 135.3759
 Regression with ARIMA(0,0,4)            errors : 136.2502
 Regression with ARIMA(0,0,4)(1,0,1)[12] errors : 138.1449
 Regression with ARIMA(0,0,4)(1,0,0)[12] errors : 135.3891
 Regression with ARIMA(1,0,4)(0,0,1)[12] errors : Inf
 Regression with ARIMA(0,0,5)(0,0,1)[12] errors : 131.1132
 Regression with ARIMA(0,0,5)            errors : 135.6046
 Regression with ARIMA(0,0,5)(1,0,1)[12] errors : 133.6008
 Regression with ARIMA(0,0,5)(1,0,0)[12] errors : 131.1261
 Regression with ARIMA(1,0,5)(0,0,1)[12] errors : Inf
 Regression with ARIMA(0,0,5)(0,0,1)[12] errors : 317.0066

 Best model: Regression with ARIMA(0,0,5)(0,0,1)[12] errors 
summary(fit_M2_arimax)
Series: ts_dt[, "IHK"] 
Regression with ARIMA(0,0,5)(0,0,1)[12] errors 

Coefficients:
         ma1     ma2     ma3     ma4     ma5    sma1  intercept
      0.8291  1.2565  0.9479  0.5875  0.4091  0.5339    81.5252
s.e.  0.1412  0.2280  0.2712  0.2225  0.1809  0.1779     5.1057
        IHSG      M2
      -2e-04  0.0038
s.e.   2e-04  0.0008

sigma^2 = 0.2997:  log likelihood = -53.59
AIC=127.18   AICc=131.11   BIC=149.23

Training set error measures:
                     ME      RMSE       MAE        MPE     MAPE
Training set 0.03836652 0.5093184 0.3984354 0.02762542 0.373614
                  MASE     ACF1
Training set 0.1301734 0.094414
checkresiduals(fit_M2_arimax)

    Ljung-Box test

data:  Residuals from Regression with ARIMA(0,0,5)(0,0,1)[12] errors
Q* = 19.471, df = 7, p-value = 0.006832

Model df: 6.   Total lags used: 13

Forecasting Indeks Harga Konsumen 12 bulan ke depan berdasarkan simulasi kebijakan yang dibuat oleh peneliti
  • Simulasi Menambah Uang Beredar (Menurunkan Suku Bunga) Tambah 50 Trilyun Setiap Bulan
simulasi <- data.frame(IHSG = forecast(fit_IHSG_S,h=20)$mean,
                       M2 = c(8350,8400,8450,8500,8550,
                              8600,8650,8700,8750,8800,
                              8900,9000,9050,9100,9150,
                              9200,9250,9300,9350,9400))
ts_simulasi <- ts(simulasi, start=c(2023,8),frequency = 12)

forecast(fit_M2_arimax,h=20,
         xreg = ts_simulasi) %>% 
  autoplot() + 
  theme_bw() + 
  ylab('Indeks Harga Konsumen')


forecast(fit_M2_arimax,h=20,
         xreg = ts_simulasi)
  • Simulasi Mengurangi Uang Beredar (Menaikkan Suku Bunga) Mengurangi 50 Trilyun Setiap Bulan
simulasi <- data.frame(IHSG = forecast(fit_IHSG_S,h=20)$mean,
                       M2 = c(8350,8300,8250,8200,8150,
                              8100,8050,8000,7950,7900,
                              7850,7800,7750,7700,7650,
                              7600,7550,7500,7450,7400))
ts_simulasi <- ts(simulasi, start=c(2023,8),frequency = 12)

forecast(fit_M2_arimax,h=20,
         xreg = ts_simulasi) %>% 
  autoplot() + 
  theme_bw() + 
  ylab('Indeks Harga Konsumen')


forecast(fit_M2_arimax,h=20,
         xreg = ts_simulasi)
  • Simulasi Menambah Uang Beredar (Menurunkan Suku Bunga) Ekstrim Tambah 200 Trilyun Setiap Bulan
simulasi <- data.frame(IHSG = forecast(fit_IHSG_S,h=20)$mean,
                       M2 = c(8350+(1:20)*200))
ts_simulasi <- ts(simulasi, start=c(2023,8),frequency = 12)

forecast(fit_M2_arimax,h=20,
         xreg = ts_simulasi) %>% 
  autoplot() + 
  theme_bw() + 
  ylab('Uang Beredar (Trilyun Rupiah)')


forecast(fit_M2_arimax,h=20,
         xreg = ts_simulasi)
LS0tDQp0aXRsZTogIlJTdHVkaW8gZm9yIEZFQiBVbml2ZXJzaXRhcyBKYW1iaSINCmF1dGhvcjogTS4gQW1tYXIgQWx3YW5kaSAoQlBTIEtvdGEgU3VuZ2FpIFBlbnVoKQ0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyMjICoqUlN0dWRpbyB1bnR1ayBQZW5lbGl0aWFuIEVrb25vbWkgZGFuIEJpc25pcyoqDQoNCkRhdGEgSW5wdXQgbWVydXBha2FuIGZpbGUgZXhjZWwgYmVyZm9ybWF0ICgueGxzeCkgeWFuZyBiZXJpc2kgZGF0YSBJSEssIFVhbmcgQmVyZWRhciwgQkkgUmF0ZSwgZGFuIElIU0cuDQoNCg0KIyMjICoqVGFoYXBhbiBBbmFsaXNpcyBEYXRhKioNCg0KIyMjIyMgKioxLiBQZXJzaWFwYW4gRGF0YSoqDQorIEluc3RhbGwgUGFja2FnZXMgJ29wZW54bHN4JyBhZ2FyIGRhcGF0IG1lbWJ1a2EgZGF0YSBiZXJmb3JtYXQgLnhsc3gNCmBgYHtyIGV2YWw9Rn0NCmluc3RhbGwucGFja2FnZXMoJ29wZW54bHN4JykNCmBgYA0KKyBQYW5nZ2lsIFBhY2thZ2VzICdvcGVueGxzeCcNCmBgYHtyfQ0KbGlicmFyeShvcGVueGxzeCkNCmBgYA0KKyBNYXN1a2thbiBGaWxlIERhdGEgSW5wdXQga2UgZGFsYW0gUg0KYGBge3J9DQpkdCA8LSByZWFkLnhsc3goJ2RhdGFzZXQueGxzeCcpDQpgYGANCisgSW5zdGFsbCBQYWNrYWdlcyAnRFQnIHVudHVrIG1lbmFtcGlsa2FuIGRhdGEgc2VjYXJhIHJhcGkNCmBgYHtyIGV2YWw9Rn0NCmluc3RhbGwucGFja2FnZXMoJ0RUJykNCmBgYA0KKyBUYW1waWxhbiBEYXRhDQpgYGB7cn0NCmxpYnJhcnkoRFQpDQpkYXRhdGFibGUoZHQpDQpgYGANCiMjIyMjICoqMi4gTWVuZ3ViYWggRm9ybWF0IERhdGEgTWVuamFkaSBUaW1lLVNlcmllcyBkYW4gUGxvdHRpbmcgRGF0YSoqDQorIFViYWggZm9ybWF0IGRhdGEgbWVuamFkaSB0aW1lIHNlcmllcw0KYGBge3J9DQp0c19kdCA8LSB0cyhkdCwgc3RhcnQ9YygyMDE4LDEpLGZyZXF1ZW5jeSA9IDEyKQ0KYGBgDQorIEluc3RhbGwgUGFja2FnZXMgdW50dWsgcGxvdHRpbmcgZGF0YQ0KYGBge3IgZXZhbD1GfQ0KaW5zdGFsbC5wYWNrYWdlcygnZ2dwbG90MicpDQppbnN0YWxsLnBhY2thZ2VzKCdmb3JlY2FzdCcpDQpgYGANCisgUGxvdHRpbmcgRGF0YSBMYWp1IElISw0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGZvcmVjYXN0KQ0KYXV0b3Bsb3QodHNfZHRbLCdJSEsnXSkgKw0KICBnZ3RpdGxlKCdJSEsgSW5kb25lc2lhIEphbnVhcmkgMjAxOCAtIEp1bGkgMjAyMycpICsNCiAgeGxhYignVGFodW4nKSArDQogIHlsYWIoJ0lISycpICsNCiAgdGhlbWVfYncoKQ0KYGBgDQorIERla29tcG9zaXNpIElISw0KYGBge3J9DQphdXRvcGxvdChkZWNvbXBvc2UodHNfZHRbLCdJSEsnXSkpICsNCiAgdGhlbWVfYncoKQ0KYGBgDQoNCisgUGxvdHRpbmcgRGF0YSBNMg0KYGBge3J9DQphdXRvcGxvdCh0c19kdFssJ00yJ10pICsNCiAgZ2d0aXRsZSgnVWFuZyBCZXJlZGFyIChNMikgZGkgSW5kb25lc2lhIEphbnVhcmkgMjAxOCAtIEp1bGkgMjAyMycpICsNCiAgeGxhYignVGFodW4nKSArDQogIHlsYWIoJ0p1bWxhaCBVYW5nIEJlcmVkYXIgKFRyaWx5dW4gUnVwaWFoKScpICsNCiAgdGhlbWVfYncoKQ0KYGBgDQorIERla29tcG9zaXNpIERhdGEgTTINCmBgYHtyfQ0KYXV0b3Bsb3QoZGVjb21wb3NlKHRzX2R0WywnTTInXSkpICsNCiAgdGhlbWVfYncoKQ0KYGBgDQoNCisgUGxvdHRpbmcgRGF0YSBJSFNHDQpgYGB7cn0NCmF1dG9wbG90KHRzX2R0WywnSUhTRyddKSArDQogIGdndGl0bGUoJ0lIU0cgZGkgSW5kb25lc2lhIEphbnVhcmkgMjAxOCAtIEp1bGkgMjAyMycpICsNCiAgeGxhYignVGFodW4nKSArDQogIHlsYWIoJ0lIU0cgKFJ1cGlhaCknKSArDQogIHRoZW1lX2J3KCkNCmBgYA0KKyBEZWtvbXBvc2lzaSBEYXRhIElIU0cNCmBgYHtyfQ0KYXV0b3Bsb3QoZGVjb21wb3NlKHRzX2R0WywnSUhTRyddKSkgKw0KICB0aGVtZV9idygpDQpgYGANCg0KKyBQbG90dGluZyBTZW11YSBHcmFmaWsNCmBgYHtyfQ0KYXV0b3Bsb3QodHNfZHRbLGMoJ00yJywnU3VrdS5CdW5nYScsJ0lIU0cnLCdJSEsnKV0sZmFjZXRzPVQpICsNCiAgZ2d0aXRsZSgnSUhLLCBVYW5nIEJlcmVkYXIgTTIsIFN1a3UgQnVuZ2EsIGRhbiBJSFNHIGRpIEluZG9uZXNpYScpICsNCiAgeGxhYignVGFodW4nKSArDQogIHlsYWIoTlVMTCkgKw0KICB0aGVtZV9idygpDQpgYGANCg0KIyMjIyMgKiozLiBNZW5hbXBpbGthbiBLb3JlbGFzaSBBbnRhciBWYXJpYWJlbCoqDQorIEluc3RhbGwgcGFja2FnZXMgbWVuYW1waWxrYW4ga29yZWxhc2kgJ0dHYWxseScNCmBgYHtyIGV2YWw9Rn0NCmluc3RhbGwucGFja2FnZXMoJ0dHYWxseScpDQpgYGANCg0KKyBNZW5hbXBpbGthbiBBbmFsaXNpcyBLb3JlbGFzaSBhbnRhcnZhcmlhYmVsDQpgYGB7cn0NCmxpYnJhcnkoR0dhbGx5KQ0KZ2dwYWlycyhhcy5kYXRhLmZyYW1lKHRzX2R0WyxjKCdNMicsJ1N1a3UuQnVuZ2EnLCdJSFNHJywnSUhLJyldKSkgKw0KICB0aGVtZV9idygpDQpgYGANCiMjIyMjICoqNC4gQ2VrIEF1dG9rcmVsYXNpKioNCmBgYHtyfQ0KZ2d0c2Rpc3BsYXkodHNfZHRbLCdJSEsnXSkgKyBnZ3RpdGxlKCdDZWsgQXV0b2tvcmVsYXNpIElISycpDQpgYGANCkRhdGEgSUhLIHRpZGFrIFN0YXNpb25lcg0KYGBge3J9DQpnZ3RzZGlzcGxheSh0c19kdFssJ00yJ10pICsgZ2d0aXRsZSgnQ2VrIEF1dG9rb3JlbGFzaSBNMicpDQpgYGANCkRhdGEgTTIgdGlkYWsgc3Rhc2lvbmVyDQpgYGB7cn0NCmdndHNkaXNwbGF5KHRzX2R0WywnU3VrdS5CdW5nYSddKSArIGdndGl0bGUoJ0NlayBTdWt1IEJ1bmdhIElISycpDQpgYGANCkRhdGEgc3VrdSBidW5nYSB0aWRhayBzdGFzaW9uZXINCmBgYHtyfQ0KZ2d0c2Rpc3BsYXkodHNfZHRbLCdJSFNHJ10pICsgZ2d0aXRsZSgnQ2VrIEF1dG9rb3JlbGFzaSBJSFNHJykNCmBgYA0KRGF0YSBJSFNHIHRpZGFrIHN0YXNpb25lcg0KDQojIyMjIyAqKjUuIE1lbWJ1YXQgTW9kZWwgQXV0b3JlZ3Jlc3NpdmUgSW50ZWdyYXRlZCBNb3ZpbmcgQXZlcmFnZSAoQVJJTUEpKioNCi0gQXV0byBBcmltYSB1bnR1ayBJSEsNCmBgYHtyfQ0KZml0IDwtIGF1dG8uYXJpbWEodHNfZHRbLCJJSEsiXSwgc2Vhc29uYWw9Rix0cmFjZT1ULHN0ZXB3aXNlID0gRikNCnN1bW1hcnkoZml0KQ0KY2hlY2tyZXNpZHVhbHMoZml0KQ0KZm9yZWNhc3QoZml0LGg9MTApICU+JSBhdXRvcGxvdCgpICsgdGhlbWVfYncoKSArIHlsYWIoJ0lISycpDQpmb3JlY2FzdChmaXQsaD0xMCkgJT4lIGFzLmRhdGEuZnJhbWUoKSAlPiUgZGF0YXRhYmxlKCkgJT4lIA0KICBmb3JtYXRSb3VuZChjb2x1bW5zPWNvbG5hbWVzKGZvcmVjYXN0KGZpdCxoPTEwKSAlPiUgYXMuZGF0YS5mcmFtZSgpKSxkaWdpdHMgPSAzKQ0KYGBgDQotIEFyaW1hIE1hbnVhbCB1bnR1ayBJSEsNCmBgYHtyfQ0KZml0X21hbnVhbCA8LSBBcmltYSh0c19kdFssJ0lISyddLCBvcmRlcj1jKDEsMSwwKSkNCmNoZWNrcmVzaWR1YWxzKGZpdF9tYW51YWwpDQpmb3JlY2FzdChmaXRfbWFudWFsLGg9MTApICU+JSBhdXRvcGxvdCgpICsgdGhlbWVfYncoKSArIHlsYWIoJ0lISycpDQpmb3JlY2FzdChmaXRfbWFudWFsLGg9MTApICU+JSBhcy5kYXRhLmZyYW1lKCkgJT4lIGRhdGF0YWJsZSgpICU+JSANCiAgZm9ybWF0Um91bmQoY29sdW1ucz1jb2xuYW1lcyhmb3JlY2FzdChmaXQsaD0xMCkgJT4lIGFzLmRhdGEuZnJhbWUoKSksZGlnaXRzID0gMykNCmBgYA0KLSBBdXRvIFNlYXNvbmFsIEFyaW1hIHVudHVrIElISw0KYGBge3J9DQpmaXRfUyA8LSBhdXRvLmFyaW1hKHRzX2R0WywiSUhLIl0sIHNlYXNvbmFsPVQsdHJhY2U9VCxzdGVwd2lzZSA9IEYpDQpzdW1tYXJ5KGZpdF9TKQ0KY2hlY2tyZXNpZHVhbHMoZml0X1MpDQpmb3JlY2FzdChmaXRfUyxoPTEwKSAlPiUgYXV0b3Bsb3QoKSArIHRoZW1lX2J3KCkgKyB5bGFiKCdJSEsnKQ0KZm9yZWNhc3QoZml0X1MsaD0xMCkgJT4lIGFzLmRhdGEuZnJhbWUoKSAlPiUgZGF0YXRhYmxlKCkgJT4lIA0KICBmb3JtYXRSb3VuZChjb2x1bW5zPWNvbG5hbWVzKGZvcmVjYXN0KGZpdF9TLGg9MTApICU+JSBhcy5kYXRhLmZyYW1lKCkpLGRpZ2l0cyA9IDMpDQpgYGANCg0KLSBBdXRvIEFyaW1hIHVudHVrIE0yDQpgYGB7cn0NCmZpdF9NMiA8LSBhdXRvLmFyaW1hKHRzX2R0WywiTTIiXSwgc2Vhc29uYWw9Rix0cmFjZT1ULHN0ZXB3aXNlID0gRikNCnN1bW1hcnkoZml0X00yKQ0KY2hlY2tyZXNpZHVhbHMoZml0X00yKQ0KZm9yZWNhc3QoZml0X00yLGg9MTApICU+JSBhdXRvcGxvdCgpICsgdGhlbWVfYncoKSArIHlsYWIoJ00yJykNCmZvcmVjYXN0KGZpdF9NMixoPTEwKSAlPiUgYXMuZGF0YS5mcmFtZSgpICU+JSBkYXRhdGFibGUoKSAlPiUgDQogIGZvcm1hdFJvdW5kKGNvbHVtbnM9Y29sbmFtZXMoZm9yZWNhc3QoZml0X00yLGg9MTApICU+JSBhcy5kYXRhLmZyYW1lKCkpLGRpZ2l0cyA9IDMpDQpgYGANCi0gQXV0byBTZWFzb25hbCBBcmltYSB1bnR1ayBNMg0KYGBge3J9DQpmaXRfTTJfUyA8LSBhdXRvLmFyaW1hKHRzX2R0WywiTTIiXSwgc2Vhc29uYWw9VCx0cmFjZT1ULHN0ZXB3aXNlID0gRikNCnN1bW1hcnkoZml0X00yX1MpDQpjaGVja3Jlc2lkdWFscyhmaXRfTTJfUykNCmZvcmVjYXN0KGZpdF9NMl9TLGg9MTApICU+JSBhdXRvcGxvdCgpICsgdGhlbWVfYncoKSArIHlsYWIoJ00yJykNCmZvcmVjYXN0KGZpdF9NMl9TLGg9MTApICU+JSBhcy5kYXRhLmZyYW1lKCkgJT4lIGRhdGF0YWJsZSgpICU+JSANCiAgZm9ybWF0Um91bmQoY29sdW1ucz1jb2xuYW1lcyhmb3JlY2FzdChmaXRfTTJfUyxoPTEwKSAlPiUgYXMuZGF0YS5mcmFtZSgpKSxkaWdpdHMgPSAzKQ0KYGBgDQotIE1hbnVhbCBTYXJpbWEgdW50dWsgTTINCmBgYHtyfQ0KZml0X00yX21hbnVhbCA8LSBBcmltYSh0c19kdFssJ00yJ10sIG9yZGVyPWMoMSwxLDApLHNlYXNvbmFsPWMoMSwwLDApKQ0Kc3VtbWFyeShmaXRfTTJfbWFudWFsKQ0KYGBgDQoNCi0gQXV0byBTQXJpbWEgdW50dWsgSUhTRw0KYGBge3J9DQpmaXRfSUhTR19TIDwtIGF1dG8uYXJpbWEodHNfZHRbLCJJSFNHIl0sIHNlYXNvbmFsPVQsdHJhY2U9VCxzdGVwd2lzZSA9IEYpDQpzdW1tYXJ5KGZpdF9JSFNHX1MpDQpjaGVja3Jlc2lkdWFscyhmaXRfSUhTR19TKQ0KZm9yZWNhc3QoZml0X0lIU0dfUyxoPTEwKSAlPiUgYXV0b3Bsb3QoKSArIHRoZW1lX2J3KCkgKyB5bGFiKCdJSFNHJykNCmZvcmVjYXN0KGZpdF9JSFNHX1MsaD0xMCkgJT4lIGFzLmRhdGEuZnJhbWUoKSAlPiUgZGF0YXRhYmxlKCkgJT4lIA0KICBmb3JtYXRSb3VuZChjb2x1bW5zPWNvbG5hbWVzKGZvcmVjYXN0KGZpdF9JSFNHX1MsaD0xMCkgJT4lIGFzLmRhdGEuZnJhbWUoKSksZGlnaXRzID0gMykNCmBgYA0KDQojIyMjIyAqKjYuIEFuYWxpc2EgVGVtYXRpayBTaW11bGFzaSBGb3JlY2FzdGluZyBJSEsgYmVyZGFzYXJrYW4gS2ViaWpha2FuIE1vbmV0ZXIqKg0KDQojIyMjIyMgKipHcmFmaWsgSnVtbGFoIFVhbmcgQmVyZWRhciBkYW4gU3VrdSBCdW5nYSoqDQoNCmBgYHtyfQ0KYXV0b3Bsb3QodHNfZHRbLGMoJ0lISycsJ0lIU0cnLCdNMicpXSxmYWNldHM9VCkgKyANCiAgZ2d0aXRsZSgnSUhLIGRhbiBKdW1sYWggVWFuZyBCZXJlZGFyIEphbiAyMDE4IC0gSnVsIDIwMjMnKSArIA0KICB5bGFiKCdJSEssIElIU0csIGRhbiBKdW1sYWggVWFuZyBCZXJlZGFyIChUcmlseXVuKScpICsNCiAgeGxhYignVGFodW4nKSArDQogIHRoZW1lX2J3KCkNCg0KYGBgDQoNCiMjIyMjIyAqKkFuYWxpc2lzIEtvcmVsYXNpIGFudGFyYSBKdW1sYWggVWFuZyBCZXJlZGFyIGRhbiBJSFNHKioNCmBgYHtyfQ0KZ2dwYWlycyhkdFssYygnSUhLJywnTTInLCdJSFNHJyldKSArIHRoZW1lX2J3KCkNCmBgYA0KDQojIyMjIyMgKipNZW1idWF0IE1vZGVsIEFSSU1BIFggSnVtbGFoIFVhbmcgQmVyZWRhciBiZXJkYXNhcmthbiBTdWt1IEJ1bmdhKioNCg0KYGBge3J9DQpmaXRfTTJfYXJpbWF4IDwtIGF1dG8uYXJpbWEodHNfZHRbLCdJSEsnXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVnID0gdHNfZHRbLGMoJ0lIU0cnLCdNMicpXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFzb25hbD1ULHRyYWNlPVQsc3RlcHdpc2U9VCkNCnN1bW1hcnkoZml0X00yX2FyaW1heCkNCmNoZWNrcmVzaWR1YWxzKGZpdF9NMl9hcmltYXgpDQpgYGANCg0KIyMjIyMjICoqRm9yZWNhc3RpbmcgSW5kZWtzIEhhcmdhIEtvbnN1bWVuIDEyIGJ1bGFuIGtlIGRlcGFuIGJlcmRhc2Fya2FuIHNpbXVsYXNpIGtlYmlqYWthbiB5YW5nIGRpYnVhdCBvbGVoIHBlbmVsaXRpKioNCg0KLSBTaW11bGFzaSBNZW5hbWJhaCBVYW5nIEJlcmVkYXIgKE1lbnVydW5rYW4gU3VrdSBCdW5nYSkgVGFtYmFoIDUwIFRyaWx5dW4gU2V0aWFwIEJ1bGFuDQpgYGB7cn0NCnNpbXVsYXNpIDwtIGRhdGEuZnJhbWUoSUhTRyA9IGZvcmVjYXN0KGZpdF9JSFNHX1MsaD0yMCkkbWVhbiwNCiAgICAgICAgICAgICAgICAgICAgICAgTTIgPSBjKDgzNTAsODQwMCw4NDUwLDg1MDAsODU1MCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg2MDAsODY1MCw4NzAwLDg3NTAsODgwMCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg5MDAsOTAwMCw5MDUwLDkxMDAsOTE1MCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkyMDAsOTI1MCw5MzAwLDkzNTAsOTQwMCkpDQp0c19zaW11bGFzaSA8LSB0cyhzaW11bGFzaSwgc3RhcnQ9YygyMDIzLDgpLGZyZXF1ZW5jeSA9IDEyKQ0KDQpmb3JlY2FzdChmaXRfTTJfYXJpbWF4LGg9MjAsDQogICAgICAgICB4cmVnID0gdHNfc2ltdWxhc2kpICU+JSANCiAgYXV0b3Bsb3QoKSArIA0KICB0aGVtZV9idygpICsgDQogIHlsYWIoJ0luZGVrcyBIYXJnYSBLb25zdW1lbicpDQoNCmZvcmVjYXN0KGZpdF9NMl9hcmltYXgsaD0yMCwNCiAgICAgICAgIHhyZWcgPSB0c19zaW11bGFzaSkNCmBgYA0KLSBTaW11bGFzaSBNZW5ndXJhbmdpIFVhbmcgQmVyZWRhciAoTWVuYWlra2FuIFN1a3UgQnVuZ2EpIE1lbmd1cmFuZ2kgNTAgVHJpbHl1biBTZXRpYXAgQnVsYW4NCmBgYHtyfQ0Kc2ltdWxhc2kgPC0gZGF0YS5mcmFtZShJSFNHID0gZm9yZWNhc3QoZml0X0lIU0dfUyxoPTIwKSRtZWFuLA0KICAgICAgICAgICAgICAgICAgICAgICBNMiA9IGMoODM1MCw4MzAwLDgyNTAsODIwMCw4MTUwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgODEwMCw4MDUwLDgwMDAsNzk1MCw3OTAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzg1MCw3ODAwLDc3NTAsNzcwMCw3NjUwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzYwMCw3NTUwLDc1MDAsNzQ1MCw3NDAwKSkNCnRzX3NpbXVsYXNpIDwtIHRzKHNpbXVsYXNpLCBzdGFydD1jKDIwMjMsOCksZnJlcXVlbmN5ID0gMTIpDQoNCmZvcmVjYXN0KGZpdF9NMl9hcmltYXgsaD0yMCwNCiAgICAgICAgIHhyZWcgPSB0c19zaW11bGFzaSkgJT4lIA0KICBhdXRvcGxvdCgpICsgDQogIHRoZW1lX2J3KCkgKyANCiAgeWxhYignSW5kZWtzIEhhcmdhIEtvbnN1bWVuJykNCg0KZm9yZWNhc3QoZml0X00yX2FyaW1heCxoPTIwLA0KICAgICAgICAgeHJlZyA9IHRzX3NpbXVsYXNpKQ0KYGBgDQotIFNpbXVsYXNpIE1lbmFtYmFoIFVhbmcgQmVyZWRhciAoTWVudXJ1bmthbiBTdWt1IEJ1bmdhKSBFa3N0cmltIFRhbWJhaCAyMDAgVHJpbHl1biBTZXRpYXAgQnVsYW4NCmBgYHtyfQ0Kc2ltdWxhc2kgPC0gZGF0YS5mcmFtZShJSFNHID0gZm9yZWNhc3QoZml0X0lIU0dfUyxoPTIwKSRtZWFuLA0KICAgICAgICAgICAgICAgICAgICAgICBNMiA9IGMoODM1MCsoMToyMCkqMjAwKSkNCnRzX3NpbXVsYXNpIDwtIHRzKHNpbXVsYXNpLCBzdGFydD1jKDIwMjMsOCksZnJlcXVlbmN5ID0gMTIpDQoNCmZvcmVjYXN0KGZpdF9NMl9hcmltYXgsaD0yMCwNCiAgICAgICAgIHhyZWcgPSB0c19zaW11bGFzaSkgJT4lIA0KICBhdXRvcGxvdCgpICsgDQogIHRoZW1lX2J3KCkgKyANCiAgeWxhYignVWFuZyBCZXJlZGFyIChUcmlseXVuIFJ1cGlhaCknKQ0KDQpmb3JlY2FzdChmaXRfTTJfYXJpbWF4LGg9MjAsDQogICAgICAgICB4cmVnID0gdHNfc2ltdWxhc2kpDQpgYGA=