Package

library(readxl)
library(TTR)
library(TSA)
library(tseries)
library(graphics)
library(forecast)
library(lmtest)
library(ggplot2)

Import Data

#Membaca dan membuat plot data time series
data_sales <- read_excel("C:\\Users\\Cintia\\Documents\\R Prediktif\\Data Tugas.xlsx", 
    range = "B1:B97")

Eksplorasi Data

data_sales <- ts(data_sales)
ts.plot(data_sales, col="dodgerblue2", ylab = "Sales", xlab = "Time (Week)")
title(main = "Weekly Sales Pattern of Pharmaceutical Products", cex.main = 0.8)
points(data_sales, pch = 20, col = "red2")

summary(data_sales)
##      Sales      
##  Min.   : 9881  
##  1st Qu.:10207  
##  Median :10373  
##  Mean   :10369  
##  3rd Qu.:10526  
##  Max.   :10827
  1. Fit an ARIMA model to this time series, excluding the last 10 observations. Investigate model adequacy. Explain how this model would be used for forecasting.

Untuk memodelkan ARIMA, digunakan 86 data pertama dari 96 data yang ada. Sedangkan 10 data terakhir digunakan untuk peramalan.

data_tr <- head(data_sales,n=86)
data_tt <- tail(data_sales, n=10)
data_train <- ts(data_tr)
data_test <- ts(data_tt)
ts.plot(data_train, col="dodgerblue2", ylab = "Sales", xlab = "Time (Week)")
title(main = "Weekly Sales Pattern of Pharmaceutical Products (n=86)", cex.main = 0.8)
points(data_train, pch = 20, col = "red2")

Berdasarkan time series plot, tidak terlihat adanya perubahan nilai tengah (mean) dan ragam (variance) yang jelas dari waktu ke waktu. Hal ini menunjukkan bahwa waktu pengamatan tidak berpengaruh terhadap rata-rata maupun ragam data. Dengan demikian, data deret waktu berfluktuasi di sekitar rata-rata dan ragam yang konstan, yang mengindikasikan bahwa data tersebut sudah stasioner dalam rata-rata dan ragam. Kesimpulan ini dapat diperkuat dengan pengujian statistik menggunakan Augmented Dickey-Fuller (ADF-Test).

#Uji Stasioneritas Augmented Dickey-Fuller
adf.test(data_train)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  data_train
## Dickey-Fuller = -5.2929, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary

Hipotesis:

\(H_{0}\) : Data tidak stasioner

\(H_{1}\) : Data bersifat stasioner

Berdasarkan hasil Uji Augmented Dickey-Fuller, diperoleh nilai statistik Dickey-Fuller sebesar -5.2929 dengan \(p-value\) sebesar 0.01. Karena \(p-value < \alpha\) (0.05), maka \(H_{0}\) ditolak. Dengan demikian, terdapat cukup bukti untuk menyatakan bahwa data bersifat stasioner pada taraf nyata 5%.

Oleh karena data sudah stasioner, model yang dapat digunakan adalah ARIMA(p,0,q) atau ARMA(p,q). Penentuan orde \(p\) pada komponen AR dan \(q\) pada komponen MA dilakukan berdasarkan pola cut-off pada plot Partial Autocorrelation Function (PACF) untuk menentukan AR(p), serta pada plot Autocorrelation Function (ACF) untuk menentukan MA(q).

Identifikasi Model ARIMA

#identifikasi model MA(q) dengan plot ACF
acf(data_train, lag.max=30, main="Plot ACF MA(q)")

#identifikasi model AR(p) dengan plot PACF
pacf(data_train, lag.max=30, main="Plot PACF AR(p)", ylab="PACF")

Pada plot ACF terlihat adanya cutoff setelah lag ke-3, yang mengindikasikan bahwa model yang sesuai adalah MA(3). Sementara itu, pada plot PACF terlihat adanya cutoff setelah lag ke-3, yang mengindikasikan bahwa model yang sesuai adalah AR(3). Oleh karena itu, model ARIMA yang diidentifikasi sementara adalah ARIMA(3,0,0) dan ARIMA(0,0,3).

#identifikasi model ARMA(p,q) dengan EACF
eacf(data_train)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 o o x o o o o o o o o  o  o  o 
## 1 o o o o 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 x x x o o o o o o o o  o  o  o 
## 4 x o x o o o o o o o o  o  o  o 
## 5 x o o o x o o o o o o  o  o  o 
## 6 x o x o x o o o o o o  o  o  o 
## 7 x x x o o o o o o o o  o  o  o

Berdasarkan hasil plot EACF, model ARIMA tentatif yang dapat dipertimbangkan untuk data penjualan produk farmasi adalah ARIMA(0,0,3), ARIMA(0,0,4), ARIMA(0,0,5), ARIMA(1,0,1), ARIMA(1,0,2), ARIMA(1,0,3), ARIMA(1,0,4), ARIMA(1,0,5), ARIMA(2,0,2), ARIMA(2,0,3), ARIMA(2,0,4), ARIMA(2,0,5), ARIMA(3,0,3), ARIMA(3,0,4), ARIMA(3,0,5), ARIMA(4,0,4), ARIMA(4,0,5), ARIMA(5,0,5). Langkah selanjutnya adalah melakukan uji signifikansi parameter untuk memastikan model yang paling sesuai.

Uji Signifikansi Parameter

#Dugaan model MA(3)
ARIMA_003 <- arima(x = data_train, order=c(0,0,3), method = "ML")
coeftest(ARIMA_003)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error  z value Pr(>|z|)    
## ma1        1.1263e-01  1.1453e-01   0.9834  0.32540    
## ma2       -7.3135e-02  1.3993e-01  -0.5227  0.60120    
## ma3       -2.1171e-01  1.1524e-01  -1.8371  0.06619 .  
## intercept  1.0369e+04  1.9328e+01 536.4802  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk seluruh parameter MA pada model ARIMA(0,0,3). Dengan demikian, parameter MA pada model ini tidak signifikan secara statistik, sehingga model ini kurang tepat untuk digunakan sebagai model final.

#Dugaan model MA(4)
ARIMA_004 <- arima(x = data_train, order=c(0,0,4), method = "ML")
coeftest(ARIMA_004)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error  z value Pr(>|z|)    
## ma1        8.2417e-02  1.0902e-01   0.7560  0.44964    
## ma2       -5.2283e-02  1.1225e-01  -0.4658  0.64137    
## ma3       -2.2835e-01  1.1246e-01  -2.0304  0.04231 *  
## ma4       -1.7740e-01  1.1447e-01  -1.5497  0.12122    
## intercept  1.0368e+04  1.4639e+01 708.2545  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter MA(1), MA(2), dan MA(4) pada model ARIMA(0,0,4). Hanya parameter MA(3) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model MA(5)
ARIMA_005 <- arima(x = data_train, order=c(0,0,5), method = "ML")
coeftest(ARIMA_005)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error  z value Pr(>|z|)    
## ma1        1.2924e-01  1.0737e-01   1.2037  0.22870    
## ma2       -9.1655e-03  1.1008e-01  -0.0833  0.93364    
## ma3       -2.4107e-01  1.0353e-01  -2.3284  0.01989 *  
## ma4       -1.9782e-01  1.1467e-01  -1.7250  0.08452 .  
## ma5       -2.3027e-01  1.1581e-01  -1.9883  0.04678 *  
## intercept  1.0368e+04  1.0815e+01 958.7102  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter MA(1), MA(2), dan MA(4) pada model ARIMA(0,0,5). Parameter MA(3) dan MA(5) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARIMA(1,0,1)
ARIMA_101 <- arima(x = data_train, order=c(1,0,1), method = "ML")
coeftest(ARIMA_101)
## 
## z test of coefficients:
## 
##             Estimate Std. Error  z value Pr(>|z|)    
## ar1       1.0633e-01 3.5434e-01   0.3001   0.7641    
## ma1       6.2553e-02 3.4305e-01   0.1823   0.8553    
## intercept 1.0369e+04 2.7983e+01 370.5466   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter AR(1) dan MA(1) pada model ARIMA(1,0,1). Dengan demikian, parameter AR(1) dan MA(1) pada model ini tidak signifikan secara statistik, sehingga model ini kurang tepat untuk digunakan sebagai model final.

#Dugaan model ARIMA(1,0,2)
ARIMA_102 <- arima(x = data_train, order=c(1,0,2), method = "ML")
coeftest(ARIMA_102)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error  z value Pr(>|z|)    
## ar1          -0.68640     0.34197  -2.0072  0.04473 *  
## ma1           0.88224     0.34911   2.5271  0.01150 *  
## ma2           0.22196     0.11931   1.8604  0.06283 .  
## intercept 10369.64259    29.13275 355.9445  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter MA(2) pada model ARIMA(1,0,2). Parameter AR(1) dan MA(1) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARMA(1,0,3)
ARIMA_103 <- arima(x = data_train, order=c(1,0,3), method = "ML")
coeftest(ARIMA_103)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error   z value  Pr(>|z|)    
## ar1        7.4917e-01  9.9767e-02    7.5092 5.947e-14 ***
## ma1       -6.7443e-01  1.3971e-01   -4.8272 1.385e-06 ***
## ma2       -1.2208e-01  1.3226e-01   -0.9230   0.35601    
## ma3       -2.0347e-01  1.2225e-01   -1.6645   0.09602 .  
## intercept  1.0370e+04  4.7819e+00 2168.6670 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter MA(2) dan MA(3) pada model ARIMA(1,0,3). Parameter AR(1) dan MA(1) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARMA(1,0,4)
ARIMA_104 <- arima(x = data_train, order=c(1,0,4), method = "ML")
coeftest(ARIMA_104)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error   z value  Pr(>|z|)    
## ar1        7.4781e-01  1.6786e-01    4.4549 8.392e-06 ***
## ma1       -6.7274e-01  2.0637e-01   -3.2598  0.001115 ** 
## ma2       -1.2152e-01  1.3915e-01   -0.8733  0.382501    
## ma3       -2.0361e-01  1.2255e-01   -1.6615  0.096618 .  
## ma4       -2.1263e-03  1.8630e-01   -0.0114  0.990894    
## intercept  1.0370e+04  4.7772e+00 2170.7900 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter MA(2), MA(3), dan MA(4) pada model ARIMA(1,0,4). Parameter AR(1) dan MA(1) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARMA(1,0,5)
ARIMA_105 <- arima(x = data_train, order=c(1,0,5), method = "ML")
coeftest(ARIMA_105)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error  z value Pr(>|z|)    
## ar1       -1.0870e-01  4.3519e-01  -0.2498  0.80276    
## ma1        2.3273e-01  4.2414e-01   0.5487  0.58320    
## ma2        2.2978e-03  1.1854e-01   0.0194  0.98453    
## ma3       -2.4528e-01  1.0866e-01  -2.2573  0.02399 *  
## ma4       -2.2207e-01  1.4776e-01  -1.5029  0.13287    
## ma5       -2.4814e-01  1.2962e-01  -1.9145  0.05556 .  
## intercept  1.0368e+04  1.1154e+01 929.5333  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter AR(1), MA(1), MA(2), MA(4), MA(5) pada model ARIMA(1,0,5). Hanya parameter MA(3) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARMA(2,0,2)
ARIMA_202 <- arima(x = data_train, order=c(2,0,2), method = "ML")
coeftest(ARIMA_202)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error  z value  Pr(>|z|)    
## ar1           1.20167     0.27040   4.4440 8.828e-06 ***
## ar2          -0.40781     0.36116  -1.1292    0.2588    
## ma1          -1.08673     0.27076  -4.0136 5.981e-05 ***
## ma2           0.16782     0.34917   0.4806    0.6308    
## intercept 10368.64292    10.59651 978.4956 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter AR(2) dan MA(2) pada model ARIMA(2,0,2). Parameter AR(1) dan MA(1) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARMA(2,0,3)
ARIMA_203 <- arima(x = data_train, order=c(2,0,3), method = "ML")
coeftest(ARIMA_203)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error   z value Pr(>|z|)    
## ar1           0.27142     1.01459    0.2675   0.7891    
## ar2           0.41158     0.85924    0.4790   0.6319    
## ma1          -0.19777     1.02455   -0.1930   0.8469    
## ma2          -0.53031     0.84720   -0.6260   0.5313    
## ma3          -0.27191     0.20712   -1.3128   0.1892    
## intercept 10370.29187     5.04351 2056.1668   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk semua parameter pada model ARIMA(2,0,3). Dengan demikian, semua parameter pada model ini tidak signifikan secara statistik, sehingga model ini kurang tepat untuk digunakan sebagai model final.

#Dugaan model ARMA(2,0,4)
ARIMA_204 <- arima(x = data_train, order=c(2,0,4), method = "ML")
coeftest(ARIMA_204)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error   z value Pr(>|z|)    
## ar1        7.6975e-02  5.4234e-01    0.1419  0.88713    
## ar2        5.2609e-01  3.9578e-01    1.3293  0.18376    
## ma1       -7.1052e-04  5.5058e-01   -0.0013  0.99897    
## ma2       -6.0690e-01  3.6271e-01   -1.6732  0.09429 .  
## ma3       -3.0186e-01  1.4099e-01   -2.1411  0.03227 *  
## ma4       -9.0502e-02  2.0992e-01   -0.4311  0.66638    
## intercept  1.0370e+04  4.8740e+00 2127.6744  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, hanya parameter MA(3) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARMA(2,0,5)
ARIMA_205 <- arima(x = data_train, order=c(2,0,5), method = "ML")
coeftest(ARIMA_205)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error  z value Pr(>|z|)    
## ar1       -6.8556e-02  4.2307e-01  -0.1620  0.87127    
## ar2       -1.8288e-01  6.2978e-01  -0.2904  0.77152    
## ma1        1.9291e-01  4.1170e-01   0.4686  0.63939    
## ma2        1.7652e-01  6.0978e-01   0.2895  0.77221    
## ma3       -2.2734e-01  1.2667e-01  -1.7947  0.07270 .  
## ma4       -2.2265e-01  1.3156e-01  -1.6924  0.09056 .  
## ma5       -2.8157e-01  1.6951e-01  -1.6610  0.09671 .  
## intercept  1.0368e+04  1.1975e+01 865.8027  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk semua parameter pada model ARIMA(2,0,5). Dengan demikian, semua parameter pada model ini tidak signifikan secara statistik, sehingga model ini kurang tepat untuk digunakan sebagai model final.

#Dugaan model ARMA(3,0,3)
ARIMA_303 <- arima(x = data_train, order=c(3,0,3), method = "ML")
coeftest(ARIMA_303)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error   z value Pr(>|z|)    
## ar1           0.34994     0.51759    0.6761   0.4990    
## ar2           0.46375     0.46699    0.9930   0.3207    
## ar3          -0.11879     0.26592   -0.4467   0.6551    
## ma1          -0.27031     0.52426   -0.5156   0.6061    
## ma2          -0.57090     0.45814   -1.2461   0.2127    
## ma3          -0.15879     0.28729   -0.5527   0.5805    
## intercept 10370.33805     4.83951 2142.8492   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk semua parameter pada model ARIMA(3,0,3). Dengan demikian, semua parameter pada model ini tidak signifikan secara statistik, sehingga model ini kurang tepat untuk digunakan sebagai model final.

#Dugaan model ARMA(3,0,4)
ARIMA_304 <- arima(x = data_train, order=c(3,0,4), method = "ML")
coeftest(ARIMA_304)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error  z value Pr(>|z|)    
## ar1        2.4475e-01  7.3804e-01   0.3316   0.7402    
## ar2        4.3278e-01  5.9914e-01   0.7223   0.4701    
## ar3       -1.6987e-01  5.4732e-01  -0.3104   0.7563    
## ma1       -1.3593e-01  7.2734e-01  -0.1869   0.8517    
## ma2       -4.8828e-01  5.9364e-01  -0.8225   0.4108    
## ma3       -1.1524e-01  5.6628e-01  -0.2035   0.8387    
## ma4       -7.3861e-02  2.4344e-01  -0.3034   0.7616    
## intercept  1.0369e+04  1.1089e+01 935.0982   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk semua parameter pada model ARIMA(3,0,4). Dengan demikian, semua parameter pada model ini tidak signifikan secara statistik, sehingga model ini kurang tepat untuk digunakan sebagai model final.

#Dugaan model ARMA(3,0,5)
ARIMA_305 <- arima(x = data_train, order=c(3,0,5), method = "ML")
coeftest(ARIMA_305)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error  z value Pr(>|z|)    
## ar1       -7.0511e-02  5.0627e-01  -0.1393  0.88923    
## ar2       -1.9006e-01  6.0603e-01  -0.3136  0.75382    
## ar3        9.0178e-02  4.1476e-01   0.2174  0.82788    
## ma1        1.9494e-01  4.9055e-01   0.3974  0.69108    
## ma2        1.8472e-01  5.6917e-01   0.3245  0.74553    
## ma3       -3.1002e-01  4.2218e-01  -0.7343  0.46275    
## ma4       -2.3009e-01  1.3147e-01  -1.7502  0.08009 .  
## ma5       -2.8645e-01  1.5680e-01  -1.8268  0.06773 .  
## intercept  1.0368e+04  1.1275e+01 919.5709  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk semua parameter pada model ARIMA(3,0,5). Dengan demikian, semua parameter pada model ini tidak signifikan secara statistik, sehingga model ini kurang tepat untuk digunakan sebagai model final.

#Dugaan model ARMA(4,0,4)
ARIMA_404 <- arima(x = data_train, order=c(4,0,4), method = "ML")
coeftest(ARIMA_404)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error   z value Pr(>|z|)    
## ar1        1.1413e+00  5.6610e-01    2.0160  0.04380 *  
## ar2       -1.7418e-01  8.1537e-01   -0.2136  0.83084    
## ar3       -5.3345e-01  6.8025e-01   -0.7842  0.43292    
## ar4        4.1269e-01  3.1850e-01    1.2957  0.19507    
## ma1       -1.0723e+00  5.7827e-01   -1.8543  0.06369 .  
## ma2        4.3018e-02  8.0981e-01    0.0531  0.95764    
## ma3        3.2640e-01  6.3100e-01    0.5173  0.60496    
## ma4       -2.9711e-01  3.8940e-01   -0.7630  0.44547    
## intercept  1.0370e+04  5.5933e+00 1853.9592  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, hanya parameter AR(1) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARMA(4,0,5)
ARIMA_405 <- arima(x = data_train, order=c(4,0,5), method = "ML")
coeftest(ARIMA_405)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error   z value Pr(>|z|)    
## ar1        4.5428e-01  3.7488e-01    1.2118  0.22559    
## ar2       -4.0082e-01  4.2871e-01   -0.9350  0.34981    
## ar3       -7.5834e-02  4.2885e-01   -0.1768  0.85964    
## ar4        4.7097e-01  2.7612e-01    1.7057  0.08807 .  
## ma1       -3.7456e-01  3.8767e-01   -0.9662  0.33396    
## ma2        3.6347e-01  4.1146e-01    0.8834  0.37704    
## ma3       -1.5277e-01  3.9792e-01   -0.3839  0.70103    
## ma4       -5.9761e-01  3.0760e-01   -1.9428  0.05204 .  
## ma5       -2.3852e-01  1.6097e-01   -1.4818  0.13839    
## intercept  1.0370e+04  4.9737e+00 2085.0158  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk semua parameter pada model ARIMA(4,0,5). Dengan demikian, semua parameter pada model ini tidak signifikan secara statistik, sehingga model ini kurang tepat untuk digunakan sebagai model final.

#Dugaan model ARMA(5,0,5)
ARIMA_505 <- arima(x = data_train, order=c(5,0,5), method = "ML")
coeftest(ARIMA_505)
## 
## z test of coefficients:
## 
##              Estimate  Std. Error   z value Pr(>|z|)    
## ar1        1.3518e-01  4.5469e-01    0.2973   0.7662    
## ar2       -3.2347e-01  4.1290e-01   -0.7834   0.4334    
## ar3       -5.4830e-02  4.5574e-01   -0.1203   0.9042    
## ar4        3.0464e-01  4.3074e-01    0.7072   0.4794    
## ar5        2.6549e-01  3.9267e-01    0.6761   0.4990    
## ma1       -5.9354e-02  4.2611e-01   -0.1393   0.8892    
## ma2        2.9385e-01  3.8661e-01    0.7601   0.4472    
## ma3       -1.7530e-01  4.1807e-01   -0.4193   0.6750    
## ma4       -4.9290e-01  3.8848e-01   -1.2688   0.2045    
## ma5       -5.6628e-01  4.3528e-01   -1.3010   0.1933    
## intercept  1.0370e+04  5.1920e+00 1997.3501   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk semua parameter pada model ARIMA(5,0,5). Dengan demikian, semua parameter pada model ini tidak signifikan secara statistik, sehingga model ini kurang tepat untuk digunakan sebagai model final.

Setelah dilakukan uji signifikansi parameter pada beberapa model tentatif, tidak ditemukan model dengan seluruh parameter yang signifikan. Oleh karena itu, proses differencing akan dilakukan pada data observasi untuk meningkatkan stasionaritas model.

DIFFERENCING

#melakukan differencing pertama
diff1 <- diff(data_train, differences = 1)

ts.plot(diff1, col="dodgerblue2", ylab = "Sales", xlab = "Time (Week)")
title(main = "Weekly Sales Pattern of Pharmaceutical Products after First Differencing", cex.main = 0.7)
points(diff1, pch = 20, col = "red2")

#Uji Stasioneritas Augmented Dickey-Fuller
adf.test(diff1)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff1
## Dickey-Fuller = -7.4196, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary

Berdasarkan hasil Uji Augmented Dickey-Fuller, diperoleh nilai statistik Dickey-Fuller sebesar -7.4196 dengan \(p-value\) sebesar 0.01. Karena \(p-value < \alpha\) (0.05), maka \(H_{0}\) ditolak. Dengan demikian, terdapat cukup bukti untuk menyatakan bahwa data bersifat stasioner pada taraf nyata 5%.

#plot ACF
acf(diff1, lag.max = 20, main="Plot ACF MA(q)")

#plot PACF
pacf(diff1, lag.max = 20, main="Plot PACF AR(p)")

#identifikasi model ARMA(p,q) dengan EACF
eacf(diff1)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x o o o o o o o o o o  o  o  o 
## 1 x o o o o o o o o o o  o  o  o 
## 2 x x o o o o o o o o o  o  o  o 
## 3 x x o o o o o o o o o  o  o  o 
## 4 x x x x x o o o o o o  o  o  o 
## 5 x o x o x o o o o o o  o  o  o 
## 6 x o x o o o o o o o o  o  o  o 
## 7 x x o o o o o o o o o  o  o  o

Berdasarkan hasil plot ACF, PACF, dan EACF, diperoleh beberapa model yang dapat digunakan sebagai model tentatif untuk data penjualan produk farmasi, yaitu ARIMA(0,1,1), ARIMA(0,1,2), ARIMA(0,1,3), ARIMA(0,1,4), ARIMA(0,1,5), ARIMA(1,1,2), ARIMA(1,1,3), ARIMA(1,1,4), ARIMA(1,1,5), ARIMA(2,1,5), ARIMA(3,1,4), dan ARIMA(3,1,5). Untuk memastikan model yang paling sesuai dari model-model tentatif tersebut, dilakukan uji signifikansi parameter pada setiap model.

#Dugaan model ARIMA(0,1,1) -> signifikan
ARIMA_011 <- arima(x = diff1, order=c(0,1,1), method = "ML")
coeftest(ARIMA_011)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value  Pr(>|z|)    
## ma1 -0.999998   0.029682 -33.691 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ARIMA_011
## 
## Call:
## arima(x = diff1, order = c(0, 1, 1), method = "ML")
## 
## Coefficients:
##           ma1
##       -1.0000
## s.e.   0.0297
## 
## sigma^2 estimated as 82826:  log likelihood = -597.04,  aic = 1196.08

Berdasarkan hasil uji signifikansi parameter tersebut, diperoleh \(p-{value} < \alpha = 0.05\) (teruji signifikan) untuk parameter MA(1) pada dugaan model tentatif ARIMA(0,1,1).

#Dugaan model ARIMA(0,1,2)
ARIMA_012 <- arima(x = diff1, order=c(0,1,2), method = "ML")
coeftest(ARIMA_012)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value  Pr(>|z|)    
## ma1 -1.997816   0.062017 -32.214 < 2.2e-16 ***
## ma2  0.999777   0.062004  16.125 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter tersebut, diperoleh \(p-{value} < \alpha = 0.05\) (teruji signifikan) untuk seluruh parameter pada dugaan model tentatif ARIMA(0,1,2).

#Dugaan model ARIMA(0,1,3)
ARIMA_013 <- arima(x = diff1, order=c(0,1,3), method = "ML")
coeftest(ARIMA_013)
## 
## z test of coefficients:
## 
##      Estimate Std. Error  z value  Pr(>|z|)    
## ma1 -1.815153   0.111099 -16.3381 < 2.2e-16 ***
## ma2  0.635734   0.198791   3.1980  0.001384 ** 
## ma3  0.182312   0.097533   1.8692  0.061591 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter MA(3) pada model ARIMA(0,1,3). Parameter MA(1) dan MA(2) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARIMA(0,1,4)
ARIMA_014 <- arima(x = diff1, order=c(0,1,4), method = "ML")
coeftest(ARIMA_014)
## 
## z test of coefficients:
## 
##     Estimate Std. Error  z value  Pr(>|z|)    
## ma1 -1.76390    0.12353 -14.2795 < 2.2e-16 ***
## ma2  0.66134    0.21373   3.0942  0.001973 ** 
## ma3 -0.02070    0.22278  -0.0929  0.925970    
## ma4  0.12705    0.12064   1.0531  0.292296    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter MA(3) dan MA(4) pada model ARIMA(0,1,4). Parameter MA(1) dan MA(2) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARIMA(0,1,5)
ARIMA_015 <- arima(x = diff1, order=c(0,1,5), method = "ML")
coeftest(ARIMA_015)
## 
## z test of coefficients:
## 
##       Estimate Std. Error  z value  Pr(>|z|)    
## ma1 -1.8203866  0.1341898 -13.5658 < 2.2e-16 ***
## ma2  0.6660267  0.2391248   2.7853  0.005348 ** 
## ma3 -0.0032952  0.2418092  -0.0136  0.989128    
## ma4  0.3003410  0.1959469   1.5328  0.125333    
## ma5 -0.1403149  0.1218805  -1.1512  0.249630    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter MA(3), MA(4), dan MA(5) pada model ARIMA(0,1,5). Hanya parameter MA(1) dan MA(2) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARIMA(1,1,2)
ARIMA_112 <- arima(x = diff1, order=c(1,1,2), method = "ML")
coeftest(ARIMA_112)
## 
## z test of coefficients:
## 
##      Estimate Std. Error  z value Pr(>|z|)    
## ar1  0.206157   0.110867   1.8595  0.06296 .  
## ma1 -1.997268   0.052081 -38.3490  < 2e-16 ***
## ma2  0.999868   0.052037  19.2146  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter AR(1) pada model ARIMA(1,1,2). Parameter MA(1) dan MA(2) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARIMA(1,1,3)
ARIMA_113 <- arima(x = diff1, order=c(1,1,3), method = "ML")
coeftest(ARIMA_113)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value  Pr(>|z|)    
## ar1  0.182443   0.323851  0.5634    0.5732    
## ma1 -1.964966   0.311256 -6.3130 2.737e-10 ***
## ma2  0.939027   0.613598  1.5304    0.1259    
## ma3  0.028614   0.305075  0.0938    0.9253    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter AR(1), MA(2), dan MA(3) pada model ARIMA(1,1,3). Hanya parameter MA(1) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARIMA(1,1,4)
ARIMA_114 <- arima(x = diff1, order=c(1,1,4), method = "ML")
coeftest(ARIMA_114)
## 
## z test of coefficients:
## 
##     Estimate Std. Error z value Pr(>|z|)   
## ar1 -0.66054    0.37428 -1.7648 0.077596 . 
## ma1 -1.11393    0.38192 -2.9167 0.003538 **
## ma2 -0.51910    0.69145 -0.7507 0.452808   
## ma3  0.39350    0.30590  1.2864 0.198319   
## ma4  0.24505    0.12074  2.0297 0.042392 * 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter AR(1), MA(2), dan MA(3) pada model ARIMA(1,1,4). Parameter MA(1) dan MA(4) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARIMA(1,1,5)
ARIMA_115 <- arima(x = diff1, order=c(1,1,5), method = "ML")
coeftest(ARIMA_115)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value Pr(>|z|)  
## ar1 -0.575284   0.640175 -0.8986  0.36885  
## ma1 -1.210679   0.676438 -1.7898  0.07349 .
## ma2 -0.383975   1.133967 -0.3386  0.73490  
## ma3  0.362160   0.412664  0.8776  0.38015  
## ma4  0.287020   0.197455  1.4536  0.14606  
## ma5 -0.049729   0.192522 -0.2583  0.79617  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk semua parameter pada model ARIMA(1,1,5). Dengan demikian, semua parameter pada model ini tidak signifikan secara statistik, sehingga model ini kurang tepat untuk digunakan sebagai model final.

#Dugaan model ARIMA(2,1,5)
ARIMA_215 <- arima(x = diff1, order=c(2,1,5), method = "ML")
coeftest(ARIMA_215)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value Pr(>|z|)  
## ar1 -0.516694        NaN     NaN      NaN  
## ar2  0.112092        NaN     NaN      NaN  
## ma1 -1.273577        NaN     NaN      NaN  
## ma2 -0.400383        NaN     NaN      NaN  
## ma3  0.536007   0.258497  2.0736  0.03812 *
## ma4  0.239164   0.199187  1.2007  0.22987  
## ma5 -0.097169        NaN     NaN      NaN  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh bahwa hanya MA(3) yang signifikan secara statistik dengan \(p-value < \alpha=0.05\). Namun, parameter lainnya memiliki nilai \(p-value\) yang tidak signifikan atau bahkan tidak dapat dihitung \((NaN)\), yang mengindikasikan potensi masalah dalam proses estimasi model ARIMA(2,1,5). Oleh karena itu, model ini kurang tepat untuk digunakan sebagai model final, dan disarankan untuk mempertimbangkan model dengan struktur yang lebih sederhana atau melakukan evaluasi ulang terhadap proses estimasi.

#Dugaan model ARIMA(3,1,4)
ARIMA_314 <- arima(x = diff1, order=c(3,1,4), method = "ML")
coeftest(ARIMA_314)
## 
## z test of coefficients:
## 
##     Estimate Std. Error z value Pr(>|z|)    
## ar1  0.33076    0.28336  1.1673  0.24309    
## ar2  0.42342    0.30279  1.3984  0.16199    
## ar3 -0.29252    0.11405 -2.5648  0.01032 *  
## ma1 -2.15791    0.24399 -8.8443  < 2e-16 ***
## ma2  0.85368    0.84474  1.0106  0.31221    
## ma3  0.77336    0.84581  0.9143  0.36054    
## ma4 -0.46863    0.25604 -1.8303  0.06721 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk parameter AR(1), AR(2), MA(2), MA(3), dan MA(4) pada model ARIMA(3,1,4). Parameter AR(3) dan MA(1) yang signifikan secara statistik. Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

#Dugaan model ARIMA(3,1,5)
ARIMA_315 <- arima(x = diff1, order=c(3,1,5), method = "ML")
coeftest(ARIMA_315)
## 
## z test of coefficients:
## 
##     Estimate Std. Error z value  Pr(>|z|)    
## ar1  0.29266    0.36950  0.7920    0.4283    
## ar2  0.15693    0.40940  0.3833    0.7015    
## ar3 -0.50612    0.31700 -1.5966    0.1104    
## ma1 -2.11325    0.40698 -5.1925 2.075e-07 ***
## ma2  1.08191    0.99977  1.0822    0.2792    
## ma3  0.46841    1.10719  0.4231    0.6723    
## ma4 -0.72191    0.79979 -0.9026    0.3667    
## ma5  0.28695    0.36085  0.7952    0.4265    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil uji signifikansi parameter, diperoleh \(p-value > \alpha = 0.05\) untuk semua parameter kecuali MA(1) pada model ARIMA(1,1,3). Oleh karena itu, model ini mungkin perlu disesuaikan lebih lanjut dengan mempertimbangkan parameter signifikan saja.

Setelah dilakukan uji signifikansi parameter terhadap beberapa model tentatif, diperoleh hasil bahwa seluruh parameter pada model ARIMA(0,1,1) dan ARIMA(0,1,2) teruji signifikan. Oleh karena itu, pemilihan model terbaik akan dilakukan berdasarkan nilai AIC terkecil.

ARIMA_011
## 
## Call:
## arima(x = diff1, order = c(0, 1, 1), method = "ML")
## 
## Coefficients:
##           ma1
##       -1.0000
## s.e.   0.0297
## 
## sigma^2 estimated as 82826:  log likelihood = -597.04,  aic = 1196.08
ARIMA_012
## 
## Call:
## arima(x = diff1, order = c(0, 1, 2), method = "ML")
## 
## Coefficients:
##           ma1     ma2
##       -1.9978  0.9998
## s.e.   0.0620  0.0620
## 
## sigma^2 estimated as 50831:  log likelihood = -581.17,  aic = 1166.34

Berdasarkan perbandingan nilai AIC model ARIMA(0,1,1) dan ARIMA(0,1,2) diperoleh nilai AIC terkecil sebesar 1166.34 yaitu model ARIMA(0,1,2). Sehingga model ARIMA(0,1,2) merupakan model terbaik yang dapat digunakan untuk meramalkan data penjualan produk farmasi. Selanjutnya, akan dilakukan pengujian asumsi terhadap residual model ARIMA(0,1,2).

#cek residuals
checkresiduals(ARIMA_012)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(0,1,2)
## Q* = 12.199, df = 8, p-value = 0.1425
## 
## Model df: 2.   Total lags used: 10
#Cek residuals

res1=residuals(ARIMA_012)
resk1=res1^2

#Uji Autokorelasi (kebebasan)
Box.test(res1,type=c("Ljung-Box"))
## 
##  Box-Ljung test
## 
## data:  res1
## X-squared = 3.0217, df = 1, p-value = 0.08216

Hipotesis: \(H_{0}\) : Tidak terdapat autokorelasi \(H_{1}\) : Terdapat autokorelasi

Kesimpulan: Berdasarkan hasil output di atas, diperoleh \(p-{value}=0.08216 > \alpha=0.05\), sehingga \(H_{0}\) gagal ditolak. Ha ini berarti asumsi terpenuhi karena tidak terdapat gejala autokorelasi pada residual.

#Uji Homogenitas Ragam Sisaan
Box.test(res1^2,type=c("Ljung-Box"))
## 
##  Box-Ljung test
## 
## data:  res1^2
## X-squared = 0.30504, df = 1, p-value = 0.5807

Hipotesis: \(H_{0}\) : Ragam residual bersifat homogen \(H_{1}\) : Ragam residual bersifat heterogen

Kesimpulan: Berdasarkan hasil output di atas, diperoleh \(p-{value}=0.3223 > \alpha=0.05\), sehingga \(H_{0}\) gagal ditolak. Hal ini berarti asumsi terpenuhi karena ragam residual bersifat homogen.

#Uji Normalitas Sisaan
shapiro.test(res1)
## 
##  Shapiro-Wilk normality test
## 
## data:  res1
## W = 0.98991, p-value = 0.7577

Hipotesis: \(H_{0}\) : Residual menyebar normal \(H_{1}\) : Residual tidak menyebar normal

Kesimpulan: Berdasarkan hasil output di atas, diperoleh \(p-{value}=0.7419 > \alpha=0.05\), sehingga \(H_{0}\) gagal ditolak. Hal ini berarti asumsi terpenuhi karena residual menyebar normal. Hal ini juga dapat dilihat secara visual.

#Uji Normalitas (Normal Q-Q-Plot)
qqnorm(res1, col = "violetred2")
qqline(res1)

  1. forecast the last 10 observation
ARIMAdata <- Arima(data_train, order=c(0,1,2), method="ML")
forecastARIMA012 <- forecast(ARIMAdata)
hasil_forecastARIMA012 <- as.data.frame(forecastARIMA012)
hasil_forecastARIMA012

Berdasarkan hasil peramalan menggunakan model ARIMA(0,1,2), diperoleh nilai peramalan yang konstan sebesar 10369.00 (dalam ribu) untuk 10 periode waktu mendatang (minggu ke-87 hingga minggu ke-96). Hal ini menunjukkan bahwa model memprediksi penjualan produk farmasi akan tetap stabil pada periode tersebut.

plot(forecastARIMA012)

#Akurasi Hasil Peramalan
data_forecastARIMA012 <- hasil_forecastARIMA012$`Point Forecast`
data_forecastARIMA012 <- as.data.frame(data_forecastARIMA012)
data_forecastARIMA012
data_aktual <- as.data.frame(data_test)
data_aktual
#Perbandingan Data Aktual vs Data Hasil Peramalan

comparison <- cbind(data_aktual, data_forecastARIMA012)
colnames(comparison) <- c("Data Aktual", "Data hasil peramalan ARIMA(0,1,2)")
comparison <- as.data.frame(comparison)
comparison

Berdasarkan hasil output di atas, terlihat bahwa peramalan menggunakan model ARIMA(0,1,2) menghasilkan nilai yang berbeda dengan nilai aktual untuk minggu ke-87 sampai minggu ke-96.

test <- as.data.frame(data_test)

#Menentukan Akurasi Model
akurasi.arima012 <- accuracy(data_forecastARIMA012$data_forecastARIMA012,test$Sales)
akurasi.arima012
##                ME     RMSE      MAE          MPE     MAPE
## Test set 3.402664 186.4551 154.5389 0.0004998644 1.483067

Model ARIMA(0,1,2) menghasilkan nilai MAPE sebesar 1,483%, yang pada dasarnya menunjukkan kesalahan rata-rata yang kecil. Namun, hasil peramalan yang cenderung konstan mengindikasikan bahwa model ini kurang mampu menangkap variasi data aktual dengan baik. Hal ini menunjukkan bahwa meskipun nilai MAPE kecil, performa model ini dalam memberikan ramalan yang representatif terhadap pola data aktual masih perlu dievaluasi lebih lanjut.

  1. In Exercise 4.12, you were asked to use simple exponential smoothing with λ=0.1 to smooth the data, and to forecast the last 10 observations. Compare the ARIMA and exponential smoothing forecasts. Which forecasting method do you prefer?
# Pemulusan Eksponensial Sederhana
data_ses<-HoltWinters(data_train,alpha=0.1, beta=FALSE, gamma=FALSE)
data_ses
## Holt-Winters exponential smoothing without trend and without seasonal component.
## 
## Call:
## HoltWinters(x = data_train, alpha = 0.1, beta = FALSE, gamma = FALSE)
## 
## Smoothing parameters:
##  alpha: 0.1
##  beta : FALSE
##  gamma: FALSE
## 
## Coefficients:
##       [,1]
## a 10352.91
SSE <- data_ses$SSE
SSE
## [1] 4839348
MSE <- SSE/86
MSE
## [1] 56271.49
forecast_sess <- forecast(data_ses)
forecast_ses <- as.data.frame(forecast_sess)
forecast_ses

Berdasarkan hasil output di atas, terlihat bahwa peramalan menggunakan Exponential Smoothing juga menghasilkan nilai yang berbeda dengan nilai aktual untuk minggu ke-87 sampai minggu ke-96. Berikut visualisasi peramalan untuk 10 periode berikutnya.

plot(forecast_sess)

data_forecastSES <- forecast_ses$`Point Forecast`
data_forecastSES <- as.data.frame(data_forecastSES)
data_forecastSES
akurasi_ses <- accuracy(data_forecastSES$data_forecastSES,test$Sales)
akurasi_ses
##                ME     RMSE    MAE       MPE     MAPE
## Test set 15.77095 189.9371 158.26 0.1192699 1.517163

Peramalan penjualan produk farmasi menggunakan metode Exponential Smoothing juga dianggap memiliki kemampuan ramalan yang sangat akurat karena diperoleh nilai MAPE sebesar 1.517163%. Dimana jika nilai MAPE kecil maka kesalahan hasil pendugaannya juga kecil.

Setelah dilakukan peramalan dengan menggunakan dua metode, akan diamati nilai MAPE dari masing-masing metode. Metode dengan nilai MAPE paling kecil akan terpilih menjadi model terbaik.

method <- c("ARIMA", "Exponential Smoothing")
MAPE <- c(1.519523,1.517163)
data.frame(method, MAPE)

Pada tabel di atas, diketahui bahwa metode Exponential Smoothing memiliki nilai MAPE yang lebih kecil dibandingkan model ARIMA. Sehingga metode ini dianggap lebih baik dalam meramalkan penjualan produk farmasi.

  1. How would prediction intervals be obtained for the ARIMA forecasts?
fit <- Arima(data_train, order = c(0,1,1), method = "ML")
fit
## Series: data_train 
## ARIMA(0,1,1) 
## 
## Coefficients:
##           ma1
##       -1.0000
## s.e.   0.0371
## 
## sigma^2 = 50385:  log likelihood = -582.5
## AIC=1169   AICc=1169.15   BIC=1173.88
hasil_forecastARIMA012
interval_predict <- hasil_forecastARIMA012[,-1]
interval_predict

Pada output di atas, kolom ‘Lo 80’ menyatakan nilai batas bawah untuk prediksi 80% dan kolom ‘Hi 80’ menyatakan nilai batas atas untuk prediksi 80%. Sedangkan kolom ‘Lo 95’ menyatakan nilai batas bawah untuk prediksi 95% dan kolom ‘Hi 95’ menyatakan nilai batas atas untuk prediksi 95%. Dimana terlihat bahwa interval prediksi 95% memiliki rentang yang lebih besar (9926.516 ; 10811.51) daripada interval prediksi 80% (10079.68 ; 10658.35). Berikut visualisasi perbandingan interval prediksi 80% dan prediksi 95%.

plot(hasil_forecastARIMA012$`Point Forecast`, type="n", ylim=range(hasil_forecastARIMA012$`Lo 80`, hasil_forecastARIMA012$`Hi 80`), main = "Plot Interval Prediksi 80%")
polygon(c(time(hasil_forecastARIMA012$`Point Forecast`),rev(time(hasil_forecastARIMA012$`Point Forecast`))), c(hasil_forecastARIMA012$`Hi 80`,rev(hasil_forecastARIMA012$`Lo 80`)), 
   col=rgb(0,0,0.6,0.2), border=FALSE)
lines(hasil_forecastARIMA012$`Point Forecast`)
lines(fitted(fit),col='purple')

out <- (hasil_forecastARIMA012$`Point Forecast`< hasil_forecastARIMA012$`Lo 80` | hasil_forecastARIMA012$`Point Forecast` > hasil_forecastARIMA012$`Hi 80`)
plot(hasil_forecastARIMA012$`Point Forecast`, type="n", ylim=range(hasil_forecastARIMA012$`Lo 95`, hasil_forecastARIMA012$`Hi 95`), main = "Plot Interval Prediksi 95%")
polygon(c(time(hasil_forecastARIMA012$`Point Forecast`),rev(time(hasil_forecastARIMA012$`Point Forecast`))), c(hasil_forecastARIMA012$`Hi 95`,rev(hasil_forecastARIMA012$`Lo 95`)), 
   col=rgb(0,0,0.6,0.2), border=FALSE)
lines(hasil_forecastARIMA012$`Point Forecast`)
lines(fitted(fit),col='magenta')