Pemodelan Data Jual Kurs Rupiah

Latar Belakang

Kurs jual adalah harga jual mata uang yang dipakai oleh bank yang digunakan untuk penukaran mata uang asing dan yang digunakan oleh para pedagang valuta asing untuk menjual valuta asing. Misal, kita menukarkan rupiah (Rp) dengan dolar Amerika (USD), kurs yang digunakan adalah kurs jual. Ada tiga jenis kurs, sistem kurs tetap, sistem kurs bebas atau mengambang, dan sistem kurs mengambang terkendali. Dilansir dari laman resmi Bank Indonesia (BI), Indonesia menganut sistem kurs mengambang (free floating). Peran kestabilan kurs sangat penting dalam mencapai stabilitas harga dan sistem keuangan (Salim 2022). Oleh karena itu, forecasting penting digunakan untuk meramalkan keuangan negara di masa yang akan datang.

Inflasi dapat diartikan sebagai kenaikan harga, barang, dan jasa secara umum dan terus dalam waktu tertentu. Inflasi menyebabkan turunnya daya beli dari nilai uang terhadap barang-barang dan jasa, besar kecilnya ditentukan oleh elastisitas permintaan dan penawaran akan barang dan jasa. Faktor lain yang juga turut menentukan fluktuasi tingkat harga umum diantaranya adalah kebijakan pemerintah mengenai tingkat harga, yaitu dengan mengadakan kontrol harga, pemberian subsidi kepada konsumen dan lain sebagainya.

Install Package

library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(forecast)
library(TTR)
library(TSA)
## Registered S3 methods overwritten by 'TSA':
##   method       from    
##   fitted.Arima forecast
##   plot.Arima   forecast
## 
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
## 
##     acf, arima
## The following object is masked from 'package:utils':
## 
##     tar
library(graphics)
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(orcutt)
library(HoRM)
library(dLagM)
## Loading required package: nardl
## Loading required package: dynlm
## 
## Attaching package: 'dLagM'
## The following object is masked from 'package:forecast':
## 
##     forecast
library(dynlm)
library(MLmetrics)
## 
## Attaching package: 'MLmetrics'
## The following object is masked from 'package:dLagM':
## 
##     MAPE
## The following object is masked from 'package:base':
## 
##     Recall
library(aTSA)
## 
## Attaching package: 'aTSA'
## The following object is masked from 'package:dLagM':
## 
##     forecast
## The following object is masked from 'package:forecast':
## 
##     forecast
## The following objects are masked from 'package:tseries':
## 
##     adf.test, kpss.test, pp.test
## The following object is masked from 'package:graphics':
## 
##     identify
library(readxl)

Input Data

Data diperoleh dari bank indonesia (www.bi.go.id). Data ini terdiri dari 2 peubah yaitu kurs jual indonesia pada mata uang british pound dengan tingkat inflasi pada periode tahun 2012 sampai 2021 dengan amatan sebanyak 120.

yt: kurs jual Indonesia terhadap british pound xt: tingkat inflasi

data <- read_excel("~/Desktop/SEMESTER 5!!!/MPDW/inflasi kurs.xlsx")
head(data)
## # A tibble: 6 × 3
##       t     yt     xt
##   <dbl>  <dbl>  <dbl>
## 1     1 0.0365 14197.
## 2     2 0.0356 14330.
## 3     3 0.0397 14580.
## 4     4 0.045  14759.
## 5     5 0.0445 14888.
## 6     6 0.0453 14768.
str(data)
## tibble [120 × 3] (S3: tbl_df/tbl/data.frame)
##  $ t : num [1:120] 1 2 3 4 5 6 7 8 9 10 ...
##  $ yt: num [1:120] 0.0365 0.0356 0.0397 0.045 0.0445 0.0453 0.0456 0.0458 0.0431 0.0461 ...
##  $ xt: num [1:120] 14197 14330 14580 14759 14888 ...
dim(data)
## [1] 120   3

Data Splitting

Data akan dibagi menjadi dua bagian, yaitu data testing dan data training. Proporsi antara keduanua adalah 80:20 untuk data training dan data testing.

data <- data$xt

test <- tail(data,24)
train <- head(data,(length(data)-length(test)))

#data time series
train.ts<-ts(train)
test.ts<-ts(test)
data.ts<-ts(data)

Data Exploration

par(mfrow=c(3,1))
plot(x = data.ts,
     col = "black",
     lwd = 1,
     type = "o",
     main = "Time Series Plot (Before Splitting)")

plot(x = train.ts,
     col = "black",
     lwd = 1,
     type = "o",
     main = "Time Series Plot (Data Training)")

plot(x = test.ts,
     col = "black",
     lwd = 1,
     type = "o",
     main = "Time Series Plot (Data Testing)")

Dari ketiga plot tersebut menunjukkan bahwa data tidak stasioner sehingga perlu untuk dilaukan differencing untuk menstatisionerkan data.

Differencing

Differencing merupakan tahap untuk menstasionerkan data. Tahap ini akan terus dilakukan hingga data menjadi stasioner.

ADF Test

Setelah dilakukan eksplorasi secara visual kemudian dilakukan Adjusted Dicky FUller Test yang digunakan untuk menguji apakah data stasioner atau tidak.

Hipotesis

H0 : Data tidak stasioner

H1 : Data stasioner

tseries::adf.test(train.ts)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  train.ts
## Dickey-Fuller = -2.0521, Lag order = 4, p-value = 0.5549
## alternative hypothesis: stationary

Didapatkan bahwa p-value = 0.5549 > 0.05. Hal ini menunjukkan bahwa cukup bukti untuk menyatakan bahwa data tidak stasioner.

ACF & PACF Plot

par(mfrow=c(1,1))
acf(train.ts)

pacf(train.ts)

Differencing

data.dif1<-diff(train.ts, differences = 1);data.dif1
## Time Series:
## Start = 2 
## End = 96 
## Frequency = 1 
##  [1]   133.162857   250.231905   178.826810   128.467952  -119.831429
##  [6]    53.360476   170.129474   492.647526    15.451182   -33.875182
## [11]   172.967000   -78.080952  -469.983048  -364.407579   228.881124
## [16]    43.390455   394.605789   -14.281007  1083.706329  1614.652222
## [21]   325.904286   394.018381  1102.003500   268.232500  -310.396500
## [26]  -767.215500   148.930000   291.230556   672.088492   -99.094048
## [31]  -433.425000  -164.361364   125.334842  -333.288478   253.510714
## [36]  -382.356190   460.664160    60.309952  -241.732208   161.499071
## [41]  1238.100452    62.574311 -3553.819809  4855.765974  -957.688095
## [46]  -345.253810   -14.750524  -773.812000  -679.272000  -570.556429
## [51]    76.898571   661.813357  -517.478682 -1691.496524   -44.169840
## [56]    -9.047359 -1179.701429   458.702424   199.634719  -259.647143
## [61]   190.440175  -218.630933   322.477424   437.268667  -218.277000
## [66]   347.358333   -28.958333   394.541842   161.674067    24.522273
## [71]   285.865239   295.370670   535.811435   221.894236   225.967143
## [76]  -495.823405  -283.952071   317.019481  -217.970671   641.538972
## [81]   361.506659  -799.780393  -608.497845  -106.283995    -5.886005
## [86]   488.550368  -316.763526    91.485764  -486.861238  -498.654435
## [91]  -231.894111   119.870260   398.055590   312.222981   258.872714

ADF Test

Hipotesis

H0 : Data tidak stasioner

H1 : Data stasioner

tseries::adf.test(data.dif1)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  data.dif1
## Dickey-Fuller = -3.9485, Lag order = 4, p-value = 0.01499
## alternative hypothesis: stationary

Didapatkan bahwa p-value = 0.01499 < 0.05. Hal ini menunjukkan bahwa tidak cukup bukti untuk menyatakan bahwa data tidak stasioner.

plot(x = data.dif1,
     col = "black",
     lwd = 1,
     type = "o",
     main = "Setelah Differencing")

Setelah dilakukan differencing didapatkan bahwa data sudah stasioner baik secara uji ADF maupun eksplorasi visual.

ACF, PACF & EACF Plot

acf(data.dif1,lag.max = 20)

pacf(data.dif1,lag.max = 20) 

eacf(data.dif1)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x o o o o o o o o o o  o  o  o 
## 1 x o o o o o o o o x o  o  o  o 
## 2 x x o o o o o o o o o  o  o  o 
## 3 x o o o o o o o o o o  o  o  o 
## 4 x o o o o o o o o o o  o  o  o 
## 5 x o o x o o o o o o o  o  o  o 
## 6 x o x o o o o o o o o  o  o  o 
## 7 x x o o o o o o o o o  o  o  o

Model ARIMA

Berdasarkan

data.arima1 <- Arima(data.ts,order = c(1,1,0));data.arima1
## Series: data.ts 
## ARIMA(1,1,0) 
## 
## Coefficients:
##           ar1
##       -0.2374
## s.e.   0.0886
## 
## sigma^2 = 515332:  log likelihood = -950.96
## AIC=1905.92   AICc=1906.02   BIC=1911.47
data.arima2 <- Arima(data.ts,order = c(0,1,1));data.arima2
## Series: data.ts 
## ARIMA(0,1,1) 
## 
## Coefficients:
##           ma1
##       -0.2813
## s.e.   0.0860
## 
## sigma^2 = 507834:  log likelihood = -950.1
## AIC=1904.2   AICc=1904.3   BIC=1909.75
data.arima3 <- Arima(data.ts,order = c(1,1,1));data.arima3
## Series: data.ts 
## ARIMA(1,1,1) 
## 
## Coefficients:
##          ar1      ma1
##       0.0437  -0.3184
## s.e.  0.2317   0.2107
## 
## sigma^2 = 512027:  log likelihood = -950.08
## AIC=1906.16   AICc=1906.37   BIC=1914.5

Berdasarkan ARIMA

auto.arima(data.ts)
## Series: data.ts 
## ARIMA(0,1,1) 
## 
## Coefficients:
##           ma1
##       -0.2813
## s.e.   0.0860
## 
## sigma^2 = 507834:  log likelihood = -950.1
## AIC=1904.2   AICc=1904.3   BIC=1909.75

Kesimpulan