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.
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
# 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))
Model tidak mengandung order differencing sehingga tidak perlu dilakukan proses diferensiasi.
Catatan : Berikut merupakan langkah analisis tambahan
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
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 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")
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()