BJ Sales Arima
Mengelola ARIMA RStudio
Kita mencoba menampilkan terlebih dahulu data penjualan dari BJ ini adalah data nilai penjualan tahunan dari perusahaan BJ. kita ketika nama filenya. nama file ini sudah ada di ikutan RStuio maka tidak perlu lagi menampilkan package lain.
BJsales
Time Series:
Start = 1
End = 150
Frequency = 1
[1] 200.1 199.5 199.4 198.9 199.0 200.2 198.6 200.0 200.3 201.2 201.6 201.5
[13] 201.5 203.5 204.9 207.1 210.5 210.5 209.8 208.8 209.5 213.2 213.7 215.1
[25] 218.7 219.8 220.5 223.8 222.8 223.8 221.7 222.3 220.8 219.4 220.1 220.6
[37] 218.9 217.8 217.7 215.0 215.3 215.9 216.7 216.7 217.7 218.7 222.9 224.9
[49] 222.2 220.7 220.0 218.7 217.0 215.9 215.8 214.1 212.3 213.9 214.6 213.6
[61] 212.1 211.4 213.1 212.9 213.3 211.5 212.3 213.0 211.0 210.7 210.1 211.4
[73] 210.0 209.7 208.8 208.8 208.8 210.6 211.9 212.8 212.5 214.8 215.3 217.5
[85] 218.8 220.7 222.2 226.7 228.4 233.2 235.7 237.1 240.6 243.8 245.3 246.0
[97] 246.3 247.7 247.6 247.8 249.4 249.0 249.9 250.5 251.5 249.0 247.6 248.8
[109] 250.4 250.7 253.0 253.7 255.0 256.2 256.0 257.4 260.4 260.0 261.3 260.4
[121] 261.6 260.8 259.8 259.0 258.9 257.4 257.7 257.9 257.4 257.3 257.6 258.9
[133] 257.8 257.7 257.2 257.5 256.8 257.5 257.0 257.6 257.3 257.5 259.6 261.1
[145] 262.9 263.3 262.8 261.8 262.2 262.7
dari data ini bentuknya adalah ts atau time series sebanyak 150 data . Tidak dijelaskan bentuk periodikal datanya apakah bulanan atau tahunan. Kemungkinan memang bulaanan. setelah menampilkan data maka kita bisa untuk mengola datanya dengan metode time series. kemudian kita jalankan package yang ada kalau tidak ada maka harus install terlebih dahulu package adalah tseries dan forecast.
library(forecast)
Registered S3 method overwritten by 'quantmod':
method from
as.zoo.data.frame zoo
library(tseries)
Pertama kita melihat dulu bentuk grafik dari BJsales tersebut. Ini bisa melihat pola stataioner atau tidaknya data. Tentu melihat grafik saja tidak atau belum pasti untuk menunjukkan kalau data terindikasi non staioner. Perlu kita ketahui, bahwa hampir seluruh peramalan mensyaratkan data yang stationer. Hal ini mencegah agar bentuk peramalah bias atau tidak akurat.
Sesudah kita memasang package maka kita melakukan uji di awal. uji pertama adalah memastikan datanya adalah data staioner. KIta emlakukan uji augemnetd Dickey Fueller
plot(BJsales)
adf.test(BJsales)
Augmented Dickey-Fuller Test
data: BJsales
Dickey-Fuller = -2.1109, Lag order = 5, p-value = 0.5302
alternative hypothesis: stationary
Dari hasil terlihat nilai Dickey-Fueller sebesar -2,1109 dengan nilai lag order 5. artinya … Kita bisa melihat nilai p atau pvalu sebesar 0,5032, artinya p>0,05 ini menandakan adalah menerima hipotesis nol untuk menolak kalau data adalah non stationer.
Memperbaiki data yang tidak stationer
Sesuai bahasan atas bahwa untik mengatasi kalau data tersebut harus stationer. slah satu cara yang ampuh untuk mengatsi ketidakstationeran daata adah dengan cara membuat difference data tersebut. Biasanya dengan satu kalai difference saja data yang tdiak stataioner akan menjadi stationer. perintahnuya adalah dengan diff pada dataset setelah itu kita bisa melakkan kembali adf test.
=diff(BJsales)
dBJsalesadf.test(dBJsales)
Augmented Dickey-Fuller Test
data: dBJsales
Dickey-Fuller = -3.3485, Lag order = 5, p-value = 0.06585
alternative hypothesis: stationary
adf.test(dBJsales)
Augmented Dickey-Fuller Test
data: dBJsales Dickey-Fuller = -3.3485, Lag order = 5, p-value = 0.06585 alternative hypothesis: stationary Setelah sekali difference atau diff menunjukkan nilai Dickey-FUeller adalah -3.3845 dnegan lag order = 5. Sedangkan nilai p 0,6585. Meski nilai ini kecil namun masih leboih dari 0,05. maka data yang sudah melakukan difference ini masih harus dilakukan sekali lagi
=diff(diff(BJsales))
dBJsales2plot(dBJsales2)
adf.test(dBJsales2)
Warning in adf.test(dBJsales2): p-value smaller than printed p-value
Augmented Dickey-Fuller Test
data: dBJsales2
Dickey-Fuller = -6.562, Lag order = 5, p-value = 0.01
alternative hypothesis: stationary
cara untuk melakukan difference tiga dua adalah menulis diff didalam diff maka hasilnya adalah difference tingkat dua. Lalu setelah uji adf.test maka hasilnya adalah nilai stataioner artinya data yang sudah difeference tingkat dua bisa dilakukan analisis time series.
acf(dBJsales2)
pacf(dBJsales2)
<-auto.arima(dBJsales2,trace=TRUE,seasonal=TRUE) BJsales_arima
ARIMA(2,0,2) with non-zero mean : 524.5745
ARIMA(0,0,0) with non-zero mean : 579.7576
ARIMA(1,0,0) with non-zero mean : 544.1259
ARIMA(0,0,1) with non-zero mean : 519.2962
ARIMA(0,0,0) with zero mean : 577.7051
ARIMA(1,0,1) with non-zero mean : 521.2459
ARIMA(0,0,2) with non-zero mean : 521.2693
ARIMA(1,0,2) with non-zero mean : Inf
ARIMA(0,0,1) with zero mean : 517.2202
ARIMA(1,0,1) with zero mean : 519.1404
ARIMA(0,0,2) with zero mean : 519.164
ARIMA(1,0,0) with zero mean : 542.0475
ARIMA(1,0,2) with zero mean : Inf
Best model: ARIMA(0,0,1) with zero mean
Sebeluam melakukan uji arima maka kita bisa melihat grafik adf atau pacf. bagian acf menunjukkan ada spike yang melwati garis signifikannya yakni di pertama. ada dugaan penggunaaan AR(1). setelah itu kita melihat
Untuk melihat rangkuman hasil arima dapat diketik perintah summary pada syntax dan jangan lupa nama formula yang sudah kita masukkan sebelumnya.
summary(BJsales_arima)
Series: dBJsales2
ARIMA(0,0,1) with zero mean
Coefficients:
ma1
-0.7480
s.e. 0.0662
sigma^2 = 1.879: log likelihood = -256.57
AIC=517.14 AICc=517.22 BIC=523.13
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set 0.01787588 1.36597 1.078827 Inf Inf 0.4459719 0.01682201
Kita bisa melihat kalau model yang paling baik adalah ARIMA (0,0,1) artinya adalah nilai dari persamaan ini adalah Moving Average tingkat pertama. Setelah itu kita akan melihat apakah bentuk peramalan ini sudah melalui dari uji yang lain seperti Ljung Box.
# Plot ACF dari residual
acf(residuals(BJsales_arima), main = "ACF of Residuals")
# Uji Ljung-Box
Box.test(residuals(BJsales_arima), lag = 20, type = "Ljung-Box")
Box-Ljung test
data: residuals(BJsales_arima)
X-squared = 17.408, df = 20, p-value = 0.6263
Hasil menunjukkan kalau residuals tidak mengalami autokorelasi. Begitu juga pada ACF residuals ada spike pada lag pertama menunjukkan model ini sudah baik. Setelah itu kita akan melihat normalitas dari residuals peramalan atau nilai sisaan.
# Plot histogram residual
hist(residuals(BJsales_arima))
# Plot QQ
qqnorm(residuals(BJsales_arima))
qqline(residuals(BJsales_arima))
# Uji Shapiro-Wilk
shapiro.test(residuals(BJsales_arima))
Shapiro-Wilk normality test
data: residuals(BJsales_arima)
W = 0.99403, p-value = 0.8025
Nilai shapiro menujukkan kalau residulas sudah teridsitribusi normal.
KIta ke bentuk peramalan (forecast) seperti dibawah ini. peramalan dalam bentuk 10 periode ke depan.
# Peramalan untuk 10 periode ke depan
<- forecast(BJsales_arima, h = 10)
forecast_result
# Visualisasikan hasil peramalan
plot(forecast_result, main = "Peramalan dengan Model ARIMA")