Peramalan dan Akurasi dengan Model ARIMA

Dinda Khamila Nurfatimah

2023-10-16

Packages

library(ggplot2)
library(tsibble)
## 
## Attaching package: 'tsibble'
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, union
library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(MASS)
library(forecast)
library(TSA)
## Registered S3 methods overwritten by 'TSA':
##   method       from    
##   fitted.Arima forecast
##   plot.Arima   forecast
## 
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
## 
##     acf, arima
## The following object is masked from 'package:utils':
## 
##     tar
library(TTR)
library(aTSA)
## 
## Attaching package: 'aTSA'
## The following object is masked from 'package:forecast':
## 
##     forecast
## The following objects are masked from 'package:tseries':
## 
##     adf.test, kpss.test, pp.test
## The following object is masked from 'package:graphics':
## 
##     identify
library(graphics)

Import Data

Digunakan data Power Consumed yang dalam hal ini digunakan data 359 periode awal

library(rio)
data <- import("https://raw.githubusercontent.com/DindaKhamila/mpdw/main/Data/DataTugas.csv")
data <- data[1:359,]
data.ts<-ts(data)

Eksplorasi Data

Plot Data Penuh

plot.ts(data.ts, lty=1, xlab="Waktu", ylab="Power Consumed", main="Plot Data Power Consumed")

Berdasarkan plot data deret waktu, terlihat bahwa data cenderung stasioner. Berdasarkan pola data, pembagian data latih dan data uji ditetapkan dengan proporsi 85%:15%.

Plot Data Latih

train<-data$PowerConsumed[1:305]
train.ts<-ts(train)
plot.ts(train.ts, lty=1, xlab="Waktu", ylab="Power Consumed", main="Plot Train")

Berdasarkan plot data deret waktu pada data latih, terlihat bahwa data cenderung stasioner dalam rataan, ditandai dengan data cenderung menyebar di sekitar nilai tengahnya.

Plot Data Uji

test<-data$PowerConsumed[306:359]
test.ts<-ts(test)
plot.ts(test.ts, lty=1, xlab="Waktu", ylab="Power Consumed", main="Plot Test")

Uji Stasioneritas Data

Plot ACF

acf(train.ts)

Berdasarkan plot ACF, terlihat bahwa plot ACF data tails off.

Uji ADF

tseries::adf.test(train.ts)
## Warning in tseries::adf.test(train.ts): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  train.ts
## Dickey-Fuller = -6.6737, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary

\(H_0\) : Data tidak stasioner dalam rataan

\(H_1\) : Data stasioner dalam rataan

Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.01 yang lebih kecil dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa data stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF.

Plot Box-Cox

index <- seq(1:305)
bc = boxcox(train.ts~index, lambda = seq(-10,10,by=1))

#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] -0.1010101
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
## [1] -0.3030303 -0.1010101  0.1010101

Plot Boxcox menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar -0.1010101 dan pada selang kepercayaan 95% nilai memiliki batas bawah -0.3030303 dan batas atas 0.1010101. Selang tersebut tidak memuat nilai satu sehingga dapat dikatakan bahwa data bangkitan tidak stasioner dalam ragam.

Dengan demikian, data stasioner dalam rataan tetapi tidak stasioner dalam ragam.

Identifikasi Model

Plot ACF

acf(train.ts)

Berdasarkan plot tersebut, terlihat bahwa plot ACF cenderung tails off.

Plot PACF

pacf(train.ts)

Berdasarkan plot tersebut, terlihat bahwa plot PACF cenderung cuts off pada lag ke 1, sedangkan plot ACF dianggap tails off, maka model tentatifnya adalah ARIMA(1,0,0).

Plot EACF

eacf(train.ts)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x x x x o o x x x o o  o  o  o 
## 1 x x x x o o x o o o o  o  o  o 
## 2 x o o o o x x o o o o  o  o  o 
## 3 x o o o o o x o o o o  o  o  o 
## 4 x o x o o o x x o o o  o  o  o 
## 5 x x x o o x x x o o o  o  o  o 
## 6 x o x o o x x o o o o  o  o  o 
## 7 x x x x x o x o o x o  o  o  o

Identifikasi model menggunakan plot EACF dilakukan dengan melihat ujung segitiga pada pola segitiga nol. Dalam hal ini model tentatif yang terbentuk adalah ARIMA(0,0,4), ARIMA(1,0,4), ARIMA(2,0,1), dan ARIMA(3,0,1).

Pendugaan Parameter Model Tentatif

ARIMA(1,0,0)

model1.da=Arima(train.ts, order=c(1,0,0),method="ML")
summary(model1.da) #AIC=2472.62
## Series: train.ts 
## ARIMA(1,0,0) with non-zero mean 
## 
## Coefficients:
##          ar1     mean
##       0.8150  82.6492
## s.e.  0.0328   4.2039
## 
## sigma^2 = 191:  log likelihood = -1233.31
## AIC=2472.62   AICc=2472.7   BIC=2483.79
## 
## Training set error measures:
##                       ME     RMSE      MAE       MPE     MAPE     MASE
## Training set -0.01276346 13.77588 8.022386 -2.880305 10.17939 1.096881
##                   ACF1
## Training set 0.1081738
lmtest::coeftest(model1.da) #semua parameter signifikan
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value  Pr(>|z|)    
## ar1        0.815001   0.032791  24.855 < 2.2e-16 ***
## intercept 82.649235   4.203853  19.660 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ARIMA(0,0,4)

model2.da=Arima(train.ts, order=c(0,0,4),method="ML")
summary(model2.da) #AIC=2481.48
## Series: train.ts 
## ARIMA(0,0,4) with non-zero mean 
## 
## Coefficients:
##          ma1     ma2     ma3     ma4     mean
##       0.9121  0.6089  0.4328  0.2799  82.8491
## s.e.  0.0631  0.0899  0.0562  0.0764   2.5509
## 
## sigma^2 = 194.7:  log likelihood = -1234.74
## AIC=2481.48   AICc=2481.76   BIC=2503.8
## 
## Training set error measures:
##                       ME     RMSE      MAE       MPE     MAPE     MASE
## Training set -0.01063883 13.84018 9.028113 -3.301547 11.52937 1.234392
##                    ACF1
## Training set 0.02863148
lmtest::coeftest(model2.da) #semua parameter signifikan
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value  Pr(>|z|)    
## ma1        0.912077   0.063084 14.4581 < 2.2e-16 ***
## ma2        0.608871   0.089893  6.7733 1.259e-11 ***
## ma3        0.432768   0.056193  7.7014 1.346e-14 ***
## ma4        0.279875   0.076413  3.6627 0.0002496 ***
## intercept 82.849116   2.550918 32.4782 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ARIMA(1,0,4)

model3.da=Arima(train.ts, order=c(1,0,4),method="ML")
summary(model3.da) #AIC=2466.33
## Series: train.ts 
## ARIMA(1,0,4) with non-zero mean 
## 
## Coefficients:
##          ar1     ma1     ma2     ma3     ma4     mean
##       0.6055  0.2708  0.1467  0.2308  0.2253  82.8417
## s.e.  0.0834  0.0930  0.0687  0.0725  0.0740   3.6258
## 
## sigma^2 = 184.6:  log likelihood = -1226.16
## AIC=2466.33   AICc=2466.7   BIC=2492.37
## 
## Training set error measures:
##                       ME     RMSE      MAE       MPE     MAPE     MASE
## Training set -0.01387914 13.45126 7.958517 -2.659197 10.13714 1.088148
##                    ACF1
## Training set 0.01309702
lmtest::coeftest(model3.da) #seluruh parameter signifikan
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value  Pr(>|z|)    
## ar1        0.605452   0.083397  7.2599 3.875e-13 ***
## ma1        0.270767   0.092989  2.9118  0.003593 ** 
## ma2        0.146660   0.068691  2.1351  0.032755 *  
## ma3        0.230816   0.072490  3.1841  0.001452 ** 
## ma4        0.225322   0.074041  3.0432  0.002341 ** 
## intercept 82.841677   3.625771 22.8480 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ARIMA(2,0,1)

model4.da=Arima(train.ts, order=c(2,0,1),method="ML")
summary(model4.da) #AIC=2460.62
## Series: train.ts 
## ARIMA(2,0,1) with non-zero mean 
## 
## Coefficients:
##          ar1      ar2      ma1     mean
##       1.7916  -0.8221  -0.9630  82.5113
## s.e.  0.0390   0.0332   0.0483   1.0708
## 
## sigma^2 = 182.1:  log likelihood = -1225.31
## AIC=2460.62   AICc=2460.82   BIC=2479.23
## 
## Training set error measures:
##                     ME     RMSE      MAE       MPE     MAPE     MASE       ACF1
## Training set 0.1473735 13.40603 8.114977 -2.460455 10.22463 1.109541 0.04800084
lmtest::coeftest(model4.da) #seluruh parameter signifikan
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value  Pr(>|z|)    
## ar1        1.791631   0.038950  45.998 < 2.2e-16 ***
## ar2       -0.822111   0.033241 -24.732 < 2.2e-16 ***
## ma1       -0.963020   0.048348 -19.919 < 2.2e-16 ***
## intercept 82.511350   1.070784  77.057 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ARIMA(3,0,1)

model5.da=Arima(train.ts, order=c(3,0,1),method="ML")
summary(model5.da) #AIC=2469.51
## Series: train.ts 
## ARIMA(3,0,1) with non-zero mean 
## 
## Coefficients:
##          ar1     ar2      ar3     ma1     mean
##       0.0448  0.7217  -0.1677  0.8800  82.7347
## s.e.  0.0967  0.0706   0.0567  0.0818   3.6058
## 
## sigma^2 = 187.2:  log likelihood = -1228.76
## AIC=2469.51   AICc=2469.79   BIC=2491.83
## 
## Training set error measures:
##                        ME     RMSE      MAE       MPE     MAPE     MASE
## Training set -0.006631013 13.56894 8.112547 -2.785098 10.35242 1.109209
##                      ACF1
## Training set -0.003671171
lmtest::coeftest(model5.da) #terdapat parameter tidak signifikan
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value  Pr(>|z|)    
## ar1        0.044754   0.096660  0.4630  0.643364    
## ar2        0.721663   0.070613 10.2200 < 2.2e-16 ***
## ar3       -0.167705   0.056725 -2.9564  0.003112 ** 
## ma1        0.879977   0.081784 10.7598 < 2.2e-16 ***
## intercept 82.734658   3.605802 22.9449 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan pendugaan parameter di atas, nilai AIC terkecil (2460.62) dimiliki oleh model ARIMA(2,0,1) dan parameter model ARIMA(2,0,1) juga seluruhnya signifikan sehingga model yang dipilih adalah model ARIMA(2,0,1).

Analisis Sisaan

Model terbaik hasil identifikasi kemudian dicek asumsi sisaannya. Sisaan model ARIMA harus memenuhi asumsi normalitas, kebebasan sisaan, dan kehomogenan ragam. Diagnostik model dilakukan secara eksplorasi dan uji formal.

Eksplorasi Sisaan

#Eksplorasi 
sisaan.da <- model4.da$residuals 
par(mfrow=c(2,2)) 
qqnorm(sisaan.da) 
qqline(sisaan.da, col = "blue", lwd = 2) 
plot(c(1:length(sisaan.da)),sisaan.da) 
acf(sisaan.da) 
pacf(sisaan.da) 

par(mfrow = c(1,1))

Berdasarkan plot kuantil-kuantil normal, secara eksplorasi ditunjukkan sisaan tidak menyebar normal ditandai dengan titik titik yang cenderung tidak mengikuti garis \(45^{\circ}\). Kemudian dapat dilihat juga lebar pita sisaan yang cenderung sama menandakan bahwa sisaan memiliki ragam yang homogen. Plot ACF dan PACF sisaan ARIMA(2,0,1) juga tidak signifikan pada beberapa lag awal yang menandakan saling bebas. Kondisi ini akan diuji lebih lanjut dengan uji formal.

Uji Formal

#1) Sisaan Menyebar Normal 
ks.test(sisaan.da,"pnorm")  #tak tolak H0 > sisaan menyebar normal
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  sisaan.da
## D = 0.41295, p-value < 2.2e-16
## alternative hypothesis: two-sided

Selain dengan eksplorasi, asumsi tersebut dapat diuji menggunakan uji formal. Pada tahapan ini uji formal yang digunakan untuk normalitas adalah uji Kolmogorov-Smirnov (KS). Hipotesis pada uji KS adalah sebagai berikut.

\(H_0\) : Sisaan menyebar normal

\(H_1\) : Sisaan tidak menyebar normal

Berdasarkan uji KS tersebut, didapat p-value < 2.2e-16 yang kurang dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa sisaan tidak menyebar normal. Hal ini sesuai dengan hasil eksplorasi menggunakan plot kuantil-kuantil normal.

#2) Sisaan saling bebas/tidak ada autokorelasi 
Box.test(sisaan.da, type = "Ljung")  #tak tolak H0 > sisaan saling bebas
## 
##  Box-Ljung test
## 
## data:  sisaan.da
## X-squared = 0.70968, df = 1, p-value = 0.3996

Selanjutnya akan dilakukan uji formal untuk kebebasan sisaan menggunakan uji Ljung-Box. Hipotesis yang digunakan adalah sebagai berikut.

\(H_0\) : Sisaan saling bebas

\(H_1\) : Sisaan tidak tidak saling bebas

Berdasarkan uji Ljung-Box tersebut, didapat p-value sebesar 0.3996 yang lebih besar dari taraf nyata 5% sehingga tak tolak \(H_0\) dan menandakan bahwa sisaan saling bebas.

#3) Sisaan homogen 
Box.test((sisaan.da)^2, type = "Ljung")  #tak tolak H0 > sisaan homogen
## 
##  Box-Ljung test
## 
## data:  (sisaan.da)^2
## X-squared = 0.92317, df = 1, p-value = 0.3366

Hipotesis yang digunakan untuk uji kehomogenan ragam adalah sebagai berikut.

\(H_0\) : Ragam sisaan homogen

\(H_1\) : Ragam sisaan tidak homogen

Berdasarkan uji Ljung-Box terhadap sisaan kuadrat tersebut, didapat p-value sebesar 0.3366 yang lebih dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa ragam sisaan homogen.

#4) Nilai tengah sisaan sama dengan nol 
t.test(sisaan.da, mu = 0, conf.level = 0.95)  #tak tolak h0 > nilai tengah sisaan sama dengan 0
## 
##  One Sample t-test
## 
## data:  sisaan.da
## t = 0.19168, df = 304, p-value = 0.8481
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -1.365552  1.660299
## sample estimates:
## mean of x 
## 0.1473735

Terakhir, dengan uji-t, akan dicek apakah nilai tengah sisaan sama dengan nol. Hipotesis yang diujikan sebagai berikut.

\(H_0\) : nilai tengah sisaan sama dengan 0

\(H_1\) : nilai tengah sisaan tidak sama dengan 0

Berdasarkan uji-ttersebut, didapat p-value sebesar 0.8481 yang lebih besar dari taraf nyata 5% sehingga tak tolak \(H_0\) dan menandakan bahwa nilai tengah sisaan sama dengan nol.

Overfitting

Tahapan selanjutnya adalah overfitting dilakukan dengan menaikkan orde AR(p) dan MA(q) dari model ARIMA(2,0,1) untuk melihat apakah terdapat model lain yang lebih baik dari model saat ini. Kandidat model overfitting adalah ARIMA(3,0,1) dan ARIMA(2,0,2).

# ARIMA(3,0,1)
model6=Arima(train.ts, order=c(3,0,1),method="ML")
summary(model6) #AIC=2469.51
## Series: train.ts 
## ARIMA(3,0,1) with non-zero mean 
## 
## Coefficients:
##          ar1     ar2      ar3     ma1     mean
##       0.0448  0.7217  -0.1677  0.8800  82.7347
## s.e.  0.0967  0.0706   0.0567  0.0818   3.6058
## 
## sigma^2 = 187.2:  log likelihood = -1228.76
## AIC=2469.51   AICc=2469.79   BIC=2491.83
## 
## Training set error measures:
##                        ME     RMSE      MAE       MPE     MAPE     MASE
## Training set -0.006631013 13.56894 8.112547 -2.785098 10.35242 1.109209
##                      ACF1
## Training set -0.003671171
lmtest::coeftest(model6) #ar1 tidak signifikan
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value  Pr(>|z|)    
## ar1        0.044754   0.096660  0.4630  0.643364    
## ar2        0.721663   0.070613 10.2200 < 2.2e-16 ***
## ar3       -0.167705   0.056725 -2.9564  0.003112 ** 
## ma1        0.879977   0.081784 10.7598 < 2.2e-16 ***
## intercept 82.734658   3.605802 22.9449 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# ARIMA(2,0,2)
model7=Arima(train.ts, order=c(2,0,2),method="ML")
summary(model7) #AIC=2464.68
## Series: train.ts 
## ARIMA(2,0,2) with non-zero mean 
## 
## Coefficients:
##          ar1      ar2      ma1     ma2     mean
##       1.6339  -0.7220  -0.7529  0.0398  82.8842
## s.e.  0.1712   0.1161   0.1703  0.1265   2.5118
## 
## sigma^2 = 184.2:  log likelihood = -1226.34
## AIC=2464.68   AICc=2464.97   BIC=2487.01
## 
## Training set error measures:
##                       ME     RMSE      MAE       MPE     MAPE     MASE
## Training set -0.01022206 13.46139 8.289967 -2.728177 10.59055 1.133467
##                     ACF1
## Training set 0.004727761
lmtest::coeftest(model7) #ma2 tidak signifikan
## 
## z test of coefficients:
## 
##            Estimate Std. Error z value  Pr(>|z|)    
## ar1        1.633869   0.171238  9.5415 < 2.2e-16 ***
## ar2       -0.721968   0.116100 -6.2185 5.019e-10 ***
## ma1       -0.752931   0.170302 -4.4211 9.818e-06 ***
## ma2        0.039799   0.126459  0.3147     0.753    
## intercept 82.884177   2.511829 32.9975 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan kedua model hasil overfitting di atas, model ARIMA(3,0,1) dan ARIMA(2,0,2) memiliki AIC yang lebih besar dibandingkan dengan model ARIMA(2,0,1) dan parameter kedua model ARIMA(3,0,1) dan ARIMA(2,0,2) tidak seluruhnya signifikan. Oleh karena itu, model ARIMA(2,0,1) akan tetap digunakan untuk melakukan peramalan.

Peramalan

Peramalan dilakukan menggunakan fungsi forecast() . Contoh peramalan berikut ini dilakukan untuk 54 hari ke depan.

#---FORECAST---#
ramalan.da <- forecast::forecast(model4.da, h = 54) 
ramalan.da
##     Point Forecast    Lo 80     Hi 80    Lo 95     Hi 95
## 306       65.41258 48.11828  82.70687 38.96323  91.86192
## 307       67.91716 45.45723  90.37708 33.56767 102.26665
## 308       70.42104 45.20789  95.63420 31.86085 108.98123
## 309       72.84803 46.16134  99.53471 32.03427 113.66179
## 310       75.13782 47.72921 102.54644 33.21996 117.05569
## 311       77.24504 49.54507 104.94500 34.88160 119.60848
## 312       79.13792 51.36284 106.91301 36.65959 121.61625
## 313       80.79691 53.01945 108.57437 38.31495 123.27887
## 314       82.21303 54.41658 110.00949 39.70202 124.72404
## 315       83.38634 55.50768 111.26500 40.74960 126.02308
## 316       84.32426 56.28589 112.36263 41.44328 127.20524
## 317       85.04007 56.77215 113.30800 41.80802 128.27213
## 318       85.55148 57.00412 114.09884 41.89206 129.21090
## 319       85.87924 57.02703 114.73146 41.75359 130.00490
## 320       86.04605 56.88701 115.20509 41.45115 130.64095
## 321       86.07544 56.62682 115.52407 41.03765 131.11323
## 322       85.99097 56.28356 115.69838 40.55741 131.42454
## 323       85.81547 55.88794 115.74300 40.04526 131.58568
## 324       85.57047 55.46432 115.67663 39.52709 131.61386
## 325       85.27582 55.03143 115.52021 39.02102 131.53062
## 326       84.94932 54.60319 115.29544 38.53893 131.35970
## 327       84.60658 54.18970 115.02347 38.08797 131.12520
## 328       84.26096 53.79804 114.72388 37.67194 130.84997
## 329       83.92348 53.43307 114.41390 37.29242 130.55455
## 330       83.60300 53.09800 114.10800 36.94963 130.25637
## 331       83.30626 52.79485 113.81767 36.64308 129.96943
## 332       83.03807 52.52471 113.55143 36.37191 129.70423
## 333       82.80153 52.28799 113.31508 36.13510 129.46797
## 334       82.59823 52.08454 113.11193 35.93156 129.26490
## 335       82.42845 51.91365 112.94324 35.76009 129.09680
## 336       82.29139 51.77416 112.80862 35.61932 128.96346
## 337       82.18542 51.66447 112.70637 35.50766 128.86318
## 338       82.10823 51.58255 112.63391 35.42324 128.79323
## 339       82.05707 51.52605 112.58809 35.36390 128.75023
## 340       82.02885 51.49230 112.56540 35.32722 128.73047
## 341       82.02036 51.47845 112.56226 35.31054 128.73017
## 342       82.02834 51.48154 112.57514 35.31105 128.74563
## 343       82.04963 51.49858 112.60067 35.32584 128.77342
## 344       82.08120 51.52664 112.63576 35.35204 128.81036
## 345       82.12027 51.56294 112.67759 35.38688 128.85366
## 346       82.16431 51.60491 112.72370 35.42775 128.90087
## 347       82.21109 51.65023 112.77195 35.47229 128.94989
## 348       82.25870 51.69687 112.82053 35.51841 128.99899
## 349       82.30554 51.74311 112.86797 35.56434 129.04675
## 350       82.35033 51.78757 112.91309 35.60862 129.09203
## 351       82.39205 51.82914 112.95496 35.65011 129.13399
## 352       82.42999 51.86703 112.99296 35.68797 129.17201
## 353       82.46366 51.90069 113.02663 35.72163 129.20569
## 354       82.49280 51.92982 113.05577 35.75076 129.23483
## 355       82.51731 51.95433 113.08030 35.77526 129.25937
## 356       82.53729 51.97426 113.10031 35.79517 129.27940
## 357       82.55292 51.98982 113.11601 35.81070 129.29513
## 358       82.56450 52.00132 113.12768 35.82215 129.30684
## 359       82.57240 52.00913 113.13568 35.82990 129.31490
data.ramalan.da <- ramalan.da$mean
plot(ramalan.da)

Berdasarkan hasil plot ramalan di atas, dapat dilihat bahwa ramalan ARIMA(2,0,1) cenderung stabil hingga akhir periode. Selanjutnya, dapat dicari nilai akurasi antara hasil ramalan dengan data uji sebagai berikut.

pt_1 <- train.ts[305] #nilai akhir data latih
hasil.forc.Diff <- data.ramalan.da
hasil <- diffinv(hasil.forc.Diff, differences = 1) + pt_1
#has.1 sama hasilnta dengan: cumsum(c(pt_1,hasil.forc.Diff))
ts.plot(train.ts,hasil)

perbandingan.da<-matrix(data=c(head(test.ts, n=54), hasil[-1]),
                     nrow = 54, ncol = 2)
colnames(perbandingan.da)<-c("Aktual","Hasil Forecast")
perbandingan.da
##       Aktual Hasil Forecast
##  [1,]   65.2       128.4126
##  [2,]   62.1       196.3297
##  [3,]   63.2       266.7508
##  [4,]   59.9       339.5988
##  [5,]   62.0       414.7366
##  [6,]   63.2       491.9817
##  [7,]   60.6       571.1196
##  [8,]   60.4       651.9165
##  [9,]   58.5       734.1295
## [10,]   61.2       817.5159
## [11,]   61.4       901.8401
## [12,]   62.2       986.8802
## [13,]   61.4      1072.4317
## [14,]   64.2      1158.3109
## [15,]   59.4      1244.3570
## [16,]   57.5      1330.4324
## [17,]   66.8      1416.4234
## [18,]   67.1      1502.2389
## [19,]   66.5      1587.8093
## [20,]   67.0      1673.0851
## [21,]   68.5      1758.0345
## [22,]   64.9      1842.6410
## [23,]   61.6      1926.9020
## [24,]  136.7      2010.8255
## [25,]  139.1      2094.4285
## [26,]  135.2      2177.7347
## [27,]  136.1      2260.7728
## [28,]  134.7      2343.5743
## [29,]  130.7      2426.1726
## [30,]  117.9      2508.6010
## [31,]   69.4      2590.8924
## [32,]   67.7      2673.0778
## [33,]   71.8      2755.1861
## [34,]   73.1      2837.2431
## [35,]   72.2      2919.2720
## [36,]   72.0      3001.2923
## [37,]   73.3      3083.3207
## [38,]   68.5      3165.3703
## [39,]   69.5      3247.4515
## [40,]   68.8      3329.5718
## [41,]   66.8      3411.7361
## [42,]   66.8      3493.9472
## [43,]   62.6      3576.2059
## [44,]   61.1      3658.5114
## [45,]   62.8      3740.8617
## [46,]   62.9      3823.2538
## [47,]   65.4      3905.6838
## [48,]   64.8      3988.1475
## [49,]   66.8      4070.6402
## [50,]   63.8      4153.1576
## [51,]   62.0      4235.6948
## [52,]  128.5      4318.2478
## [53,]  126.9      4400.8123
## [54,]  134.9      4483.3847
accuracy(ts(hasil[-1]), head(test.ts, n=54))
##                 ME     RMSE      MAE       MPE     MAPE      ACF1 Theil's U
## Test set -2213.358 2560.519 2213.358 -2975.294 2975.294 0.9466921  154.7524

Nilai MAPE yang diperoleh adalah 2975.2945. Artinya akurasi antara hasil ramalan terhadap data uji sangat baik.