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
A. Pembangkitan Data Time Series
# Set seed
set.seed(456)
# Panjang data
n <- 200
# Parameter baru
ar <- 0.5
ma <- 0.3
# Simulasi ARIMA(1,1,1)
ts_arima <- arima.sim(model = list(order = c(1,1,1), ar = ar, ma = ma), n = n)
# Plot data
ts.plot(ts_arima, main = "Simulasi Data ARIMA(1,1,1)")
Berdasarkan pembangkitan data ARIMA (1,1,1) dengan parameter AR 0.5 dan
MA 0.3, diperoleh hasil plot seperti diatas. Plot menunjukkan pola yang
tidak stasioner dengan adanya tren naik turun secara tiba-tiba sepanjang
waktu, pola naik turun ini terjadi secara acak. Hal ini sesuai dengan
karakteristik model ARIMA dengan differencing satu kali (d=1). Fluktuasi
yang terjadi dipengaruhi oleh faktor komponen autoregressive (AR) dan
moving average (MA), sehingga data memiliki ketergantungan antar waktu
namun tetap acak.
B. Plot ACF dan PACF
acf(ts_arima)
pacf(ts_arima)
Berdasarkan plot ACF terlihat pola yang menurun secara perlahan
menunjukkan adanya indikasi non stasioner. Plot PACF terlihat memiliki
spike yang signifikan pada lag pertama mengindikasikan adanya komponen
AR(1).
adf.test(ts_arima)
##
## Augmented Dickey-Fuller Test
##
## data: ts_arima
## Dickey-Fuller = -2.5036, Lag order = 5, p-value = 0.3652
## alternative hypothesis: stationary
Hasil uji ADF diatas diperoleh nilai statistik Dickey-Fuller sebesar -2,5036 dengan p-value sebesar 0,3652. Nilai p-value = 0,3652 > 0,05, maka tidak terdapat cukup bukti untuk menolak hipotesis nol. Sehingga dapat disimpulkan data ARIMA (1,1,1) tidak stasioner dan perlu untuk dilakukan differencing.
D. Melakukan Differencing
diff1 <- diff(ts_arima)
acf(diff1)
pacf(diff1)
Setelah dilakukan differencing, terlihat pola data yang lebih stabil dan tidak lagi menunjukkan tren naik turun yang tajam. Pada plot ACF terlihat dua spike yaitu pada dua lag pertama setelah itu terjadi penurunan menunjukkan adanya komponen hingga MA(2) dan plot PACF tetap terlihat tidak terlalu jauh denganplot sebelum differencing. Hal ini menunjukkan bahwa proses differencing satu kali (d=1) berhasil menghilangkan unsur non-stasioner (unit root) pada data.
adf.test(diff1)
## Warning in adf.test(diff1): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: diff1
## Dickey-Fuller = -5.0984, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
Uji ADF pada hasil differencing (diff1) juga menunjukkan nilai p-value 0,01 <0,05 sehingga terjadi penolakan pada hipotesis nol. Dengan demikian data differencing dapat disimpulkan telah stasioner.
E. Mengubah Data Menjadi TS
data.ts<-ts(diff1)
head(data.ts)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] 1.0461694 1.9051402 2.9031167 0.5069317 1.7685807 3.2054335
Data ini menunjukkan fluktuasi yang cukup tajam dari satu periode ke periode berikutnya—misalnya terjadi penurunan signifikan dari nilai ke-3 (≈2.90) ke nilai ke-4 (≈0.51), lalu kembali naik. Pola seperti ini mencerminkan karakteristik deret waktu yang dipengaruhi oleh komponen acak serta ketergantungan antar waktu, yang konsisten dengan model ARIMA(1,1,1).
F. 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 x o 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 o o x o o o o o o o o o o
## 7 x o o x o o o o o o o o o o
Berdasarkan analisis plot ACF, PACF, dan Extended Autocorrelation Function (EACF),dipilih beberapa kandidat model yang berpotensi cocok uuntuk memodelkan data. Kandidat tersebut meliputi ARIMA(1,1,0), ARIMA(0,1,1), ARIMA(1,1,1), ARIMA(0,1,2), dan ARIMA(2,1,0).Seluruh kandidat model menggunakan differencing satu kali (d=1) karena data telah terbukti tidak stasioner pada level, namun menjadi stasioner setelah dilakukan differencing.
auto.arima(data.ts)
## Series: data.ts
## ARIMA(3,0,3) with zero mean
##
## Coefficients:
## ar1 ar2 ar3 ma1 ma2 ma3
## 1.6194 -1.4098 0.3988 -0.8145 0.5984 0.2430
## s.e. 0.1650 0.2109 0.1362 0.1716 0.1593 0.1299
##
## sigma^2 = 0.9429: log likelihood = -275.43
## AIC=564.86 AICc=565.44 BIC=587.95
auto.arima(ts_arima)
## Series: ts_arima
## ARIMA(3,1,3)
##
## Coefficients:
## ar1 ar2 ar3 ma1 ma2 ma3
## 1.6192 -1.4093 0.3985 -0.8142 0.5980 0.2433
## s.e. 0.1650 0.2112 0.1363 0.1716 0.1594 0.1298
##
## sigma^2 = 0.9429: log likelihood = -275.43
## AIC=564.86 AICc=565.44 BIC=587.95
Selain itu berdasarkan uji menggunakan auto.arima diperoleh model terbaik yaitu ARIMA (3,0,3) atau ARIMA (3,1,3)yang didapatkan secara ototmatis. Model ini akan dibandingkan dengan kelima model sebelumnya untuk dievaluasi manakah model yang terbaik.
G. Penentuan Model Terbaik Berdasarkan AIC
arima(data.ts, order=c(1,1,0), method="ML")
##
## Call:
## arima(x = data.ts, order = c(1, 1, 0), method = "ML")
##
## Coefficients:
## ar1
## 0.0168
## s.e. 0.0710
##
## sigma^2 estimated as 1.169: log likelihood = -297.87, aic = 597.73
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.0231
## s.e. 0.0828
##
## sigma^2 estimated as 1.168: log likelihood = -297.85, aic = 597.71
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.6925 0.7632
## s.e. 0.2431 0.2153
##
## sigma^2 estimated as 1.158: log likelihood = -296.94, aic = 597.88
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.1826 -0.4428
## s.e. 0.0980 0.1173
##
## sigma^2 estimated as 1.104: log likelihood = -292.48, aic = 588.96
arima(data.ts, order=c(2,1,0), method="ML")
##
## Call:
## arima(x = data.ts, order = c(2, 1, 0), method = "ML")
##
## Coefficients:
## ar1 ar2
## 0.0181 -0.1386
## s.e. 0.0704 0.0704
##
## sigma^2 estimated as 1.146: log likelihood = -295.95, aic = 595.89
arima(data.ts, order=c(3,1,3), method="ML")
##
## Call:
## arima(x = data.ts, order = c(3, 1, 3), method = "ML")
##
## Coefficients:
## ar1 ar2 ar3 ma1 ma2 ma3
## 0.4963 0.4148 -0.3332 -0.6517 -0.6692 0.3391
## s.e. 0.3943 0.3606 0.1725 0.3919 0.3877 0.2014
##
## sigma^2 estimated as 0.9483: log likelihood = -278.29, aic = 568.57
Berdasarkan hasil uji diatas diperoleh kandidat dengan model ARIMA terbaik yaitu ARIMA (3,1,3). Model tersebut dipilih karena memiliki nilai Akaike Information Criterion(AIC) yang jauh lebih kecil dari kandidat lain yaitu AIC=568.57.
H. Uji L-jung
model1 <- arima(data.ts, order=c(3,1,3))
Box.test(residuals(model1), lag=20, type="Ljung-Box")
##
## Box-Ljung test
##
## data: residuals(model1)
## X-squared = 10.381, df = 20, p-value = 0.9607
Model ARIMA (3,1,3) juga terlihat memenuhi asumsi white noise pada residual karena memiliki p-value = 0,9607 yang lebih besar dari 0,05. Oleh karena itu, dapat disimpulkan bahwa model ARIMA(3,1,3) merupakan model terbaik yang paling sesuai untuk merepresentasikan pola data deret waktu yang dianalisis.