Praktikum dan Tugas Keg 7-Pembangkitan Data Time Series

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.

Praktikum

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.

Tugas

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.

3. Uji Stasioneritas ADF

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.