Model SARIMA(0,0,0)(2,0,0)[12] memiliki bentuk:

\[ y_t = \phi_{1,12} y_{t-12} + \phi_{2,12} y_{t-24} + a_t \]

di mana: - \(y_t\) adalah nilai pada waktu \(t\) - \(\phi_{1,12}\) dan \(\phi_{2,12}\) adalah koefisien musiman AR lag ke-12 dan ke-24 - \(a_t\) adalah white noise/error acak.

Pada bagian ini, akan dilakukan simulasi data time series menggunakan model SARIMA(0,0,0)(2,0,0)[12], yaitu model dengan dua komponen autoregressive musiman tanpa differencing dan tanpa moving average.

Load library

library(forecast)
## Warning: package 'forecast' was built under R version 4.4.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3

Simulasi Data

# Set seed untuk reproduktibilitas
set.seed(004)

# Parameter model SARIMA(0,0,0)(2,0,0)[12]
phi1_seasonal <- 0.6  # Koefisien AR musiman pertama
phi2_seasonal <- 0.3  # Koefisien AR musiman kedua
n <- 120               # Jumlah observasi (10 tahun data bulanan)

# Simulasi model SARIMA
model_sim <- arima.sim(
  model = list(
    order = c(0,0,0),
    seasonal = list(
      order = c(2,0,0),
      period = 12
    )
  ),
  n = n,
  innov = rnorm(n),
  start.innov = rnorm(24),
  ar = c(rep(0,11), phi1, rep(0,11), phi2)
)

ts_data <- ts(model_sim, frequency = 12, start = c(2025,1))

# Konversi ke time series object
ts_data <- ts(model_sim, frequency = 12, start = c(2025, 1))

ACF dan PACF tanpa Differencing

Model tidak mengandung order differencing sehingga tidak perlu dilakukan proses diferensiasi.

Catatan : Berikut merupakan langkah analisis tambahan

Estimasi Model Sarima

sarima_model <- Arima(ts_data, order = c(0,0,0), seasonal = c(2,0,0))
summary(sarima_model)
## Series: ts_data 
## ARIMA(0,0,0)(2,0,0)[12] with non-zero mean 
## 
## Coefficients:
##         sar1    sar2     mean
##       0.0534  0.0229  -0.0198
## s.e.  0.0971  0.1052   0.0928
## 
## sigma^2 = 0.9227:  log likelihood = -163.95
## AIC=335.91   AICc=336.25   BIC=347.06
## 
## Training set error measures:
##                        ME      RMSE       MAE     MPE     MAPE      MASE
## Training set -0.001427455 0.9485066 0.7853034 96.5672 98.72157 0.7609231
##                     ACF1
## Training set -0.09203271

Diagnostik Residual

par(mfrow = c(2,2))

# 1. Plot residual
plot(sarima_model$residuals, main = "Residuals", ylab = "Residuals", col = "red")
abline(h = 0, col = "blue", lty = 2)

# 2. ACF residual
acf(sarima_model$residuals, main = "ACF of Residuals", lag.max = 48)

# 3. PACF residual
pacf(sarima_model$residuals, main = "PACF of Residuals", lag.max = 48)

Uji Diagnostik Residual

# Uji Ljung-Box
Box.test(sarima_model$residuals, lag = 20, type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  sarima_model$residuals
## X-squared = 16.81, df = 20, p-value = 0.6653
# Uji Normalitas Residual
shapiro.test(sarima_model$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  sarima_model$residuals
## W = 0.99078, p-value = 0.6054
# Q-Q plot
qqnorm(sarima_model$residuals, main = "Q-Q Plot of Residuals")
qqline(sarima_model$residuals, col = "blue")

Peramalan (Forecasting) 12 Periode ke Depan

forecast_result <- forecast(sarima_model, h = 12)
autoplot(forecast_result) +
  ggtitle("Forecast SARIMA(0,0,0)(2,0,0)[12]") +
  xlab("Tahun") +
  ylab("Nilai") +
  theme_minimal()