library(tseries)
## Warning: package 'tseries' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(forecast)
## Warning: package 'forecast' was built under R version 4.3.3
library(TSA) # (time series analysis) ini buat time seriesnya
## Warning: package 'TSA' was built under R version 4.3.3
## Registered S3 methods overwritten by 'TSA':
##   method       from    
##   fitted.Arima forecast
##   plot.Arima   forecast
## 
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
## 
##     acf, arima
## The following object is masked from 'package:utils':
## 
##     tar

Pembangkitan Data Time Series

Coba bangkitkan data time series dengan model ARIMA (1,1,1). Tentukan nilai AR

# Set seed untuk reprodusibilitas
set.seed(123)

# Panjang data
n <- 200

# Parameter ARIMA (p=1, d=1, q=1)
ar <- 0.7   #AR(1)
ma <- -0.5  #AM(1)

# Simulasi data
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)")

## Melakukan Pemodelan 1. Buat Plot ACF dan PACF 2. Cek Kestasioneran dengan ADF Test 3. Melakukan Differencing 4. Buat Plot ACF dan PACF 5. Cek Kestasioneran dengan ADF Test 6. Ubah ke Data Time Series 7. Buat Kandidat Model Melalui ACF, PACF dan EACF 8. Bandingkan dengan Hasil auto.arima 9. Cek AIC Terkecil

acf(ts_arima)

acf() untuk melihat korelasi lag antar data. ACF (Autocorrelation Function): Menurun secara perlahan (tailing off), menunjukkan pola autocorrelation bertahap, khas dari proses ARIMA dengan komponen AR (Autoregressive).

pacf(ts_arima)

pacf() untuk melihat korelasi langsung antar lag setelah menghilangkan pengaruh lag sebelumnya. PACF (Partial Autocorrelation Function): Terputus drastis (cut off) setelah lag ke-1 (hanya signifikan di lag ke-1), ini mengindikasikan bahwa model AR(1) kemungkinan cocok.

adf.test(ts_arima)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  ts_arima
## Dickey-Fuller = -2.449, Lag order = 5, p-value = 0.388
## alternative hypothesis: stationary

Dikarenakan p-value = 0.388 > 0.05 sehingga disimpulkan data tidak stasioner dan harus dilakukan proses differencing. Ini tuh alfanya 0.05, jadi kaya bates salahnya cuma 0.05 aja, kalo nglebihin itu ya udah dia ga stasioner. Karena ga stasioner jadi dia kudu di differencing dulu biar stasioner (normal)

diff1 <- diff(ts_arima)

perintah differencing emang cuma diff doang terus manggil nama datanya.

acf(diff1)

nah udah ni dia polanya ga turun lambat lagi, jadi dia langsung cut off gitu, jadi dia tandanya udah stasioner. (njegleg ceunah xixi)

pacf(diff1)

nah dari plot ini juga lagnya tuh uda di dalem garis putus putus biru itu, jadi emang dah stasioner ya diks ya. tinggal buat mastiin lebihnya dicek pake adf tes di bawah ini.

adf.test(diff1)
## Warning in adf.test(diff1): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff1
## Dickey-Fuller = -5.4572, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary

Karena nilai p-value = 0.01 < 0.05 sehingga disimpulkan data sudah stasioner. yuhuuu dah beneran ya itu liat p-valuenya lebih kecil dibanding alfa 0.05, jadi salahnya asi ditolerir.

Memanggil data yang sudah di differencing sebelumnya

data.ts <- ts(diff1)
head(data.ts)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1] -0.4362295 -1.1367886 -0.4798151 -1.2528876 -1.0929103 -1.0256309

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 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 o o x o o o o o o o  o  o  o 
## 7 o x x x x o o o o o o  o  o  o

Dari hasil eacf(data.ts), kita bisa menentukan kandidat model ARIMA(p,d,q) dengan mencari p (AR) dan q (MA) berdasarkan pola ‘o’ di tabel EACF. Tabel eacf() berfungsi untuk menampilkan pola kombinasi AR dan MA, di mana: o berarti kombinasi AR/MA yang mungkin cocok (residual kecil),

x berarti tidak cocok (residual besar),

Baris = AR (p), Kolom = MA (q).

Interpretasi:

ARIMA(0,1,1) Karena baris AR=0 dan kolom MA=1 bernilai o. Artinya model MA(1) cocok.

ARIMA(1,1,1) Baris AR=1, kolom MA=1 → o juga. Berarti kombinasi AR(1), MA(1) juga mungkin.

ARIMA(1,1,3) Baris AR=1, kolom MA=3 → o. Model ini juga kandidat karena cocok hingga MA(3).

ARIMA(2,0,2) Model ini mungkin muncul dari alternatif uji lain (misal AIC/BIC) karena eacf kurang eksplisit di AR=2 dan MA=2 (lihat baris ke-2 dan kolom ke-2 ada o).

auto.arima(data.ts)
## Series: data.ts 
## ARIMA(2,0,2) with zero mean 
## 
## Coefficients:
##           ar1     ar2     ma1      ma2
##       -0.1116  0.6336  0.3108  -0.6250
## s.e.   0.2175  0.1701  0.2294   0.2122
## 
## sigma^2 = 0.8631:  log likelihood = -267.28
## AIC=544.57   AICc=544.88   BIC=561.06

Kandidat Model ARIMA(1,1,1) ARIMA(1,1,3) ARIMA(0,1,1) ARIMA(2,0,2)

auto.arima(ts_arima)
## Series: ts_arima 
## ARIMA(2,1,2) 
## 
## Coefficients:
##           ar1     ar2     ma1      ma2
##       -0.1116  0.6336  0.3108  -0.6250
## s.e.   0.2175  0.1701  0.2294   0.2122
## 
## sigma^2 = 0.8631:  log likelihood = -267.28
## AIC=544.57   AICc=544.88   BIC=561.06

Penentuan Model Terbaik berdasar AIC

arima(data.ts, order=c(1,1,1), method="ML")
## 
## Call:
## arima(x = data.ts, order = c(1, 1, 1), method = "ML")
## 
## Coefficients:
##          ar1      ma1
##       0.1488  -1.0000
## s.e.  0.0706   0.0164
## 
## sigma^2 estimated as 0.8926:  log likelihood = -273.56,  aic = 551.13
arima(data.ts, order=c(1,1,3), method="ML")
## 
## Call:
## arima(x = data.ts, order = c(1, 1, 3), method = "ML")
## 
## Coefficients:
##           ar1     ma1      ma2      ma3
##       -0.8559  0.0335  -0.9642  -0.0693
## s.e.   0.0800  0.1018   0.0443   0.0772
## 
## sigma^2 estimated as 0.8611:  log likelihood = -270.25,  aic = 548.49
arima(data.ts, order=c(0,1,1), method="ML")
## 
## Call:
## arima(x = data.ts, order = c(0, 1, 1), method = "ML")
## 
## Coefficients:
##           ma1
##       -0.9294
## s.e.   0.1078
## 
## sigma^2 estimated as 0.93:  log likelihood = -276.14,  aic = 554.28
arima(data.ts, order=c(2,0,2), method="ML")
## 
## Call:
## arima(x = data.ts, order = c(2, 0, 2), method = "ML")
## 
## Coefficients:
##           ar1     ar2     ma1      ma2  intercept
##       -0.1096  0.6350  0.3087  -0.6269    -0.0214
## s.e.   0.2164  0.1692  0.2283   0.2112     0.0931
## 
## sigma^2 estimated as 0.8456:  log likelihood = -267.26,  aic = 544.51

Berdasarkan hasil pemodelan, diperoleh model dengan nilai AIC terkecil adalah ARIMA(2,0,2), hal ini dikarenakan data yang terbaca adalah data hasil differencing. Diperoleh pembelajaran bahwa, data time series yang dibangkitkan dengan model tertentu, belum tentu akan sama dengan hasil pemodelan terbaiknya. Hal ini diduga karena adanya faktor-faktor lain yang mempengaruhi proses pemodelan.