Perbandingan Model ARIMA dengan Model ARIMAX Data Inflasi Indonesia Bulanan pada Periode Januari 2012 - Oktober 2022

Kelompok 1 Paralel 3 :

  1. Elfina Tan (G5401201005)

  2. M. Daryl Fauzan (G5401201087)

  3. Denanda Aufadlan T (G5401201088)

  4. Annisa Permata S (G5401201091)

  5. Akmal Taufik (G54190002)

  6. Kreshna Bayu A. (G64190098)

2022-12-22


Package dan Library

knitr::opts_chunk$set(dev = "png",
                      dpi = 300,
                      echo = TRUE,
                      cache = TRUE)
#Import Library 
library(readxl)
library(TTR)
library(forecast)
library(tseries)
library(TSA)
library(dynlm)
library(lmtest)
library(imputeTS)
library(stats)
library(MASS)
library(kableExtra)
library(padr)
library(astsa)
library(tfarima)
library(FinTS)

Model ARIMA

Import Data

dataset <- read_excel("C:/Users/denan/OneDrive/Documents/Kuliah/Kampus/Semester 5/MPDW/Data Inflasi Global.xlsx")
data <- dataset$`Data Inflasi`

Eksplorasi Data

Time Series Plot

#Mengubah data ke dalam bentuk time series
data.ts<-ts(data,frequency=12, start=2012)
#Plot semua data
plot(data.ts,xlab ="Periode", ylab = "Data Inflasi (Persen)", col="black", main = "Plot Deret Waktu Data Inflasi Indonesia")
points(data.ts)

Berdasarkan Time Series Plot, Pola data inflasi yang terbentuk dari data terlihat tidak stasioner, baik dalam ragam maupun nilai tengah yang cenderung memiliki pola siklik. Plot ini terlihat mengalami penurunan yang signifikan ketika kondisi perekonomian pada masa pandemi tahun 2020.

Splitting Data (Data Training dan Testing)

Data periode Januari 2012 sampai Desember 2019 digunakan sebagai data training untuk membangun model dan data Januari 2020 sampai Oktober 2022 digunakan sebagai data testing untuk memeriksa keakuratan model dalam memprediksi inflasi.
#Splitting Data
data.train <- ts(data[1:96])
data.test <- ts(data[97:130])

#Time Series Data
training.ts<-ts(data.train,frequency=12, start=2012)
testing.ts<-ts(data.test,frequency=12, start=2020)

#Plot Data
par(mfrow=c(2,2))
plot(training.ts, xlab ="Periode", ylab = "Data Inflasi (Persen)", col="red", main = "Plot Data Training")
points(training.ts)

plot(testing.ts, xlab ="Periode", ylab = "Data Inflasi (Persen)", col="red", main = "Plot Data Testing")
points(testing.ts)

## Plot Data Training dan testing Inflasi
ts.plot(data.ts, xlab = "Periode", ylab ="Data Inflasi (Persen)", 
        main = "Plot Deret Waktu Data Inflasi Indonesia")
lines(training.ts, col = "blue")
lines(testing.ts, col="Red")
legend(2020,9,c("Data Training","Data Testing"), 
       lty=8, col=c("blue","red"), cex=0.8)
abline(v=2020, col=c("black"), lty=1, lwd=1)

Cek Kestasioneran Data

1. ACF & PACF Plot data inflasi

acf(data.train, lag.max = 24, main = "Plot ACF Data Inflasi")

pacf(data.train, lag.max = 24, main = "Plot PACF Data Inflasi")
Berdasarkan Plot ACF Data minyak, nilai korelasi antar lag terlihat pada plot di atas menurun secara perlahan (tails off slowly). Hal tersebut mengindikasikan bahwa data minyak tidak stasioner.

2. Uji Formal (ADF-Test)

Secara formal, metode Augmented Dickey-Fuller (ADF) dapat memberikan hasil uji secara akurat untuk menentukan apakah sebuah data stasioner atau tidak. Namun, Uji ADF ini hanya mengukur tingkat stasioneritas berdasarkan nilai tengah saja. Dengan hipotesis yang diuji sebagai berikut :

\(H_{0}\): Data tidak stasioner

\(H_{1}\): Data stasioner

\(\alpha\) = 5% = 0.05

adf.test(data.train)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  data.train
## Dickey-Fuller = -2.6984, Lag order = 4, p-value = 0.2879
## alternative hypothesis: stationary
Berdasarkan hasil Augmented Dickey-Fuller Test (ADF Test) didapatkan p-value = 0.2879 > \(\alpha\), maka tak tolak \(H_{0}\). Artinya, cukup bukti untuk mengatakan bahwa data tidak stasioner pada taraf nyata 5%. Untuk mengatasi ketidakstasioneran tersebut, perlu dilakukan differencing.

Pemodelan ARIMA

Karena data tidak stasioner, maka akan dilakukan differencing untuk menstasionerkan data.

Differencing 1

Berdasarkan plot diatas, setelah data dilakukan differencing sebanyak satu kali d=1, pola data inflasi periode Januari 2012 - Januari 2022 sudah stasioner dalam nilai tengah.
data.dif1<-diff(data.train,differences = 1) 
plot.ts(ts(data.dif1,start = 2012, frequency = 12),lty=1,xlab = "Periode", ylab= "Data Inflasi Pembedaan 1", main="Plot Differencing Data Inflasi")

Cek Kestasioneran Data Setelah Differencing

Pengujian menggunakan Augmented Dickey-Fuller Test

\(H_{0}\): Data tidak stasioner

\(H_{1}\): Data stasioner

\(\alpha\) = 5% = 0.05

adf.test(data.dif1)
## Warning in adf.test(data.dif1): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  data.dif1
## Dickey-Fuller = -4.54, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
Berdasarkan hasil Augmented Dickey-Fuller Test (ADF Test) didapatkan p-value = 0.01 < \(\alpha\), maka tolak H_0. Artinya, cukup bukti untuk mengatakan bahwa data stasioner pada taraf nyata 5% setelah dilakukan differencing sebanyak 1 kali.

ACF & PACF Plot, EACF Matrix

acf(data.dif1, lag.max = 24, main = "Plot ACF Data Inflasi Setelah Differencing satu kali")

pacf(data.dif1, lag.max = 24, main = "Plot PACF Data Inflasi Setelah Differencing satu kali")

Berdasarkan plot ACF dan PACF di atas,terlihat bahwa nilai korelasi antara data dengan lag seperti gambar di atas tidak turun secara perlahan, dimana pada plot ACF diperoleh cuts off pada lag ke-1 dan pada plot PACF diperoleh cut off di lag 2. Berdasarkan hasil eksplorasi di atas, model yang dapat dibentuk secara berurutan adalah ARIMA(0,1,1) dan ARIMA(2,1,0).
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  x  o  o 
## 1 x x o o o o o o o o o  x  o  o 
## 2 o o o o o o o o o o o  x  o  o 
## 3 x o o o o o o o o o o  x  o  o 
## 4 x o o o o o o o o o o  x  o  o 
## 5 x x x o o o o o o o o  x  o  o 
## 6 x x x o o o o o o o o  x  o  o 
## 7 x o x o o o o o o o o  x  o  o

Dari Matriks EACF Data Inflasi dapat diduga model yang cocok adalah model :

  1. ARIMA(0,1,2)

  2. ARIMA (0,1,3)

  3. ARIMA (1,1,2)

  4. ARIMA (3,1,1)

  5. ARIMA (3,1,2)

Pemodelan ARIMA Data Inflasi

Identifikasi Model Tentatif

Berdasarkan plot ACF, PACF, dan matriks EACF, diperoleh 5 model tentatif beserta orde parameternya, sebagai berikut:

ARIMA(0,1,1), dengan orde p = 0, d = 1, dan q = 1

ARIMA(2,1,0), dengan orde p = 2, d = 1, dan q = 0

ARIMA(0,1,2), dengan orde p = 0, d = 1, dan q = 2

ARIMA(0,1,3), dengan orde p = 0, d = 1, dan q = 3

ARIMA(1,1,2), dengan orde p = 1, d = 1, dan q = 2

ARIMA(3,1,1), dengan orde p = 3, d = 1, dan q = 1

ARIMA(3,1,2), dengan orde p = 3, d = 1, dan q = 2

model1 <- Arima(data.dif1, order=c(0,0,1), method="ML")   
model2 <- Arima(data.dif1, order=c(2,0,0), method="ML")  
model3 <- Arima(data.dif1, order=c(0,0,2), method="ML")
model4 <- Arima(data.dif1, order=c(0,0,3), method="ML")
model5 <- Arima(data.dif1, order=c(1,0,2), method="ML") 
model6 <- Arima(data.dif1, order=c(3,0,1), method="ML")
model7 <- Arima(data.dif1, order=c(3,0,2), method="ML")

Pendugaan Parameter Model

ARIMA(0,1,1)

summary(model1) 
## Series: data.dif1 
## ARIMA(0,0,1) with non-zero mean 
## 
## Coefficients:
##          ma1     mean
##       0.3490  -0.0113
## s.e.  0.1007   0.0790
## 
## sigma^2 = 0.3345:  log likelihood = -81.83
## AIC=169.66   AICc=169.93   BIC=177.32
## 
## Training set error measures:
##                        ME      RMSE       MAE  MPE MAPE      MASE        ACF1
## Training set 0.0004262922 0.5722137 0.3513354 -Inf  Inf 0.7426473 -0.03000317
lmtest::coeftest((model1)) 
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value  Pr(>|z|)    
## ma1        0.348971   0.100691  3.4658 0.0005287 ***
## intercept -0.011280   0.078982 -0.1428 0.8864335    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Diperoleh persamaan pada model:

\(\nabla Y_t\) = Yt-1 et - 0.348971 et-1 - 0.011280 Untuk t = 1,2,3,…, 130
Berdasarkan data di atas diperoleh bahwa setiap parameter pada model ARIMA(0,1,1) signifikan. Hal ini dapat dilihat dari nilai Pr(>|z|) < 0.05 pada setiap parameter, sehingga model tersebut dapat dimasukan kedalam kandidat model terbaik.

ARIMA(2,1,0)

summary(model2) 
## Series: data.dif1 
## ARIMA(2,0,0) with non-zero mean 
## 
## Coefficients:
##          ar1      ar2     mean
##       0.3020  -0.2419  -0.0108
## s.e.  0.0992   0.0987   0.0617
## 
## sigma^2 = 0.3288:  log likelihood = -80.53
## AIC=169.05   AICc=169.5   BIC=179.27
## 
## Training set error measures:
##                        ME      RMSE       MAE MPE MAPE     MASE          ACF1
## Training set 0.0009839349 0.5642494 0.3459638 Inf  Inf 0.731293 -0.0004607976
lmtest::coeftest((model2)) 
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value Pr(>|z|)   
## ar1        0.302001   0.099202  3.0443 0.002332 **
## ar2       -0.241863   0.098727 -2.4498 0.014293 * 
## intercept -0.010841   0.061723 -0.1756 0.860574   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Diperoleh persamaan pada model:

\(\nabla Y_t\) = 1.302001 yt-1 - 0.543864 yt-2 + 0.241863 yt-3 -0.010841 Untuk t = 1,2,3,…, 130
Berdasarkan data di atas diperoleh bahwa setiap parameter pada model ARIMA(2,1,0) signifikan. Hal ini dapat dilihat dari nilai Pr(>|z|) < 0.05 pada setiap parameter, sehingga model tersebut dapat dimasukan kedalam kandidat model terbaik.

ARIMA(0,1,2)

summary(model3) 
## Series: data.dif1 
## ARIMA(0,0,2) with non-zero mean 
## 
## Coefficients:
##          ma1      ma2     mean
##       0.2843  -0.1095  -0.0106
## s.e.  0.1103   0.1086   0.0686
## 
## sigma^2 = 0.3346:  log likelihood = -81.33
## AIC=170.66   AICc=171.11   BIC=180.88
## 
## Training set error measures:
##                        ME      RMSE       MAE MPE MAPE      MASE       ACF1
## Training set 0.0003472967 0.5692085 0.3471446 Inf  Inf 0.7337888 0.01808154
lmtest::coeftest((model3)) 
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value Pr(>|z|)   
## ma1        0.284312   0.110346  2.5765  0.00998 **
## ma2       -0.109462   0.108619 -1.0078  0.31357   
## intercept -0.010646   0.068573 -0.1552  0.87663   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Diperoleh persamaan pada model:

\(\nabla Y_t\) = Yt-1 + et - 0.284312 et-1 + 0.109462 et-2 -0.010646 Untuk t = 1,2,3,…, 130
Berdasarkan data di atas diperoleh bahwa ada parameter pada model ARIMA(0,1,2) yang tidak signifikan. Hal ini dapat dilihat dari parameter yang memiliki nilai Pr(>|z|) > 0.05, sehingga model tersebut tidak dapat dimasukan kedalam kandidat model terbaik.

ARIMA(0,1,3)

summary(model4)
## Series: data.dif1 
## ARIMA(0,0,3) with non-zero mean 
## 
## Coefficients:
##          ma1      ma2      ma3     mean
##       0.3030  -0.1566  -0.1372  -0.0110
## s.e.  0.1023   0.1045   0.0994   0.0586
## 
## sigma^2 = 0.3315:  log likelihood = -80.41
## AIC=170.81   AICc=171.49   BIC=183.58
## 
## Training set error measures:
##                       ME      RMSE       MAE MPE MAPE      MASE         ACF1
## Training set 0.001378825 0.5634979 0.3481822 Inf  Inf 0.7359821 0.0006102943
lmtest::coeftest((model4))
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value Pr(>|z|)   
## ma1        0.302963   0.102343  2.9603 0.003074 **
## ma2       -0.156631   0.104480 -1.4991 0.133836   
## ma3       -0.137235   0.099393 -1.3807 0.167362   
## intercept -0.010982   0.058600 -0.1874 0.851346   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Diperoleh persamaan pada model:

\(\nabla Y_t\) = Yt-1 + et - 0.302963 et-1 + 0.156631 et-2 + 0.137235 et-3 -0.010982 Untuk t = 1,2,3,…, 130
Berdasarkan data di atas diperoleh bahwa ada parameter pada model ARIMA(0,1,3) yang tidak signifikan. Hal ini dapat dilihat dari parameter yang memiliki nilai Pr(>|z|) > 0.05, sehingga model tersebut tidak dapat dimasukan kedalam kandidat model terbaik.

ARIMA(1,1,2)

summary(model5)
## Series: data.dif1 
## ARIMA(1,0,2) with non-zero mean 
## 
## Coefficients:
##          ar1      ma1      ma2     mean
##       0.8800  -0.6099  -0.3901  -0.0282
## s.e.  0.0599   0.1043   0.0995   0.0194
## 
## sigma^2 = 0.3221:  log likelihood = -79.98
## AIC=169.95   AICc=170.63   BIC=182.72
## 
## Training set error measures:
##                      ME      RMSE       MAE MPE MAPE      MASE        ACF1
## Training set 0.04241606 0.5554849 0.3527581 Inf  Inf 0.7456547 -0.01252043
lmtest::coeftest((model5))
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value  Pr(>|z|)    
## ar1        0.879966   0.059945 14.6796 < 2.2e-16 ***
## ma1       -0.609942   0.104278 -5.8492 4.939e-09 ***
## ma2       -0.390054   0.099526 -3.9191 8.887e-05 ***
## intercept -0.028221   0.019389 -1.4555    0.1455    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Diperoleh persamaan pada model:

\(\nabla Y_t\) = 0.879966 yt-1 + et + 0.609942 et-1 + 0.390054 et-2 - 0.028221 Untuk t = 1,2,3,…, 130
Berdasarkan data di atas diperoleh bahwa setiap parameter pada model ARIMA(1,1,2) signifikan. Hal ini dapat dilihat dari nilai Pr(>|z|) < 0.05 pada setiap parameter, sehingga model tersebut dapat dimasukan kedalam kandidat model terbaik.

ARIMA(3,1,1)

summary(model6) 
## Series: data.dif1 
## ARIMA(3,0,1) with non-zero mean 
## 
## Coefficients:
## Warning in sqrt(diag(x$var.coef)): NaNs produced
##          ar1      ar2      ar3    ma1     mean
##       0.1284  -0.1871  -0.0517  0.171  -0.0109
## s.e.     NaN      NaN      NaN    NaN   0.0612
## 
## sigma^2 = 0.336:  log likelihood = -80.52
## AIC=173.04   AICc=173.99   BIC=188.36
## 
## Training set error measures:
##                       ME      RMSE       MAE MPE MAPE      MASE        ACF1
## Training set 0.001047293 0.5642167 0.3458751 Inf  Inf 0.7311055 0.001935606
lmtest::coeftest((model6)) 
## Warning in sqrt(diag(se)): NaNs produced
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value Pr(>|z|)
## ar1        0.128449        NaN     NaN      NaN
## ar2       -0.187099        NaN     NaN      NaN
## ar3       -0.051727        NaN     NaN      NaN
## ma1        0.170953        NaN     NaN      NaN
## intercept -0.010853   0.061186 -0.1774   0.8592

Diperoleh persamaan pada model:

\(\nabla Y_t\) = 1.128449 yt-1 + 0.315548 yt-2 - 0.135372 - 0.051727 yt-4 + et - 0.170953 et-1 -0.010853 Untuk t = 1,2,3,…, 130
Berdasarkan data di atas diperoleh bahwa setiap parameter pada model ARIMA(3,1,1) tidak signifikan. Hal ini dapat dilihat dari parameter yang memiliki nilai Pr(>|z|) = NaN, sehingga model tersebut tidak dapat dimasukan kedalam kandidat model terbaik.

ARIMA(3,1,2)

summary(model7) 
## Series: data.dif1 
## ARIMA(3,0,2) with non-zero mean 
## 
## Coefficients:
## Warning in sqrt(diag(x$var.coef)): NaNs produced
##          ar1      ar2      ar3     ma1      ma2     mean
##       0.1672  -0.1532  -0.0571  0.1311  -0.0464  -0.0108
## s.e.     NaN      NaN      NaN     NaN   0.1879   0.0604
## 
## sigma^2 = 0.3397:  log likelihood = -80.51
## AIC=175.02   AICc=176.31   BIC=192.9
## 
## Training set error measures:
##                       ME      RMSE       MAE MPE MAPE      MASE        ACF1
## Training set 0.001129378 0.5641619 0.3463942 Inf  Inf 0.7322027 0.002545374
lmtest::coeftest((model7)) 
## Warning in sqrt(diag(se)): NaNs produced
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value Pr(>|z|)
## ar1        0.167204        NaN     NaN      NaN
## ar2       -0.153203        NaN     NaN      NaN
## ar3       -0.057106        NaN     NaN      NaN
## ma1        0.131094        NaN     NaN      NaN
## ma2       -0.046401   0.187872 -0.2470   0.8049
## intercept -0.010843   0.060359 -0.1796   0.8574

Diperoleh persamaan pada model:

\(\nabla Y_t\) = 1.167204 yt-1 - 0.320407 yt-2 + 0.096097 yt-3 + 0.057106 yt-4 + et + 0.131094 et-1 + 0.046401 et-2 Untuk t = 1,2,3,…, 130
Berdasarkan data di atas diperoleh bahwa setiap parameter pada model ARIMA(3,1,2) tidak signifikan. Hal ini dapat dilihat dari parameter yang memiliki nilai Pr(>|z|) > 0.05, sehingga model tersebut tidak dapat dimasukan kedalam kandidat model terbaik.

Perbandingan Kebaikan Model Tentatif

#AIC ARIMA dan Signifikansi Parameter
modelaccuracy<-data.frame(
  "Model"=c("ARIMA(0,1,1)", "ARIMA(2,1,0)", "ARIMA(0,1,2)", "ARIMA(0,1,3)","ARIMA(1,1,2)", "ARIMA(3,1,1)", "ARIMA(3,1,2)"),
  "AIC"=c(model1$aic, model2$aic, model3$aic,model4$aic,model5$aic,model6$aic,model7$aic),
  "BIC"=c(model1$bic, model2$bic, model3$bic,model4$bic,model5$bic,model6$bic,model7$bic),
  "Signifikansi"=c("Signifikan","Signifikan","Tidak Signifikan","Tidak Signifikan","Signifikan","Tidak Signifikan","Tidak Signifikan"))

modelaccuracy
##          Model      AIC      BIC     Signifikansi
## 1 ARIMA(0,1,1) 169.6621 177.3237       Signifikan
## 2 ARIMA(2,1,0) 169.0506 179.2661       Signifikan
## 3 ARIMA(0,1,2) 170.6633 180.8788 Tidak Signifikan
## 4 ARIMA(0,1,3) 170.8122 183.5816 Tidak Signifikan
## 5 ARIMA(1,1,2) 169.9512 182.7206       Signifikan
## 6 ARIMA(3,1,1) 173.0399 188.3632 Tidak Signifikan
## 7 ARIMA(3,1,2) 175.0214 192.8985 Tidak Signifikan
kable(modelaccuracy)
Model AIC BIC Signifikansi
ARIMA(0,1,1) 169.6621 177.3237 Signifikan
ARIMA(2,1,0) 169.0506 179.2661 Signifikan
ARIMA(0,1,2) 170.6633 180.8788 Tidak Signifikan
ARIMA(0,1,3) 170.8122 183.5816 Tidak Signifikan
ARIMA(1,1,2) 169.9512 182.7206 Signifikan
ARIMA(3,1,1) 173.0399 188.3632 Tidak Signifikan
ARIMA(3,1,2) 175.0214 192.8985 Tidak Signifikan
Selain nilai AIC terkecil, perlu dilihat dari signifikasi pendugaan parameter model. Terdapat tiga model tentatif dengan semua parameter yang berpengaruh signifikan, yaitu model ARIMA (0,1,1), ARIMA (2,1,0), dan ARIMA (1,1,2). Model ARIMA(2,1,0) memiliki nilai AIC terendah dibandingkan ketiga kandidat model yang lainnya, sehingga model ARIMA(2,1,0) dipilih sebagai model terbaik

Diagnostik Model

Overfitting

Overfitting yang digunakan adalah model ARIMA(2,1,0). Model ARIMA(2,1,0) akan dibandingkan dengan model ARIMA(3,1,0)
model2b <- Arima(data.dif1, order=c(3,0,0), method="ML")
model2c <- Arima(data.dif1, order=c(2,0,1), method = "ML")

ARIMA(3,1,0)

coeftest(model2)
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value Pr(>|z|)   
## ar1        0.302001   0.099202  3.0443 0.002332 **
## ar2       -0.241863   0.098727 -2.4498 0.014293 * 
## intercept -0.010841   0.061723 -0.1756 0.860574   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(model2b)
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value Pr(>|z|)   
## ar1        0.298835   0.102398  2.9184 0.003519 **
## ar2       -0.238035   0.103396 -2.3022 0.021326 * 
## ar3       -0.012674   0.101811 -0.1245 0.900928   
## intercept -0.010852   0.060960 -0.1780 0.858708   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(model2c)
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value Pr(>|z|)  
## ar1        0.360282   0.440854  0.8172  0.41379  
## ar2       -0.256001   0.139298 -1.8378  0.06609 .
## ma1       -0.062070   0.459190 -0.1352  0.89248  
## intercept -0.010854   0.060766 -0.1786  0.85824  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Karena parameter \(\phi _3\) atau ar3 tidak berbeda secara signifikan dari angka nol, dan

karena parameter \(\phi _1\) atau ar1 dan parameter \(\phi _2\) atau ar2 pada model ARIMA(3,1,0) tidak berubah secara signifikan dari parameter \(\phi _1\) atau ar1 dan parameter \(\phi _2\) atau ar2 pada model ARIMA(2,1,0), selain itu diperoleh bahwa model ARIMAX(2,1,1) tidak signifikan pada semua parameter dan nilai AIC lebih besar daripada ARIMAX(2,1,0).

Maka model ARIMA(2,1,0) tidak terjadi overfitting atau merupakan model yang baik untuk digunakan. (Cryer dan Chan. 2008)

Uji Diagnostik

Diagnostik Model: Eksploratif

sisaan2 <- model2$residuals

par(mfrow=c(2,2))
qqnorm(sisaan2)
box(col="black",lwd=2)
qqline(sisaan2, col = "red", lwd =1, col.lab="black",
       col.axis="black",col.sub = "black")
box(col="black",lwd=2)
plot(c(1:length(sisaan2)),sisaan2,col="black",col.lab="black",col.axis="black")
box(col="black",lwd=2)
acf(sisaan2,col="black",col.sub = "black",col.axis="black", col.lab="black")
box(col="black",lwd=2)
pacf(sisaan2,col="black",col.sub = "black",col.axis="black", col.lab="black",col.main="black")
box(col="black",lwd=2)
Berdasarkan hasil eksplorasi menggunakan Q-Q plot, terlihat bahwa sisaan berdistribusi tidak mengikuti garis normal, sehingga dapat dikatakan bahwa sisaan tidak menyebar normal. Kemudian, plot sisaan yang diperoleh menunjukkan bahwa sisaan memiliki pola acak dan tersebar di sekitar nilai nol. Sedangkan pada plot ACF dan PACF, nilai awal amatan tidak melewati garis signifikan, atau dapat dikatakan bahwa sisaan saling bebas.

Diagnostik Model: Uji Formal

1. Sisaan Menyebar Normal

Uji formal ini dilakukan dengan Shapiro-Wilk test.

Hipotesis yang diuji:

\(H_{0}\): Sisaan menyebar normal

\(H_{1}\): Sisaan tidak menyebar normal

\(\alpha\) = 5% = 0.05

shapiro.test(sisaan2)
## 
##  Shapiro-Wilk normality test
## 
## data:  sisaan2
## W = 0.85335, p-value = 2.943e-08
Berdasarkan hasil Shapiro-Wilk test, diperoleh p-value = 2.943 x 10-07 > α = 0.05, maka tolak \(H_{0}\). Artinya, tidak cukup bukti untuk menyatakan bahwa sisaan menyebar normal pada taraf nyata 5%.

2. Sisaan Saling Bebas

Uji formal ini dilakukan dengan LJung-Box test.

Hipotesis yang diuji:

\(H_0\): Sisaan antara lag saling bebas

\(H_1\): Sisaan antara lag tidak saling bebas

\(\alpha\) = 5% = 0.05

Box.test(sisaan2, type = "Ljung")
## 
##  Box-Ljung test
## 
## data:  sisaan2
## X-squared = 2.0816e-05, df = 1, p-value = 0.9964
Berdasarkan LJung-Box test, diperoleh p-value = 0.9964 > α = 0.05, maka tak tolak \(H_0\). Artinya, cukup bukti untuk menyatakan bahwa sisaan antara lag saling bebas atau dapat dikatakan tidak ada autokorelasi antara sisaan lag pada taraf nyata 5%.

3. Nilai Tengah Sisaan Sama dengan Nol

Uji formal ini dilakukan dengan t test.

Hipotesis yang diuji:

\(H_0\): Nilai tengah sisaan sama dengan nol

\(H_1\): Nilai tengah sisaan tidak sama dengan nol

\(\alpha\) = 5% = 0.05

t.test(sisaan2, mu = 0, conf.level = 0.95) 
## 
##  One Sample t-test
## 
## data:  sisaan2
## t = 0.016907, df = 94, p-value = 0.9865
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.1145691  0.1165370
## sample estimates:
##    mean of x 
## 0.0009839349
Berdasarkan t-test, diperoleh p-value = 0.9865 > α = 0.05, maka tak tolak \(H_0\). Artinya, cukup bukti untuk menyatakan bahwa nilai tengah sisaan sama dengan nol pada taraf nyata 5%.

4. Uji Kehomogenan Ragam Sisaan

Breusch-Pagan Test

\(H_0\): ragam sisaan homogen

\(H_1\): ragam sisaan tidak homogen

ArchTest(sisaan2)
## 
##  ARCH LM-test; Null hypothesis: no ARCH effects
## 
## data:  sisaan2
## Chi-squared = 16.343, df = 12, p-value = 0.176
Berdasarkan ArchTest, diperoleh p-value = 0.176 > α = 0.05, maka tak tolak \(H_0\). Artinya, cukup bukti untuk menyatakan bahwa ragam sisaan homogen pada taraf nyata 5%.

Forecasting

ramalan <- forecast(Arima(data.train, order=c(2,1,0),method="ML",include.drift = TRUE),h = length(data.test))
data.ramalan <- ramalan$mean
data.ramalan.ts <- ts(data.ramalan, start = 2020, frequency = 12)
plot(ramalan,col="black",col.sub ="black",col.axis="black",
     col.lab="black",col.main="black",lwd=2)
box(col="black",lwd=2)

ts.plot(data.ts,xlab = "Periode", ylab = "Data Inflasi(Persen)", col="black",lwd=2,main="Forecasting ARIMA(2,1,0)",gpars = list(col.main="black",col.axis="black",col.sub="black"))
lines(data.ramalan.ts, col = "blue",lwd=2)
lines(testing.ts, col = "red", lwd =2)
legend(2018,9,c("Data Training", "Data Testing","Data Forecast ARIMA"), 
       lwd=2, col=c("black","red","blue"), cex=0.8)
box(col="black",lwd=2)
Berdasarkan plot di atas, terlihat bahwa hasil forecasting memiliki garis yang cenderung linear dan tidak menglami trend
perbandingan.temp<-matrix(data=c(data.test[1:10], data.ramalan[1:10]), nrow = 10, ncol = 2)
colnames(perbandingan.temp)<-c("Aktual","Hasil Forecast")
head(perbandingan.temp)
##      Aktual Hasil Forecast
## [1,]   2.68       2.656693
## [2,]   2.98       2.695106
## [3,]   2.96       2.711829
## [4,]   2.67       2.697400
## [5,]   2.19       2.678808
## [6,]   1.96       2.666494
error <- data.frame(data.test)-data.frame(data.ramalan[1:34]) 

## SSE (Sum Square Error)
SSE <- sum(error^2, na.rm = T)

## MSE (Mean Squared Error)
MSE<- sapply(error^2, mean, na.rm = T)

## RMSE (Root Mean Square Error)
RMSE <- sqrt(MSE)

## MAD (Mean Absolute Deviation)
MAD <- sapply(abs(error), mean, na.rm = T)

## MAPE (Mean Absolute Percentage Error)
r.error <- (error/data.frame(data.test))*100 # Relative Error
MAPE <- sapply(abs(r.error), mean, na.rm = T)

akurasifarima <- data.frame(
  "Ukuran Keakuratan" = c("SSE", "MSE", "MAPE", "RMSE", "MAD"), 
  "Forecasting" = c(SSE, MSE, MAPE, RMSE, MAD))
akurasifarima
##   Ukuran.Keakuratan Forecasting
## 1               SSE   62.598323
## 2               MSE    1.841127
## 3              MAPE   49.245009
## 4              RMSE    1.356881
## 5               MAD    1.088177
kable(akurasifarima)
Ukuran.Keakuratan Forecasting
SSE 62.598323
MSE 1.841127
MAPE 49.245009
RMSE 1.356881
MAD 1.088177
Berdasarkan data keakuratan diatas, dengan menggunakan fungsi forecasting pada model ARIMA, diperoleh MAPE sebesar 49.24%. Karena nilai MAPE yang sangat besar, forecasting dengan menggunakan model ARIMA pada data yang digunakan diduga kurang tepat untuk dilakukan
Berdasarkan data perbandingan nilai data aktual dan forecasting, terjadi perbedaan nilai yang cukup signifikan antara nilai data aktual dengan nilai data forecast (yang diramalkan). Pada data aktual terdapat trend, sedangkan pada data forecasting menghasilkan garis yang linear. Dan berdasarkan hasil uji keakuratan yang telah dilakukan, diperoleh nilai MAPE yang sangat tinggi. Sehingga, dapat disimpulkan forecasting yang dilakukan dengan menggunakan metode ARIMA kurang baik untuk dilakukan.

Model ARIMAX

Karena model yang dihasilkan oleh metode peramalan ARIMA kurang menghasilkan model yang tepat, maka digunakan suatu metode ARIMA dengan variabel X atau biasa disebut dengan ARIMAX. Metode ini mengambil peubah-peubah yang memiliki pengaruh signifikan terhadap data inflasi di Indonesia dan ditambahkan ke dalam pemodelan deret waktu ARIMAX untuk meningkatkan nilai akurasi.(Newton et al 2020) Peubah-peubah tersebut adalah data inflasi global (X1), data nilai impor minyak gas (X2), dan data nilai kurs jual USD (X3). Ketiga peubah tersebut diduga memiliki pengaruh terhadap inflasi di Indonesia. (Kuntiarti 2018)

Import Data Variabel X

dataGlobal <- dataset$`Global Inflation`
dataImpor <-  dataset$Import
dataKurs1 <- dataset$Price
# Ubah urutan dari bawah ke atas
dataKurs1 <- as.data.frame(t(rev(as.data.frame(t(dataKurs1)))))
dataKurs <- as.numeric(dataKurs1$V1)

Format Time Series

dataGlobal.ts <- ts(dataGlobal,frequency=12,start=2012)
dataImpor.ts <- ts(dataImpor, frequency = 12, start = 2012)
dataKurs.ts <- ts(dataKurs, frequency = 12, start = 2012)

Tahapan Pemodelan ARIMAX

Tahapan pemodelan ARIMAX adalah sebagai berikut:

  1. Eksplorasi data

  2. Pembentukan model regresi

  3. Pemodelan sisaan wt menggunakan ARIMA

  4. Pembentukan model ARIMAX

  5. Evaluasi kebaikan model ARIMAX

Eksplorasi Data

Time Series Plot

plot(dataGlobal.ts,xlab ="Periode", ylab = "Data Inflasi Global(Persen)", col="black", main = "Plot Data Inflasi Global (Persen)")
points(dataGlobal.ts)

plot(dataImpor.ts,xlab ="Periode", ylab = "Nilai Impor Migas", col="black", main = "Plot Data Deret Waktu Data Nilai Impor Migas")
points(dataImpor.ts)

plot(dataKurs.ts,xlab ="Periode", ylab = "Nilai Jual Kurs USD", col="black", main = "Plot Data Deret Waktu Data Nilai Jual Kurs USD")
points(dataKurs.ts)

Splitting Data

#Splitting Data
dataGlobal.train <- ts(dataGlobal[1:96])
dataGlobal.test <- ts(dataGlobal[97:130])

dataImpor.train <- ts(dataImpor[1:96])
dataImpor.test <- ts(dataImpor[97:130])

dataKurs.train <- ts(dataKurs[1:96])
dataKurs.test <- ts(dataKurs[97:130])

#Time Series Data
Globaltraining.ts<-ts(dataGlobal.train,frequency=12, start=2012)
Globaltesting.ts<-ts(dataGlobal.test,frequency=12, start=2020)

Importraining.ts <- ts(dataImpor.train,frequency=12, start=2012)
Importesting.ts <-ts(dataImpor.test,frequency=12, start=2020)

Kurstraining.ts <- ts(dataKurs.train,frequency=12, start=2012)
Kurstesting.ts <-ts(dataKurs.test,frequency=12, start=2020)

Plot Time Series Variabel X

#Plot Data
par(mfrow = c(3,2))
plot(Globaltraining.ts,xlab = "Periode", ylab = "Data Inflasi Global(Persen)", col="black", main = "Data Training Inflasi Global")
points(Globaltraining.ts)

plot(Globaltesting.ts,xlab ="Periode", ylab = "Data Inflasi Global(Persen)", col="black", main = "Data Testing Inflasi Global")
points(Globaltesting.ts)

plot(Importraining.ts,xlab ="Periode", ylab = "Nilai Impor Migas", col="black", main = "Data Training Nilai impor migas")
points(Importraining.ts)

plot(Importesting.ts,xlab ="Periode", ylab = "Nilai Impor Migas", col="black", main = "Testing Data Nilai Impor Migas")
points(Importesting.ts)

plot(Kurstraining.ts,xlab ="Periode", ylab = "Nilai Jual Kurs USD", col="black", main = "Training Kurs USD")
points(Kurstraining.ts)

plot(Kurstesting.ts,xlab ="Periode", ylab = "Nilai Jual Kurs USD", col="black", main = "Testing Kurs USD")
points(Kurstesting.ts)

## Plot Data Training dan testing Inflasi Global
ts.plot(dataGlobal.ts, xlab = "Periode", ylab ="Data Inflasi Global (Persen)", 
        main = "Plot Data Training dan Data Testing")
lines(Globaltraining.ts, col = "blue")
lines(Globaltesting.ts, col="Red")
legend("bottomright",c("Data Training","Data Testing"), 
       lty=8, col=c("blue","red"), cex=0.8)
abline(v=2020, col=c("green"), lty=1, lwd=1)

## Plot Data Training dan testing Nilai Impor Migas
ts.plot(dataImpor.ts, xlab = "Periode", ylab ="Data Nilai Impor Migas", 
        main = "Plot Data Training dan Data Testing")
lines(Importraining.ts, col = "blue")
lines(Importesting.ts, col="Red")
legend("bottomright",c("Data Training","Data Testing"), 
       lty=8, col=c("blue","red"), cex=0.8)
abline(v=2020, col=c("green"), lty=1, lwd=1)

## Plot Data Training dan testing Nilai Jual Kurs USD
ts.plot(dataKurs.ts, xlab = "Periode", ylab ="Data Nilai Jual Kurs USD", 
        main = "Plot Data Training dan Data Testing")
lines(Kurstraining.ts, col = "blue")
lines(Kurstesting.ts, col="Red")
legend("topright",c("Data Training","Data Testing"), 
       lty=8, col=c("blue","red"), cex=0.8)
abline(v=2020, col=c("green"), lty=1, lwd=1)

Korelasi Data

Korelasi Antar Variabel Bebas

korelasix <- c("Inflasi Global vs Nilai Impor" = cor(dataGlobal, dataImpor),"Nilai Impor vs Kurs Jual USD" =cor(dataImpor, dataKurs),"Inflasi Global vs Kurs Jual USD" =cor(dataGlobal, dataKurs))
korx <- data.frame("Nilai Korelasi" = korelasix)
kable(korx)
Nilai.Korelasi
Inflasi Global vs Nilai Impor 0.3116337
Nilai Impor vs Kurs Jual USD -0.5993230
Inflasi Global vs Kurs Jual USD 0.2981848

Karena tidak ada variabel x yang memiliki korelasi yang kuat antara variabel x yang lain, maka dapat disimpulkan bahwa tidak ada variabel x yang bersifat multikolinearitas.

Korelasi Antar Data Testing

korelasitest <- c("Inflasi vs Inflasi Global" = cor(data.test, dataGlobal.test), "Inflasi vs Nilai Impor" =cor(data.test, dataImpor.test),"Inflasi vs Nilai Kurs Jual USD" =cor(data.test, dataKurs.test))
kort <- data.frame("Nilai Korelasi" = korelasitest)
kable(kort)
Nilai.Korelasi
Inflasi vs Inflasi Global 0.5655008
Inflasi vs Nilai Impor 0.6749067
Inflasi vs Nilai Kurs Jual USD 0.5561514

Karena nilai korelasi antara data testing data inflasi global(Persen), nilai impor migas, dan nilai kurs jual USD dengan data testing inflasi secara berturut-turut sebesar 0.5655008, 0.6749067, dan 0.5561514 maka data testingdata inflasi global (Persen), nilai impor migas, dan nilai kurs jual USD dengan data testing inflasi memiliki korelasi positif kuat. Hal ini mengindikasikan bahwa ketiga variabel tersebut memiliki hubungan yang dapat meningkatkan keakuratan peramalan dengan metode ARIMAX

Korelasi Antar Data Testing Variabel Bebas

korelasitest <- c("Global vs Impor" = cor(dataGlobal.test, dataImpor.test),"Impor vs Kurs" =cor(dataImpor.test, dataKurs.test),"Global vs Kurs" =cor(dataGlobal.test, dataKurs.test))
kort <- data.frame("Nilai Korelasi" = korelasitest)
kable(kort)
Nilai.Korelasi
Global vs Impor 0.9229091
Impor vs Kurs 0.2115825
Global vs Kurs 0.1439594

Pola pada data testing data inflasi global dengan data nilai impor migas memiliki hubungan positif yang kuat. Hal ini mengindikasikan bahwa data inflasi global dengan nilai impor migas pada Januari tahun 2020 hingga Oktober tahun 2022 memiliki faktor-faktor pengaruh yang sama.

Pembentukan Model Regresi

Mendefinisikan Variabel Bebas

X1 = dataGlobal
X2 = dataImpor
X3 = dataKurs
y <- data
reg2  <- lm(y~X1+X2+X3)

Metode Best Subset Regression

library(olsrr)
bs.hc <- ols_step_best_subset(reg2)
bs.hc
## Best Subsets Regression
## -----------------------
## Model Index    Predictors
## -----------------------
##      1         X2       
##      2         X1 X2    
##      3         X1 X2 X3 
## -----------------------
## 
##                                                     Subsets Regression Summary                                                    
## ----------------------------------------------------------------------------------------------------------------------------------
##                        Adj.        Pred                                                                                            
## Model    R-Square    R-Square    R-Square     C(p)        AIC         SBIC        SBC         MSEP       FPE       HSP       APC  
## ----------------------------------------------------------------------------------------------------------------------------------
##   1        0.3071      0.3017      0.2862    83.1716    497.9554    127.2309    506.5580    340.1667    2.6569    0.0206    0.7145 
##   2        0.5482      0.5411      0.5223    12.3919    444.3645     75.1549    455.8346    223.5687    1.7593    0.0136    0.4731 
##   3        0.5826      0.5727      0.5526     4.0000    436.0619     67.3899    450.3996    208.1869    1.6505    0.0128    0.4439 
## ----------------------------------------------------------------------------------------------------------------------------------
## AIC: Akaike Information Criteria 
##  SBIC: Sawa's Bayesian Information Criteria 
##  SBC: Schwarz Bayesian Criteria 
##  MSEP: Estimated error of prediction, assuming multivariate normality 
##  FPE: Final Prediction Error 
##  HSP: Hocking's Sp 
##  APC: Amemiya Prediction Criteria

Model terbaik yang dipilih adalah model dengan tiga variabel, yaitu Data Inflasi Global(Persen), Nilai impor migas, dan Nilai Kurs Jual (USD). Hal tersebut dapat dilihat dari:

  1. CP Mallows dan AIC terendah

  2. R-Square terbesar

reg1  <- lm(data~0+X1+X2+X3)
summary(reg1)
## 
## Call:
## lm(formula = data ~ 0 + X1 + X2 + X3)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.4436 -1.0058 -0.2693  1.0162  3.1791 
## 
## Coefficients:
##      Estimate Std. Error t value Pr(>|t|)    
## X1 -5.229e-01  5.772e-02  -9.059 2.00e-15 ***
## X2  1.566e-03  1.006e-04  15.566  < 2e-16 ***
## X3  1.111e-04  2.021e-05   5.497 2.03e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.284 on 127 degrees of freedom
## Multiple R-squared:  0.9218, Adjusted R-squared:  0.9199 
## F-statistic: 498.7 on 3 and 127 DF,  p-value: < 2.2e-16

Diperoleh persamaan regresinya sebagai berikut

Data Inflasi = 0 - 5.229x10-01 x (Data Inflasi Global (Persen)) + 1.566x10-03 x (Nilai impor migas) + 1.111x10-04 (Nilai Jual Kurs USD)
summary(reg2)
## 
## Call:
## lm(formula = y ~ X1 + X2 + X3)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.6514 -0.9502 -0.1336  1.0686  2.9386 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -3.6030779  1.6419370  -2.194  0.03004 *  
## X1          -0.6187629  0.0717186  -8.628 2.29e-14 ***
## X2           0.0019239  0.0001907  10.090  < 2e-16 ***
## X3           0.0003348  0.0001038   3.224  0.00161 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.265 on 126 degrees of freedom
## Multiple R-squared:  0.5826, Adjusted R-squared:  0.5727 
## F-statistic: 58.63 on 3 and 126 DF,  p-value: < 2.2e-16

Diperoleh persamaan regresinya sebagai berikut

Data Inflasi = -3.6030779 - 0.6187629 x (Data Inflasi Global(Persen)) + 0.0019239 x (Nilai impor migas) + 0.0003348 x (Nilai Jual Kurs USD)

\(\beta_0\) dimasukkan karena berpengaruh signifikan
sisaanx <- reg2$residuals
par(mfrow=c(2,2))
qqnorm(sisaanx)
box(col="black",lwd=2)
qqline(sisaanx, col = "red", lwd =1, col.lab="black",
       col.axis="black",col.sub = "black")
box(col="black",lwd=2)
plot(c(1:length(sisaanx)),sisaanx,col="black",col.lab="black",col.axis="black")
box(col="black",lwd=2)
acf(sisaanx,col="black",col.sub = "black",col.axis="black", col.lab="black")
box(col="black",lwd=2)
pacf(sisaanx,col="black",col.sub = "black",col.axis="black", col.lab="black",col.main="black")
box(col="black",lwd=2)

## Pengujian White Noise Regressi

\(H_0\) : \(\rho_1\) = \(\rho_2\) = …. = \(\rho_k\) = 0 untuk k = 1, 2, …, n (Sisaan saling bebas atau sisaan white noise)

\(H_1\) : minimal ada satu \(\rho_k\) ≠ 0 , untuk k = 1, 2, …, n (Sisaan tidak saling bebas atau sisaan tidak terjadi white noise)

Box.test(sisaanx, lag = 12)
## 
##  Box-Pierce test
## 
## data:  sisaanx
## X-squared = 183.34, df = 12, p-value < 2.2e-16
Box.test(sisaanx, lag = 24)
## 
##  Box-Pierce test
## 
## data:  sisaanx
## X-squared = 206.12, df = 24, p-value < 2.2e-16
Box.test(sisaanx, lag = 36)
## 
##  Box-Pierce test
## 
## data:  sisaanx
## X-squared = 239.63, df = 36, p-value < 2.2e-16
Box.test(sisaanx, lag = 48)
## 
##  Box-Pierce test
## 
## data:  sisaanx
## X-squared = 289.73, df = 48, p-value < 2.2e-16
Berdasarkan LJung-Box test, diperoleh p-value 2.2 x 10-16 < α = 0.05, maka tolak \(H_0\). Artinya, cukup bukti untuk menyatakan bahwa sisaan antara lag tidak saling bebas atau sisaan tidak terjadi white noise pada taraf nyata 5%.

Pemodelan sisaan model regresi menggunakan ARIMA

Cek Kestasioneran Data

1. Plot ACF dan PACF

acf(sisaanx, lag.max = 24, main = "Plot ACF Sisaan Regresi")

pacf(sisaanx, lag.max = 24, main = "Plot PACF Sisaan Regresi")

Berdasarkan Plot ACF Sisaan, nilai korelasi antar lag terlihat pada plot di atas menurun secara perlahan (tails off slowly). Hal tersebut mengindikasikan bahwa sisaan tidak stasioner. Perlu dilakukan uji formal untuk mengambil kesimpulan kestasioneran data

2. Uji Formal (ADF-Test)

Secara formal, metode Augmented Dickey-Fuller (ADF) dapat memberikan hasil uji secara akurat untuk menentukan apakah sebuah data stasioner atau tidak. Namun, Uji ADF ini hanya mengukur tingkat stasioneritas berdasarkan nilai tengah saja. Dengan hipotesis yang diuji sebagai berikut :

\(H_{0}\): Nilai tengah sisaan tidak stasioner

\(H_{1}\): Nilai tengah sisaan stasioner

\(\alpha\) = 5% = 0.05

adf.test(sisaanx)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  sisaanx
## Dickey-Fuller = -2.5635, Lag order = 5, p-value = 0.3422
## alternative hypothesis: stationary
Berdasarkan hasil Augmented Dickey-Fuller Test (ADF Test) didapatkan p-value = 0.3422 > \(\alpha\), maka tak tolak \(H_{0}\). Artinya, tidak cukup bukti untuk mengatakan bahwa sisaan stasioner pada taraf nyata 5%. Sehingga, perlu dilakukan differencing sebelum melakukan penentuan model tentatif

Differencing 1

sisaan.dif <- diff(sisaanx, difference = 1)

Uji Formal (ADF-Test)

Pengujian menggunakan Augmented Dickey-Fuller Test

\(H_{0}\): Nilai tengah sisaan tidak stasioner

\(H_{1}\): Nilai tengah sisaan stasioner

\(\alpha\) = 5% = 0.05

adf.test(sisaan.dif)
## Warning in adf.test(sisaan.dif): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  sisaan.dif
## Dickey-Fuller = -5.7088, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
Berdasarkan hasil Augmented Dickey-Fuller Test (ADF Test) didapatkan p-value = 0.01 < \(\alpha\), maka tolak H_0. Artinya, cukup bukti untuk mengatakan bahwa sisaan stasioner pada taraf nyata 5% setelah dilakukan differencing sebanyak 1 kali.

ACF & PACF Plot, EACF Matrix Setelah Differencing

acf(sisaan.dif, lag.max = 24, main = "Plot ACF Sisaan Setelah Differencing satu kali")

pacf(sisaan.dif, lag.max = 24, main = "Plot PACF Sisaan Setelah Differencing satu kali")

Berdasarkan plot ACF dan PACF di atas,terlihat bahwa nilai korelasi antara data dengan lag seperti gambar di atas tidak turun secara perlahan, dimana pada plot ACF diperoleh cuts off pada lag ke-2 dan pada plot PACF diperoleh cut off di lag 2. Berdasarkan hasil eksplorasi di atas, model yang dapat dibentuk secara berurutan adalah ARIMAX(0,1,2) dan ARIMAX(2,1,0).
eacf(sisaan.dif)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 o o o o o o o x o o o  o  o  o 
## 1 x x o o o o o x o o o  o  o  o 
## 2 x x o o o o o o o x o  o  o  o 
## 3 x x x o o o o o o o o  o  o  o 
## 4 x x x o o o o o o o o  o  o  o 
## 5 x o o o x o o o o o o  o  o  o 
## 6 x o x x x o o o o o o  o  o  o 
## 7 x x o o x o o o o o o  o  o  o

Dari Matriks EACF dapat diduga model yang cocok adalah model :

  1. ARIMAX(0,1,1)

  2. ARIMAX(1,1,2)

  3. ARIMAX(2,1,1)

  4. ARIMAX(3,1,1)

Identifikasi Model Tentatif

Berdasarkan plot ACF, PACF, dan matriks EACF, diperoleh 5 model tentatif beserta orde parameternya, sebagai berikut:

ARIMAX(0,1,2), dengan orde p = 0, d = 1, dan q = 2

ARIMAX(2,1,0), dengan orde p = 2, d = 1, dan q = 0

ARIMAX(0,1,3), dengan orde p = 0, d = 1, dan q = 3

ARIMAX(1,1,2), dengan orde p = 1, d = 1, dan q = 2

ARIMAX(2,1,1), dengan orde p = 2, d = 1, dan q = 1

ARIMAX(3,1,1), dengan orde p = 3, d = 1, dan q = 1

modelx1 <- Arima(data.train, order = c(0,1,2), xreg = cbind(dataGlobal.train,dataImpor.train,dataKurs.train), method = "ML")
modelx2 <- Arima(data.train, order = c(2,1,0), xreg = cbind(dataGlobal.train,dataImpor.train,dataKurs.train), method = "ML")
modelx3 <- Arima(data.train, order = c(0,1,1), xreg = cbind(dataGlobal.train,dataImpor.train,dataKurs.train), method = "ML")
modelx4 <- Arima(data.train, order = c(1,1,2), xreg = cbind(dataGlobal.train,dataImpor.train,dataKurs.train), method = "ML")
modelx5 <- Arima(data.train, order = c(2,1,1), xreg = cbind(dataGlobal.train,dataImpor.train,dataKurs.train), method = "ML")
modelx6 <- Arima(data.train, order = c(3,1,1), xreg = cbind(dataGlobal.train,dataImpor.train,dataKurs.train), method = "ML")

ARIMAX(0,1,2)

coeftest(modelx1)
## 
## z test of coefficients:
## 
##                     Estimate  Std. Error z value Pr(>|z|)  
## ma1               0.30369431  0.12471198  2.4352  0.01488 *
## ma2              -0.14535815  0.12160700 -1.1953  0.23197  
## dataGlobal.train  0.08518822  0.24438948  0.3486  0.72741  
## dataImpor.train   0.00019605  0.00016956  1.1562  0.24760  
## dataKurs.train    0.00033330  0.00022281  1.4959  0.13468  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Berdasarkan data di atas diperoleh bahwa semua parameter pada model ARIMAX(0,1,2) tidak signifikan. Hal ini dapat dilihat dari parameter yang memiliki nilai Pr(>|z|) > 0.05, sehingga model tersebut tidak dapat dimasukan kedalam kandidat model terbaik.

ARIMAX(2,1,0)

coeftest(modelx2)
## 
## z test of coefficients:
## 
##                     Estimate  Std. Error z value Pr(>|z|)   
## ar1               0.31513976  0.10911519  2.8881 0.003875 **
## ar2              -0.26537823  0.09926247 -2.6735 0.007506 **
## dataGlobal.train  0.08855213  0.23546296  0.3761 0.706860   
## dataImpor.train   0.00018159  0.00016629  1.0920 0.274815   
## dataKurs.train    0.00030598  0.00022032  1.3888 0.164899   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Berdasarkan data di atas diperoleh bahwa semua parameter pada model ARIMA(2,1,0) signifikan. Hal ini dapat dilihat dari semua parameter memiliki nilai Pr(>|z|) < 0.05, sehingga model tersebut dapat dimasukan kedalam kandidat model terbaik.

ARIMAX(0,1,1)

coeftest(modelx3)
## 
## z test of coefficients:
## 
##                    Estimate Std. Error z value  Pr(>|z|)    
## ma1              0.40531227 0.10445739  3.8802 0.0001044 ***
## dataGlobal.train 0.18495411 0.23005851  0.8039 0.4214294    
## dataImpor.train  0.00018893 0.00016495  1.1454 0.2520596    
## dataKurs.train   0.00025912 0.00021377  1.2122 0.2254541    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Berdasarkan data di atas diperoleh bahwa ada parameter pada model ARIMA(0,1,3) yang tidak signifikan. Hal ini dapat dilihat dari parameter yang memiliki nilai Pr(>|z|) > 0.05, sehingga model tersebut tidak dapat dimasukan kedalam kandidat model terbaik.

ARIMAX(1,1,2)

coeftest(modelx4)
## 
## z test of coefficients:
## 
##                     Estimate  Std. Error z value  Pr(>|z|)    
## ar1               0.72048476  0.24494142  2.9415  0.003267 ** 
## ma1              -0.39956373  0.22896412 -1.7451  0.080969 .  
## ma2              -0.39538677  0.09891344 -3.9973 6.407e-05 ***
## dataGlobal.train  0.09288089  0.24053289  0.3861  0.699388    
## dataImpor.train   0.00020993  0.00016912  1.2413  0.214496    
## dataKurs.train    0.00030638  0.00021990  1.3933  0.163535    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Berdasarkan data di atas diperoleh bahwa ada parameter pada model ARIMA(1,1,2) yang tidak signifikan. Hal ini dapat dilihat dari parameter yang memiliki nilai Pr(>|z|) > 0.05, sehingga model tersebut tidak dapat dimasukan kedalam kandidat model terbaik.

ARIMAX(2,1,1)

coeftest(modelx5)
## 
## z test of coefficients:
## 
##                     Estimate  Std. Error z value Pr(>|z|)
## ar1               0.15317779  0.38598379  0.3969   0.6915
## ar2              -0.22298341  0.15023530 -1.4842   0.1377
## ma1               0.18044916  0.40465184  0.4459   0.6556
## dataGlobal.train  0.12197799  0.24145086  0.5052   0.6134
## dataImpor.train   0.00017780  0.00016537  1.0752   0.2823
## dataKurs.train    0.00031464  0.00021945  1.4338   0.1516
Berdasarkan data di atas diperoleh bahwa semua parameter pada model ARIMA(2,1,1) tidak signifikan. Hal ini dapat dilihat dari semua parameter memiliki nilai Pr(>|z|) > 0.05, sehingga model tersebut tidak dapat dimasukan kedalam kandidat model terbaik.

ARIMAX(3,1,1)

coeftest(modelx6)
## 
## z test of coefficients:
## 
##                     Estimate  Std. Error z value Pr(>|z|)
## ar1               0.01032177  0.99586334  0.0104   0.9917
## ar2              -0.17773953  0.32939516 -0.5396   0.5895
## ar3              -0.04309874  0.29720279 -0.1450   0.8847
## ma1               0.32049764  0.97511813  0.3287   0.7424
## dataGlobal.train  0.11312053  0.24682332  0.4583   0.6467
## dataImpor.train   0.00017954  0.00016591  1.0822   0.2792
## dataKurs.train    0.00031653  0.00021996  1.4390   0.1501
Berdasarkan data di atas diperoleh bahwa semua parameter pada model ARIMA(3,1,1) tidak signifikan. Hal ini dapat dilihat dari semua parameter memiliki nilai Pr(>|z|) > 0.05, sehingga model tersebut tidak dapat dimasukan kedalam kandidat model terbaik.
#AIC ARIMA dan Signifikansi Parameter
modelxaccuracy<-data.frame(
  "Model"=c("ARIMAX(0,1,2)", "ARIMAX(2,1,0)", "ARIMAX(0,1,1)", "ARIMAX(1,1,2)","ARIMAX(2,1,1)", "ARIMAX(3,1,1)"),
  "AIC"=c(modelx1$aic, modelx2$aic, modelx3$aic,modelx4$aic,modelx5$aic,modelx6$aic),
  "BIC"=c(modelx1$bic, modelx2$bic, modelx3$bic,modelx4$bic,modelx5$bic,modelx6$bic),
  "Signifikansi"=c("Tidak Signifikan","Signifikan","Signifikan","Tidak Signifikan","Tidak Signifikan","Tidak Signifikan"))

modelxaccuracy
##           Model      AIC      BIC     Signifikansi
## 1 ARIMAX(0,1,2) 169.0097 184.3330 Tidak Signifikan
## 2 ARIMAX(2,1,0) 168.0144 183.3377       Signifikan
## 3 ARIMAX(0,1,1) 168.4533 181.2227       Signifikan
## 4 ARIMAX(1,1,2) 169.4186 187.2958 Tidak Signifikan
## 5 ARIMAX(2,1,1) 169.8616 187.7388 Tidak Signifikan
## 6 ARIMAX(3,1,1) 171.8390 192.2700 Tidak Signifikan
kable(modelxaccuracy)
Model AIC BIC Signifikansi
ARIMAX(0,1,2) 169.0097 184.3330 Tidak Signifikan
ARIMAX(2,1,0) 168.0144 183.3377 Signifikan
ARIMAX(0,1,1) 168.4533 181.2227 Signifikan
ARIMAX(1,1,2) 169.4186 187.2958 Tidak Signifikan
ARIMAX(2,1,1) 169.8616 187.7388 Tidak Signifikan
ARIMAX(3,1,1) 171.8390 192.2700 Tidak Signifikan
Selain nilai AIC terkecil, perlu dilihat dari signifikasi pendugaan parameter model. Terdapat satu model tentatif dengan semua parameter yang berpengaruh signifikan, yaitu model ARIMAX(2,1,0). Sehingga model ARIMAX(2,1,0) dipilih sebagai model terbaik

Overfitting

ARIMAX(3,1,0)

model2x <- Arima(data.train, order = c(3,1,0), xreg = cbind(dataGlobal.train,dataKurs.train,dataImpor.train), method = "ML")
coeftest(model2b)
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value Pr(>|z|)   
## ar1        0.298835   0.102398  2.9184 0.003519 **
## ar2       -0.238035   0.103396 -2.3022 0.021326 * 
## ar3       -0.012674   0.101811 -0.1245 0.900928   
## intercept -0.010852   0.060960 -0.1780 0.858708   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(model2x)
## 
## z test of coefficients:
## 
##                     Estimate  Std. Error z value Pr(>|z|)   
## ar1               0.32853331  0.11741531  2.7980 0.005141 **
## ar2              -0.27649036  0.10576971 -2.6141 0.008947 **
## ar3               0.03302335  0.10876297  0.3036 0.761412   
## dataGlobal.train  0.11475884  0.24927356  0.4604 0.645248   
## dataKurs.train    0.00030987  0.00021913  1.4141 0.157340   
## dataImpor.train   0.00017781  0.00016572  1.0729 0.283310   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ARIMAX(2,1,1)

coeftest(modelx5)
## 
## z test of coefficients:
## 
##                     Estimate  Std. Error z value Pr(>|z|)
## ar1               0.15317779  0.38598379  0.3969   0.6915
## ar2              -0.22298341  0.15023530 -1.4842   0.1377
## ma1               0.18044916  0.40465184  0.4459   0.6556
## dataGlobal.train  0.12197799  0.24145086  0.5052   0.6134
## dataImpor.train   0.00017780  0.00016537  1.0752   0.2823
## dataKurs.train    0.00031464  0.00021945  1.4338   0.1516

Karena parameter \(\phi _3\) atau ar3 tidak berbeda secara signifikan dari angka nol, dan

karena parameter \(\phi _1\) atau ar1 dan parameter \(\phi _2\) atau ar2 pada model ARIMAX(3,1,0) tidak berubah secara signifikan dari parameter \(\phi _1\) atau ar1 dan parameter \(\phi _2\) atau ar2 pada model ARIMAX(2,1,0), selain itu diperoleh bahwa model ARIMAX(2,1,1) tidak signifikan pada semua parameter dan nilai AIC lebih besar daripada ARIMAX(2,1,0).

Maka model ARIMAX(2,1,0) tidak terjadi overfitting atau merupakan model yang baik untuk digunakan. (Cryer dan Chan. 2008)

Diagnostik Model ARIMAX(2,1,0)

sisaan.arimax <- modelx2$residuals

Pengujian White Noise

\(H_0\) : \(\rho_1\) = \(\rho_2\) = …. = \(\rho_k\) = 0 untuk k = 1, 2, …, n (Sisaan saling bebas atau sisaan white noise)

\(H_1\) : minimal ada satu \(\rho_k\) ≠ 0 , untuk k = 1, 2, …, n (Sisaan tidak saling bebas atau sisaan tidak terjadi white noise)

Box.test(sisaan.arimax, lag = 12)
## 
##  Box-Pierce test
## 
## data:  sisaan.arimax
## X-squared = 18.16, df = 12, p-value = 0.1109
Box.test(sisaan.arimax, lag = 24)
## 
##  Box-Pierce test
## 
## data:  sisaan.arimax
## X-squared = 29.638, df = 24, p-value = 0.197
Box.test(sisaan.arimax, lag = 36)
## 
##  Box-Pierce test
## 
## data:  sisaan.arimax
## X-squared = 36.092, df = 36, p-value = 0.4643
Box.test(sisaan.arimax, lag = 48)
## 
##  Box-Pierce test
## 
## data:  sisaan.arimax
## X-squared = 41.322, df = 48, p-value = 0.7412
Berdasarkan LJung-Box test, untuk setiap lag diperoleh p-value > α = 0.05, maka terima \(H_0\). Artinya, tidak cukup bukti untuk menyatakan bahwa sisaan antara lag tidak saling bebas atau sisaan tidak terjadi white noise pada taraf nyata 5%.
plot(sisaan.arimax, type="o",ylab="Sisaan", xlab="Order",main="Plot Sisaan vs Order")
abline(h=0,col="red")

acf(sisaan.arimax, lag.max = 24, main = "Plot ACF Sisaan Model ARIMAX") 

pacf(sisaan.arimax, lag.max = 24, main = "Plot ACF Sisaan Model ARIMAX")

Forecast Model ARIMAX(2,1,0)

ramalanx <- forecast((modelx2), xreg = cbind(dataGlobal.test,dataImpor.test,dataKurs.test))
## Warning in forecast.forecast_ARIMA((modelx2), xreg = cbind(dataGlobal.test, :
## xreg contains different column names from the xreg used in training. Please
## check that the regressors are in the same order.
data.ramalanx <- ramalanx$mean
data.ramalan.tsx <- ts(data.ramalanx, start = 2020, frequency = 12)
plot(ramalanx,col="black",col.sub ="black",col.axis="black",
     col.lab="black",col.main="black",lwd=2)
box(col="black",lwd=2)

perbandinganx <- matrix(c(data.test[1:10], data.ramalanx[1:10]), nrow = 10, ncol = 2, byrow = FALSE)
colnames(perbandinganx) <- c("Aktual", "Ramalan")
perbandinganx
##       Aktual  Ramalan
##  [1,]   2.68 2.632256
##  [2,]   2.98 2.845049
##  [3,]   2.96 3.370148
##  [4,]   2.67 2.665953
##  [5,]   2.19 2.526681
##  [6,]   1.96 2.456059
##  [7,]   1.54 2.646489
##  [8,]   1.32 2.683225
##  [9,]   1.42 2.814403
## [10,]   1.44 2.712852
kable(perbandinganx)
Aktual Ramalan
2.68 2.632255
2.98 2.845049
2.96 3.370148
2.67 2.665953
2.19 2.526681
1.96 2.456059
1.54 2.646489
1.32 2.683225
1.42 2.814403
1.44 2.712852
Data ramalan memiliki perbedaan yang signifikan dengan data aktual, tetapi Forecasting ARIMAX(2,1,0) memiliki trend data ramalan naik-turun yang sama dengan data aktual
ts.plot(data.ts,xlab = "Periode", ylab = "Data Inflasi(Persen)", col="black",lwd=2,main="Forecasting ARIMAX(2,1,0)",gpars = list(col.main="black",col.axis="black",col.sub="black"))
lines(data.ramalan.tsx, col = "blue",lwd=2)
lines(testing.ts, col = "red", lwd =2)
legend(2018,9,c("Data Training", "Data Testing", "Data Forecast ARIMAX(2,1,0)"), 
       lwd=2, col=c("black","red","blue"), cex=0.8)
box(col="black",lwd=2)

error <- data.frame(data.test)-data.frame(data.ramalanx[1:34]) 

## SSE (Sum Square Error)
SSE <- sum(error^2, na.rm = T)

## MSE (Mean Squared Error)
MSE<- sapply(error^2, mean, na.rm = T)

## RMSE (Root Mean Square Error)
RMSE <- sqrt(MSE)

## MAD (Mean Absolute Deviation)
MAD <- sapply(abs(error), mean, na.rm = T)

## MAPE (Mean Absolute Percentage Error)
r.error <- (error/data.frame(data.test))*100 # Relative Error
MAPE <- sapply(abs(r.error), mean, na.rm = T) 
akurasiarimax <- data.frame(
  "Ukuran Keakuratan" = c("SSE", "MSE", "MAPE", "RMSE", "MAD"), 
  "Forecasting" = c(SSE, MSE, MAPE, RMSE, MAD))
kable(akurasiarimax) 
Ukuran.Keakuratan Forecasting
SSE 52.362820
MSE 1.540083
MAPE 60.229263
RMSE 1.241001
MAD 1.098647

Perbandingan Forecast ARIMA dengan Forecast ARIMAX

forecasterror <- data.frame("Ukuran Keakuratan" = akurasifarima$Ukuran.Keakuratan, "Akurasi ARIMA" = akurasifarima$Forecasting , "Akurasi ARIMAX" = akurasiarimax$Forecasting)
kable(forecasterror)
Ukuran.Keakuratan Akurasi.ARIMA Akurasi.ARIMAX
SSE 62.598323 52.362820
MSE 1.841127 1.540083
MAPE 49.245009 60.229263
RMSE 1.356881 1.241001
MAD 1.088177 1.098647
Ukuran keakuratan pada model ARIMA(2,1,0) memiliki nilai MAPE yang lebih rendah dibandingkan dengan nilai MAPE pada ARIMAX(2,1,0). Tetapi, jumlah kuadrat galat (Sum Square Error) pada ARIMAX(2,1,0) memiliki nilai yang lebih kecil dibandingkan pada model ARIMA(2,1,0). Sehingga, dapat diasumsikan bahwa model ARIMAX(2,1,0) memiliki model yang lebih baik dibandingkan dengan ARIMA(2,1,0) dan dapat meramalkan lebih baik untuk periode selanjutnya.
ts.plot(data.ts,xlab = "Periode", ylab = "Data Inflasi(Persen)", col="black",lwd=2,main="Forecasting ARIMAX(2,1,0) vs Forecasting ARIMA(2,1,0)",gpars = list(col.main="black",col.axis="black",col.sub="black"))
lines(data.ramalan.tsx, col = "blue",lwd=2)
lines(data.ramalan.ts, col = "purple", lwd=1)
lines(testing.ts, col = "red", lwd =2)
abline(v=2020, col=c("green"), lty=1, lwd=1)
legend(2019,9,c("Data Testing","Data Forecast ARIMAX", "Data Forecast ARIMA", "Split Data"), 
       lwd=2, col=c("red","blue","purple","green"), cex=0.8)
box(col="black",lwd=2)

korarimax <- cor(data.test,data.ramalan.tsx)
korarima <- cor(data.test,data.ramalan.ts)
framekorelasi <- data.frame(
  "Variabel Korelasi" = c("ARIMAX(2,1,0) vs Data Aktual", "ARIMA(2,1,0) vs Data Aktual"), 
  "Nilai Korelasi" = c(korarimax, korarima))
kable(framekorelasi) 
Variabel.Korelasi Nilai.Korelasi
ARIMAX(2,1,0) vs Data Aktual 0.7224937
ARIMA(2,1,0) vs Data Aktual -0.5882779
Model pada Forecasting ARIMAX(2,1,0) memiliki trend peramalan yang lebih baik dibandingkan dengan Forecasting ARIMA(2,1,0). Korelasi dengan data aktual pada model Forecasting ARIMA(2,1,0) memiliki korelasi yang negatif kuat, sedangkan korelasi dengan data aktual pada model Forecasting ARIMAX(2,1,0) memiliki korelasi yang positif kuat. Maka, dapat dikatakan bahwa model Forecasting ARIMAX(2,1,0) memiliki korelasi yang tepat dengan data aktual. Sehingga, model Forecasting ARIMAX(2,1,0) merupakan model terbaik untuk dilakukan peramalan.

Kesimpulan

Berdasarkan hasil analisis dapat disimpulkan bahwa hasil perbandingan dari pemodelan ARIMA(2,1,0) dengan ARIMAX(2,1,0) yang digunakan untuk pendugaan model terbaik pada data inflasi bulanan di Indonesia adalah ARIMAX(2,1,0) dengan tiga peubah respon. Walaupun MAPE ARIMA lebih kecil, tetapi ARIMAX untuk nilai SSE dan MSE dari ARIMAX(2,1,0) lebih kecil. Model yang terbentuk pada pemodelan ARIMAX(2,1,0) juga lebih baik dalam melakukan peramalan karena hasil peramalan yang dihasilkan memiliki tren yang hampir sama dengan tren data aslinya. Kesesuaian tren pada plot tersebut dibuktikan oleh korelasi antara model ARIMAX(2,1,0) dengan data aktual sebesar 0.7225

Daftar Pustaka

Habsari HDP, Purnamasari I, Yuniarti D. 2020. Peramalan menggunakan metode Double Exponential Smoothing dan verifikasi hasil peramalan menggunakan grafik pengendali tracking signal. Jurnal Ilmu Matematika dan Terapan. 14(1): 13-22. doi:10.30598/barekengvol14iss1pp013-022.

Kuntiarti DD. 2018. Pengaruh inflasi, jumlah penduduk dan kenaikan upah minimum terhadap pengangguran terbuka di Provinsi Banten tahun 2010-2015. Jurnal Pendidikan dan Ekonomi. 7(1).

Newton, Kurnia A, Sumertajaya IM. 2020. Analisis inflasi menggunakan data google trends dengan model arimax di DKI Jakarta. Indonesian Journal of Statistics and Its Applications.4(3): 545 - 556.

Cryer JD, Chan KS. 2008. Time Series Analysis With Applications in R. New York (NY): Springer New York.

Febrian D, Idrus SIA, Nainggolan DAJ. 2020. The comparison of Double Moving Average and Double Exponential Smoothing methods in forecasting the number of foreign tourists coming to North Sumatera, Journal of Physics: Conference Series. 1462(1): 012046. DOI:10.1088/1742-6596/1462/1/012046

Kristanti N, Darsyah MY. 2017. Perbandingan peramalan metode Single Exponential Smoothing dan Double Exsponential Smoothing pada karakteristik penduduk bekerja di Indonesia tahun 2017.Di dalam: Prosiding Seminar Nasional Mahasiswa Unimus(Vol.1)

Hartati H. 2017. Penggunaan Metode Arima Dalam Meramal Pergerakan Inflasi. Jurnal Matematika Sains Dan Teknologi. 18(1): 1–10.

Elvani SP, Utary AR, Yudaruddin R. 2016. Peramalan jumlah produksi tanaman kelapa sawit dengan menggunakan metode Arima (Autoregressive Integrated Moving Average). Jurnal Manajemen. 8(1): 95-112. doi

Hikmah A, Agoestanto A, Arifudin R. 2018. Peramalan deret waktu dengan menggunakan Autoregressive (AR), jaringan syaraf tiruan Radial basis function (Rbf) dan Hibrid Ar-Rbf pada Inflasi Indonesia. Unnes Journal of Mathematics. 7(2): 228-241. doi:10.15294/ujm.v7i2.1398

Hakimah M, Rahmawati WM, Afandi AY. 2020. PENGUKURAN KINERJA METODE PERAMALAN TIPE EXPONENTIAL SMOOTHING DALAM PARAMETER TERBAIKNYA. Jurnal Ilmiah NERO. 5(1): 44-50. - Tinjauan pustaka (SES & DES) - https://nero.trunojoyo.ac.id/index.php/nero/article/view/150/139