library(readxl)
library(ggplot2)
library(tseries)Registered S3 method overwritten by 'quantmod':
method from
as.zoo.data.frame zoo
library(forecast)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)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.
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.
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.
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.
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)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)