library(tseries)
## Warning: package 'tseries' was built under R version 4.5.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.5.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.5.3
## Registered S3 methods overwritten by 'forecast':
## method from
## fitted.Arima TSA
## plot.Arima TSA
set.seed(456)
n <- 200
ar_val <- 0.5
ma_val <- 0.8
ts_tugas <- arima.sim(model = list(order = c(1,1,1), ar = ar_val, ma = ma_val), n = n)
ts.plot(ts_tugas, main = "Simulasi Data ARIMA(1,1,1) - Parameter Baru", ylab="Nilai", xlab="Waktu")
par(mfrow=c(1,2))
acf(ts_tugas, main="ACF Data Asli")
pacf(ts_tugas, main="PACF Data Asli")
adf.test(ts_tugas)
##
## Augmented Dickey-Fuller Test
##
## data: ts_tugas
## Dickey-Fuller = -2.6276, Lag order = 5, p-value = 0.3132
## alternative hypothesis: stationary
Karena nilai p-value > 0.05, maka dapat disimpulkan bahwa data tidak stationer dan diperlukan proses differencing.
diff1_tugas <- diff(ts_tugas)
par(mfrow=c(1,2))
acf(diff1_tugas, main="ACF Data Differencing (d=1)")
pacf(diff1_tugas, main="PACF Data Differencing (d=1)")
# 5. Cek Kestasioneran Ulang dengan ADF Test
# Seharusnya p-value < 0.05 yang menandakan data sudah stasioner
adf.test(diff1_tugas)
## Warning in adf.test(diff1_tugas): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: diff1_tugas
## Dickey-Fuller = -5.2304, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
Karena nilai p-value < 0.05, maka dapat disimpulkan bahwa data stationer dan tidak diperlukan proses differencing lagi. Sehingga dapat dilanjutkan pada analisis selanjutnya.
data_ts_tugas <- ts(diff1_tugas)
eacf(data_ts_tugas)
## 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 x x o
## 1 x x x o o o o o o o o o o o
## 2 x x x o o o o o o o o o o o
## 3 x o x x o o o o o o o o o o
## 4 x o x x o o o o o o o o o o
## 5 x x x x x o o o o o o o o o
## 6 x x x x o x o o o o o o o o
## 7 x x x o o x x o o o o o o o
model_auto <- auto.arima(ts_tugas)
print("Hasil Terbaik dari auto.arima:")
## [1] "Hasil Terbaik dari auto.arima:"
summary(model_auto)
## Series: ts_tugas
## ARIMA(2,1,2)
##
## Coefficients:
## ar1 ar2 ma1 ma2
## 1.4392 -0.5114 -0.0906 -0.7004
## s.e. 0.1521 0.0897 0.1540 0.1332
##
## sigma^2 = 0.9623: log likelihood = -278.98
## AIC=567.96 AICc=568.26 BIC=584.45
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.01032408 0.9686826 0.7867316 0.1457235 6.852631 0.5273895
## ACF1
## Training set -0.02127926
model_1 <- arima(data_ts_tugas, order = c(1,0,1), method="ML") # Model Aktual Pembangkitan
model_2 <- arima(data_ts_tugas, order = c(1,0,0), method="ML") # Kandidat 1
model_3 <- arima(data_ts_tugas, order = c(0,0,1), method="ML") # Kandidat 2
model_4 <- arima(data_ts_tugas, order = c(2,0,1), method="ML") # Kandidat 3
print(paste("AIC ARIMA(1,0,1) differenced (True Model) :", AIC(model_1)))
## [1] "AIC ARIMA(1,0,1) differenced (True Model) : 566.915646390263"
print(paste("AIC ARIMA(1,0,0) differenced :", AIC(model_2)))
## [1] "AIC ARIMA(1,0,0) differenced : 636.926364606825"
print(paste("AIC ARIMA(0,0,1) differenced :", AIC(model_3)))
## [1] "AIC ARIMA(0,0,1) differenced : 621.597680902326"
print(paste("AIC ARIMA(2,0,1) differenced :", AIC(model_4)))
## [1] "AIC ARIMA(2,0,1) differenced : 568.819691274264"
Berdasarkan pemodelan yang telah dilakukan, terdapat perbedaan antara model yang dipilih secara otomatis dan model aslinya. Fungsi auto.arima() mengidentifikasi ARIMA(2,1,2) sebagai model terbaik dengan nilai AIC 567.96. Namun, melalui pengujian perbandingan model asli dari pembangkitan data, yaitu ARIMA(1,1,1), terbukti memiliki kinerja yang lebih baik dengan nilai AIC yang lebih rendah (566.91).
Kegagalan algoritma otomatis dalam mendeteksi model asli ini utamanya disebabkan oleh penggunaan metode pencarian bertahap (stepwise search) pada auto.arima(), yang membuatnya rentan berhenti pada titik optimal lokal tanpa menguji semua kemungkinan kombinasi. Selain itu, jumlah sampel yang terbatas (\(n=200\)) dan adanya fluktuasi acak (noise) pada data memicu algoritma untuk menangkap pola semu, sehingga menghasilkan model yang lebih kompleks dari seharusnya (overfitting). Hal ini menegaskan bahwa pemodelan deret waktu otomatis tidak selalu mutlak dan tetap memerlukan validasi analitis secara manual.