Pengertian dan Cara Perhitungan ARIMA – serta Prediksi Model ARIMA

By | September 2, 2023
5,953 Views

Pengertian dan Cara Perhitungan ARIMA – serta Prediksi Model ARIMA – Forecasting time series atau Runtun waktu atau biasanya yang dikenal dengan time series merupakan himpunan observasi terurut dalam waktu. Sedangkan metode time series adalah metode peramalan dengan menggunakan analisa plot hubungan antara variabel yang akan diperkiran dengan variabel waktu. Time series analysis dapat diterapkan dan digunakan pada bidang bisnis, ekonomi seperti trading, industri, teknik dan ilmu sosial. Jadi dalam time series sumbu x adalah waktu dan sumbu y adalah nilainya.

ARIMA merupakan gabungan dari AR dan MA dimana AR adalah singkatan dri autoregresif dan MA merupakan moving average sedangkan I yang ditengah merupakan integrated dimana kegunaannya untuk differensiasi jika data tidak stasioner.

Pada model ARIMA terdiri dari 3 komponen yaitu p, d, dan q. Dimana p merukan ordo dari autoregresif atau AR(p), d merupakan differensiasi, dan q merupakan ordo dari moving average MA(q). ARIMA merupakan penggabungan 3 hal tersebut diatas, oleh sebab itu kalian bisa pelajari dasar pengertian mengenai

  1. Pra pengolahan data
  2. Identifikasi model
  3. Estimasi parameter model
  4. Cek diagnostik residual
  5. Peramalan

5 Tahapan diatas biasa disebut dengan Prosedur Box‐Jenkins adalah suatu prosedur standar yang banyak digunakan dalam pembentukan model ARIMA. Prosedur ini terdiri dari empat tahapan yang iteratif dalam pembentukan model ARIMA pada suatu data runtun waktu, yaitu tahap identifikasi, estimasi, diagnostic check, dan peramalan. Berikut ini adalah diagram yang menggambarkan tahap‐tahap dalam prosedur Box‐Jenkins (Bowerman dan O’Connell, 1993; Wei, 2006).

  1. Plot data : Untuk mengindentifikasi pola dari plot apakah data tersebut trand/musiman
  2. Normalitas : Uji normalitas sering dikaitkan dengan stabilitas variansi. Data yang variansinya tidak stabil dari waktu ke waktu akan menyebabkan ketidaknormalan. Apabila data tidak normal maka perlu dilakukan transformasi BoxCox
  3. Stasioneritas: untuk melihat apakah terjadi pertumbuhan dan penurunan data. Uji stasioner dapat dilakukan menggunakan uji ADF, kpps, phillips-perron. Apabila data tidak stasioner dapat dilakukan differensiasi.

Identifikasi Model ARIMA

Model ARI

MA yaitu ada 3

  • AR(p)
  • MA(q)
  • dan ARMA

sumber : https://medium.com/@Aufaqorinaputri

Agar lebih memahami plot ACF dan PACF untuk masing-masing model diatas, saya akan permudah melalui grafik, misalkan seperti apa sih model AR(p) dengan

  • ACF : menurun secara eksponensial
  • PACF : signifikan hingga lag ke p

Nah untungnya di R sudah ada function yang dapat menyimulasikan beberapa model ARIMA diatas dengan function ARMAacf()

Model AR(p)

Misalkan model yang akan buat AR(0.8) maka tampilan ACF dan PACF nya yaitu

acf.ar1 = ARMAacf(ar=0.8, ma=0, lag.max = 20)
pacf.ar1 = ARMAacf(ar=0.8, ma=0, lag.max = 20, pacf=T)

mari kita permudah plot nya

df.acf = data.frame(x=c(1:length(acf.ar1)),acf=acf.ar1)
df.pacf = data.frame(x=c(1:length(pacf.ar1)),pacf=pacf.ar1)

library(ggplot2)

ggplot(data=df.acf,aes(x=x,y=acf))+
  geom_bar(stat="identity",width=0.05)+
  scale_x_discrete(limits=c(0:nrow(df.acf)))+
  geom_point()+
  labs(title="grafik ACF AR(p)")

ggplot(data=df.pacf,aes(x=x,y=pacf))+
  geom_bar(stat="identity",width=0.05)+
  scale_x_discrete(limits=c(1:nrow(df.pacf)))+
  geom_point()+
  labs(title="grafik PACF AR(p)")

Plot ACF Model ARIMA AR(p) menurun cepat secara eksponensial

Plot PACF Model ARIMA AR(p) signifikan lag(p)

Model MA(q)

Misalkan model yang akan buat MA(1.5) maka tampilan ACF dan PACF nya yaitu

acf.ma1 = ARMAacf(ar=0, ma=c(1.5), lag.max = 20)
pacf.ma1 = ARMAacf(ar=0, ma=c(1.5), lag.max = 20, pacf=T)

df.acf = data.frame(x=c(1:length(acf.ma1)),acf=acf.ma1)
df.pacf = data.frame(x=c(1:length(pacf.ma1)),pacf=pacf.ma1)

mari kita permudah plot nya

ggplot(data=df.acf,aes(x=x,y=acf))+
  geom_bar(stat="identity",width=0.05)+
  scale_x_discrete(limits=c(0:nrow(df.acf)))+
  geom_point()+
  labs(title="grafik ACF MA(q)",
       subtitle="ARIMA model MA(q)")

ggplot(data=df.pacf,aes(x=x,y=pacf))+
  geom_bar(stat="identity",width=0.05)+
  scale_x_discrete(limits=c(1:nrow(df.pacf)))+
  geom_point()+
  labs(title="grafik PACF MA(q)",
       subtitle="ARIMA model MA(q)")

Plot ACF Model ARIMA MA(q) signifikan hingga lag ke q

Plot PACF Model ARIMA MA(q) menurun cepat secara eksponensial

Model ARMA(p,q)

Misalkan model yang akan buat ARMA(0.7,0.4) maka tampilan ACF dan PACF nya yaitu

acf.arma1 = ARMAacf(ar=0.7, ma=0.4, lag.max = 20)
pacf.arma1 = ARMAacf(ar=0.7, ma=0.4, lag.max = 20, pacf=T)

df.acf = data.frame(x=c(1:length(acf.arma1)),acf=acf.arma1)
df.pacf = data.frame(x=c(1:length(pacf.arma1)),pacf=pacf.arma1)

Kita permudah plot grafiknya

ggplot(data=df.acf,aes(x=x,y=acf))+
  geom_bar(stat="identity",width=0.05)+
  scale_x_discrete(limits=c(0:nrow(df.acf)))+
  geom_point()+
  labs(title="grafik ACF ARMA(p,q)",
       subtitle="ARIMA model ARMA(p,q)")

ggplot(data=df.pacf,aes(x=x,y=pacf))+
  geom_bar(stat="identity",width=0.05)+
  scale_x_discrete(limits=c(1:nrow(df.pacf)))+
  geom_point()+
  labs(title="grafik PACF ARMA(p,q)",
       subtitle="ARIMA model ARMA(p,q)")

 

Plot ACF Model ARIMA ARMA(p,q) menurun cepat secara eksponensial

Plot PACF Model ARIMA ARMA(p,q) menurun cepat secara eksponensial

Studi Kasus

Setelah kalian pelajari masing-masing plot ACF dan PACF untuk memilih model, pembahasan selanjutnya yaitu studi kasus. Kita coba dengan data yang tidak stasioner yaitu BrentOilPrices.csv yang bersifat harian yaitu dimulai dari bulan mei tahun 1987 sampai januari 2021

data harian harga minyak

See also  Perbandingan Clustering KMeans dengan DBSCAN
Generated by wpDataTables

Koefisien d pada ARIMA(p,d,q)

Koefisien d pada ARIMA digunakan untuk differencing data jika data tersebut tidak stasioner. Yuk kita lihat data harga harian minyak yang bersifat non stasioner.

library(dplyr)
library(ggplot2)
library(lubridate)

dat = read.csv('data harian harga minyak.csv')
dat$Date = lubridate::dmy(dat$Date)


#lakukan plot grafik
ggplot(data=dat, aes(x=Date,y=Price))+
         geom_line()+
  labs(title="Harga harian minyak")

 

data harian harga minyak yang masih non stasioner.

Agar lebih ringkas, kita buat aggregasi bulanan yaitu total harian selama 1 bulan.

dat2 = dat %>% group_by(Bulan,Tahun) %>% summarise(Total=sum(Price))
dat2 = arrange(dat2,Tahun)

Biar lebih rapi, kita ubah kedalam format time series yaitu mulai dari bulan mei tahun 1987 sampai januari 2021

#jadikan timseries
dat3 = ts(dat2$Total,start=c(1987,5),frequency = 12)
#plot data saja
plot(dat3)

hasil plotnya yaitu

data bulanan harga minyak yang masih non stasioner

 

Cek Stasioneritas Data

Mari kita akan cek data harga harian minyak diatas menggunakan adf.test(), kita akan uji dat3 nya

#cek apakah data stasioner?
library(tseries)
adf.test(dat3)

hasilnya

   Augmented Dickey-Fuller Test

data:  dat3
Dickey-Fuller = -2.0208, Lag order = 7, p-value = 0.5685
alternative hypothesis: stationary

Nilai p-value = 0.5685 > 0.05 yang artinya data tersebut non stasioner. Oleh sebab itu butuh differencing, misalkan kita kasih lag=1. Yuk kita plot dan sekaligus hitung adf.test nya

dat4 = diff(dat3,1)
plot(dat4)
adf.test(dat4)

hasil

   Augmented Dickey-Fuller Test

data:  dat4
Dickey-Fuller = -9.6072, Lag order = 7, p-value = 0.01
alternative hypothesis: stationary

data harga bulanan yang sudah stasioner dengan lag = 1

Terlihat p-value = 0.01 < o.05 sehingga data sudah stasioner. Oleh sebab itu nilai d = 1

Plot ACF dan PACF

Kita akan plotkan ACF dan PACF untuk menentukan nilai p dan q nya. Jangan sampai salah kita pakai dat4 ya

acf(as.matrix(dat4),lag.max = 30)
pacf(as.matrix(dat4),lag.max = 30)

 

Terlihat ACF dan PACF menurun dengan cepat dan terputus

plot ACF terputus pada lag = 1

plot PACF terputus pada lag = 1

Sehingga model yang dimungkinkan yaitu ARIMA(p,1,q) atau bila ingin otomatis, kita bisa menggunakan package forecast.  Jangan sampai salah, kita pakai dat3 bukan variabel dat4 (yang hasil differencing –> digunakan untuk mencari tahu nilai d)

library(forecast)
auto.arima(as.matrix(dat3))

hasil modelnya yaitu

Series: as.matrix(dat3) 
ARIMA(2,1,3) 

Coefficients:
          ar1      ar2     ma1     ma2      ma3
      -1.1460  -0.9798  1.0562  0.9361  -0.0092
s.e.   0.0164   0.0185  0.0502  0.0509   0.0522

sigma^2 = 19479:  log likelihood = -2566.83
AIC=5145.66   AICc=5145.87   BIC=5169.67

ternyata menggunakan model ARIMA(2,1,3). Mari kita coba menggunakan beberapa model yaitu

  1. arima(1,1,1)
  2. arima(2,1,3)
  3. arima(2,1,2)
model1 = arima(dat3,order=c(1,1,1))
model2 =  arima(dat3,order=c(2,1,3))
model3 =  arima(dat3,order=c(2,1,2))

 

See also  Cara Hitung Manual Uji Normalitas Populasi dengan Uji Jarque-Bera

Uji Signifikansi

Sesuai dengan model diatas, kita akan uji signifikansi menggunakan package berikut, atau dengan cara manual https://stats.stackexchange.com/questions/8868/how-to-calculate-the-p-value-of-parameters-for-arima-model-in-r

library(lmtest)
lmtest::coeftest(model1)
lmtest::coeftest(model2)
lmtest::coeftest(model3)

hasilnya

> lmtest::coeftest(model1)

z test of coefficients:

    Estimate Std. Error z value Pr(>|z|)  
ar1 -0.27812    0.15498 -1.7946  0.07272 .
ma1  0.11152    0.15464  0.7211  0.47082  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

> lmtest::coeftest(model2)

z test of coefficients:

      Estimate Std. Error  z value Pr(>|z|)    
ar1 -1.1459829  0.0163884 -69.9263   <2e-16 ***
ar2 -0.9797752  0.0185337 -52.8646   <2e-16 ***
ma1  1.0561921  0.0501741  21.0505   <2e-16 ***
ma2  0.9360833  0.0509453  18.3743   <2e-16 ***
ma3 -0.0092144  0.0521518  -0.1767   0.8598    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

> lmtest::coeftest(model3)

z test of coefficients:

     Estimate Std. Error z value  Pr(>|z|)    
ar1 -1.144691   0.016600 -68.959 < 2.2e-16 ***
ar2 -0.977889   0.017368 -56.305 < 2.2e-16 ***
ma1  1.060244   0.040913  25.914 < 2.2e-16 ***
ma2  0.943611   0.022658  41.646 < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
  • Tingkat signifikansi

didapatkan bahwa

  • model1 tidak signifikan
  • model 2 malahan tidak signifikan karena nilai p-value untuk ma3 = 0.8598 diatas nilai alpha 0.05
  • model 3 yang bisa diterima karena signifkan. Semua nilai p-value nya < 0.05

Sekarang kita uji accuracy nya

accuracy(model3)

hasilnya

                   ME     RMSE      MAE        MPE     MAPE      MASE         ACF1
Training set 1.941043 138.5408 91.02384 -0.5151458 10.03074 0.9221356 -0.007296452

Prediksi 5 bulan kedepan

Untuk memprediksi 5 bulan kedepan yaitu februari sd juni 2021, kita gunakan perintah

forecast(model3,h=5)

hasilnya

         Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
Feb 2021       892.6819 714.9152 1070.449 620.8112 1164.553
Mar 2021       951.4600 710.4410 1192.479 582.8532 1320.067
Apr 2021       866.9156 569.7417 1164.090 412.4273 1321.404
May 2021       906.2144 560.9194 1251.509 378.1313 1434.297
Jun 2021       943.9045 562.1924 1325.617 360.1263 1527.683

 

See also  Share Aplikasi R di ShinyApps

Leave a Reply