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 Time Series

# Seed
set.seed(456)

# Panjang data
n <- 200

# Parameter baru
ar <- 0.4
ma <- 0.6

# Simulasi
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

Uji ACF & PACF

acf(ts_arima)

pacf(ts_arima)

Uji ADF

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

Karena p-value = 0.413 > 0.05 sehingga dapat disimpulkan bahwa data tidak stasioner dan harus dilakukan proses differencing.

Differencing

diff1 <- diff(ts_arima)

acf(diff1)

pacf(diff1)

Uji ADF Setelah Differencing

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

Karena nilai p-value yang diperoleh pada uji ADF kedua ini = 0.01 < 0.05 maka dapat disimpulkan bawa data telah stasioner.

data.ts <- ts(diff1)
head(data.ts)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1] 1.7418301 0.1248623 0.8115561 2.1000072 3.0871674 0.7864189

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 x o o o o o o o o o  x  x  x 
## 1 x x o x 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 x x x o o o o o o o  o  o  o 
## 4 x x x x o o o o o o o  o  o  o 
## 5 o x x x x o o o o o o  o  o  o 
## 6 o x x x o x o o o o o  o  o  o 
## 7 o x x o o o o o o o o  o  o  o
auto.arima(data.ts)
## Series: data.ts 
## ARIMA(1,0,1) with zero mean 
## 
## Coefficients:
##          ar1     ma1
##       0.4593  0.5656
## s.e.  0.0801  0.0804
## 
## sigma^2 = 0.969:  log likelihood = -280.17
## AIC=566.35   AICc=566.47   BIC=576.24

Berdasarkan hasil EACF dan auto.arima, Kandidat Model yang didapat adalah ARIMA(0,1,2), ARIMA(1,1,2), dan ARIMA(1,1,1).

auto.arima(ts_arima)
## Series: ts_arima 
## ARIMA(1,1,1) 
## 
## Coefficients:
##          ar1     ma1
##       0.4593  0.5656
## s.e.  0.0801  0.0804
## 
## sigma^2 = 0.969:  log likelihood = -280.17
## AIC=566.35   AICc=566.47   BIC=576.24

Penentuan Model Terbaik berdasarkan AIC

arima(data.ts, order=c(0,1,2), method="ML")
## 
## Call:
## arima(x = data.ts, order = c(0, 1, 2), method = "ML")
## 
## Coefficients:
##           ma1      ma2
##       -0.0716  -0.6307
## s.e.   0.1103   0.1205
## 
## sigma^2 estimated as 1.102:  log likelihood = -292.57,  aic = 589.14
arima(data.ts, order=c(1,1,2), method="ML")
## 
## Call:
## arima(x = data.ts, order = c(1, 1, 2), method = "ML")
## 
## Coefficients:
##          ar1      ma1      ma2
##       0.4536  -0.4167  -0.5590
## s.e.  0.0840   0.0840   0.0791
## 
## sigma^2 estimated as 0.9704:  log likelihood = -280.63,  aic = 567.25
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.4727  0.7580
## s.e.   0.1235  0.0884
## 
## sigma^2 estimated as 1.195:  log likelihood = -300.17,  aic = 604.34

Berdasarkan hasil pemodelan dari beberapa kandidat model ARIMA, diperoleh bahwa model dengan nilai AIC terkecil adalah ARIMA(1,1,2) dengan nilai AIC sebesar 567,25. Hal ini menunjukkan bahwa model tersebut merupakan model terbaik dalam merepresentasikan data yang dianalisis. Namun, data yang digunakan dalam proses pemodelan merupakan hasil differencing, sehingga struktur model yang diperoleh dapat berbeda dari model awal pembangkitan data. Dari hasil ini dapat disimpulkan bahwa data time series yang dibangkitkan dari suatu model tertentu tidak selalu menghasilkan model terbaik yang sama pada saat proses pemodelan.