LOAD LIBRARY
library(tseries)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(TSA)
##
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
##
## acf, arima
## The following object is masked from 'package:utils':
##
## tar
library(forecast)
## Registered S3 methods overwritten by 'forecast':
## method from
## fitted.Arima TSA
## plot.Arima TSA
Interpretasi: Library tseries digunakan untuk uji kestasioneran (ADF test). TSA digunakan untuk identifikasi model, terutama EACF. forecast digunakan untuk pemodelan ARIMA dan pemilihan model terbaik berdasarkan AIC.
PEMBANGKITAN DATA
#Set seed untuk reprodusibilitas
set.seed(789)
#Panjang data
n <- 200
# Parameter baru
ar <- 0.6 # AR (1)
ma <- -0.4 # MA (1)
ts_arima <- arima.sim(model = list(order = c(1,1,1), ar = ar, ma = ma), n = n)
# Plot
ts.plot(ts_arima, main = "Simulasi Data ARIMA(1,1,1)")
Interpretasi: Data time series dibangkitkan menggunakan model
ARIMA(1,1,1) dengan parameter AR = 0.6 (positif) dan MA = -0.4
(negatif). Hasil plot menunjukkan pola yang masih berfluktuasi dengan
kecenderungan tidak stabil, sehingga mengindikasikan data belum
stasioner. Hal ini sesuai dengan karakter ARIMA yang memiliki komponen
differencing (d=1), sehingga perlu dilakukan pengujian kestasioneran
pada tahap berikutnya.
ACF dan PACF
acf(ts_arima)
pacf(ts_arima)
Interpretasi: Plot ACF menunjukkan penurunan yang lambat (tailing off)
dan masih banyak lag yang signifikan, sehingga mengindikasikan data
belum stasioner. Plot PACF tidak menunjukkan cutoff yang jelas pada lag
tertentu, melainkan juga cenderung menurun. Kombinasi ini menunjukkan
bahwa data masih mengandung tren dan perlu dilakukan proses differencing
sebelum pemodelan lebih lanjut.
UJI KESTASIONERAN (ADF TEST)
adf.test(ts_arima)
##
## Augmented Dickey-Fuller Test
##
## data: ts_arima
## Dickey-Fuller = -0.98665, Lag order = 5, p-value = 0.9383
## alternative hypothesis: stationary
Interpretasi: Hasil uji Augmented Dickey-Fuller menunjukkan p-value sebesar 0.9383 (> 0.05), sehingga data tidak stasioner.
Dengan demikian, perlu dilakukan proses differencing untuk membuat data menjadi stasioner sebelum dilakukan pemodelan lebih lanjut.
DIFFERENCING
diff1 <- diff(ts_arima)
ts.plot(diff1, main = "Data Setelah Differencing")
Interpretasi: Setelah dilakukan differencing, pola data terlihat lebih
stabil dan berfluktuasi di sekitar nilai rata-rata tanpa tren yang
jelas. Hal ini menunjukkan bahwa differencing berhasil menghilangkan
ketidakstasioneran pada data, sehingga data lebih siap untuk tahap
identifikasi model selanjutnya.
IDENTIFIKASI ULANG (ACF & PACF)
acf(diff1)
pacf(diff1)
Interpretasi: Plot ACF menunjukkan hanya beberapa lag awal yang signifikan, kemudian cepat turun dan masuk batas, sehingga mengindikasikan komponen MA (q) kecil, kemungkinan di sekitar lag 1. Plot PACF juga menunjukkan spike signifikan di lag awal lalu menurun, yang mengarah pada komponen AR (p) rendah, kemungkinan di sekitar lag 1. Secara keseluruhan, pola ACF dan PACF sudah lebih jelas dan stabil, sehingga kandidat model yang sesuai adalah ARIMA(1,1,1) atau model sederhana di sekitarnya seperti ARIMA(0,1,1).
UJI KESTASIONERAN ULANG
adf.test(diff1)
## Warning in adf.test(diff1): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: diff1
## Dickey-Fuller = -5.7679, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
Interpretasi: Hasil uji ADF menunjukkan p-value sebesar 0.01 (< 0.05), sehingga data sudah stasioner setelah differencing. Peringatan “p-value smaller than printed p-value” menunjukkan bahwa nilai p-value sebenarnya lebih kecil dari 0.01, sehingga semakin menguatkan bahwa data telah stasioner. Dengan demikian, proses differencing sudah cukup dan dapat dilanjutkan ke tahap identifikasi model.
KONVERSI KE TIME SERIES
data.ts <- ts(diff1)
head(data.ts)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] 0.7141071 -0.7171239 0.3023669 -0.5946917 0.0953453 -0.8038800
Interpretasi: Data hasil differencing dikonversi ke dalam bentuk time series dengan indeks waktu berurutan. Nilai yang ditampilkan merupakan beberapa observasi awal yang sudah berfluktuasi di sekitar nol, menunjukkan data telah stasioner dan siap digunakan untuk proses identifikasi dan pemodelan ARIMA.
Kandidat Model
acf(data.ts)
pacf(data.ts)
eacf(data.ts)
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x o o 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 x o o o o o o o o o o o o
## 3 x o o o o o o o o o o o o o
## 4 o x o o o o o o o o o o o o
## 5 x o o x o o o o o o o o o o
## 6 o o x x o x o o o o o o o o
## 7 x x x x o o o o o o o o o o
Interpretasi: Tabel EACF digunakan untuk membantu menentukan kombinasi orde AR (p) dan MA (q). Pola segitiga dari simbol “o” menunjukkan kandidat model yang layak dipertimbangkan. Dari hasil yang diperoleh, terlihat bahwa pola segitiga mulai terbentuk di sekitar kombinasi orde kecil, khususnya pada (p,q) = (1,1) serta beberapa alternatif di sekitarnya seperti (0,1) atau (2,1). Hal ini konsisten dengan hasil ACF dan PACF sebelumnya yang menunjukkan bahwa komponen AR dan MA cenderung rendah. Dengan demikian, model kandidat yang dapat dipertimbangkan adalah ARIMA(1,1,1) sebagai model utama, serta model pembanding seperti ARIMA(0,1,1) dan ARIMA(2,1,1) sebelum dilakukan pemilihan terbaik menggunakan AIC.
AUTO ARIMA (PEMBANDING)
auto.arima(data.ts)
## Series: data.ts
## ARIMA(0,0,1) with zero mean
##
## Coefficients:
## ma1
## 0.2184
## s.e. 0.0643
##
## sigma^2 = 1.068: log likelihood = -289.86
## AIC=583.71 AICc=583.77 BIC=590.31
auto.arima(ts_arima)
## Series: ts_arima
## ARIMA(0,1,1)
##
## Coefficients:
## ma1
## 0.2184
## s.e. 0.0643
##
## sigma^2 = 1.068: log likelihood = -289.86
## AIC=583.71 AICc=583.77 BIC=590.31
Interpretasi: Hasil auto.arima(data.ts) menghasilkan model ARIMA(0,0,1) karena data yang digunakan sudah dalam bentuk hasil differencing, sehingga tidak memerlukan differencing lagi (d = 0). Sedangkan auto.arima(ts_arima) menghasilkan ARIMA(0,1,1) karena menggunakan data asli yang masih mengandung unsur non-stasioner, sehingga diperlukan differencing (d = 1). Kedua hasil ini sebenarnya konsisten, karena model ARIMA(0,0,1) pada data differencing ekuivalen dengan ARIMA(0,1,1) pada data asli. Dengan nilai AIC sebesar 583.71, model ini menjadi salah satu kandidat kuat untuk model terbaik.
PENENTU MODEL TERBAIK BERDASARKAN AIC
model1 <- arima(data.ts, order=c(1,1,1), method="ML")
model2 <- arima(data.ts, order=c(0,1,1), method="ML")
model3 <- arima(data.ts, order=c(1,1,2), method="ML")
model4 <- arima(data.ts, order=c(2,0,2), method="ML")
model1$aic
## [1] 585.6017
model2$aic
## [1] 593.6237
model3$aic
## [1] 587.4493
model4$aic
## [1] 585.2405
Interpretasi: Nilai AIC yang diperoleh berturut-turut adalah 606.2416, 605.3211, 608.5737, dan 597.7618. Model terbaik dipilih berdasarkan nilai AIC terkecil, yaitu 597.7618. Dengan demikian, model ke-4 (m4) merupakan model terbaik karena memiliki kemampuan paling baik dalam menjelaskan data dengan kompleksitas yang relatif optimal dibandingkan model lainnya.
Kesimpulan: Data hasil simulasi ARIMA(1,1,1) pada awalnya tidak stasioner, terlihat dari plot dan uji ADF. Setelah differencing satu kali, data menjadi stasioner dan siap dimodelkan. Pola ACF, PACF, dan EACF menunjukkan kandidat model dengan orde rendah di sekitar ARIMA(1,1,1). Hasil auto.arima menghasilkan ARIMA(0,1,1) yang masih sejalan dengan pola data. Berdasarkan perbandingan AIC, model terbaik memiliki nilai terkecil yaitu 597,7618. Model ini tidak sama dengan model pembangkitan awal, namun perbedaan tersebut wajar karena adanya unsur acak pada data simulasi, jumlah data terbatas, dan proses estimasi yang tidak selalu menghasilkan parameter yang sama.