A. PENDAHULUAN

       Analisis deret waktu secara umum seperti yang dinyatakan oleh Marikdakus (1995) adalah salah satu analisis yang menerangkan dan mengukur berbagai perubahan (Pramudita, 2020). Autoregressive Integrated Moving Average (ARIMA) sebagai salah satu analisis deret waktu, mampu memperkirakan nilai mendatang untuk jangka waktu pendek. Pertama kali dikenalkan oleh Box dan Jenkins pada tahun 1970, model ARIMA mampu mengestimasi nilai periode mendatang dengan kombinasi linier dari nilai dan galat historis (Ariyo et al., 2014). Lebih lanjut, penggunaan nilai historis pada model ARIMA terdapat pada bagian Autoregressive (AR), dan nilai galat sebelumnya pada bagian Moving Average (MA). Model ARIMA sendiri-diambil dari situs web Machine Learning Pills (Introduction to ARIMA Models - ML Pills — Mlpills.dev)-dapat diekspresikan melalui persamaan seperti pada Gambar 1.
Gambar 1. Persamaan model ARIMA
Gambar 1. Persamaan model ARIMA
       Berdasarkan persaaman umum model ARIMA, terdapat tahapan pembeda (differencing) didalamnya. Model ARIMA mengasumsikan data yang diperoleh berkarakteristik nonstasioner. Dalam kata lain, variabel di dalam data tidak memiliki rata-rata dan keragaman (variance) yang konstan, serta kovariannya tidak bergantung dengan waktu (Gaddi et al., 2025). Deret waktu juga dapat bersifat non-stasioner karena keragamannya berkorelasi secara serial (secara teknis dikenal sebagai heteroskedastisitas bersyarat) (Cowpertwait & Metcalfe, 2009). Apabila data belum stasioner, maka nilai untuk waktu-waktu mendatang akan sulit untuk diprediksi. Dengan demikian, penggunaan bagian Integrated (I) pada ARIMA menjadi relevan. Umumnya, data yang nonstasioner akan diubah menjadi stationer dengan tahapan differencing (d) pada ARIMA.
       Model ARIMA memiliki 3 parameter utama yaitu p, d, dan q. Masing-masing parameter secara berurutan melambangkan komponen partial autocorrelation (p), jumlah differencing (d) sampai data stasioner, dan komponen auto regression (q) (Gaddi et al., 2025). Model ARIMA inilah yang umumnya sering digunakan untuk forecasting dan dimanfaatkan untuk analisis ekonomi seperti prediksi saham dan inflasi (Ariyo et al., 2014).
     Inflasi di Kota Bogor merupakan bagian fundamental dalam memperkirakan nilai sandang dan pangan. Inflasi adalah cerminan dari peningkatan permintaan agregat, maka berlaku teori permintaan yaitu ketika permintaan meningkat maka harga akan naik yang menyebabkan inflasi (Gertler & Leahy, 2006). Tidak hanya itu, inflasi juga selalu digunakan untuk menghitung beberapa penetapan rumus dan kalkulasi finansial seperti kebijakan moneter, fiskal, investasi serta manajemen dana kota dan lainnya. Data inflasi Kota Bogor pada tahun 2020-2025 akan digunakan sebagai contoh untuk membuktikan apakah analisis ARIMA cocok digunakan untuk prediksi nilai inflasi bulan-bulan mendatang untuk tahun 2026. Disamping itu, akan dibuktikan pula kemampuan model ARIMA untuk generalisasi melalui analisis pembangkitan data acak.
       Pembangkitan data umumnya dilakukan untuk membuat beberapa variabel acak yang mengikuti distribusi peluang atau model tertentu (Alkahfi). Tujuan dari percobaan pembangkitan data adalah mengkonfirmasi model ARIMA yang didapatkan dari data inflasi dapat diterapkan pada data deret waktu lainnya. Kemampuan generalisasi diputuskan pada uji kesamaan model ARIMA terbaik dan nilai parameter-parameter pada model dengan menggunakan data bangkitan.

B. DEKSRIPSI DAN SUMBER DATA

       Untuk membangkitkan data acak atau mensimulasikan data sintetis melalui ARIMA, perlu diketahui model ARIMA terbaik dan koefisien untuk setiap komponen terlebih dahulu. Oleh karena itu, identifikasi syarat-syarat yang diperlukan sebelumnya akan dilakukan melalui analisis ARIMA menggunakan data inflasi di Kota Bogor, Indonesia. Data tersebut dapat diakses melalui situs web Badan Pusat Statistik Kota Bogor atau Klik disini untuk mengunduh data inflasi Kota Bogor 2020-2025.
      Catatan: kamu juga dapat menggunakan data kamu sendiri dengan mengikuti dan mengganti beberapa kode-kode pada bagian penjelasan selanjutnya. Seperti yang telah disebutkan sebelumnya, kita ingin menjawab pertanyaan-pertanyaan seperti dibawah.
  1. Apakah data inflasi di Kota Bogor telah menggunakan model ARIMA yang optimal?
  2. Apakah analisis ARIMA layak digunakan untuk memprediksi nilai inflasi tahun 2026?
  3. Jika saya mensimulasikan variabel acak yang mengikuti model ARIMA yang sama, apakah model tersebut akan lulus uji properti statistik seperti halnya model yang ditemukan dalam data kasus nyata?”

C. TAHAPAN ANALISIS

Gambar 2. Flowchart Tahapan Analisis ARIMA dan Pembangkitan Data
Gambar 2. Flowchart Tahapan Analisis ARIMA dan Pembangkitan Data

D. HASIL DAN PEMBAHASAN

Loading Libraries

       Berikut adalah paket-paket yang diperlukan dalam analisis ARIMA. Keterangan masing-masing package dapat dipelajari secara mendalam dengan cara membuka menu ‘Bantuan’ pada software RStudio dan memasukkan nama paket yang diinginkan.
# Library
library(tidyr)
## Warning: package 'tidyr' was built under R version 4.4.3
library(readxl)
library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(tseries)
library(lmtest)
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.4.3
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(tidyverse)
## Warning: package 'ggplot2' was built under R version 4.4.3
## Warning: package 'readr' was built under R version 4.4.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ purrr     1.2.0
## ✔ forcats   1.0.1     ✔ readr     2.1.6
## ✔ ggplot2   4.0.1     ✔ stringr   1.6.0
## ✔ lubridate 1.9.4     ✔ tibble    3.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(patchwork)
library(FitAR)
## Loading required package: lattice
## Loading required package: leaps
## Loading required package: ltsa
## Loading required package: bestglm
## 
## Attaching package: 'FitAR'
## 
## The following object is masked from 'package:forecast':
## 
##     BoxCox
# Pemasangan remotes package jika belum dipasang
# install.packages("remotes")

# Pemasangan FitAR package
# remotes::install_github("cran/FitAR")

1. Statistik Deskriptif

       Statistik deskriptif seperti pada umumnya memberikan informasi statistik dasar seperti nilai minimum serta maksimum, rata-rata, median, dan sebagainya. Di sisi lain, pengimporan data bisa melalui lokasi file atau menggunakan opsi ‘Import Dataset’ di menu ‘File’ RStudio.
      Catatan: kamu bisa mengganti inflasi dengan hal lain atau kata kunci yang kompatibel dengan data kamu. Bagian kode data$Inflation (%) juga dapat diubah dengan nama kolom numerik data yang dipilih untuk dianalisis jikalau menggunakan data seri waktu yang berbeda. Misalnya, data inflasi 2020-2025 kebetulan memiliki nilai numerik atau inflasi di kolom bernama ‘Inflation (%)’.
# -- 1. Statistika Deskriptif
data <- read_excel("Bogor_Inflation_ARIMA_Syntax.xlsx")
Inflation = data$`Inflation (%)`
# View(data)
summary(data)
##       Date                     Inflation (%)    
##  Min.   :2020-01-01 00:00:00   Min.   :-0.7300  
##  1st Qu.:2021-06-23 12:00:00   1st Qu.: 0.0550  
##  Median :2022-12-16 12:00:00   Median : 0.2000  
##  Mean   :2022-12-16 06:40:00   Mean   : 0.2460  
##  3rd Qu.:2024-06-08 12:00:00   3rd Qu.: 0.4425  
##  Max.   :2025-12-01 00:00:00   Max.   : 1.5400
# Plot Time Series
plot.ts(Inflation, 
          main= "Plot Time Series, Inflasi di Kota Bogor",
          xlab= "Bulan")

2. Pembagian Data

       Langkah kedua adalah pembagian data inflasi menjadi bagian latih (training) dan uji (testing). Tahapan ini tidak boleh dilewatkan apabila ingin dilakukan tahapan forecasting dengan data inflasi. Hal ini dikarenakan akan dilakukan prediksi untuk nilai-nilai inflasi mendatang yang membutuhkan evaluasi dari dua hal yaitu data latih dan uji. Data latih berguna sebagai identifikasi model ARIMA. Sedangkan, data uji sebagai memvalidasi kemampuan model ARIMA tersebut dalam melakukan prediksi. Perlu digaris bawahi, pembangkitan data tidak memerlukan proses perhitungan nilai prediksi. Maka dari itu, pembagian data menjadi opsional apabila hanya ingin membangkitkan data saja.
       Pada umumnya pembagian data latih dan uji menggunakan rasio 2:1. Oleh karena itu, data inflasi yang nantinya akan diproses terbagi menjadi data latih yang dimulai dari tahun 2020 sampai 2023, sedangkan data uji menggunakan data inflasi tahun 2024-2025.
       Catatan: Kamu bisa menyesuaikan periode untuk data latih dan uji Jangan lupa juga untuk mengganti Inflation (%) dengan nama kolom numerikmu.
# -- 2. Pembagian Data
train_data <- data[1:48, ]  # 2020-2023
test_data <- data[49:72, ]  # 2024-2025
test_data
## # A tibble: 24 × 2
##    Date                `Inflation (%)`
##    <dttm>                        <dbl>
##  1 2024-01-01 00:00:00            0.06
##  2 2024-02-01 00:00:00            0.6 
##  3 2024-03-01 00:00:00            0.45
##  4 2024-04-01 00:00:00            0.1 
##  5 2024-05-01 00:00:00           -0.02
##  6 2024-06-01 00:00:00           -0.11
##  7 2024-07-01 00:00:00           -0.07
##  8 2024-08-01 00:00:00            0.04
##  9 2024-09-01 00:00:00           -0.14
## 10 2024-10-01 00:00:00            0.08
## # ℹ 14 more rows
# Pengambilan nilai numerik dari data
tr_ts <- ts(train_data$`Inflation (%)`, 
            start = c(2020, 1), 
            frequency = 12)
te_ts <- ts(test_data$`Inflation (%)`, 
            start = c(2024, 1), 
            frequency = 12)
tr_data <- train_data$`Inflation (%)`

tr_ts
##        Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
## 2020  0.78  0.25  0.04 -0.02  0.01  0.27 -0.01 -0.16  0.11  0.13  0.32  0.44
## 2021  0.19  0.24  0.06  0.24  0.40 -0.17  0.07  0.08 -0.01  0.08  0.26  0.56
## 2022  0.53  0.13  0.97  0.68  0.55  0.75  0.55 -0.45  1.18  0.10  0.20  0.49
## 2023  0.61  0.36  0.15  0.32  0.22  0.18  0.24 -0.08  0.16  0.12  0.81  0.22
te_ts
##        Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
## 2024  0.06  0.60  0.45  0.10 -0.02 -0.11 -0.07  0.04 -0.14  0.08  0.26  0.49
## 2025 -0.54 -0.73  1.54  1.07 -0.25  0.41  0.33 -0.15  0.20  0.42  0.06  0.46
tr_data
##  [1]  0.78  0.25  0.04 -0.02  0.01  0.27 -0.01 -0.16  0.11  0.13  0.32  0.44
## [13]  0.19  0.24  0.06  0.24  0.40 -0.17  0.07  0.08 -0.01  0.08  0.26  0.56
## [25]  0.53  0.13  0.97  0.68  0.55  0.75  0.55 -0.45  1.18  0.10  0.20  0.49
## [37]  0.61  0.36  0.15  0.32  0.22  0.18  0.24 -0.08  0.16  0.12  0.81  0.22

3. Uji Stasioneritas

       Dalam analisis ARIMA, diasumsikan adanya tren dalam data deret waktu yang disebut non-stasioner. Data non-stasioner perlu diubah menjadi stasioner, jika tidak, data akan sulit diprediksi. Beruntungnya, bagian Integrated dalam model ARIMA memungkinkan perubahan dari non-stasioner menjadi stasioner melalui proses pembedaan atau differencing.
       Namun, sebelum melakukan differencing, perlu dilakukan pemeriksaan stasioneritas dalam data deret waktu menggunakan Uji Augmented Dickey Fuller (ADF) untuk menentukan apakah differencing diperlukan. Kriteria tolak hipotesis nol atau data non-stasioner adalah p-value kurang dari 0,05.
       Catatan: Jika data kamu tidak stasioner (nilai p >= 0,05), pergi ke langkah 4. Jika sudah stasioner sedari awal, periksa grafik Partial Autocorrelation Function (PACF) dan Autocorrelation Function (ACF). PACF dapat digunakan untuk memeriksa berapa banyak komponen yang tersedia untuk model p dengan melihat lag (garis) di luar interval kepercayaan (garis titik biru). Grafik ACF serupa, tetapi untuk model q.
# -- 3. Uji Stasioneritas
adf.test(tr_data)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  tr_data
## Dickey-Fuller = -2.2397, Lag order = 3, p-value = 0.4784
## alternative hypothesis: stationary
acf(tr_data, main = "ACF Plot")

pacf(tr_data, main = "PACF Plot")

4. Pembedaan (Differencing)

       Perhatikan dengan seksama seberapa banyak data perlu didiferensiasikan, karena total differencing akan digunakan untuk menentukan nilai d pada model ARIMA (p,d,q). Lakukan diferensiasi hingga data menjadi stasioner atau tolak hipotesis nol (nilai p < 0,05) berdasarkan uji ADF.
       Apabila telah didapatkan data deret waktu stasioner, maka pemeriksaan grafik PACF dan ACF dapat dilakukan untuk menentukan jumlah komponen untuk masing-masing parameter p dan q pada model ARIMA.
       Sebagai contoh, karena data inflasi di Kota Bogor menjadi stasioner pada diferensiasi pertama, maka d = 1. Sementara itu, berdasarkan grafik PACF dan ACF, kombinasi komponen yang tersedia untuk model ARIMA data inflasi adalah p bernilai 0, 1, atau 2, sedangkan q bernilai 0 atau 1. Kombinasi-kombinasi tersebut yang selanjutnya akan dibandingkan untuk menemukan model ARIMA terbaik.
# -- 4. Pembedaan (Differencing)
diff1 = diff(tr_data)
adf.test(diff1)
## Warning in adf.test(diff1): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff1
## Dickey-Fuller = -4.3662, Lag order = 3, p-value = 0.01
## alternative hypothesis: stationary
acf(diff1, main = "ACF Differencing 1")

pacf(diff1, main = "PACF Differencing 1")

# Differencing kedua
diff2 = diff(diff1) # <--- Hanya digunakan jika data belum stasioner
adf.test(diff2)
## Warning in adf.test(diff2): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff2
## Dickey-Fuller = -6.7663, Lag order = 3, p-value = 0.01
## alternative hypothesis: stationary
acf(diff2, main = "ACF Differencing 2")

pacf(diff2, main = "PACF Differencing 2")

5. Menentukan Model ARIMA Terbaik

       Model ARIMA terbaik untuk data inflasi dapat diidentifikasi melalui nilai Akaike’s Information Criteria (AIC), yang merupakan estimasi kesalahan prediksi. Lebih lanjut, AIC merupakan cerminan kualitas relatif model statistik untuk sekumpulan data tertentu yang dibandingkan oleh model-model ARIMA lainnya. Model dengan nilai AIC terendah lebih diutamakan karena memiliki kekuatan penjelas hubungan di dalam data deret waktu yang lebih baik dibandingkan model ARIMA lainnya.
       Catatan: Tambahkan label m jika kamu masih memiliki kombinasi model lain dan ganti best_model dengan model yang memiliki nilai AIC terendah.
# -- 5.Penentuan Model ARIMA
m1 <- arima(tr_ts, order = c(0,1,0))
m2 <- arima(tr_ts, order = c(0,1,1))
m3 <- arima(tr_ts, order = c(1,1,0))
m4 <- arima(tr_ts, order = c(1,1,1))
m5 <- arima(tr_ts, order = c(2,1,0))
m6 <- arima(tr_ts, order = c(2,1,1))
aic <- data.frame(Name = c("m1", "m2", "m3", "m4", "m5", "m6"),
                  Model = c("ARIMA (0,1,0)",
                            "ARIMA (0,1,1)",
                            "ARIMA (1,1,0)",
                            "ARIMA (1,1,1)",
                            "ARIMA (2,1,0)",
                            "ARIMA (2,1,1)"),
                  AIC = c(m1$aic,
                          m2$aic,
                          m3$aic,
                          m4$aic,
                          m5$aic,
                          m6$aic))
aic
##   Name         Model      AIC
## 1   m1 ARIMA (0,1,0) 54.52956
## 2   m2 ARIMA (0,1,1) 29.91778
## 3   m3 ARIMA (1,1,0) 39.20062
## 4   m4 ARIMA (1,1,1) 31.55783
## 5   m5 ARIMA (2,1,0) 32.08784
## 6   m6 ARIMA (2,1,1) 32.98561
best_model <- m2
best_model <- arima(tr_ts, order = c(0,1,1), include.mean = FALSE)

6. Properti Statistik untuk Validasi Model

       Setelah mengidentifikasi model ARIMA terbaik untuk data inflasi, perlu dilakukan pemeriksaan menggunakan beberapa uji statistik untuk memastikan kemampuannya dalam memprediksi nilai periode mendatang. Berikut adalah uji yang digunakan untuk memvalidasi model ARIMA.
       1. Uji Z: Pengujian Z terkait tes signifikansi perbedaan antara menggunakan model ARIMA dan tidak menggunakan model ARIMA sama sekali untuk menjelaskan variabel deret waktu. Selain itu, melalui uji Z, koefisien parameter untuk model ARIMA dapat diestimasi. (Hasil yang diinginkan, nilai p < 0,05)
# -- 6.Signifikansi Model ARIMA (z-test)
coeftest(best_model)
## 
## z test of coefficients:
## 
##     Estimate Std. Error z value  Pr(>|z|)    
## ma1 -0.87308    0.11830 -7.3804 1.578e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
       Didapatkan nilai estimasi parameter q atau Moving Average adalah -0.87308 dan berbeda secara nyata. Dalam kata lain, terdapat perbedaan besar apabila digunakannya model ARIMA dibandingkan dengan tidak menggunakan model ARIMA untuk menjelaskan nilai-nilai pada data deret waktu. Karena data inflasi menggunakan (0,1,1) untuk model ARIMA, estimasi koefisien MA(1) didapatkan sebesar -0.87308 dengan AR(0), maka model ARIMA dapat dibuat sebagai persamaan dibawah.
Gambar 3. Persamaan Model ARIMA (0,1,1) Menggunakan Data Inflasi Kota Bogor 2020-2023
Gambar 3. Persamaan Model ARIMA (0,1,1) Menggunakan Data Inflasi Kota Bogor 2020-2023
       Catatan: Jika kamu memiliki model ARIMA (2,1,1), kamu akan melihat 2 nilai AR dan 1 nilai MA.
       2. Uji Ljung-Box: Dalam deret waktu, sebagian besar galat (error) dalam model harus telah ditangkap, meninggalkan hanya keacakan murni untuk galatnya. Dalam statistik, galat tersebut bersifat white noise. (Hasil yang diinginkan, nilai p > 0,05)
# -- 7. Uji Galat White Noise
res1 = best_model$residuals
acf(res1)

pacf(res1)

checkresiduals(best_model)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(0,1,1)
## Q* = 7.6004, df = 9, p-value = 0.5749
## 
## Model df: 1.   Total lags used: 10
       Sebagian besar galat sudah terjelaskan oleh model ARIMA (0,1,1) sesuai dengan hasil dari uji Ljung-Box. Galat yang tersisa adalah murni keacakan.
       3. Uji Box-Ljung: Uji autokorelasi untuk melihat apakah ada autokorelasi yang tersisa pada galat model ARIMA. (Hasil yang diinginkan, nilai p > 0,05, tidak ada autokorelasi)
# -- 8. Uji Autokorelasi
Box.test(res1, lag = 23, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  res1
## X-squared = 18.084, df = 23, p-value = 0.7529
       Pemeriksaan autokorelasi pada galat melalui uji Box-Ljung menampilkan tidak adanya kejadian autokorelasi antar galat pada data deret waktu inflasi.
       4. Uji Kolmogorov-Smirnov: Galat model ARIMA harus berdistribusi secara normal atau mengikuti distribusi normal. (Hasil yang diinginkan, nilai p > 0,05)
# -- 9. Uji Normalitas (Kolmogorov-Smirnov)
ks.test(res1, "pnorm", mean(res1), sd(res1))
## 
##  Exact one-sample Kolmogorov-Smirnov test
## 
## data:  res1
## D = 0.096765, p-value = 0.7233
## alternative hypothesis: two-sided
       Galat pada data latih inflasi telah berdistribusi normal melalui pengujian normalitas, Kolmogorov-Smirnov.

7. Nilai Kecocokan dan Prediksi Data

       Tujuan utama dilakukannya analisis deret waktu adalah prediksi nilai-nilai lanjutan atau inflasi tahun 2026 untuk topik analisis yang dicontohkan kali ini. Sebelum memulai prediksi nilai inflasi untuk bulan-bulan pada tahun 2026, data latih terlebih dahulu dicari nilai kecocokannya untuk melihat keakuratan model ARIMA (0,1,1).
       Catatan: Pada bagian Tanggal = train_data$Date, sesuaikan dengan nama kolom yang berisi tanggal pada data deret waktu.
# -- 10. Hasil Kecocokan Data Latih dan Uji
# a. Prediksi Data Latih
Kecocokan_DataLatih <- fitted(best_model)

Prediksi_DataLatih <- data.frame(
  Tanggal = train_data$Date,
  Actual = tr_data,
  Fitted = as.numeric(Kecocokan_DataLatih),
  Residuals = as.numeric(tr_data) - as.numeric(Kecocokan_DataLatih)
)

print(Prediksi_DataLatih)
##       Tanggal Actual    Fitted     Residuals
## 1  2020-01-01   0.78 0.7792200  0.0007799993
## 2  2020-02-01   0.25 0.6492439 -0.3992439296
## 3  2020-03-01   0.04 0.4498192 -0.4098192299
## 4  2020-04-01  -0.02 0.3195846 -0.3395845620
## 5  2020-05-01   0.01 0.2384544 -0.2284543993
## 6  2020-06-01   0.27 0.2011529  0.0688471092
## 7  2020-07-01  -0.01 0.2060443 -0.2160442681
## 8  2020-08-01  -0.16 0.1666228 -0.3266228163
## 9  2020-09-01   0.11 0.1192491 -0.0092490734
## 10 2020-10-01   0.13 0.1180885  0.0119115225
## 11 2020-11-01   0.32 0.1213837  0.1986163402
## 12 2020-12-01   0.44 0.1498632  0.2901367503
## 13 2021-01-01   0.19 0.1882804  0.0017196401
## 14 2021-02-01   0.24 0.1886897  0.0513102774
## 15 2021-03-01   0.06 0.1949953 -0.1349952872
## 16 2021-04-01   0.24 0.1776715  0.0623285022
## 17 2021-05-01   0.40 0.1860284  0.2139716092
## 18 2021-06-01  -0.17 0.2130211 -0.3830210940
## 19 2021-07-01   0.07 0.1639280 -0.0939279676
## 20 2021-08-01   0.08 0.1518836 -0.0718835581
## 21 2021-09-01  -0.01 0.1426374 -0.1526373553
## 22 2021-10-01   0.08 0.1231784 -0.0431783703
## 23 2021-11-01   0.26 0.1177266  0.1422734319
## 24 2021-12-01   0.56 0.1359191  0.4240808925
## 25 2022-01-01   0.53 0.1898871  0.3401129124
## 26 2022-02-01   0.13 0.2330911 -0.1030911051
## 27 2022-03-01   0.97 0.2200720  0.7499280244
## 28 2022-04-01   0.68 0.3153448  0.3646552172
## 29 2022-05-01   0.55 0.3616611  0.1883388594
## 30 2022-06-01   0.75 0.3855905  0.3644094832
## 31 2022-07-01   0.55 0.4318581  0.1181418552
## 32 2022-08-01  -0.45 0.4468321 -0.8968320892
## 33 2022-09-01   1.18 0.3330068  0.8469931991
## 34 2022-10-01   0.10 0.4405128 -0.3405127913
## 35 2022-11-01   0.20 0.3972897 -0.1972896735
## 36 2022-12-01   0.49 0.3722496  0.1177503573
## 37 2023-01-01   0.61 0.3871964  0.2228036167
## 38 2023-02-01   0.36 0.4154746 -0.0554745921
## 39 2023-03-01   0.15 0.4084328 -0.2584327522
## 40 2023-04-01   0.32 0.3756326 -0.0556326389
## 41 2023-05-01   0.22 0.3685715 -0.1485715228
## 42 2023-06-01   0.18 0.3497149 -0.1697149377
## 43 2023-07-01   0.24 0.3281751 -0.0881751481
## 44 2023-08-01  -0.08 0.3169839 -0.3969838723
## 45 2023-09-01   0.16 0.2666001 -0.1066001308
## 46 2023-10-01   0.12 0.2530708 -0.1330707981
## 47 2023-11-01   0.81 0.2361823  0.5738177264
## 48 2023-12-01   0.22 0.3090087 -0.0890086888
       Di samping itu, data uji akan dicari nilai prediksinya menggunakan model ARIMA (0,1,1) yang dimana hanya bergantung kepada galat periode sebelumnya karena nilai AR(0). Sebagai tambahan, nilai prediksi data uji juga dapat dicari dengan taraf kepercayaan 80% dan 95% untuk melihat jangkauan prediksi data uji.
       Catatan: h_periode akan menunjukkan banyaknya bulan yang akan diestimasi nilai prediksinya untuk data uji. Maka dari itu, jumlahnya akan berbeda apabila data digunakan juga berbeda. Sama seperti data latih, Tanggal = test_data$Date dapat disesuaikan dengan nama kolom yang berisi tanggal pada data deret waktu.
# b. Prediksi Data Uji 
h_periode <- length(te_ts)  # 24 bulan (2024-2025)

prediksi_datauji <- forecast(best_model, h = h_periode)

forecast_test_table <- data.frame(
  Tanggal = test_data$`Date`,
  Nilai_Asli = as.numeric(te_ts),
  Prediksi = as.numeric(prediksi_datauji$mean),
  Lower_80 = as.numeric(prediksi_datauji$lower[,1]),
  Upper_80 = as.numeric(prediksi_datauji$upper[,1]),
  Lower_95 = as.numeric(prediksi_datauji$lower[,2]),
  Upper_95 = as.numeric(prediksi_datauji$upper[,2])
)

print(forecast_test_table)
##       Tanggal Nilai_Asli  Prediksi   Lower_80  Upper_80   Lower_95  Upper_95
## 1  2024-01-01       0.06 0.2977121 -0.1046394 0.7000636 -0.3176314 0.9130556
## 2  2024-02-01       0.60 0.2977121 -0.1078669 0.7032911 -0.3225674 0.9179916
## 3  2024-03-01       0.45 0.2977121 -0.1110689 0.7064931 -0.3274645 0.9228887
## 4  2024-04-01       0.10 0.2977121 -0.1142460 0.7096702 -0.3323235 0.9277477
## 5  2024-05-01      -0.02 0.2977121 -0.1173988 0.7128230 -0.3371453 0.9325695
## 6  2024-06-01      -0.11 0.2977121 -0.1205278 0.7159521 -0.3419307 0.9373549
## 7  2024-07-01      -0.07 0.2977121 -0.1236337 0.7190579 -0.3466806 0.9421048
## 8  2024-08-01       0.04 0.2977121 -0.1267167 0.7221409 -0.3513958 0.9468200
## 9  2024-09-01      -0.14 0.2977121 -0.1297776 0.7252018 -0.3560769 0.9515011
## 10 2024-10-01       0.08 0.2977121 -0.1328166 0.7282408 -0.3607248 0.9561490
## 11 2024-11-01       0.26 0.2977121 -0.1358344 0.7312586 -0.3653401 0.9607643
## 12 2024-12-01       0.49 0.2977121 -0.1388313 0.7342555 -0.3699235 0.9653477
## 13 2025-01-01      -0.54 0.2977121 -0.1418078 0.7372320 -0.3744756 0.9698998
## 14 2025-02-01      -0.73 0.2977121 -0.1447643 0.7401885 -0.3789971 0.9744213
## 15 2025-03-01       1.54 0.2977121 -0.1477011 0.7431253 -0.3834886 0.9789128
## 16 2025-04-01       1.07 0.2977121 -0.1506187 0.7460429 -0.3879507 0.9833749
## 17 2025-05-01      -0.25 0.2977121 -0.1535174 0.7489416 -0.3923839 0.9878081
## 18 2025-06-01       0.41 0.2977121 -0.1563977 0.7518219 -0.3967889 0.9922131
## 19 2025-07-01       0.33 0.2977121 -0.1592598 0.7546840 -0.4011660 0.9965902
## 20 2025-08-01      -0.15 0.2977121 -0.1621040 0.7575282 -0.4055160 1.0009402
## 21 2025-09-01       0.20 0.2977121 -0.1649308 0.7603550 -0.4098391 1.0052634
## 22 2025-10-01       0.42 0.2977121 -0.1677404 0.7631646 -0.4141361 1.0095603
## 23 2025-11-01       0.06 0.2977121 -0.1705332 0.7659574 -0.4184072 1.0138314
## 24 2025-12-01       0.46 0.2977121 -0.1733093 0.7687336 -0.4226530 1.0180772
       Nilai prediksi untuk data uji diketahui konstan dikarenakan digunakannya nilai rataan untuk mengestimasi nilai inflasi tahun 2024 sampai 2025.
       Yang tertera selanjutnya adalah line chart untuk perbandingan data deret waktu aktual (asli) dengan nilai estimasi prediksi menggunakan model ARIMA (0,1,1) untuk data latih dan uji.
       Catatan: Penamaan judul, garis x dan y dari grafik dapat diubah sesuai dengan topik data yang dipakai. Pewarnaan sebagai pembeda nilai aktual dan prediksi atau kecocokan dapat disesuaikan juga. Tambahan, deskripsi warna garis juga bisa diubah sesuai dengan warna yang digunakan sebelumnya. Di samping itu, plot data latih dan uji bisa disesuaikan waktu mulai data deret waktu pada bagian start = c(2020, 1).
# Visualisasi Data Deret Waktu

# Plot Data Latih
plot(tr_ts, main = "Data Latih: Aktual vs Kecocokan", 
     ylab = "Inflasi", xlab = "Bulan", col = "blue")
lines(Kecocokan_DataLatih, col = "red", lwd = 2)
legend("topleft", legend = c("Aktual", "Kecocokan"), 
       col = c("blue", "red"), lty = 1)

# Plot Data Latih dan Uji
plot(ts(c(tr_ts, te_ts), start = c(2020, 1), frequency = 12),
     main = "Data Inflasi: Aktual vs Prediksi", 
     ylab = "Inflasi", xlab = "Bulan", col = "blue")
lines(ts(c(Prediksi_DataLatih$Fitted, prediksi_datauji$mean), 
         start = c(2020, 1), frequency = 12), 
      col = "red", lwd = 2)
abline(v = 2024, col = "gray", lty = 2) 
legend("topleft", legend = c("Aktual", "Prediksi"), 
       col = c("blue", "red"), lty = 1)

8. Uji Kemampuan Prediksi Model ARIMA

       Model ARIMA dapat dievaluasi melalui nilai galatnya atau seberapa melesetnya nilai perkiraan dari nilai aktual. Kedua data baik latih dan uji dapat dilakukan pencarian nilai Mean Absolute Percentage Error (MAPE) dan Root Mean Square Error (RMSE) sebagai penentu kemampuan model dalam pengestimasian nilai mendatang.
# -- 11. Uji Kemampuan Prediksi Model ARIMA
# a. Menghitung Nilai MAPE
# MAPE Data Latih
train_pred <- fitted(best_model)
actual_train <- as.numeric(tr_data)
pred_train <- as.numeric(train_pred)
mape_train <- mean(abs((actual_train - pred_train) / actual_train)) *100

cat("\nMAPE Data Latih:", round(mape_train, 2), "%\n")
## 
## MAPE Data Latih: 260.99 %
# MAPE Data Uji
actual_test <- as.numeric(test_data$`Inflation (%)`)
pred_test <- as.numeric(prediksi_datauji$mean)
mape_test <- mean(abs((actual_test - pred_test) / actual_test)) *100

cat("MAPE Data Uji:", round(mape_test, 2), "%\n")
## MAPE Data Uji: 248.27 %
# b. Perhitungan Nilai RMSE
rmse_train <- sqrt(mean((actual_train - pred_train)^2))
rmse_test <- sqrt(mean((actual_test - pred_test)^2))

cat("\nNilai RMSE Data Latih:", round(rmse_train, 2))
## 
## Nilai RMSE Data Latih: 0.31
cat("\nNilai RMSE Data Uji:", round(rmse_test, 2))
## 
## Nilai RMSE Data Uji: 0.48
train_pred <- as.numeric(fitted(best_model))
actual_train <- as.numeric(tr_data)

valid_idx <- !is.na(train_pred) & actual_train != 0

mape_train <- mean(
  abs((actual_train[valid_idx] - train_pred[valid_idx]) /
      actual_train[valid_idx])
) * 100
       Penentuan kriteria kebaikan model ARIMA dalam prediksi menggunakan acuan MAPE dapat dilakukan melalui kategori seperti di bawah yang diambil dari artikel berjudul Using the R-MAPE index as a resistant measure of forecast accuracy (Montaño Moreno et al., 2013) yang juga mengambil dari artikel Industrial and business forecasting methods (Meade, 1983).
Gambar 4. Interpretasi Nilai MAPE
Gambar 4. Interpretasi Nilai MAPE
       Berdasarkan nilai yang didapatkan dari perhitungan MAPE dan dibandingkan dengan interpretasi nilai MAPE, diketahui analisis ARIMA terbukti tidak dapat secara akurat memprediksi nilai mendatang dikarenakan nilai galatnya yang besar. Nilai-nilai prediksi inflasi yang dihasilkan oleh model ARIMA tidak dapat digunakan untuk penentuan rumus dan kalkulasi finansial yang membutuhkan nilai inflasi karena nilai estimasinya yang meleset jauh.
       Walaupun setelah proses pemeriksaan properti statistik seperti galat white noise, autokorelasi, normalitas model ARIMA (0,1,1) terbukti memenuhi semua asumsi, akan tetapi hal tersebut tidak menjamin keakuratan kemampuan model ARIMA dalam prediksi. Hal ini dapat dibuktikan melalui nilai MAPE yang sangat besar pada kedua data, latih dan uji. Menurut Simon Stevenson (2007), “Akurasi prediksi pada model tidak dapat ditetapkan hanya dengan menggunakan nilai kecocokan data latih, dan pengukuran diagnostik galat tidak dapat memberikan gambaran kebaikan performa prediksi.” (Stevenson, 2007). Adapula, “Out-of-sample testing merupakan hal penting karena uji diagnosa galat tidak menjamin keakuratan prediksi model deret waktu ekonomi.” (Tashman, 2000). Maka dari itu, analisis deret waktu lainnya seperti ARIMAX, SARIMA, GARCH, atau semacamnya sangat direkomendasikan.

9. Perhitungan Prediksi Tahun 2026

       Walaupun model ARIMA (0,1,1) tidak dapat diandalkan untuk memprediksi nilai inflasi Kota Bogor untuk tahun 2026, estimasi nilai untuk bulan-bulan pada tahun 2026 masih dapat dilakukan sebagai percontohan saja. Seperti pada prediksi data uji, nilai prediksi inflasi pada bulan-bulan tahun 2026 juga konstan karena menggunakan nilai rataan untuk pengestimasian dan sangat bergantung kepada nilai historis.
# -- 12. Prediksi Nilai Mendatang Menggunakan Model ARIMA
full_ts <- ts(
  data$`Inflation (%)`,
  start = c(2020, 1),
  frequency = 12
)

final_model <- arima(full_ts, order = c(0,1,1))
forecast_2026 <- forecast(final_model, h = 12)

inflation_2026 <- window(
  forecast_2026$mean,
  start = c(2026, 1),
  end   = c(2026, 12)
)

lower_95_2026 <- window(forecast_2026$lower[,2],
                        start = c(2026,1),
                        end = c(2026,12))

upper_95_2026 <- window(forecast_2026$upper[,2],
                        start = c(2026,1),
                        end = c(2026,12))

month_2026 <- seq.Date(
  from = as.Date("2026-01-01"),
  to   = as.Date("2026-12-01"),
  by   = "month"
)

forecast_2026_table <- data.frame(
  Month = format(month_2026, "%B %Y"),
  Forecast = as.numeric(inflation_2026),
  Lower_95 = as.numeric(lower_95_2026),
  Upper_95 = as.numeric(upper_95_2026)
)

forecast_2026_table
##             Month  Forecast   Lower_95  Upper_95
## 1    January 2026 0.2459722 -0.4878389 0.9797833
## 2   February 2026 0.2459722 -0.4878389 0.9797833
## 3      March 2026 0.2459722 -0.4878389 0.9797833
## 4      April 2026 0.2459722 -0.4878389 0.9797833
## 5        May 2026 0.2459722 -0.4878389 0.9797833
## 6       June 2026 0.2459722 -0.4878389 0.9797833
## 7       July 2026 0.2459722 -0.4878389 0.9797833
## 8     August 2026 0.2459722 -0.4878389 0.9797833
## 9  September 2026 0.2459722 -0.4878389 0.9797833
## 10   October 2026 0.2459722 -0.4878389 0.9797833
## 11  November 2026 0.2459722 -0.4878389 0.9797833
## 12  December 2026 0.2459722 -0.4878389 0.9797833

SIMULASI PEMBANGKITAN DATA ACAK

       Setelah menemukan model ARIMA optimal yaitu (0,1,1) dan koefisien estimasi untuk MA(1) sebesar -0.87308 menggunakan data inflasi Kota Bogor, simulasi ARIMA melalui variabel acak dapat dilakukan.
       Pertanyaan utama: “Apakah variabel acak yang secara sengaja disesuaikan untuk menggunakan model ARIMA (0,1,1) akan lolos validasi statistik, menghasilkan hasil serupa, dan memiliki nilai koefisien parameter yang hampir sama?”.

1. Libraries dan Pembangkitan Data Acak

       Libraries yang digunakan dalam pembangkitan data acak melalui analisis deret waktu ARIMA yaitu tseries dan forecast. Data dibangkitkan secara acak dengan fungsi pada RStudio yaitu set.seed yang jumlah sampelnya disamakan dengan data inflasi Kota Bogor. Walaupun data inflasi sebelumnya dibagi menjadi data latih dan uji yang masing-masing berjumlah 48 and 24, pembangkitan data acak melalui model ARIMA akan menggunakan semua data. Data inflasi pada tahun 2020-2025 akan diperlakukan seperti data latih untuk mencari model ARIMA terbaik dan nilai estimasi parameternya.
       Catatan: nilai n bisa diatur sesuai total sampel pada data yang digunakan sebelumnya jika data yang digunakan berbeda. Tambahan, model = list(order = c(0,1,1), ma = -0.87308) dapat diubah dengan model terbaik yang telah diidentifikasi sebelumnya beserta nilai parameternya. Apabila ada tambahan model AR maka bisa ditambahkan seperti (order = c(), ar = , ma = ). Apabila bertemu dengan skenario dimana ada 2 atau lebih parameter pada salah satu model AR atau MA maka pada bagian fungsi arima.sim diubah seperti model = list(order = c(1, 0, 2), ar = 0.6, ma = c(0.4, -0.2).
# ----- Simulasi Model ARIMA ----- #

# -- 1. Library dan set.seed
set.seed(123)

# Load library
library(tseries)
library(forecast) 

# -- 2. Membangkitkan data dengan deret waktu
set.seed(123)
n <- 72   
  arima_data <- arima.sim(
    n = n,
    model = list(order = c(0,1,1), ma = -0.87308) 
  )

ts.plot(arima_data, main = "Simulasi Data Acak melalui Model ARIMA(0,1,1)")

2. Uji Stasioneritas dan Pembedaan (Differencing)

       Data acak yang dihasilkan dan mengikuti model ARIMA (0,1,1) juga diuji kestabilannya menggunakan uji ADF. Karena data inflasi memiliki pembedaan sekali dari analisis ARIMA sebelumnya, data acak yang dihasilkan juga diharapkan memiliki d = 1.
       Catatan: Apabila diperlukan pembedaan lebih dari sekali, maka syntax dan prosesnya sama seperti pada analisis ARIMA dengan data inflasi Kota Bogor.
# 3. Uji Stasioneritas
# ARIMA Model (0,1,1)
adf.test(arima_data)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  arima_data
## Dickey-Fuller = -3.3232, Lag order = 4, p-value = 0.07488
## alternative hypothesis: stationary
# 4. Pembedaan (Differencing):
  diff_arima <- diff(arima_data)
adf.test(diff_arima)
## Warning in adf.test(diff_arima): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff_arima
## Dickey-Fuller = -5.5524, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary

3. Identifikasi Komponen yang Tersedia (Plot PACF dan ACF)

       Prosedur yang sama seperti analisis ARIMA dengan data kasus nyata, grafik PACF dan ACF tetap menjadi acuan untuk menentukan berapa banyak kombinasi komponen yang mungkin ada untuk variabel acak yang telah dibangkitkan.
       Catatan: Silakan ganti diff_arima dalam fungsi acf maupun pacf jika data yang dihasilkan sudah stasioner tanpa diferensiasi, atau sesuaikan jika data sintetis memerlukan diferensiasi kedua.
# 4. Identifikasi Komponen pada Model (Plot PACF and ACF)
# ARIMA (0,1,1)
acf(diff_arima, main = "ACF Diff ARIMA")

pacf(diff_arima, main = "PACF Diff ARIMA")

       Didapatkan hasil yang serupa pada grafik PACF dan ACF seperti data inflasi. Variabel acak juga memiliki komponen AR dari lag 0, 1, dan 2. Sementara itu, MA memiliki komponen 0 dan 1 berdasarkan lag pada grafik ACF.

4. Model ARIMA Terbaik dan Estimasi Parameter

       Lanjut ke tahap estimasi parameter, model ARIMA terbaik yang diharapkan memiliki nilai AIC terendah adalah (0,1,1) karena data acak yang dihasilkan telah sengaja dibuat untuk mengikuti model ARIMA (0,1,1).
       Catatan: Tambahkan model_arima(i) apabila masih ada kombinasi komponen ARIMA yang tersedia.
# 5. Estimasi Parameter
model_arima1 <- arima(arima_data, order = c(0,1,0))
summary(model_arima1)
## 
## Call:
## arima(x = arima_data, order = c(0, 1, 0))
## 
## 
## sigma^2 estimated as 1.587:  log likelihood = -118.78,  aic = 239.56
## 
## Training set error measures:
##                     ME     RMSE       MAE      MPE    MAPE      MASE       ACF1
## Training set 0.0255715 1.250916 0.9386733 115.7181 201.828 0.9863014 -0.4201902
model_arima2 <- arima(arima_data, order = c(0,1,1))
summary(model_arima2)
## 
## Call:
## arima(x = arima_data, order = c(0, 1, 1))
## 
## Coefficients:
##           ma1
##       -1.0000
## s.e.   0.0976
## 
## sigma^2 estimated as 0.82:  log likelihood = -97.16,  aic = 198.33
## 
## Training set error measures:
##                      ME      RMSE       MAE      MPE     MAPE      MASE
## Training set 0.05675787 0.8992967 0.7011173 133.8509 208.4922 0.7366918
##                    ACF1
## Training set 0.02633631
model_arima3 <- arima(arima_data, order = c(1,1,0))
summary(model_arima3)
## 
## Call:
## arima(x = arima_data, order = c(1, 1, 0))
## 
## Coefficients:
##           ar1
##       -0.4502
## s.e.   0.1093
## 
## sigma^2 estimated as 1.282:  log likelihood = -111.22,  aic = 226.43
## 
## Training set error measures:
##                      ME     RMSE       MAE      MPE     MAPE      MASE
## Training set 0.01806796 1.124399 0.8262641 118.8464 197.6234 0.8681886
##                    ACF1
## Training set -0.2081765
model_arima4 <- arima(arima_data, order = c(1,1,1))
summary(model_arima4)
## 
## Call:
## arima(x = arima_data, order = c(1, 1, 1))
## 
## Coefficients:
##          ar1      ma1
##       0.0323  -1.0000
## s.e.  0.1197   0.0832
## 
## sigma^2 estimated as 0.8199:  log likelihood = -97.13,  aic = 200.25
## 
## Training set error measures:
##                     ME      RMSE       MAE     MPE     MAPE      MASE
## Training set 0.0567908 0.8992398 0.7008011 133.258 206.5874 0.7363597
##                      ACF1
## Training set -0.002500588
model_arima5 <- arima(arima_data, order = c(2,1,0))
summary(model_arima5)
## 
## Call:
## arima(x = arima_data, order = c(2, 1, 0))
## 
## Coefficients:
##           ar1      ar2
##       -0.6562  -0.4971
## s.e.   0.1062   0.1076
## 
## sigma^2 estimated as 0.986:  log likelihood = -102.05,  aic = 210.09
## 
## Training set error measures:
##                      ME      RMSE      MAE      MPE     MAPE      MASE
## Training set 0.01517806 0.9861612 0.753255 114.7411 215.2864 0.7914751
##                     ACF1
## Training set -0.06176894
model_arima6 <- arima(arima_data, order = c(2,1,1))
summary(model_arima6)
## 
## Call:
## arima(x = arima_data, order = c(2, 1, 1))
## 
## Coefficients:
##          ar1      ar2      ma1
##       0.0350  -0.0906  -0.9957
## s.e.  0.1222   0.1283   0.3494
## 
## sigma^2 estimated as 0.815:  log likelihood = -96.86,  aic = 201.72
## 
## Training set error measures:
##                      ME      RMSE       MAE      MPE     MAPE      MASE
## Training set 0.05587593 0.8965614 0.7019212 134.5126 209.5901 0.7375365
##                    ACF1
## Training set 0.01074868
       Berdasarkan hasil analisis, model ARIMA (0,1,1) ternyata memiliki nilai AIC terendah. Hal ini selaras dengan kesimpulan analisis model terbaik ARIMA menggunakan data inflasi. Selain itu, koefisien MA(1) dari variabel acak yang dibangkitkan menunjukkan nilai yang hampir identik (mendekati nilai -1) dengan estimasi koefisien dari data inflasi (-0.87308). Meskipun demikian, nilai estimasi parameter q pada data bangkitan acak mengindikasikan kemampuan model ARIMA yang lemah dalam memprediksi nilai mendatang.
       Sayangnya, karena data yang digunakan khusus mengenai inflasi di Kota Bogor, maka diasumsikan model ARIMA (0,1,1) atau analisis ARIMA mungkin tidak cocok untuk sebagian besar data time series lainnya yang berhubungan dengan inflasi. Ditambah lagi, model ARIMA (0,1,1) tidak dapat diandalkan untuk memprediksi nilai periode mendatang untuk data time series yang berkaitan dengan inflasi. Jangankan untuk generalisasi terhadap data deret waktu secara luas, model ARIMA (0,1,1) saja menghasilkan memprediksi yang meleset jauh. Mungkin, model ARIMA (0,1,1) cocok digunakan untuk beberapa kasus data deret waktu lainnya, akan tetapi analisis pencarian model ARIMA atau analisis deret waktu terbaik disarankan karena dikhawatirkan terdapat model atau analisis yang lebih optimal.

5. Uji Diagnostik Galat

       Langkah akhir untuk memvalidasi model ARIMA (0,1,1) untuk variabel acak yang dibangkitkan adalah analisis galat. Galat pada grafik ACF diharapkan tetap berada dalam interval kepercayaan kecuali lag 0, tentu saja. Di samping itu, uji autokorelasi juga dilakukan untuk memastikan galat tidak memiliki autokorelasi melalui uji Box-Ljung. Hasil yang diinginkan adalah nilai p lebih besar dari 0,05.
       Catatan: Kamu dapat mengganti model_arima2 dengan model ARIMA terbaik sebelumnya yang memiliki nilai AIC terendah dari data sintetis.
# -- 6. Uji Diagnosa Galat
# Residual Plot
ts.plot(residuals(model_arima2), main = "Galat ARIMA")

# Galat ACF
acf(residuals(model_arima2), main = "ACF Galat ARIMA")

# Uji Autokorelasi
Box.test(
  residuals(model_arima2),
  lag = 2,
  type = "Ljung-Box"
)
## 
##  Box-Ljung test
## 
## data:  residuals(model_arima2)
## X-squared = 0.53647, df = 2, p-value = 0.7647
       Diketahui dari hasil analisis uji galat bahwa data bangkitan acak juga memiliki karakteristik yang sama dengan data asli. Keduanya memenuhi asumsi pengujian galat acak atau white noise, akan tetapi, keduanya juga memiliki performa yang buruk dalam memprediksi nilai-nilai selanjutnya dengan pemodelan ARIMA.

E. KESIMPULAN

       Berdasarkan analisis ARIMA, didapatkan kesimpulan bahwa analisis deret waktu ARIMA memiliki performa yang buruk dalam memprediksi nilai inflasi di Kota Bogor. Hal ini diketahui dari nilai pengujian galat melalui perhitungan MAPE. Adapula, pembangkitan variabel acak melalui simulasi ARIMA, kedua data menunjukkan kesamaan, seperti penggunaan model ARIMA (0,1,1) sebagai model ARIMA terbaik mereka.
       Kedua data baik bangkitan acak ataupun inflasi memiliki kesamaan karakteristik seperti menggunakan model ARIMA yang sama, yaitu (0,1,1) dan nilai estimasi parameter modelnya yang moderat. Akan tetapi, kedua data tidak mampu diprediksi nilai yang akan datang apabila menggunakan model ARIMA (0,1,1). Maka dari itu, analisis deret waktu lain lebih direkomendasikan daripada penggunaan model ARIMA untuk memprediksi nilai inflasi di Kota Bogor untuk bulan-bulan pada tahun 2026. Di samping itu, generalisasi model ARIMA (0,1,1) sangat tidak memungkinkan.
       Apabila penggunaan analisis ARIMA untuk data deret waktu inflasi yang secara khusus berasal dari Kota Bogor menghasilkan nilai prediksi yang buruk, maka dapat diasumsikan pula bahwa data inflasi lain juga tidak cocok dengan pemodelan ARIMA, apalagi untuk data deret waktu secara luas. Walaupun, dalam beberapa kasus, data deret waktu lain mungkin didapati kecocokan dengan pemodelan ARIMA (0,1,1), analisis deret waktu terpisah masih disarankan karena dikhawatirkan terdapat model atau analisis yang lebih optimal.

F. REFERENSI

Alkahfi, C. Pembangkitan Bilangan Acak pada Bahasa R - SAINSDATA.ID — sainsdata.id. https://sainsdata.id/pemrograman/26/pembangkitan-bilangan-acak-pada-bahasa-r/.
Ariyo, A. A., Adewumi, A. O., & Ayo, C. K. (2014, March). Stock price prediction using the ARIMA model. 2014 UKSim-AMSS 16th International Conference on Computer Modelling and Simulation.
Cowpertwait, P. S. P., & Metcalfe, A. V. (2009). Introductory time series with R (2009th ed.). Springer.
Gaddi, G., Chinnappa Reddy, B., & Jadhav, V. (2025). Application of ARIMA model for forecasting agricultural prices. Journal of Agricultural Science and Technology, 19(5), 981–992.
Gertler, M., & Leahy, J. (2006). A phillips curve with an SS foundation. National Bureau of Economic Research; National Bureau of Economic Research.
Introduction to ARIMA models - ML Pills — mlpills.dev. https://mlpills.dev/time-series/introduction-to-arima-models/.
Meade, N. (1983). Industrial and business forecasting methods, lewis, C.D., Borough green, sevenoaks, kent: Butterworth, 1982. Price: £9.25. Pages: 144. J. Forecast., 2(2), 194–196.
Montaño Moreno, J. J., Palmer Pol, A., Sesé Abad, A., & Cajal Blasco, B. (2013). Using the R-MAPE index as a resistant measure of forecast accuracy. Psicothema, 25(4), 500–506.
Pramudita, A. (2020). Memperkirakan tingkat penghuni hotel menggunakan analisis arima dengan aplikasi minitab. EDUSAINTEK, 4.
Stevenson, S. (2007). A comparison of the forecasting ability of ARIMA models. J. Prop. Invest. Fin., 25(3), 223–240.
Tashman, L. J. (2000). Out-of-sample tests of forecasting accuracy: An analysis and review. Int. J. Forecast., 16(4), 437–450.