# Load Library
library(tseries)
## Warning: package 'tseries' was built under R version 4.4.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(TSA)
## Warning: package 'TSA' was built under R version 4.4.3
##
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
##
## acf, arima
## The following object is masked from 'package:utils':
##
## tar
library(forecast)
## Warning: package 'forecast' was built under R version 4.4.3
## Registered S3 methods overwritten by 'forecast':
## method from
## fitted.Arima TSA
## plot.Arima TSA
# Pembangkitan Data
set.seed(1)
n <- 200
ar_param <- 0.5
ma_param <- 0.4
# Simulasi ARIMA(1,1,1)
ts_data <- arima.sim(model = list(order = c(1, 1, 1), ar = ar_param, ma = ma_param), n = n)
# Plot Data Awal
ts.plot(ts_data, main = "Simulasi Data ARIMA (1,1,1)", col = "blue")
# Identifikasi Model Awal
# Plot ACF dan PACF untuk melihat pola awal
par(mfrow = c(1, 2))
acf(ts_data, main = "ACF Data Asli")
pacf(ts_data, main = "PACF Data Asli")
par(mfrow = c(1, 1))
# Pengujian Kestasioneran (ADF Test)
print("Hasil ADF Test Data Asli")
## [1] "Hasil ADF Test Data Asli"
adf_original <- adf.test(ts_data)
print(adf_original)
##
## Augmented Dickey-Fuller Test
##
## data: ts_data
## Dickey-Fuller = -2.1074, Lag order = 5, p-value = 0.5311
## alternative hypothesis: stationary
# Proses Differencing
diff_data <- diff(ts_data)
# Identifikasi Ulang Setelah Differencing
par(mfrow = c(1, 2))
acf(diff_data, main = "ACF Setelah Differencing")
pacf(diff_data, main = "PACF Setelah Differencing")
par(mfrow = c(1, 1))
print("Hasil ADF Test Setelah Differencing")
## [1] "Hasil ADF Test Setelah Differencing"
adf_diff <- adf.test(diff_data)
## Warning in adf.test(diff_data): p-value smaller than printed p-value
print(adf_diff)
##
## Augmented Dickey-Fuller Test
##
## data: diff_data
## Dickey-Fuller = -4.4493, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
# Penentuan Kandidat Model
# Menggunakan EACF untuk melihat kandidat model p dan q
print("Tabel EACF")
## [1] "Tabel EACF"
eacf(diff_data)
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x x x o o o o o o o o o o o
## 1 x o o o o o o o o o o o o o
## 2 x o o o o o o o o o o o o o
## 3 o x o o o o o o o o o o o o
## 4 x x o o o o o o o o o o o o
## 5 x o o o o o o o o o o o o o
## 6 x x o o o o o o o o o o o o
## 7 x o x o o o o o o x o o o o
# Perbandingan dengan auto arima
print("Hasil auto.arima")
## [1] "Hasil auto.arima"
model_auto <- auto.arima(ts_data)
summary(model_auto)
## Series: ts_data
## ARIMA(1,1,1)
##
## Coefficients:
## ar1 ma1
## 0.4918 0.3787
## s.e. 0.0859 0.0933
##
## sigma^2 = 0.9265: log likelihood = -275.54
## AIC=557.08 AICc=557.2 BIC=566.97
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.05217333 0.9553617 0.7537636 24.28786 68.31331 0.6789159
## ACF1
## Training set -0.007914125
Kandidat Model yang akan digunakan adalah ARIMA(1,1,1), ARIMA(1,1,2), ARIMA(2,1,1), ARIMA(2,1,2), dan ARIMA(0,1,3)
# Pemilihan Model Terbaik Berdasarkan AIC
print("Perbandingan Model (AIC)")
## [1] "Perbandingan Model (AIC)"
# Model 1: ARIMA(1,1,1)
mod1 <- arima(ts_data, order = c(1, 1, 1), method = "ML")
print(paste("AIC ARIMA(1,1,1):", mod1$aic))
## [1] "AIC ARIMA(1,1,1): 555.080004148892"
# Model 2: ARIMA(1,1,2)
mod2 <- arima(ts_data, order = c(1, 1, 2), method = "ML")
print(paste("AIC ARIMA(1,1,2):", mod2$aic))
## [1] "AIC ARIMA(1,1,2): 557.066510635887"
# Model 3: ARIMA(2, 1, 1)
mod3 <- arima(ts_data, order = c(2, 1, 1), method = "ML")
print(paste("AIC ARIMA(2,1,1):", mod3$aic))
## [1] "AIC ARIMA(2,1,1): 557.062773311398"
# Model 4: ARIMA(2,1,2)
mod4 <- arima(ts_data, order = c(2, 1, 2), method = "ML")
print(paste("AIC ARIMA(2,1,2):", mod4$aic))
## [1] "AIC ARIMA(2,1,2): 553.99716529261"
# Model 5: ARIMA(0,1,3)
mod5 <- arima(ts_data, order = c(0, 1, 3), method = "ML")
print(paste("AIC ARIMA(0,1,3):", mod5$aic))
## [1] "AIC ARIMA(0,1,3): 556.17357556732"
Berdasarkan hasil pemodelan, diperoleh model dengan nilai AIC terkecil adalah ARIMA(2,1,2). Hasil ini berbeda dengan pembangkitan data dengan model ARIMA(1,1,1), hasil indentifikasi dan pemodelan tidak selalu menghasilkan model yang sama persis. Beberapa kemungkinan penyebab perbedaan tersebut.