Dalam analisis deret waktu, tujuan utama adalah memahami pola data dan membentuk model yang mampu menggambarkan pergerakan data secara tepat. Salah satu metode yang sering digunakan adalah ARIMA karena mampu menangani data tidak stasioner melalui proses differencing.
Pemodelan ARIMA dilakukan melalui beberapa tahap, seperti uji kestasioneran, identifikasi model dengan ACF dan PACF, penentuan kandidat model, serta pemilihan model terbaik berdasarkan kriteria seperti AIC. Meskipun data dibangkitkan dari model tertentu, hasil estimasi tidak selalu sama karena dipengaruhi karakteristik sampel, ukuran data, dan unsur acak.
Melalui praktik ini, mahasiswa tidak hanya mempelajari langkah teknis pemodelan ARIMA, tetapi juga memahami pentingnya teori, interpretasi visual, dan pertimbangan empiris dalam memilih model terbaik.
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
# 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)")
acf(ts_arima)
pacf(ts_arima)
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
p-value = 0.388 > 0.05 sehingga disimpulkan data tidak stasioner dan harus dilakukan proses differencing.
diff1 <- diff(ts_arima)
acf(diff1)
pacf(diff1)
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
nilai p-value = 0.01 < 0.05 sehingga disimpulkan data sudah stasioner
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
acf(data.ts)
pacf(data.ts)
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
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, model dengan nilai AIC terkecil adalah ARIMA(2,0,2). Hal ini terjadi karena data yang dianalisis merupakan data hasil differencing. Dari hasil tersebut dapat dipahami bahwa data time series yang dibangkitkan dari model tertentu tidak selalu menghasilkan model terbaik yang sama saat dilakukan pemodelan ulang. Kondisi ini diduga dipengaruhi oleh berbagai faktor lain dalam proses estimasi.
library(forecast)
library(tseries)
library(TSA)
#1. Simulasi Data ARIMA(1,1,1)
# Set seed untuk reprodusibilitas set.seed(
set.seed(456)
# Panjang data
n <- 200
# Parameter ARIMA(p=1, d=1, q=1)
ar <- 0.5
ma <- -0.3
# Simulasi data
data_sim <- arima.sim(model=list(order=c(1,1,1),
ar=ar,
ma=ma), n=n)
# Plot
ts.plot(data_sim, main="Simulasi Data ARIMA(1,1,1)",
ylab="Data", col="blue")
#Gambar menunjukkan hasil pembangkitan data time series dari model
ARIMA(1,1,1). Interpretasi: Data bergerak naik turun secara acak.
Terlihat adanya trend/pergeseran level, terutama naik di awal lalu turun
di akhir. Nilai rata-rata belum konstan sepanjang waktu. Variansi
relatif stabil, tetapi mean berubah.
#2. Identifikasi Awal ACF dan PACF
acf(data_sim)
pacf(data_sim)
#ACF menunjukkan korelasi antar data dengan lag sebelumnya.
Interpretasi: Nilai ACF sangat tinggi di lag 1 (mendekati 1). Menurun
perlahan (tailing off) hingga lag besar. Banyak spike melewati batas
signifikan. Pola ACF yang turun lambat menandakan data non-stasioner.
sehingga perlu differencing
#PACF Spike sangat besar di lag 1. Lag setelahnya kecil dan sebagian besar dalam batas. Ada indikasi komponen AR(1), tetapi karena data belum stasioner maka belum bisa langsung dimodelkan.
adf.test(data_sim)
##
## Augmented Dickey-Fuller Test
##
## data: data_sim
## Dickey-Fuller = -2.4717, Lag order = 5, p-value = 0.3785
## alternative hypothesis: stationary
#karena 0.3785>0.05 maka tidak stasioner, perlu differencing.
#4. Differencing
diff1 <- diff(data_sim)
ts.plot(diff1, main="Data Setelah Differencing",
col="red")
#Interpretasi: Data berfluktuasi di sekitar nol. Tidak ada trend jelas.
Variansi relatif konstan. Kesimpulan: Setelah differencing orde 1, data
menjadi lebih stabil. Indikasi data sudah stasioner.
#5. ACF PACF Setelah Differencing
acf(diff1)
pacf(diff1)
#Interpretasi ACF: Spike signifikan di lag 1 dan 2. Setelah itu cepat
mengecil. Sebagian besar lag lain berada dalam batas Kesimpulan:
Menunjukkan kemungkinan komponen MA.Kandidat model mengandung q = 1 atau
q = 2.
#PACF: Spike signifikan di lag 1. Ada sedikit spike lain di lag kecil. Kesimpulan:Menunjukkan komponen AR.Kandidat p = 1 atau p = 2.
#6. Uji ADF Lagi
adf.test(diff1)
## Warning in adf.test(diff1): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: diff1
## Dickey-Fuller = -5.9035, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
#karena 0.01<0.05 maka Data sudah stasioner setelah differencing 1 kali.Maka d = 1 sesuai model ARIMA.
#7. Kandidat Model
eacf(diff1)
## 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 o o o
## 1 x o o x o o o o o o o o o o
## 2 o x o o o o o o o o o o o o
## 3 o x x o o o o o o o o o o o
## 4 o x x x o o o o o o o o o o
## 5 x x 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 x x x o x o o o o o o o o
#Tabel x dan o digunakan mencari segitiga o.
Interpretasi:
Kandidat model yang mungkin:
ARIMA(1,1,1) ARIMA(2,1,1) ARIMA(3,1,2) ARIMA(1,1,0) Kesimpulan:
EACF menunjukkan beberapa kemungkinan kombinasi AR dan MA.
#8. Auto ARIMA
auto.arima(data_sim)
## Series: data_sim
## ARIMA(3,1,2)
##
## Coefficients:
## ar1 ar2 ar3 ma1 ma2
## -0.1986 -0.4312 0.2401 0.4254 0.6773
## s.e. 0.2430 0.3161 0.1009 0.2429 0.3005
##
## sigma^2 = 0.9581: log likelihood = -277.08
## AIC=566.16 AICc=566.59 BIC=585.95
#Model terbaik otomatis = ARIMA(3,1,2), Program otomatis memilih model terbaik menurut AIC terkecil dari seluruh pencarian model.
#9. Manual Beberapa Kandidat
model1 <- arima(data_sim, order=c(1,1,1))
model2 <- arima(data_sim, order=c(1,1,0))
model3 <- arima(data_sim, order=c(0,1,1))
model4 <- arima(data_sim, order=c(2,1,1))
AIC(model1, model2, model3, model4)
## df AIC
## model1 3 564.8134
## model2 2 564.8772
## model3 2 567.8842
## model4 4 565.7046
#Dari kandidat manual, model terbaik = ARIMA(1,1,1)
Kesimpulan Data simulasi awal tidak stasioner. Setelah differencing 1 kali data menjadi stasioner. Kandidat model diperoleh dari ACF, PACF, dan EACF. Model manual terbaik berdasarkan AIC adalah ARIMA(1,1,1), sedangkan auto.arima memilih ARIMA(3,1,2). Perbedaan ini menunjukkan bahwa model pembangkitan tidak selalu sama dengan model estimasi terbaik akibat noise, ukuran sampel, dan metode seleksi model.