TUGAS EKONOMETRIKA (PREDIKSI TINGKAT INFLASI)

Author

HENDRIK DIANUS PASILA (A013222001)

Published

October 21, 2023

1 Data

library(readxl)
library(ggplot2)
library(tseries)
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo 
library(forecast)

Dalam analisis ini menggunakan Data Inflasi Indonesia dari tahun 2016 sampai dengan tahun 2020, bersumber dari Badan Pusat Statistik (BPS) Indonesia.

data <- read_excel("Inflasi.xlsx", 
                   sheet = "Sheet2")

data.ts <-  ts(data, 
            frequency=12, 
            start=c(2016,1))

print(data.ts)
      Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
2016 4.14 4.42 4.45 3.60 3.33 3.45 3.21 2.79 3.07 3.31 3.58 3.02
2017 3.49 3.83 3.61 4.17 4.33 4.37 3.88 3.82 3.72 3.58 3.30 3.61
2018 3.25 3.18 3.40 3.41 3.23 3.12 3.18 3.20 2.88 3.16 3.23 3.13
2019 2.82 2.57 2.48 2.83 3.32 3.28 3.32 3.49 3.39 3.13 3.00 2.72
2020 2.68 2.98 2.96 2.67 2.19 1.96 1.54 1.32 1.42 1.44 1.59 1.68
plot(data.ts, xlab = "Periode", 
     ylab = "Inflasi", 
     col="black",
     main = "Inflasi")

points(data.ts)

2 Uji Stasioner

2.1 Augmented Dickey-Fuller (ADF) dan Kwiatkowski-Phillips-Schmidt-Shin (KPSS).

Pengujian stasioneritas digunakan untuk menentukan apakah data time series yang digunakan memiliki karakteristik stasioner atau tidak. Kestasioneran sangat penting dalam analisis data time series karena ketidakstasioneran data dapat menghambat kemampuan kita untuk melakukan peramalan. Hasil pengujian untuk adanya unit root pada semua variabel yang dimasukkan dalam model menunjukkan bahwa tidak ada unit root atau dapat dikatakan bahwa semua variabel bersifat stasioner pada tingkatnya. Dalam analisis ini, uji dilakukan menggunakan dua metode, yaitu uji Augmented Dickey-Fuller (ADF) dengan menggunakan fungsi adf.test dan uji Kwiatkowski-Phillips-Schmidt-Shin (KPSS) dengan menggunakan fungsi kpss.test.

adf.test(data.ts)

    Augmented Dickey-Fuller Test

data:  data.ts
Dickey-Fuller = -2.5124, Lag order = 3, p-value = 0.3677
alternative hypothesis: stationary
kpss.test(data.ts)
Warning in kpss.test(data.ts): p-value smaller than printed p-value

    KPSS Test for Level Stationarity

data:  data.ts
KPSS Level = 1.0417, Truncation lag parameter = 3, p-value = 0.01

Berdasarkan hasil uji Augmented Dickey-Fuller diperoleh p-value sebesar 0.3667 > 0.05 yang berarti bahwa H0 gagal ditolak atau data tidak stasioner. Karena data tidak stasioner maka selanjutnya dilakukan differencing untuk membuat data stasioner sebelum dilakukan identifikasi model tentatif.

2.2 Differencing

Apabila ditemukan data yang tidak stasioner, maka harus menstasionerkan data terlebih dahulu dengan proses differencing. Proses differencing dilakukan sampai data menjadi stasioner

data.dif1<-diff(data.ts,
                differences = 1) 

plot(data.dif1, 
     main = "Data yang Telah di-Differencing")

adf.test(data.dif1)

    Augmented Dickey-Fuller Test

data:  data.dif1
Dickey-Fuller = -3.5252, Lag order = 3, p-value = 0.0472
alternative hypothesis: stationary

Hasilnya hanya perlu 1 kali differencing untuk membuat data stasioner. Jadi model dasar ini bahwa model optimal hanya membutuhkan 1 kali differencing.

2.3 ACF dan PACF Plot:

plot ACF (Autocorrelation Function) dan PACF (Partial Autocorrelation Function) dari data yang telah didifferencing. Plot ini akan membantu Anda menentukan nilai p (lag untuk model AR) dan q (lag untuk model MA). Selanjutnya Kami membuat model ARIMA menggunakan fungsi auto.arima, fungsi otomatis ini akan memberikan hasil yang optimal dari model arima.

acf(data.dif1, 
    main="Plot ACF Data Inflasi")

pacf(data.dif1,
     main="Plot PACF Data Inflasi")

auto.arima(data,
           trace = TRUE)

 ARIMA(2,1,2) with drift         : 22.14357
 ARIMA(0,1,0) with drift         : 21.15307
 ARIMA(1,1,0) with drift         : 22.9851
 ARIMA(0,1,1) with drift         : 22.77065
 ARIMA(0,1,0)                    : 20.30916
 ARIMA(1,1,1) with drift         : 24.28718

 Best model: ARIMA(0,1,0)                    
Series: data 
ARIMA(0,1,0) 

sigma^2 = 0.07976:  log likelihood = -9.12
AIC=20.24   AICc=20.31   BIC=22.32

Model yang kita peroleh adalah ARIMA(0,1,0), seperti yang kita prediksi sebelum differencing optimum adalah 1, kita bisa melihatnya dari ARIMA(p,d,q) sehingga differencing berdasarkan model adalah d = 1.

3 ARIMA

Model ARIMA dengan parameter yang telah ditentukan menggunakan data tingkat inflasi sebelum Desember 2020.

data20.train <- ts(data.ts[1:59,1])

data2 <-ts(data20.train,
                frequency=12, 
                start=c(2016,1))
print(data2)
      Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
2016 4.14 4.42 4.45 3.60 3.33 3.45 3.21 2.79 3.07 3.31 3.58 3.02
2017 3.49 3.83 3.61 4.17 4.33 4.37 3.88 3.82 3.72 3.58 3.30 3.61
2018 3.25 3.18 3.40 3.41 3.23 3.12 3.18 3.20 2.88 3.16 3.23 3.13
2019 2.82 2.57 2.48 2.83 3.32 3.28 3.32 3.49 3.39 3.13 3.00 2.72
2020 2.68 2.98 2.96 2.67 2.19 1.96 1.54 1.32 1.42 1.44 1.59     
plot(data2, 
     main = "Data Sebelum Desember 2020")

model_arima <- Arima(data2, order = c(0, 1, 0))

summary(model_arima)
Series: data2 
ARIMA(0,1,0) 

sigma^2 = 0.081:  log likelihood = -9.41
AIC=20.82   AICc=20.89   BIC=22.88

Training set error measures:
                      ME      RMSE       MAE       MPE     MAPE      MASE
Training set -0.04315017 0.2821743 0.2256634 -2.068089 7.658258 0.3267461
                   ACF1
Training set 0.07864049

RMSE adalah singkatan dari Root Mean Squared Error, yang merupakan metrik evaluasi yang umum digunakan untuk mengukur kesalahan model. Dalam kasus ini, RMSE memiliki nilai sekitar 0.2821743, yang mengindikasikan bahwa rata-rata selisih antara prediksi dan nilai aktual adalah sekitar 0.2821743.

3.1 ARIMA dan Prediksi tingkat inflasi 2021

Validasi model ARIMA dengan membandingkan prediksi tingkat inflasi pada periode Januari 2021 hingga Desember 2021 dengan data aktual 2021.

prediksi <- forecast(model_arima, h = 13)

prediksi
         Point Forecast     Lo 80    Hi 80       Lo 95    Hi 95
Dec 2020           1.59 1.2252750 1.954725  1.03220126 2.147799
Jan 2021           1.59 1.0742010 2.105799  0.80115346 2.378847
Feb 2021           1.59 0.9582778 2.221722  0.62386425 2.556136
Mar 2021           1.59 0.8605500 2.319450  0.47440253 2.705597
Apr 2021           1.59 0.7744501 2.405550  0.34272411 2.837276
May 2021           1.59 0.6966099 2.483390  0.22367772 2.956322
Jun 2021           1.59 0.6250284 2.554972  0.11420326 3.065797
Jul 2021           1.59 0.5584019 2.621598  0.01230692 3.167693
Aug 2021           1.59 0.4958250 2.684175 -0.08339621 3.263396
Sep 2021           1.59 0.4366383 2.743362 -0.17391448 3.353914
Oct 2021           1.59 0.3803441 2.799656 -0.26000912 3.440009
Nov 2021           1.59 0.3265556 2.853444 -0.34227150 3.522272
Dec 2021           1.59 0.2749653 2.905035 -0.42117194 3.601172
plot(prediksi, main = "Prediksi Tingkat Inflasi")

data2021 <- read_excel("Inflasi.xlsx", sheet = "2021")
data.aktual2021 <-  ts(data2021, 
            frequency=12, 
            start=c(2021,1))
print(data.aktual2021)
      Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
2021 1.55 1.38 1.37 1.42 1.68 1.33 1.52 1.59 1.60 1.66 1.75 1.87
plot(prediksi, main = "Prediksi ARIMA vs Tingkat Inflasi Aktual")

lines(data.aktual2021, 
      col = "red")

legend("topleft", 
       legend = c("Prediksi", "Aktual"), 
       col = c("black", "blue"), lty = 1)

3.2 ARIMA dan Prediksi tingkat inflasi 2021

Model ARIMA yang telah disiapkan akan digunakan untuk melakukan perkiraan tingkat inflasi untuk tahun 2022, dan kemudian akan dibandingkan dengan data inflasi sebenarnya yang tercatat pada tahun tersebut.

prediksi2 <- forecast(model_arima, h = 25)

prediksi2
         Point Forecast         Lo 80    Hi 80       Lo 95    Hi 95
Dec 2020           1.59  1.2252750106 1.954725  1.03220126 2.147799
Jan 2021           1.59  1.0742009734 2.105799  0.80115346 2.378847
Feb 2021           1.59  0.9582777875 2.221722  0.62386425 2.556136
Mar 2021           1.59  0.8605500211 2.319450  0.47440253 2.705597
Apr 2021           1.59  0.7744501305 2.405550  0.34272411 2.837276
May 2021           1.59  0.6966098794 2.483390  0.22367772 2.956322
Jun 2021           1.59  0.6250283810 2.554972  0.11420326 3.065797
Jul 2021           1.59  0.5584019468 2.621598  0.01230692 3.167693
Aug 2021           1.59  0.4958250317 2.684175 -0.08339621 3.263396
Sep 2021           1.59  0.4366383138 2.743362 -0.17391448 3.353914
Oct 2021           1.59  0.3803440583 2.799656 -0.26000912 3.440009
Nov 2021           1.59  0.3265555750 2.853444 -0.34227150 3.522272
Dec 2021           1.59  0.2749653491 2.905035 -0.42117194 3.601172
Jan 2022           1.59  0.2253240491 2.954676 -0.49709176 3.677092
Feb 2022           1.59  0.1774261899 3.002574 -0.57034522 3.750345
Mar 2022           1.59  0.1311000422 3.048900 -0.64119494 3.821195
Apr 2022           1.59  0.0862003442 3.093800 -0.70986311 3.889863
May 2022           1.59  0.0426029202 3.137397 -0.77653961 3.956540
Jun 2022           1.59  0.0002006288 3.179799 -0.84138832 4.021388
Jul 2022           1.59 -0.0410997390 3.221100 -0.90455178 4.084552
Aug 2022           1.59 -0.0813798720 3.261380 -0.96615493 4.146155
Sep 2022           1.59 -0.1207118385 3.300712 -1.02630798 4.206308
Oct 2022           1.59 -0.1591596017 3.339160 -1.08510876 4.265109
Nov 2022           1.59 -0.1967802412 3.376780 -1.14264457 4.322645
Dec 2022           1.59 -0.2336249472 3.413625 -1.19899368 4.378994
plot(prediksi2, main = "Prediksi Tingkat Inflasi")

data2022 <- read_excel("Inflasi.xlsx", sheet = "2022")
View(data2022)
data.aktual2022 <-  ts(data2022, 
            frequency=12, 
            start=c(2022))
print(data.aktual2022)
      Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
2022 2.18 2.06 2.64 3.47 3.55 4.35 4.94 4.69 5.95 5.71 5.42 5.51
# Plot prediksi dan data aktual
plot(prediksi2, main = "Prediksi ARIMA vs Tingkat Inflasi Aktual 2022")
lines(data.aktual2022, col = "Red")
legend("topleft", legend = c("Prediksi", "Aktual"), col = c("black", "blue"), lty = 1)