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.