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

Pembangkitan Data Time Series

Coba bangkitkan data time series dengan model ARIMA(1,1,1) dengan nilai AR = 0.7 dan MA = -0.5 serta panjang data n = 200.

# 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    # MA(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
acf(ts_arima)

pacf(ts_arima)

  1. Cek Kestasioneran dengan ADF Test
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 nilai p-value = 0.1578 > 0.05 sehingga disimpulkan data tidak stasioner dan harus dilakukan proses differencing.

  1. Melakukan differencing
diff1 <- diff(ts_arima)
  1. Buat plot ACF dan PACF Differencing
acf(diff1)

pacf(diff1)

  1. Cek Kestasioneran dengan ADF Test 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.4572, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary

Karena nilai p-value = 0.01 < 0.05 sehingga dapat disimpulkan data telah stasioner.

  1. Ubah ke data ts
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
  1. Buat Kandidat Model melalui ACF, PACF, dan EACF
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
  1. Bandingkan dengan hasil auto.arima
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
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
  1. Cek AIC Terkecil

Penentuan Model Terbaik berdasar AIC

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

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(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(0,0,0), method="ML")
## 
## Call:
## arima(x = data.ts, order = c(0, 0, 0), method = "ML")
## 
## Coefficients:
##       intercept
##         -0.0155
## s.e.     0.0673
## 
## sigma^2 estimated as 0.9066:  log likelihood = -273.99,  aic = 549.98

Berdasarkan hasil pemodelan, diperoleh model dengan nilai AIC terkecil adalah ARIMA(0,0,0), 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.

TUGAS

Lakukan simulasi pembangkitan data time series menggunakan model ARIMA(1,1,1) dengan nilai parameter AR dan MA yang berbeda dari contoh, kemudian lakukan seluruh tahapan pemodelan mulai dari identifikasi melalui plot ACF dan PACF, pengujian kestasioneran menggunakan ADF test, proses differencing, hingga penentuan kandidat model dan pemilihan model terbaik berdasarkan nilai AIC. Selanjutnya, bandingkan model hasil pembangkitan dengan model terbaik yang diperoleh dari proses pemodelan, kemudian jelaskan apakah keduanya sama atau berbeda serta berikan analisis mengenai kemungkinan penyebab perbedaan tersebut.

Pembangkitan Data ARIMA(1,1,1)

Membangkitkan data dengan parameter baru: AR = 0.5 dan MA = 0.4 dengan panjang data n = 200.

# Set seed untuk reprodusibilitas
set.seed(456)
n <- 200
# Parameter baru (berbeda dari contoh ar=0.7, ma=-0.5)
ar_new <- 0.5
ma_new <- 0.4

# Simulasi data ARIMA(1,1,1)
ts_simulasi <- arima.sim(model = list(order = c(1,1,1), ar = ar_new, ma = ma_new), n = n)
ts.plot(ts_simulasi, main = "Simulasi Data ARIMA(1,1,1) Baru")

Melakukan Pemodelan

  1. Buat plot ACF dan PACF
acf(ts_simulasi)

pacf(ts_simulasi)

  1. Cek Kestasioneran dengan ADF Test
adf.test(ts_simulasi)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  ts_simulasi
## Dickey-Fuller = -2.5155, Lag order = 5, p-value = 0.3602
## alternative hypothesis: stationary

Dikarenakan nilai p-value = 0.6539 > 0.05 sehingga disimpulkan data tidak stasioner dan harus dilakukan proses differencing.

  1. Melakukan differencing
diffs <- diff(ts_simulasi)
  1. Buat plot ACF dan PACF Differencing
acf(diffs)

pacf(diffs)

  1. Cek Kestasioneran dengan ADF Test setelah Differencing
adf.test(diffs)
## Warning in adf.test(diffs): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diffs
## Dickey-Fuller = -5.0627, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary

Karena nilai p-value = 0.01 < 0.05 sehingga dapat disimpulkan data telah stasioner.

  1. Ubah ke data ts
data_ts <- ts(diffs)
head(data_ts)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1] 1.0129714 2.0196510 3.0592447 0.7503886 1.7462286 3.3889931
  1. Buat Kandidat Model melalui ACF, PACF, dan EACF
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  o 
## 1 x x x x o o o o o o o  o  o  o 
## 2 o x x o o o o o o o o  o  o  o 
## 3 x x x o o o o o o o o  o  o  o 
## 4 x x x 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 x x o x o o o o o o o  o  o  o 
## 7 x o o o o o o o o o o  o  o  o
  1. Bandingkan dengan hasil auto.arima
auto.arima(data_ts)
## Series: data_ts 
## ARIMA(5,0,1) with zero mean 
## 
## Coefficients:
##          ar1      ar2     ar3      ar4     ar5      ma1
##       1.2425  -0.5815  0.2023  -0.2500  0.1590  -0.3265
## s.e.  0.3876   0.3644  0.1584   0.1147  0.0771   0.3893
## 
## sigma^2 = 0.9478:  log likelihood = -275.9
## AIC=565.8   AICc=566.38   BIC=588.88
auto.arima(ts_simulasi)
## Series: ts_simulasi 
## ARIMA(5,1,1) 
## 
## Coefficients:
##          ar1      ar2     ar3      ar4     ar5      ma1
##       1.2425  -0.5815  0.2023  -0.2500  0.1590  -0.3265
## s.e.  0.3876   0.3644  0.1584   0.1147  0.0771   0.3893
## 
## sigma^2 = 0.9478:  log likelihood = -275.9
## AIC=565.8   AICc=566.38   BIC=588.88
  1. Cek AIC Terkecil

Penentuan Model Terbaik berdasar AIC

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

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.5609  -0.6278  -0.3591
## s.e.  0.0829   0.0960   0.0892
## 
## sigma^2 estimated as 0.9633:  log likelihood = -279.94,  aic = 565.89
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.1441
## s.e.  0.0835
## 
## sigma^2 estimated as 1.178:  log likelihood = -298.65,  aic = 599.29
arima(data_ts, order=c(0,0,2), method="ML")
## 
## Call:
## arima(x = data_ts, order = c(0, 0, 2), method = "ML")
## 
## Coefficients:
##          ma1     ma2  intercept
##       0.8620  0.2978     0.0281
## s.e.  0.0646  0.0582     0.1531
## 
## sigma^2 estimated as 1.011:  log likelihood = -285.3,  aic = 576.59

Berdasarkan hasil perbandingan ketiga kandidat model menunjukkan bahwa model ARIMA(0,0,2) memiliki nilai AIC terendah yaitu 613.33. Meskipun data awalnya dibangkitkan menggunakan model ARIMA(1,1,1), hasil identifikasi akhir menunjukkan perbedaan yang disebabkan oleh pengaruh karakteristik data sampel, ukuran data, serta unsur acak dalam proses pembangkitan yang memengaruhi estimasi parameter secara empiris.