Analisis ini mengkaji pergerakan inflasi Indonesia menggunakan data Consumer Price Index (CPI) bulanan dari FRED — Federal Reserve Bank of St. Louis, periode Januari 2000 hingga Desember 2024. CPI dikonversi menjadi inflasi year-on-year (perubahan persentase terhadap bulan yang sama tahun sebelumnya), yang merupakan ukuran inflasi yang paling umum digunakan dalam analisis makroekonomi.
Metode yang digunakan adalah ARIMA (Autoregressive Integrated Moving Average), salah satu metode time series paling fundamental dalam ekonometrika untuk memodelkan dan meramalkan variabel yang berurutan dalam waktu.
Ekonometrika Makro adalah cabang ekonometrika yang berfokus pada analisis variabel-variabel agregat ekonomi — seperti inflasi, pertumbuhan GDP, suku bunga, dan nilai tukar. Berbeda dengan ekonometrika mikro yang menggunakan data cross-section, ekonometrika makro umumnya bekerja dengan data time series, yaitu data yang dikumpulkan dari satu objek yang sama secara berulang sepanjang waktu.
Karakteristik utama data time series adalah adanya ketergantungan antar waktu (temporal dependence) — nilai variabel pada periode saat ini dipengaruhi oleh nilai pada periode sebelumnya. Inilah yang membedakannya dari OLS klasik, yang mengasumsikan setiap observasi bersifat independen.
Inflasi adalah kenaikan harga barang dan jasa secara umum dan terus-menerus dalam suatu perekonomian. Salah satu cara paling umum mengukur inflasi adalah melalui Consumer Price Index (CPI), yang mencerminkan perubahan harga sekeranjang barang dan jasa yang dikonsumsi rumah tangga.
Inflasi year-on-year (YoY) dihitung sebagai persentase perubahan CPI dibandingkan bulan yang sama pada tahun sebelumnya:
\[\pi_t = \frac{CPI_t - CPI_{t-12}}{CPI_{t-12}} \times 100\]
Pengukuran ini lebih stabil dibandingkan perubahan bulanan karena menghilangkan efek musiman secara alami.
ARIMA (Autoregressive Integrated Moving Average) adalah metode time series yang dikembangkan oleh Box dan Jenkins (1976). Model ini menggabungkan tiga komponen:
Model ARIMA\((p, d, q)\) secara umum ditulis sebagai:
\[\phi(B)(1-B)^d y_t = \theta(B)\varepsilon_t\]
di mana \(\phi(B)\) adalah operator AR, \(\theta(B)\) adalah operator MA, \(B\) adalah operator backshift, dan \(\varepsilon_t\) adalah white noise.
ARIMA tepat digunakan ketika:
Dalam konteks makroekonomi, ARIMA banyak digunakan untuk forecast inflasi, pertumbuhan ekonomi, dan variabel moneter lainnya sebagai dasar pengambilan kebijakan.
library(forecast)
library(tseries)
library(ggplot2)
library(dplyr)
library(lubridate)
# Muat data dari file CSV (FRED - IDNCPIALLMINMEI)
df <- read.csv("IDNCPIALLMINMEI.csv")
df$observation_date <- as.Date(df$observation_date)
colnames(df) <- c("date", "cpi")
# Filter 2000-2024
df <- df %>% filter(date >= "2000-01-01" & date <= "2024-12-01")
# Hitung inflasi year-on-year (%)
df <- df %>%
arrange(date) %>%
mutate(inflasi = (cpi / lag(cpi, 12) - 1) * 100)
# Hapus 12 baris pertama (NA karena lag 12)
df <- df %>% filter(!is.na(inflasi))
# Jadikan time series
inflasi_ts <- ts(df$inflasi, start = c(2001, 1), frequency = 12)
autoplot(inflasi_ts) +
geom_hline(yintercept = 0, linetype = "dashed", color = "gray50") +
labs(
title = "Inflasi Indonesia (2001–2024)",
subtitle = "Sumber: FRED — IDNCPIALLMINMEI",
y = "Inflasi YoY (%)",
x = NULL
) +
theme_minimal(base_size = 13)
Inflasi year-on-year Indonesia (2001–2024)
Terlihat beberapa lonjakan inflasi yang signifikan, terutama pada 2005–2006 (kenaikan BBM) dan 2022–2023 (tekanan pasca-pandemi dan konflik global).
Sebelum membangun model ARIMA, data harus stasioner — artinya mean dan variansi tidak berubah secara sistematis sepanjang waktu. Uji yang digunakan adalah Augmented Dickey-Fuller (ADF).
adf_result <- adf.test(inflasi_ts)
print(adf_result)
##
## Augmented Dickey-Fuller Test
##
## data: inflasi_ts
## Dickey-Fuller = -4.3985, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
if (adf_result$p.value < 0.05) {
cat(">> p-value =", round(adf_result$p.value, 4),
"— Data stasioner. Tidak diperlukan differencing.\n")
data_model <- inflasi_ts
} else {
cat(">> p-value =", round(adf_result$p.value, 4),
"— Data tidak stasioner. Dilakukan first differencing.\n")
data_model <- diff(inflasi_ts)
cat("\n--- ADF setelah differencing ---\n")
print(adf.test(data_model))
}
## >> p-value = 0.01 — Data stasioner. Tidak diperlukan differencing.
Plot ACF (Autocorrelation Function) dan PACF (Partial Autocorrelation Function) digunakan untuk mengidentifikasi orde model ARIMA:
par(mfrow = c(1, 2))
acf(data_model, main = "ACF — Inflasi Indonesia", lag.max = 36)
pacf(data_model, main = "PACF — Inflasi Indonesia", lag.max = 36)
par(mfrow = c(1, 1))
Fungsi auto.arima() digunakan untuk memilih kombinasi
(p, d, q) terbaik secara otomatis berdasarkan kriteria
AIC (Akaike Information Criterion) terkecil.
model_arima <- auto.arima(inflasi_ts, seasonal = TRUE, stepwise = FALSE, approximation = FALSE)
summary(model_arima)
## Series: inflasi_ts
## ARIMA(0,1,1)(0,0,1)[12]
##
## Coefficients:
## ma1 sma1
## 0.2125 -0.8440
## s.e. 0.0605 0.0448
##
## sigma^2 = 0.5146: log likelihood = -318.4
## AIC=642.8 AICc=642.88 BIC=653.78
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.1057608 0.7136274 0.403027 -3.882663 7.860739 0.1420454
## ACF1
## Training set -0.02494376
Parameter dalam model ARIMA tidak diinterpretasikan seperti koefisien regresi OLS. Berikut cara membacanya:
koef_arima <- coef(model_arima)
cat("=== Parameter Model", as.character(model_arima), "===\n\n")
## === Parameter Model ARIMA(0,1,1)(0,0,1)[12] ===
for (nm in names(koef_arima)) {
cat(sprintf("%-10s : %.4f\n", nm, koef_arima[nm]))
}
## ma1 : 0.2125
## sma1 : -0.8440
cat("\nCatatan: Parameter signifikan jika nilai absolutnya jauh dari nol relatif terhadap standard error-nya.\n")
##
## Catatan: Parameter signifikan jika nilai absolutnya jauh dari nol relatif terhadap standard error-nya.
Model yang baik menghasilkan residual yang menyerupai white noise — tidak ada pola yang tersisa. Diuji menggunakan Ljung-Box Test:
checkresiduals(model_arima)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(0,1,1)(0,0,1)[12]
## Q* = 23.754, df = 22, p-value = 0.3603
##
## Model df: 2. Total lags used: 24
lb <- Box.test(residuals(model_arima), lag = 12, type = "Ljung-Box")
cat("Ljung-Box p-value:", round(lb$p.value, 4), "\n")
## Ljung-Box p-value: 0.4418
if (lb$p.value > 0.05) {
cat(">> Residual bersih — tidak ada autokorelasi tersisa. Model sudah memadai.\n")
} else {
cat(">> Residual masih mengandung pola. Pertimbangkan spesifikasi model lain.\n")
}
## >> Residual bersih — tidak ada autokorelasi tersisa. Model sudah memadai.
Model digunakan untuk meramalkan inflasi 12 bulan ke depan.
fc <- forecast(model_arima, h = 12)
print(fc)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Jan 2025 1.959845 1.04045607 2.879234 0.5537609 3.365929
## Feb 2025 1.753681 0.30870415 3.198657 -0.4562202 3.963581
## Mar 2025 1.511376 -0.31362706 3.336380 -1.2797255 4.302478
## Apr 2025 1.523447 -0.61508428 3.661979 -1.7471546 4.794050
## May 2025 1.804115 -0.60752301 4.215753 -1.8841671 5.492397
## Jun 2025 2.225665 -0.43115222 4.882483 -1.8375864 6.288917
## Jul 2025 2.793665 -0.08754301 5.674873 -1.6127624 7.200092
## Aug 2025 2.930522 -0.15882138 6.019865 -1.7942208 7.655264
## Sep 2025 3.220741 -0.06357381 6.505055 -1.8021848 8.243666
## Oct 2025 3.334884 -0.13345917 6.803226 -1.9694889 8.639256
## Nov 2025 3.377173 -0.26591345 7.020260 -2.1944472 8.948794
## Dec 2025 3.538313 -0.27151147 7.348138 -2.2883107 9.364937
autoplot(fc) +
labs(
title = "Forecast Inflasi Indonesia — 12 Bulan ke Depan",
subtitle = paste("Model:", as.character(model_arima)),
y = "Inflasi YoY (%)",
x = NULL
) +
theme_minimal(base_size = 13)
Forecast inflasi Indonesia 12 bulan ke depan
Analisis time series terhadap inflasi Indonesia menggunakan data CPI bulanan dari FRED menghasilkan beberapa temuan utama:
auto.arima() memilih
model ARIMA(0,1,1)(0,0,1)[12] sebagai spesifikasi terbaik berdasarkan
AIC.Referensi: