
Dalam model algoritma peramalan ARIMA ada asumsi yang harus dipenuhi yaitu data tersebut bersifat stasioner, namun bila tidak harus dibuat stasioner. Suatu deret waktu yang tidak stasioner harus diubah menjadi data stasioner dengan melakukan differencing. Yang dimaksud dengan differencing adalah menghitung perubahan atau selisih nilai observasi. Nilai selisih yang diperoleh dicek lagi apakah stasioner atau tidak. Jika belum stasioner maka dilakukan differencing lagi. Jika varians tidak stasioner, maka dilakukan transformasi logaritma.
Differencing merupakan tahapan olah data dengan menghitung nilai perbedaan antara Yt dengan Yt-1. Jadi sebenarnya kita menghitung data tersebut dengan data sebelumnya. Karena yang kita olah adalah data selisih, maka dipastikan unsur tren akan hilang. Namun ada beberapa kasus data tren belum hilang setelah dilakukan differencing. Maka yang kita lakukan adalah melakukan differencing pada data yang telah dilakukan differencing sebelumnya. Tahap ini berarti memiliki nilai difference 2, artinya data dilakukan differencing sebanyak dua kali.
Dataset non Stasioner
Kita ambil contoh dari data non stationer harga minyak mentah https://www.kaggle.com/mabusalah/brent-oil-prices yang mengandung tren kenaikan. Data tersebut mempunyai format date US sebagai berikut lubridate::parse_date_time("21-Dec-2017", orders = "d-b-Y", locale = "us")
maka kalian butuh library lubridate untuk mengubah ke format yang benar di R
library(dplyr) library(ggplot2) library(scales) library(lubridate) dat = read.csv('BrentOilPrices.csv') dat$Date = lubridate::parse_date_time(dat$Date, orders = "d-b-y", locale = "us") mean(dat$Price) var(dat$Price)
Perintah plot sederhana nggak pakai ribet, bisa kalian gunakan (sengaja saya hapus tidak pakai ggplot biar nggak kebanyakan kode)
plot(dat$Price,type='l') hist(dat$Price)
Kita juga akan melihat data non stasoiner diatas dalam bentuk grafik lain yaitu histogram dengan nilai mean dan variance sebagai berikut
- mean : 46.35296
- variance : 1034.605
Nilai dickey fuller dengan signifikansi 5% sebagai berikut
adf.test(dat$Price,k=1)
hasil
Augmented Dickey-Fuller Test data: dat$Price Dickey-Fuller = -2.1054, Lag order = 1, p-value = 0.5337 alternative hypothesis: stationary
Terlihat nilai p-value > 0.05 sehingga H0 diterima (artinya data non stasioner), baca uji stasioner
Differencing Data Non Stasioner
Differencing data non statisoner data merupakan cara mengubah data non stasioner menjadi stasioner sebagai contoh berikut
Perintah yang digunakan yaitu diff()
diff(c(2,3,5,18,4,6,4),lag=1)
Jika perintah diatas kita gunakan pada data non stasioner, akan menghasilkan grafik stasioner berikut
Terlihat grafik histogram mengikuti distribusi normal
Perintah untuk differencing dengan lag=1 sebagai berikut
dat2 = dat dat2$Price[1:length(dat$Price)-1] = diff(dat$Price,k=1) dat2= dat2[1:length(dat$Price)-1,] #hilangkan data terakhir
Kita akan hitung nilai mean dan variance diatas
mean(dat2$Price) var(dat2$Price)
menghasilkan nilai yang sangat kecil
- mean : 0.004303753
- variance : 1.206682
dengan nilai Dickey Fuller sebagai berikut terlihat nilai p-value yaitu 0.01 < 0.05% artinya H0 ditolak dan H1 diterima (data stasioner)
adf.test(dat2$Price,k=1)
hasil
Augmented Dickey-Fuller Test data: dat2$Price Dickey-Fuller = -65.04, Lag order = 1, p-value = 0.01 alternative hypothesis: stationary
Demikian pembahasan mengenai Differencing Data bila tidak Stasioner