library(forecast)
## Warning: package 'forecast' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(graphics)
library(TTR)
## Warning: package 'TTR' was built under R version 4.3.2
library(knitr)
## Warning: package 'knitr' was built under R version 4.3.2
library(TSA)
## Warning: package 'TSA' was built under R version 4.3.3
## 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

Impor Data

data <- read.csv("D:\\Campss\\Season 5\\MPDW\\srilangka_updated.csv")
colnames(data) <- c("Tanggal", "Jumlah Pengunjung")

data1 <- data[361:480,]
data1 <- cbind(Period = 361:480, data1)

Eksplorasi Data

Melihat data menggunakan fungsi View(), struktur data menggunakan fungsi str(), dan dimensi data menggunakan fungsi dim().

View(data1)
str(data1)
## 'data.frame':    120 obs. of  3 variables:
##  $ Period           : int  361 362 363 364 365 366 367 368 369 370 ...
##  $ Tanggal          : chr  "2023-12-27" "2023-12-28" "2023-12-29" "2023-12-30" ...
##  $ Jumlah Pengunjung: int  9336 8395 7478 7409 5860 5912 6204 7251 6253 6833 ...
dim(data1)
## [1] 120   3
kable(data1)
Period Tanggal Jumlah Pengunjung
361 361 2023-12-27 9336
362 362 2023-12-28 8395
363 363 2023-12-29 7478
364 364 2023-12-30 7409
365 365 2023-12-31 5860
366 366 2024-01-01 5912
367 367 2024-01-02 6204
368 368 2024-01-03 7251
369 369 2024-01-04 6253
370 370 2024-01-05 6833
371 371 2024-01-06 6834
372 372 2024-01-07 6016
373 373 2024-01-08 6521
374 374 2024-01-09 6019
375 375 2024-01-10 7027
376 376 2024-01-11 6537
377 377 2024-01-12 6982
378 378 2024-01-13 7771
379 379 2024-01-14 6661
380 380 2024-01-15 8541
381 381 2024-01-16 6262
382 382 2024-01-17 7318
383 383 2024-01-18 6504
384 384 2024-01-19 6505
385 385 2024-01-20 7336
386 386 2024-01-21 6875
387 387 2024-01-22 7009
388 388 2024-01-23 5682
389 389 2024-01-24 7218
390 390 2024-01-25 7032
391 391 2024-01-26 7466
392 392 2024-01-27 6880
393 393 2024-01-28 6125
394 394 2024-01-29 6815
395 395 2024-01-30 5298
396 396 2024-01-31 6566
397 397 2024-02-01 6862
398 398 2024-02-02 6765
399 399 2024-02-03 7785
400 400 2024-02-04 7081
401 401 2024-02-05 8282
402 402 2024-02-06 7007
403 403 2024-02-07 8579
404 404 2024-02-08 7761
405 405 2024-02-09 7716
406 406 2024-02-10 8515
407 407 2024-02-11 7858
408 408 2024-02-12 7398
409 409 2024-02-13 6846
410 410 2024-02-14 9443
411 411 2024-02-15 7432
412 412 2024-02-16 7460
413 413 2024-02-17 8083
414 414 2024-02-18 7862
415 415 2024-02-19 7587
416 416 2024-02-20 6553
417 417 2024-02-21 7289
418 418 2024-02-22 6866
419 419 2024-02-23 7230
420 420 2024-02-24 10014
421 421 2024-02-25 6744
422 422 2024-02-26 7253
423 423 2024-02-27 6213
424 424 2024-02-28 6958
425 425 2024-02-29 6908
426 426 2024-03-01 6878
427 427 2024-03-02 8085
428 428 2024-03-03 6704
429 429 2024-03-04 7124
430 430 2024-03-05 5832
431 431 2024-03-06 6254
432 432 2024-03-07 6344
433 433 2024-03-08 6721
434 434 2024-03-09 6780
435 435 2024-03-10 6393
436 436 2024-03-11 6348
437 437 2024-03-12 5680
438 438 2024-03-13 6141
439 439 2024-03-14 5920
440 440 2024-03-15 6145
441 441 2024-03-16 7068
442 442 2024-03-17 6866
443 443 2024-03-18 7873
444 444 2024-03-19 5697
445 445 2024-03-20 6831
446 446 2024-03-21 7492
447 447 2024-03-22 7268
448 448 2024-03-23 8534
449 449 2024-03-24 8073
450 450 2024-03-25 6782
451 451 2024-03-26 5834
452 452 2024-03-27 6205
453 453 2024-03-28 7621
454 454 2024-03-29 6150
455 455 2024-03-30 8129
456 456 2024-03-31 5409
457 457 2024-04-01 5363
458 458 2024-04-02 4761
459 459 2024-04-03 5551
460 460 2024-04-04 5618
461 461 2024-04-05 6174
462 462 2024-04-06 7157
463 463 2024-04-07 5173
464 464 2024-04-08 5347
465 465 2024-04-09 5394
466 466 2024-04-10 5281
467 467 2024-04-11 6582
468 468 2024-04-12 5200
469 469 2024-04-13 5256
470 470 2024-04-14 3411
471 471 2024-04-15 6263
472 472 2024-04-16 4563
473 473 2024-04-17 3658
474 474 2024-04-18 3230
475 475 2024-04-19 4418
476 476 2024-04-20 4987
477 477 2024-04-21 4279
478 478 2024-04-22 4495
479 479 2024-04-23 3977
480 480 2024-04-24 4166

Mengubah data agar terbaca sebagai data deret waktu dengan fungsi ts() .

data1.ts <- ts(data1$`Jumlah Pengunjung`)

Menampilkan ringkasan data

summary(data1.ts)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    3230    5992    6781    6621    7322   10014

Membuat plot data deret waktu

ts.plot(data1.ts, xlab="Periode", ylab="Jumlah Pengunjung", 
        main = "Time Series Plot")
points(data1.ts)

## Single Moving Average & Double Moving Average

Pembagian Data

Pembagian data latih dan data uji dilakukan dengan perbandingan 80% data latih dan 20% data uji.

#membagi data latih dan data uji
training_ma <- data1[1:96,]
testing_ma <- data1[97:120,]
train_ma.ts <- ts(training_ma$`Jumlah Pengunjung`)
test_ma.ts <- ts(testing_ma$`Jumlah Pengunjung`)


library(tseries)
## Warning: package 'tseries' was built under R version 4.3.2
library(urca)
## Warning: package 'urca' was built under R version 4.3.3
adf.test(data1$`Jumlah Pengunjung`)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  data1$`Jumlah Pengunjung`
## Dickey-Fuller = -1.8055, Lag order = 4, p-value = 0.6573
## alternative hypothesis: stationary
kpss.test(data1$`Jumlah Pengunjung`)
## Warning in kpss.test(data1$`Jumlah Pengunjung`): p-value smaller than printed
## p-value
## 
##  KPSS Test for Level Stationarity
## 
## data:  data1$`Jumlah Pengunjung`
## KPSS Level = 1.1594, Truncation lag parameter = 4, p-value = 0.01

Eksplorasi Data

Eksplorasi data dilakukan pada keseluruhan data, data latih serta data uji menggunakan plot data deret waktu.

#eksplorasi keseluruhan data
{
  plot(data1.ts, col="red",main="Plot semua data")
  points(data1.ts)
}

#eksplorasi data latih
{
  plot(train_ma.ts, col="blue",main="Plot data latih")
  points(train_ma.ts)
}

#eksplorasi data uji
{
  plot(test_ma.ts, col="blue",main="Plot data uji")
  points(test_ma.ts)
}

Eksplorasi data juga dapat dilakukan menggunakan package ggplot2 dengan terlebih dahulu memanggil library package ggplot2.

#Eksplorasi dengan GGPLOT
library(ggplot2)

ggplot() + 
  geom_line(data = data1, aes(x = Period, y = `Jumlah Pengunjung`, col = "Data Latih")) +
  geom_line(data = testing_ma, aes(x = Period, y = `Jumlah Pengunjung`, col = "Data Uji")) +
  labs(x = "Periode Waktu", y = "Jumlah Pengunjung", color = "Legend") +
  scale_colour_manual(name="Keterangan:", breaks = c("Data Latih", "Data Uji"),
                      values = c("blue", "red")) + 
  theme_bw() + theme(legend.position = "bottom",
                     plot.caption = element_text(hjust=0.5, size=12))

Single Moving Average (SMA)

Ide dasar dari Single Moving Average (SMA) adalah data suatu periode dipengaruhi oleh data periode sebelumnya. Metode pemulusan ini cocok digunakan untuk pola data stasioner atau konstan. Prinsip dasar metode pemulusan ini adalah data pemulusan pada periode ke-t merupakan rata rata dari m buah data pada periode ke-t hingga periode ke (t-m+1). Data pemulusan pada periode ke-t selanjutnya digunakan sebagai nilai peramalan pada periode ke t+1

Pemulusan menggunakan metode SMA dilakukan dengan fungsi SMA(). Dalam hal ini akan dilakukan pemulusan dengan parameter m=4.

data.sma <- SMA(train_ma.ts, n=4)
data.sma
## Time Series:
## Start = 1 
## End = 96 
## Frequency = 1 
##  [1]      NA      NA      NA 8154.50 7285.50 6664.75 6346.25 6306.75 6405.00
## [10] 6635.25 6792.75 6484.00 6551.00 6347.50 6395.75 6526.00 6641.25 7079.25
## [19] 6987.75 7488.75 7308.75 7195.50 7156.25 6647.25 6915.75 6805.00 6931.25
## [28] 6725.50 6696.00 6735.25 6849.50 7149.00 6875.75 6821.50 6279.50 6201.00
## [37] 6385.25 6372.75 6994.50 7123.25 7478.25 7538.75 7737.25 7907.25 7765.75
## [46] 8142.75 7962.50 7871.75 7654.25 7886.25 7779.75 7795.25 8104.50 7709.25
## [55] 7748.00 7521.25 7322.75 7073.75 6984.50 7849.75 7713.50 7810.25 7556.00
## [64] 6792.00 6833.00 6739.25 7207.25 7143.75 7197.75 6936.25 6478.50 6388.50
## [73] 6287.75 6524.75 6559.50 6560.50 6300.25 6140.50 6022.25 5971.50 6318.50
## [82] 6499.75 6988.00 6876.00 6816.75 6973.25 6822.00 7531.25 7841.75 7664.25
## [91] 7305.75 6723.50 6610.50 6452.50 7026.25 6827.25

Data pemulusan pada periode ke-t selanjutnya digunakan sebagai nilai peramalan pada periode ke t+1 sehingga hasil peramalan 1 periode kedepan adalah sebagai berikut.

data.ramal<-c(NA,data.sma)
data.ramal #forecast 1 periode ke depan
##  [1]      NA      NA      NA      NA 8154.50 7285.50 6664.75 6346.25 6306.75
## [10] 6405.00 6635.25 6792.75 6484.00 6551.00 6347.50 6395.75 6526.00 6641.25
## [19] 7079.25 6987.75 7488.75 7308.75 7195.50 7156.25 6647.25 6915.75 6805.00
## [28] 6931.25 6725.50 6696.00 6735.25 6849.50 7149.00 6875.75 6821.50 6279.50
## [37] 6201.00 6385.25 6372.75 6994.50 7123.25 7478.25 7538.75 7737.25 7907.25
## [46] 7765.75 8142.75 7962.50 7871.75 7654.25 7886.25 7779.75 7795.25 8104.50
## [55] 7709.25 7748.00 7521.25 7322.75 7073.75 6984.50 7849.75 7713.50 7810.25
## [64] 7556.00 6792.00 6833.00 6739.25 7207.25 7143.75 7197.75 6936.25 6478.50
## [73] 6388.50 6287.75 6524.75 6559.50 6560.50 6300.25 6140.50 6022.25 5971.50
## [82] 6318.50 6499.75 6988.00 6876.00 6816.75 6973.25 6822.00 7531.25 7841.75
## [91] 7664.25 7305.75 6723.50 6610.50 6452.50 7026.25 6827.25

Selanjutnya akan dilakukan peramalan sejumlah data uji yaitu 24 periode. Pada metode SMA, hasil peramalan 24 periode ke depan akan bernilai sama dengan hasil peramalan 1 periode kedepan. Dalam hal ini akan dilakukan pengguabungan data aktual train, data hasil pemulusan dan data hasil ramalan 24 periode kedepan.

data.gab<-cbind(aktual=c(train_ma.ts, rep(NA,24)), pemulusan=c(data.sma,rep(NA,24)),
                ramalan=c(data.ramal, rep(data.ramal[length(data.ramal)], 23)))
data.gab #forecast 24 periode ke depan
##        aktual pemulusan ramalan
##   [1,]   9336        NA      NA
##   [2,]   8395        NA      NA
##   [3,]   7478        NA      NA
##   [4,]   7409   8154.50      NA
##   [5,]   5860   7285.50 8154.50
##   [6,]   5912   6664.75 7285.50
##   [7,]   6204   6346.25 6664.75
##   [8,]   7251   6306.75 6346.25
##   [9,]   6253   6405.00 6306.75
##  [10,]   6833   6635.25 6405.00
##  [11,]   6834   6792.75 6635.25
##  [12,]   6016   6484.00 6792.75
##  [13,]   6521   6551.00 6484.00
##  [14,]   6019   6347.50 6551.00
##  [15,]   7027   6395.75 6347.50
##  [16,]   6537   6526.00 6395.75
##  [17,]   6982   6641.25 6526.00
##  [18,]   7771   7079.25 6641.25
##  [19,]   6661   6987.75 7079.25
##  [20,]   8541   7488.75 6987.75
##  [21,]   6262   7308.75 7488.75
##  [22,]   7318   7195.50 7308.75
##  [23,]   6504   7156.25 7195.50
##  [24,]   6505   6647.25 7156.25
##  [25,]   7336   6915.75 6647.25
##  [26,]   6875   6805.00 6915.75
##  [27,]   7009   6931.25 6805.00
##  [28,]   5682   6725.50 6931.25
##  [29,]   7218   6696.00 6725.50
##  [30,]   7032   6735.25 6696.00
##  [31,]   7466   6849.50 6735.25
##  [32,]   6880   7149.00 6849.50
##  [33,]   6125   6875.75 7149.00
##  [34,]   6815   6821.50 6875.75
##  [35,]   5298   6279.50 6821.50
##  [36,]   6566   6201.00 6279.50
##  [37,]   6862   6385.25 6201.00
##  [38,]   6765   6372.75 6385.25
##  [39,]   7785   6994.50 6372.75
##  [40,]   7081   7123.25 6994.50
##  [41,]   8282   7478.25 7123.25
##  [42,]   7007   7538.75 7478.25
##  [43,]   8579   7737.25 7538.75
##  [44,]   7761   7907.25 7737.25
##  [45,]   7716   7765.75 7907.25
##  [46,]   8515   8142.75 7765.75
##  [47,]   7858   7962.50 8142.75
##  [48,]   7398   7871.75 7962.50
##  [49,]   6846   7654.25 7871.75
##  [50,]   9443   7886.25 7654.25
##  [51,]   7432   7779.75 7886.25
##  [52,]   7460   7795.25 7779.75
##  [53,]   8083   8104.50 7795.25
##  [54,]   7862   7709.25 8104.50
##  [55,]   7587   7748.00 7709.25
##  [56,]   6553   7521.25 7748.00
##  [57,]   7289   7322.75 7521.25
##  [58,]   6866   7073.75 7322.75
##  [59,]   7230   6984.50 7073.75
##  [60,]  10014   7849.75 6984.50
##  [61,]   6744   7713.50 7849.75
##  [62,]   7253   7810.25 7713.50
##  [63,]   6213   7556.00 7810.25
##  [64,]   6958   6792.00 7556.00
##  [65,]   6908   6833.00 6792.00
##  [66,]   6878   6739.25 6833.00
##  [67,]   8085   7207.25 6739.25
##  [68,]   6704   7143.75 7207.25
##  [69,]   7124   7197.75 7143.75
##  [70,]   5832   6936.25 7197.75
##  [71,]   6254   6478.50 6936.25
##  [72,]   6344   6388.50 6478.50
##  [73,]   6721   6287.75 6388.50
##  [74,]   6780   6524.75 6287.75
##  [75,]   6393   6559.50 6524.75
##  [76,]   6348   6560.50 6559.50
##  [77,]   5680   6300.25 6560.50
##  [78,]   6141   6140.50 6300.25
##  [79,]   5920   6022.25 6140.50
##  [80,]   6145   5971.50 6022.25
##  [81,]   7068   6318.50 5971.50
##  [82,]   6866   6499.75 6318.50
##  [83,]   7873   6988.00 6499.75
##  [84,]   5697   6876.00 6988.00
##  [85,]   6831   6816.75 6876.00
##  [86,]   7492   6973.25 6816.75
##  [87,]   7268   6822.00 6973.25
##  [88,]   8534   7531.25 6822.00
##  [89,]   8073   7841.75 7531.25
##  [90,]   6782   7664.25 7841.75
##  [91,]   5834   7305.75 7664.25
##  [92,]   6205   6723.50 7305.75
##  [93,]   7621   6610.50 6723.50
##  [94,]   6150   6452.50 6610.50
##  [95,]   8129   7026.25 6452.50
##  [96,]   5409   6827.25 7026.25
##  [97,]     NA        NA 6827.25
##  [98,]     NA        NA 6827.25
##  [99,]     NA        NA 6827.25
## [100,]     NA        NA 6827.25
## [101,]     NA        NA 6827.25
## [102,]     NA        NA 6827.25
## [103,]     NA        NA 6827.25
## [104,]     NA        NA 6827.25
## [105,]     NA        NA 6827.25
## [106,]     NA        NA 6827.25
## [107,]     NA        NA 6827.25
## [108,]     NA        NA 6827.25
## [109,]     NA        NA 6827.25
## [110,]     NA        NA 6827.25
## [111,]     NA        NA 6827.25
## [112,]     NA        NA 6827.25
## [113,]     NA        NA 6827.25
## [114,]     NA        NA 6827.25
## [115,]     NA        NA 6827.25
## [116,]     NA        NA 6827.25
## [117,]     NA        NA 6827.25
## [118,]     NA        NA 6827.25
## [119,]     NA        NA 6827.25
## [120,]     NA        NA 6827.25

Adapun plot data deret waktu dari hasil peramalan yang dilakukan adalah sebagai berikut.

ts.plot(data1.ts, xlab="Time Period ", ylab="Visitor", main= "SMA N=4 Visitor Data")
points(data1.ts)
lines(data.gab[,2],col="green",lwd=2)
lines(data.gab[,3],col="red",lwd=2)
legend("topleft",c("data aktual","data pemulusan","data peramalan"), lty=8, col=c("black","green","red"), cex=0.5)

Selanjutnya perhitungan akurasi dilakukan dengan ukuran akurasi Sum Squares Error (SSE), Mean Square Error (MSE) dan Mean Absolute Percentage Error (MAPE). Perhitungan akurasi dilakukan baik pada data latih maupun pada data uji.

#Menghitung nilai keakuratan data latih
error_train.sma = train_ma.ts-data.ramal[1:length(train_ma.ts)]
SSE_train.sma = sum(error_train.sma[5:length(train_ma.ts)]^2)
MSE_train.sma = mean(error_train.sma[5:length(train_ma.ts)]^2)
MAPE_train.sma = mean(abs((error_train.sma[5:length(train_ma.ts)]/train_ma.ts[5:length(train_ma.ts)])*100))

akurasi_train.sma <- matrix(c(SSE_train.sma, MSE_train.sma, MAPE_train.sma))
row.names(akurasi_train.sma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_train.sma) <- c("Akurasi m = 4")
akurasi_train.sma
##      Akurasi m = 4
## SSE   7.552220e+07
## MSE   8.208935e+05
## MAPE  1.003752e+01

Dalam hal ini nilai MAPE data latih pada metode pemulusan SMA kurang dari 20%, nilai ini dapat dikategorikan sebagai nilai akurasi yang baik. Selanjutnya dilakukan perhitungan nilai MAPE data uji pada metde pemulusan SMA.

#Menghitung nilai keakuratan data uji
error_test.sma = test_ma.ts-data.gab[97:120,3]
SSE_test.sma = sum(error_test.sma^2)
MSE_test.sma = mean(error_test.sma^2)
MAPE_test.sma = mean(abs((error_test.sma/test_ma.ts*100)))

akurasi_test.sma <- matrix(c(SSE_test.sma, MSE_test.sma, MAPE_test.sma))
row.names(akurasi_test.sma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_test.sma) <- c("Akurasi m = 4")
akurasi_test.sma
##      Akurasi m = 4
## SSE   1.010202e+08
## MSE   4.209173e+06
## MAPE  4.191862e+01

Perhitungan akurasi menggunakan data latih menghasilkan nilai MAPE yang lebih dari 20% sehingga nilai akurasi ini tidak dapat dikategorikan sebagai baik.

Double Moving Average (DMA)

Metode pemulusan Double Moving Average (DMA) pada dasarnya mirip dengan SMA. Namun demikian, metode ini lebih cocok digunakan untuk pola data trend. Proses pemulusan dengan rata rata dalam metode ini dilakukan sebanyak 2 kali.

dma <- SMA(data.sma, n = 4)
At <- 2*data.sma - dma
Bt <- 2/(4-1)*(data.sma - dma)
data.dma<- At+Bt
data.ramal2<- c(NA, data.dma)

t = 1:24
f = c()

for (i in t) {
  f[i] = At[length(At)] + Bt[length(Bt)]*(i)
}

data.gab2 <- cbind(aktual = c(train_ma.ts,rep(NA,24)), pemulusan1 = c(data.sma,rep(NA,24)),pemulusan2 = c(data.dma, rep(NA,24)),At = c(At, rep(NA,24)), Bt = c(Bt,rep(NA,24)),ramalan = c(data.ramal2, f[-1]))
data.gab2
##        aktual pemulusan1 pemulusan2       At         Bt  ramalan
##   [1,]   9336         NA         NA       NA         NA       NA
##   [2,]   8395         NA         NA       NA         NA       NA
##   [3,]   7478         NA         NA       NA         NA       NA
##   [4,]   7409    8154.50         NA       NA         NA       NA
##   [5,]   5860    7285.50         NA       NA         NA       NA
##   [6,]   5912    6664.75         NA       NA         NA       NA
##   [7,]   6204    6346.25   5068.750 5579.750 -511.00000       NA
##   [8,]   7251    6306.75   5733.312 5962.688 -229.37500 5068.750
##   [9,]   6253    6405.00   6362.188 6379.312  -17.12500 5733.312
##  [10,]   6833    6635.25   6988.479 6847.188  141.29167 6362.188
##  [11,]   6834    6792.75   7222.438 7050.562  171.87500 6988.479
##  [12,]   6016    6484.00   6325.250 6388.750  -63.50000 7222.438
##  [13,]   6521    6551.00   6443.083 6486.250  -43.16667 6325.250
##  [14,]   6019    6347.50   6020.312 6151.188 -130.87500 6443.083
##  [15,]   7027    6395.75   6314.396 6346.938  -32.54167 6020.312
##  [16,]   6537    6526.00   6644.229 6596.938   47.29167 6314.396
##  [17,]   6982    6641.25   6913.958 6804.875  109.08333 6644.229
##  [18,]   7771    7079.25   7777.062 7497.938  279.12500 6913.958
##  [19,]   6661    6987.75   7286.396 7166.938  119.45833 7777.062
##  [20,]   8541    7488.75   8221.250 7928.250  293.00000 7286.396
##  [21,]   6262    7308.75   7463.125 7401.375   61.75000 8221.250
##  [22,]   7318    7195.50   7112.688 7145.812  -33.12500 7463.125
##  [23,]   6504    7156.25   6937.812 7025.188  -87.37500 7112.688
##  [24,]   6505    6647.25   5931.104 6217.562 -286.45833 6937.812
##  [25,]   7336    6915.75   6810.854 6852.812  -41.95833 5931.104
##  [26,]   6875    6805.00   6678.229 6728.938  -50.70833 6810.854
##  [27,]   7009    6931.25   7108.646 7037.688   70.95833 6678.229
##  [28,]   5682    6725.50   6527.375 6606.625  -79.25000 7108.646
##  [29,]   7218    6696.00   6540.271 6602.562  -62.29167 6527.375
##  [30,]   7032    6735.25   6674.000 6698.500  -24.50000 6540.271
##  [31,]   7466    6849.50   7012.729 6947.438   65.29167 6674.000
##  [32,]   6880    7149.00   7634.938 7440.562  194.37500 7012.729
##  [33,]   6125    6875.75   6831.375 6849.125  -17.75000 7634.938
##  [34,]   6815    6821.50   6650.771 6719.062  -68.29167 6831.375
##  [35,]   5298    6279.50   5442.938 5777.562 -334.62500 6650.771
##  [36,]   6566    6201.00   5628.604 5857.562 -228.95833 5442.938
##  [37,]   6862    6385.25   6324.312 6348.688  -24.37500 5628.604
##  [38,]   6765    6372.75   6477.958 6435.875   42.08333 6324.312
##  [39,]   7785    6994.50   7838.042 7500.625  337.41667 6477.958
##  [40,]   7081    7123.25   7797.104 7527.562  269.54167 7838.042
##  [41,]   8282    7478.25   8288.354 7964.312  324.04167 7797.104
##  [42,]   7007    7538.75   7963.854 7793.812  170.04167 8288.354
##  [43,]   8579    7737.25   8183.708 8005.125  178.58333 7963.854
##  [44,]   7761    7907.25   8310.375 8149.125  161.25000 8183.708
##  [45,]   7716    7765.75   7813.250 7794.250   19.00000 8310.375
##  [46,]   8515    8142.75   8566.917 8397.250  169.66667 7813.250
##  [47,]   7858    7962.50   7992.396 7980.438   11.95833 8566.917
##  [48,]   7398    7871.75   7765.188 7807.812  -42.62500 7992.396
##  [49,]   6846    7654.25   7231.646 7400.688 -169.04167 7765.188
##  [50,]   9443    7886.25   7957.188 7928.812   28.37500 7231.646
##  [51,]   7432    7779.75   7749.333 7761.500  -12.16667 7957.188
##  [52,]   7460    7795.25   7822.542 7811.625   10.91667 7749.333
##  [53,]   8083    8104.50   8459.604 8317.562  142.04167 7822.542
##  [54,]   7862    7709.25   7479.354 7571.312  -91.95833 8459.604
##  [55,]   7587    7748.00   7595.917 7656.750  -60.83333 7479.354
##  [56,]   6553    7521.25   7105.417 7271.750 -166.33333 7595.917
##  [57,]   7289    7322.75   6901.812 7070.188 -168.37500 7105.417
##  [58,]   6866    7073.75   6502.604 6731.062 -228.45833 6901.812
##  [59,]   7230    6984.50   6582.729 6743.438 -160.70833 6502.604
##  [60,]  10014    7849.75   8753.188 8391.812  361.37500 6582.729
##  [61,]   6744    7713.50   8227.042 8021.625  205.41667 8753.188
##  [62,]   7253    7810.25   8178.167 8031.000  147.16667 8227.042
##  [63,]   6213    7556.00   7262.042 7379.625 -117.58333 8178.167
##  [64,]   6958    6792.00   5665.438 6116.062 -450.62500 7262.042
##  [65,]   6908    6833.00   6141.646 6418.188 -276.54167 5665.438
##  [66,]   6878    6739.25   6337.896 6498.438 -160.54167 6141.646
##  [67,]   8085    7207.25   7731.208 7521.625  209.58333 6337.896
##  [68,]   6704    7143.75   7415.312 7306.688  108.62500 7731.208
##  [69,]   7124    7197.75   7407.333 7323.500   83.83333 7415.312
##  [70,]   5832    6936.25   6627.917 6751.250 -123.33333 7407.333
##  [71,]   6254    6478.50   5710.896 6017.938 -307.04167 6627.917
##  [72,]   6344    6388.50   5785.583 6026.750 -241.16667 5710.896
##  [73,]   6721    6287.75   5896.083 6052.750 -156.66667 5785.583
##  [74,]   6780    6524.75   6699.542 6629.625   69.91667 5896.083
##  [75,]   6393    6559.50   6758.458 6678.875   79.58333 6699.542
##  [76,]   6348    6560.50   6689.458 6637.875   51.58333 6758.458
##  [77,]   5680    6300.25   5990.250 6114.250 -124.00000 6689.458
##  [78,]   6141    6140.50   5724.354 5890.812 -166.45833 5990.250
##  [79,]   5920    6022.25   5632.875 5788.625 -155.75000 5724.354
##  [80,]   6145    5971.50   5742.958 5834.375  -91.41667 5632.875
##  [81,]   7068    6318.50   6660.688 6523.812  136.87500 5742.958
##  [82,]   6866    6499.75   6994.333 6796.500  197.83333 6660.688
##  [83,]   7873    6988.00   7893.938 7531.562  362.37500 6994.333
##  [84,]   5697    6876.00   7218.396 7081.438  136.95833 7893.938
##  [85,]   6831    6816.75   6852.792 6838.375   14.41667 7218.396
##  [86,]   7492    6973.25   7072.833 7033.000   39.83333 6852.792
##  [87,]   7268    6822.00   6738.667 6772.000  -33.33333 7072.833
##  [88,]   8534    7531.25   8356.979 8026.688  330.29167 6738.667
##  [89,]   8073    7841.75   8757.896 8391.438  366.45833 8356.979
##  [90,]   6782    7664.25   7996.646 7863.688  132.95833 8757.896
##  [91,]   5834    7305.75   6839.083 7025.750 -186.66667 7996.646
##  [92,]   6205    6723.50   5622.979 6063.188 -440.20833 6839.083
##  [93,]   7621    6610.50   5834.667 6145.000 -310.33333 5622.979
##  [94,]   6150    6452.50   5918.229 6131.938 -213.70833 5834.667
##  [95,]   8129    7026.25   7564.688 7349.312  215.37500 5918.229
##  [96,]   5409    6827.25   6990.792 6925.375   65.41667 7564.688
##  [97,]     NA         NA         NA       NA         NA 6990.792
##  [98,]     NA         NA         NA       NA         NA 7056.208
##  [99,]     NA         NA         NA       NA         NA 7121.625
## [100,]     NA         NA         NA       NA         NA 7187.042
## [101,]     NA         NA         NA       NA         NA 7252.458
## [102,]     NA         NA         NA       NA         NA 7317.875
## [103,]     NA         NA         NA       NA         NA 7383.292
## [104,]     NA         NA         NA       NA         NA 7448.708
## [105,]     NA         NA         NA       NA         NA 7514.125
## [106,]     NA         NA         NA       NA         NA 7579.542
## [107,]     NA         NA         NA       NA         NA 7644.958
## [108,]     NA         NA         NA       NA         NA 7710.375
## [109,]     NA         NA         NA       NA         NA 7775.792
## [110,]     NA         NA         NA       NA         NA 7841.208
## [111,]     NA         NA         NA       NA         NA 7906.625
## [112,]     NA         NA         NA       NA         NA 7972.042
## [113,]     NA         NA         NA       NA         NA 8037.458
## [114,]     NA         NA         NA       NA         NA 8102.875
## [115,]     NA         NA         NA       NA         NA 8168.292
## [116,]     NA         NA         NA       NA         NA 8233.708
## [117,]     NA         NA         NA       NA         NA 8299.125
## [118,]     NA         NA         NA       NA         NA 8364.542
## [119,]     NA         NA         NA       NA         NA 8429.958
## [120,]     NA         NA         NA       NA         NA 8495.375

Hasil pemulusan menggunakan metode DMA divisualisasikan sebagai berikut

ts.plot(data1.ts, xlab="Time Period ", ylab="Sales", main= "DMA N=4 Data Sales")
points(data1.ts)
lines(data.gab2[,3],col="green",lwd=2)
lines(data.gab2[,6],col="red",lwd=2)
legend("topleft",c("data aktual","data pemulusan","data peramalan"), lty=8, col=c("black","green","red"), cex=0.8)

Selanjutnya perhitungan akurasi dilakukan baik pada data latih maupun data uji. Perhitungan akurasi dilakukan dengan ukuran akurasi SSE, MSE dan MAPE.

#Menghitung nilai keakuratan data latih
error_train.dma = train_ma.ts-data.ramal2[1:length(train_ma.ts)]
SSE_train.dma = sum(error_train.dma[8:length(train_ma.ts)]^2)
MSE_train.dma = mean(error_train.dma[8:length(train_ma.ts)]^2)
MAPE_train.dma = mean(abs((error_train.dma[8:length(train_ma.ts)]/train_ma.ts[8:length(train_ma.ts)])*100))

akurasi_train.dma <- matrix(c(SSE_train.dma, MSE_train.dma, MAPE_train.dma))
row.names(akurasi_train.dma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_train.dma) <- c("Akurasi m = 4")
akurasi_train.dma
##      Akurasi m = 4
## SSE   1.104552e+08
## MSE   1.241070e+06
## MAPE  1.273341e+01

Perhitungan akurasi pada data latih menggunakan nilai MAPE menghasilkan nilai MAPE yang kurang dari 20% sehingga dikategorikan baik. Selanjutnya, perhitungan nilai akurasi dilakukan pada data uji.

#Menghitung nilai keakuratan data uji
error_test.dma = test_ma.ts-data.gab2[97:120,6]
SSE_test.dma = sum(error_test.dma^2)
MSE_test.dma = mean(error_test.dma^2)
MAPE_test.dma = mean(abs((error_test.dma/test_ma.ts*100)))

akurasi_test.dma <- matrix(c(SSE_test.dma, MSE_test.dma, MAPE_test.dma))
row.names(akurasi_test.dma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_test.dma) <- c("Akurasi m = 4")
akurasi_test.dma
##      Akurasi m = 4
## SSE   2.180847e+08
## MSE   9.086861e+06
## MAPE  6.162772e+01

Perhitungan akurasi menggunakan data latih menghasilkan nilai MAPE yang lebih dari 20% sehingga nilai akurasi ini tidak dapat dikategorikan sebagai baik.

Pada data latih dan data uji, metode SMA lebih baik dibandingkan dengan metode DMA.

Single Exponential Smoothing & Double Exponential Smoothing

Metode Exponential Smoothing adalah metode pemulusan dengan melakukan pembobotan menurun secara eksponensial. Nilai yang lebih baru diberi bobot yang lebih besar dari nilai terdahulu. Terdapat satu atau lebih parameter pemulusan yang ditentukan secara eksplisit, dan hasil pemilihan parameter tersebut akan menentukan bobot yang akan diberikan pada nilai pengamatan. Ada dua macam model, yaitu model tunggal dan ganda.

Pembagian Data

Pembagian data latih dan data uji dilakukan dengan perbandingan 80% data latih dan 20% data uji.

#membagi training dan testing
training <- training_ma
testing <- testing_ma
train.ts <- ts(training$`Jumlah Pengunjung`)
test.ts <- ts(testing$`Jumlah Pengunjung`)

Eksplorasi

Eksplorasi dilakukan dengan membuat plot data deret waktu untuk keseluruhan data, data latih, dan data uji.

#eksplorasi data
{
  plot(data1.ts, col="black",main="Plot semua data")
  points(data1.ts)
}

{
  plot(train.ts, col="red",main="Plot data latih")
  points(train.ts)
}

{
  plot(test.ts, col="blue",main="Plot data uji")
  points(test.ts)
}

Eksplorasi data juga dapat dilakukan menggunakan package ggplot2 .

#Eksplorasi dengan GGPLOT
library(ggplot2)
ggplot() + 
  geom_line(data = data1, aes(x = Period, y = `Jumlah Pengunjung`, col = "Data Latih")) +
  geom_line(data = testing, aes(x = Period, y = `Jumlah Pengunjung`, col = "Data Uji")) +
  labs(x = "Periode Waktu", y = "Membaca", color = "Legend") +
  scale_colour_manual(name="Keterangan:", breaks = c("Data Latih", "Data Uji"),
                      values = c("blue", "red")) + 
  theme_bw() + theme(legend.position = "bottom",
                     plot.caption = element_text(hjust=0.5, size=12))

SES

Single Exponential Smoothing merupakan metode pemulusan yang tepat digunakan untuk data dengan pola stasioner atau konstan.

Nilai pemulusan pada periode ke-t didapat dari persamaan:

\[ \tilde{y}_T=\lambda y_t+(1-\lambda)\tilde{y}_{T-1} \]

Nilai parameter \(\lambda\) adalah nilai antara 0 dan 1.

Nilai pemulusan periode ke-t bertindak sebagai nilai ramalan pada periode ke-\((T+\tau)\).

\[ \tilde{y}_{T+\tau}(T)=\tilde{y}_T \]

Pemulusan dengan metode SES dapat dilakukan dengan dua fungsi dari packages berbeda, yaitu (1) fungsi ses() dari packages forecast dan (2) fungsi HoltWinters dari packages stats .

#Cara 1 (fungsi ses)
ses.1 <- ses(train.ts, h = 10, alpha = 0.2)
plot(ses.1)

ses.1
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  97       6745.254 5632.862 7857.646 5043.997 8446.510
##  98       6745.254 5610.832 7879.675 5010.305 8480.202
##  99       6745.254 5589.222 7901.285 4977.256 8513.251
## 100       6745.254 5568.009 7922.499 4944.813 8545.694
## 101       6745.254 5547.171 7943.336 4912.944 8577.563
## 102       6745.254 5526.689 7963.818 4881.620 8608.887
## 103       6745.254 5506.546 7983.961 4850.814 8639.693
## 104       6745.254 5486.726 8003.781 4820.501 8670.006
## 105       6745.254 5467.213 8023.295 4790.659 8699.849
## 106       6745.254 5447.993 8042.514 4761.264 8729.243
ses.2<- ses(train.ts, h = 10, alpha = 0.7)
plot(ses.2)

ses.2
##     Point Forecast    Lo 80    Hi 80    Lo 95     Hi 95
##  97       6075.214 4860.737 7289.691 4217.832  7932.597
##  98       6075.214 4592.756 7557.673 3807.990  8342.439
##  99       6075.214 4366.294 7784.135 3461.646  8688.783
## 100       6075.214 4166.514 7983.915 3156.109  8994.320
## 101       6075.214 3985.749 8164.680 2879.653  9270.776
## 102       6075.214 3819.424 8331.005 2625.280  9525.149
## 103       6075.214 3664.546 8485.882 2388.416  9762.013
## 104       6075.214 3519.036 8631.393 2165.877  9984.552
## 105       6075.214 3381.374 8769.055 1955.341 10195.088
## 106       6075.214 3250.413 8900.016 1755.053 10395.375

Untuk mendapatkan gambar hasil pemulusan pada data latih dengan fungsi ses() , perlu digunakan fungsi autoplot() dan autolayer() dari library packages ggplot2 .

autoplot(ses.1) +
  autolayer(fitted(ses.1), series="Fitted") +
  ylab("Membaca") + xlab("Periode")

Pada fungsi ses() , terdapat beberapa argumen yang umum digunakan, yaitu nilia y , gamma , beta , alpha , dan h .

Nilai y adalah nilai data deret waktu, gamma adalah parameter pemulusan untuk komponen musiman, beta adalah parameter pemulusan untuk tren, dan alpha adalah parameter pemulusan untuk stasioner, serta h adalah banyaknya periode yang akan diramalkan.

Kasus di atas merupakan contoh inisialisasi nilai parameter \(\lambda\) dengan nilai alpha 0,2 dan 0,7 dan banyak periode data yang akan diramalkan adalah sebanyak 10 periode. Selanjutnya akan digunakan fungsi HoltWinters() dengan nilai inisialisasi parameter dan panjang periode peramalan yang sama dengan fungsi ses() .

#Cara 2 (fungsi Holtwinter)
ses1<- HoltWinters(train.ts, gamma = FALSE, beta = FALSE, alpha = 0.2)
plot(ses1)

#ramalan
ramalan1<- forecast(ses1, h=24)
ramalan1
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  97       6745.254 5577.048 7913.459 4958.638 8531.869
##  98       6745.254 5553.913 7936.594 4923.256 8567.251
##  99       6745.254 5531.219 7959.288 4888.548 8601.959
## 100       6745.254 5508.941 7981.566 4854.477 8636.030
## 101       6745.254 5487.058 8003.449 4821.010 8669.498
## 102       6745.254 5465.549 8024.958 4788.114 8702.393
## 103       6745.254 5444.395 8046.112 4755.763 8734.745
## 104       6745.254 5423.580 8066.927 4723.929 8766.578
## 105       6745.254 5403.088 8087.419 4692.588 8797.919
## 106       6745.254 5382.904 8107.603 4661.720 8828.788
## 107       6745.254 5363.015 8127.493 4631.301 8859.206
## 108       6745.254 5343.407 8147.100 4601.315 8889.192
## 109       6745.254 5324.071 8166.437 4571.742 8918.765
## 110       6745.254 5304.994 8185.514 4542.566 8947.941
## 111       6745.254 5286.166 8204.341 4513.771 8976.736
## 112       6745.254 5267.578 8222.929 4485.344 9005.163
## 113       6745.254 5249.221 8241.286 4457.269 9033.238
## 114       6745.254 5231.087 8259.421 4429.535 9060.972
## 115       6745.254 5213.167 8277.340 4402.129 9088.378
## 116       6745.254 5195.454 8295.053 4375.040 9115.467
## 117       6745.254 5177.942 8312.565 4348.257 9142.250
## 118       6745.254 5160.623 8329.884 4321.770 9168.737
## 119       6745.254 5143.491 8347.016 4295.570 9194.938
## 120       6745.254 5126.541 8363.966 4269.646 9220.861
ses2<- HoltWinters(train.ts, gamma = FALSE, beta = FALSE, alpha = 0.7)
plot(ses2)

#ramalan
ramalan2<- forecast(ses2, h=24)
ramalan2
##     Point Forecast    Lo 80     Hi 80      Lo 95     Hi 95
##  97       6075.214 4861.247  7289.182 4218.61118  7931.818
##  98       6075.214 4593.378  7557.051 3808.94134  8341.488
##  99       6075.214 4367.011  7783.418 3462.74207  8687.687
## 100       6075.214 4167.315  7983.114 3157.33336  8993.096
## 101       6075.214 3986.626  8163.803 2880.99339  9269.436
## 102       6075.214 3820.370  8330.059 2626.72691  9523.702
## 103       6075.214 3665.558  8484.871 2389.96216  9760.467
## 104       6075.214 3520.108  8630.321 2167.51659  9982.912
## 105       6075.214 3382.504  8767.925 1957.06915 10193.360
## 106       6075.214 3251.598  8898.831 1756.86536 10393.564
## 107       6075.214 3126.497  9023.932 1565.54074 10584.888
## 108       6075.214 3006.493  9143.936 1382.00924 10768.420
## 109       6075.214 2891.007  9259.422 1205.38968 10945.039
## 110       6075.214 2779.566  9370.863 1034.95539 11115.474
## 111       6075.214 2671.772  9478.657  870.09874 11280.330
## 112       6075.214 2567.289  9583.140  710.30554 11440.123
## 113       6075.214 2465.829  9684.600  555.13603 11595.293
## 114       6075.214 2367.144  9783.285  404.21067 11746.218
## 115       6075.214 2271.019  9879.410  257.19915 11893.230
## 116       6075.214 2177.263  9973.166  113.81192 12036.617
## 117       6075.214 2085.710 10064.719  -26.20656 12176.636
## 118       6075.214 1996.211 10154.218 -163.08311 12313.512
## 119       6075.214 1908.634 10241.795 -297.02021 12447.449
## 120       6075.214 1822.861 10327.568 -428.19948 12578.628

Fungsi HoltWinters memiliki argumen yang sama dengan fungsi ses() . Argumen-argumen kedua fungsi dapat dilihat lebih lanjut dengan ?ses() atau ?HoltWinters .

Nilai parameter \(\alpha\) dari kedua fungsi dapat dioptimalkan menyesuaikan dari error-nya paling minimumnya. Caranya adalah dengan membuat parameter \(\alpha =\) NULL .

#SES
ses.opt <- ses(train.ts, h = 24, alpha = NULL)
plot(ses.opt)

ses.opt
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  97       6709.874 5598.223 7821.525 5009.751 8409.997
##  98       6709.874 5568.706 7851.042 4964.608 8455.140
##  99       6709.874 5539.933 7879.815 4920.604 8499.144
## 100       6709.874 5511.851 7907.897 4877.656 8542.092
## 101       6709.874 5484.413 7935.335 4835.693 8584.055
## 102       6709.874 5457.575 7962.173 4794.648 8625.100
## 103       6709.874 5431.301 7988.447 4754.465 8665.283
## 104       6709.874 5405.555 8014.192 4715.091 8704.657
## 105       6709.874 5380.309 8039.439 4676.479 8743.268
## 106       6709.874 5355.532 8064.215 4638.587 8781.160
## 107       6709.874 5331.201 8088.546 4601.376 8818.371
## 108       6709.874 5307.292 8112.455 4564.811 8854.937
## 109       6709.874 5283.784 8135.964 4528.858 8890.890
## 110       6709.874 5260.657 8159.091 4493.488 8926.260
## 111       6709.874 5237.894 8181.854 4458.674 8961.074
## 112       6709.874 5215.477 8204.271 4424.391 8995.357
## 113       6709.874 5193.391 8226.357 4390.614 9029.134
## 114       6709.874 5171.623 8248.125 4357.322 9062.426
## 115       6709.874 5150.158 8269.590 4324.494 9095.254
## 116       6709.874 5128.985 8290.763 4292.112 9127.636
## 117       6709.874 5108.091 8311.657 4260.158 9159.589
## 118       6709.874 5087.467 8332.281 4228.616 9191.132
## 119       6709.874 5067.101 8352.647 4197.470 9222.278
## 120       6709.874 5046.985 8372.763 4166.705 9253.043
#Lamda Optimum Holt Winter
sesopt<- HoltWinters(train.ts, gamma = FALSE, beta = FALSE,alpha = NULL)
sesopt
## Holt-Winters exponential smoothing without trend and without seasonal component.
## 
## Call:
## HoltWinters(x = train.ts, alpha = NULL, beta = FALSE, gamma = FALSE)
## 
## Smoothing parameters:
##  alpha: 0.3637747
##  beta : FALSE
##  gamma: FALSE
## 
## Coefficients:
##       [,1]
## a 6551.422
plot(sesopt)

#ramalan
ramalanopt<- forecast(sesopt, h=24)
ramalanopt
##     Point Forecast    Lo 80    Hi 80    Lo 95     Hi 95
##  97       6551.422 5415.900 7686.945 4814.790  8288.054
##  98       6551.422 5343.100 7759.744 4703.453  8399.391
##  99       6551.422 5274.444 7828.400 4598.453  8504.392
## 100       6551.422 5209.296 7893.549 4498.817  8604.027
## 101       6551.422 5147.167 7955.678 4403.799  8699.046
## 102       6551.422 5087.672 8015.172 4312.810  8790.035
## 103       6551.422 5030.503 8072.341 4225.377  8877.467
## 104       6551.422 4975.407 8127.438 4141.114  8961.730
## 105       6551.422 4922.172 8180.672 4059.699  9043.145
## 106       6551.422 4870.623 8232.221 3980.862  9121.983
## 107       6551.422 4820.608 8282.236 3904.371  9198.474
## 108       6551.422 4771.999 8330.845 3830.029  9272.815
## 109       6551.422 4724.683 8378.162 3757.665  9345.179
## 110       6551.422 4678.561 8424.283 3687.129  9415.716
## 111       6551.422 4633.549 8469.296 3618.288  9484.557
## 112       6551.422 4589.569 8513.276 3551.026  9551.818
## 113       6551.422 4546.553 8556.291 3485.240  9617.605
## 114       6551.422 4504.442 8598.403 3420.835  9682.009
## 115       6551.422 4463.179 8639.666 3357.730  9745.115
## 116       6551.422 4422.716 8680.129 3295.847  9806.998
## 117       6551.422 4383.008 8719.837 3235.119  9867.726
## 118       6551.422 4344.014 8758.831 3175.482  9927.362
## 119       6551.422 4305.697 8797.148 3116.882  9985.963
## 120       6551.422 4268.023 8834.822 3059.264 10043.580

Setelah dilakukan peramalan, akan dilakukan perhitungan keakuratan hasil peramalan. Perhitungan akurasi ini dilakukan baik pada data latih dan data uji.

Akurasi Data Latih

Perhitungan akurasi data dapat dilakukan dengan cara langsung maupun manual. Secara langsung, nilai akurasi dapat diambil dari objek yang tersimpan pada hasil SES, yaitu sum of squared errors (SSE). Nilai akurasi lain dapat dihitung pula dari nilai SSE tersebut.

#Keakuratan Metode
#Pada data training
SSE1<-ses1$SSE
MSE1<-ses1$SSE/length(train.ts)
RMSE1<-sqrt(MSE1)

akurasi1 <- matrix(c(SSE1,MSE1,RMSE1))
row.names(akurasi1)<- c("SSE", "MSE", "RMSE")
colnames(akurasi1) <- c("Akurasi lamda=0.2")
akurasi1
##      Akurasi lamda=0.2
## SSE       7.987402e+07
## MSE       8.320211e+05
## RMSE      9.121519e+02
SSE2<-ses2$SSE
MSE2<-ses2$SSE/length(train.ts)
RMSE2<-sqrt(MSE2)

akurasi2 <- matrix(c(SSE2,MSE2,RMSE2))
row.names(akurasi2)<- c("SSE", "MSE", "RMSE")
colnames(akurasi2) <- c("Akurasi lamda=0.7")
akurasi2
##      Akurasi lamda=0.7
## SSE       84575466.678
## MSE         880994.445
## RMSE           938.613
#Cara Manual
fitted1<-ramalan1$fitted
sisaan1<-ramalan1$residuals
head(sisaan1)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1]        NA  -941.000 -1669.800 -1404.840 -2672.872 -2086.298
resid1<-training$`Jumlah Pengunjung`-ramalan1$fitted
head(resid1)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1]        NA  -941.000 -1669.800 -1404.840 -2672.872 -2086.298
#Cara Manual
SSE.1=sum(sisaan1[2:length(train.ts)]^2)
SSE.1
## [1] 79874024
MSE.1 = SSE.1/length(train.ts)
MSE.1
## [1] 832021.1
MAPE.1 = sum(abs(sisaan1[2:length(train.ts)]/train.ts[2:length(train.ts)])*
               100)/length(train.ts)
MAPE.1
## [1] 10.14796
akurasi.1 <- matrix(c(SSE.1,MSE.1,MAPE.1))
row.names(akurasi.1)<- c("SSE", "MSE", "MAPE")
colnames(akurasi.1) <- c("Akurasi lamda=0.2")
akurasi.1
##      Akurasi lamda=0.2
## SSE       7.987402e+07
## MSE       8.320211e+05
## MAPE      1.014796e+01
fitted2<-ramalan2$fitted
sisaan2<-ramalan2$residuals
head(sisaan2)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1]         NA  -941.0000 -1199.3000  -428.7900 -1677.6370  -451.2911
resid2<-training$`Jumlah Pengunjung`-ramalan2$fitted
head(resid2)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1]         NA  -941.0000 -1199.3000  -428.7900 -1677.6370  -451.2911
SSE.2=sum(sisaan2[2:length(train.ts)]^2)
SSE.2
## [1] 84575467
MSE.2 = SSE.2/length(train.ts)
MSE.2
## [1] 880994.4
MAPE.2 = sum(abs(sisaan2[2:length(train.ts)]/train.ts[2:length(train.ts)])*
               100)/length(train.ts)
MAPE.2
## [1] 10.35087
akurasi.2 <- matrix(c(SSE.2,MSE.2,MAPE.2))
row.names(akurasi.2)<- c("SSE", "MSE", "MAPE")
colnames(akurasi.2) <- c("Akurasi lamda=0.7")
akurasi.2
##      Akurasi lamda=0.7
## SSE       8.457547e+07
## MSE       8.809944e+05
## MAPE      1.035087e+01

Berdasarkan nilai SSE, MSE, RMSE, dan MAPE di antara kedua parameter, nilai parameter \(\lambda=0,2\) menghasilkan akurasi yang lebih baik dibanding \(\lambda=0,7\) . Hal ini dilihat dari nilai masing-masing ukuran akurasi yang lebih kecil. Berdasarkan nilai MAPE-nya, hasil ini dapat dikategorikan sebagai peramalan sangat baik.

Akurasi Data Uji

Akurasi data uji dapat dihitung dengan cara yang hampir sama dengan perhitungan akurasi data latih.

selisih1<-ramalan1$mean-testing$`Jumlah Pengunjung`
SSEtesting1<-sum(selisih1^2)
MSEtesting1<-SSEtesting1/length(testing)

selisih2<-ramalan2$mean-testing$`Jumlah Pengunjung`
SSEtesting2<-sum(selisih2^2)
MSEtesting2<-SSEtesting2/length(testing)

selisihopt<-ramalanopt$mean-testing$`Jumlah Pengunjung`
SSEtestingopt<-sum(selisihopt^2)
MSEtestingopt<-SSEtestingopt/length(testing)

akurasitesting1 <- matrix(c(SSEtesting1,SSEtesting2,SSEtestingopt))
row.names(akurasitesting1)<- c("SSE1", "SSE2", "SSEopt")
akurasitesting1
##            [,1]
## SSE1   94039630
## SSE2   49091240
## SSEopt 78821501
akurasitesting2 <- matrix(c(MSEtesting1,MSEtesting2,MSEtestingopt))
row.names(akurasitesting2)<- c("MSE1", "MSE2", "MSEopt")
akurasitesting2
##            [,1]
## MSE1   31346543
## MSE2   16363747
## MSEopt 26273834

Selain dengan cara di atas, perhitungan nilai akurasi dapat menggunakan fungsi accuracy() dari package forecast . Penggunaannya yaitu dengan menuliskan accuracy(hasil ramalan, kondisi aktual) . Contohnya adalah sebagai berikut.

#cara lain
accuracy(ramalanopt, testing$`Jumlah Pengunjung`)
##                       ME      RMSE       MAE        MPE      MAPE     MASE
## Training set   -80.57555  885.0528  680.5195  -2.283498  9.803349 0.812086
## Test set     -1538.75558 1812.2442 1591.7685 -35.816532 36.560357 1.899509
##                     ACF1
## Training set -0.07823028
## Test set              NA

DES

Metode pemulusan Double Exponential Smoothing (DES) digunakan untuk data yang memiliki pola tren. Metode DES adalah metode semacam SES, hanya saja dilakukan dua kali, yaitu pertama untuk tahapan ‘level’ dan kedua untuk tahapan ‘tren’. Pemulusan menggunakan metode ini akan menghasilkan peramalan tidak konstan untuk periode berikutnya.

Pemulusan dengan metode DES kali ini akan menggunakan fungsi HoltWinters() . Jika sebelumnya nilai argumen beta dibuat FALSE , kali ini argumen tersebut akan diinisialisasi bersamaan dengan nilai alpha .

#Lamda=0.2 dan gamma=0.2
des.1<- HoltWinters(train.ts, gamma = FALSE, beta = 0.2, alpha = 0.2)
plot(des.1)

#ramalan
ramalandes1<- forecast(des.1, h=24)
ramalandes1
##     Point Forecast     Lo 80     Hi 80      Lo 95     Hi 95
##  97       6883.752 5403.4274  8364.077  4619.7908  9147.713
##  98       6837.131 5314.7701  8359.492  4508.8808  9165.382
##  99       6790.510 5212.7316  8368.289  4377.5059  9203.515
## 100       6743.890 5096.5337  8391.246  4224.4762  9263.303
## 101       6697.269 4965.8585  8428.679  4049.3051  9345.233
## 102       6650.648 4820.7847  8480.511  3852.1136  9449.183
## 103       6604.027 4661.6969  8546.358  3633.4893  9574.565
## 104       6557.407 4489.1858  8625.627  3394.3358  9720.477
## 105       6510.786 4303.9597  8717.612  3135.7366  9885.835
## 106       6464.165 4106.7740  8821.556  2858.8466 10069.483
## 107       6417.544 3898.3812  8936.707  2564.8168 10270.271
## 108       6370.923 3679.4992  9062.347  2254.7454 10487.101
## 109       6324.303 3450.7944  9197.811  1929.6511 10718.954
## 110       6277.682 3212.8733  9342.490  1590.4617 10964.902
## 111       6231.061 2966.2821  9495.840  1238.0126 11224.109
## 112       6184.440 2711.5088  9657.371   873.0500 11495.830
## 113       6137.819 2448.9880  9826.651   496.2387 11779.400
## 114       6091.199 2179.1062 10003.291   108.1696 12074.227
## 115       6044.578 1902.2071 10186.948  -290.6315 12379.787
## 116       5997.957 1618.5970 10377.317  -699.6960 12695.610
## 117       5951.336 1328.5497 10574.123 -1118.6056 13021.278
## 118       5904.715 1032.3103 10777.120 -1546.9851 13356.416
## 119       5858.095  730.0994 10986.090 -1984.4973 13700.686
## 120       5811.474  422.1159 11200.832 -2430.8378 14053.785
#Lamda=0.6 dan gamma=0.3
des.2<- HoltWinters(train.ts, gamma = FALSE, beta = 0.3, alpha = 0.6)
plot(des.2)

#ramalan
ramalandes2<- forecast(des.2, h=24)
ramalandes2
##     Point Forecast       Lo 80     Hi 80       Lo 95     Hi 95
##  97       6078.727   4787.0469  7370.407   4103.2727  8054.181
##  98       5873.898   4235.7542  7512.042   3368.5733  8379.223
##  99       5669.069   3614.5259  7723.612   2526.9165  8811.221
## 100       5464.240   2936.5040  7991.976   1598.4015  9330.078
## 101       5259.411   2210.3890  8308.433    596.3343  9922.487
## 102       5054.582   1442.0316  8667.132   -470.3369 10579.500
## 103       4849.753    635.5485  9063.957  -1595.3164 11294.822
## 104       4644.924   -206.0189  9495.866  -2773.9527 12063.800
## 105       4440.095  -1080.3232  9960.512  -4002.6559 12882.845
## 106       4235.266  -1985.4852 10456.016  -5278.5518 13749.083
## 107       4030.437  -2919.9549 10980.828  -6599.2699 14660.143
## 108       3825.607  -3882.4227 11533.638  -7962.8073 15614.022
## 109       3620.778  -4871.7606 12113.317  -9367.4391 16608.996
## 110       3415.949  -5886.9816 12718.880 -10811.6558 17643.555
## 111       3211.120  -6927.2111 13349.452 -12294.1195 18716.360
## 112       3006.291  -7991.6653 14004.248 -13813.6318 19826.214
## 113       2801.462  -9079.6360 14682.560 -15369.1094 20972.034
## 114       2596.633 -10190.4782 15383.745 -16959.5660 22152.832
## 115       2391.804 -11323.6007 16107.209 -18584.0974 23367.706
## 116       2186.975 -12478.4587 16852.409 -20241.8703 24615.820
## 117       1982.146 -13654.5475 17618.840 -21932.1131 25896.405
## 118       1777.317 -14851.3979 18406.032 -23654.1078 27208.742
## 119       1572.488 -16068.5716 19213.547 -25407.1844 28552.160
## 120       1367.659 -17305.6581 20040.976 -27190.7151 29926.033

Selanjutnya jika ingin membandingkan plot data latih dan data uji adalah sebagai berikut.

#Visually evaluate the prediction
plot(data1.ts)
lines(des.1$fitted[,1], lty=2, col="blue")
lines(ramalandes1$mean, col="red")

Untuk mendapatkan nilai parameter optimum dari DES, argumen alpha dan beta dapat dibuat NULL seperti berikut.

#Lamda dan gamma optimum
des.opt<- HoltWinters(train.ts, gamma = FALSE)
des.opt
## Holt-Winters exponential smoothing with trend and without seasonal component.
## 
## Call:
## HoltWinters(x = train.ts, gamma = FALSE)
## 
## Smoothing parameters:
##  alpha: 0.3542592
##  beta : 0.3389063
##  gamma: FALSE
## 
## Coefficients:
##        [,1]
## a 6440.6462
## b -167.0769
plot(des.opt)

#ramalan
ramalandesopt<- forecast(des.opt, h=24)
ramalandesopt
##     Point Forecast      Lo 80     Hi 80       Lo 95     Hi 95
##  97       6273.569  5044.7263  7502.412   4394.2161  8152.923
##  98       6106.492  4746.4238  7466.561   4026.4470  8186.538
##  99       5939.415  4395.6307  7483.200   3578.4005  8300.430
## 100       5772.339  3996.3759  7548.301   3056.2381  8488.439
## 101       5605.262  3554.4969  7656.026   2468.8877  8741.636
## 102       5438.185  3075.6473  7800.722   1824.9956  9051.374
## 103       5271.108  2564.5569  7977.659   1131.7954  9410.420
## 104       5104.031  2024.9605  8183.101    394.9991  9813.063
## 105       4936.954  1459.7588  8414.149   -380.9570 10254.865
## 106       4769.877   871.2124  8668.542  -1192.6160 10732.370
## 107       4602.800   261.1059  8944.494  -2037.2481 11242.848
## 108       4435.723  -369.1272  9240.573  -2912.6613 11784.108
## 109       4268.646 -1018.3145  9555.607  -3817.0625 12354.355
## 110       4101.569 -1685.4805  9888.619  -4748.9596 12952.098
## 111       3934.492 -2369.7992 10238.784  -5707.0896 13576.074
## 112       3767.415 -3070.5616 10605.393  -6690.3680 14225.199
## 113       3600.339 -3787.1503 10987.827  -7697.8507 14898.528
## 114       3433.262 -4519.0217 11385.545  -8728.7062 15595.230
## 115       3266.185 -5265.6920 11798.061  -9782.1947 16314.564
## 116       3099.108 -6026.7267 12224.942 -10857.6516 17055.867
## 117       2932.031 -6801.7324 12665.794 -11954.4754 17818.537
## 118       2764.954 -7590.3506 13120.258 -13072.1177 18602.026
## 119       2597.877 -8392.2522 13588.006 -14210.0753 19405.829
## 120       2430.800 -9207.1340 14068.734 -15367.8842 20229.484

Selanjutnya akan dilakukan perhitungan akurasi pada data latih maupun data uji dengan ukuran akurasi SSE, MSE dan MAPE.

Akurasi Data Latih

#Akurasi Data Training
ssedes.train1<-des.1$SSE
msedes.train1<-ssedes.train1/length(train.ts)
sisaandes1<-ramalandes1$residuals
head(sisaandes1)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1]        NA        NA   24.0000  890.2400   67.6224 1007.8234
mapedes.train1 <- sum(abs(sisaandes1[3:length(train.ts)]/train.ts[3:length(train.ts)])
                      *100)/length(train.ts)

akurasides.1 <- matrix(c(ssedes.train1,msedes.train1,mapedes.train1))
row.names(akurasides.1)<- c("SSE", "MSE", "MAPE")
colnames(akurasides.1) <- c("Akurasi lamda=0.2 dan gamma=0.2")
akurasides.1
##      Akurasi lamda=0.2 dan gamma=0.2
## SSE                     1.294051e+08
## MSE                     1.347970e+06
## MAPE                    1.261900e+01
ssedes.train2<-des.2$SSE
msedes.train2<-ssedes.train2/length(train.ts)
sisaandes2<-ramalandes2$residuals
head(sisaandes2)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1]        NA        NA   24.0000  877.2800 -419.3184  738.5196
mapedes.train2 <- sum(abs(sisaandes2[3:length(train.ts)]/train.ts[3:length(train.ts)])
                      *100)/length(train.ts)

akurasides.2 <- matrix(c(ssedes.train2,msedes.train2,mapedes.train2))
row.names(akurasides.2)<- c("SSE", "MSE", "MAPE")
colnames(akurasides.2) <- c("Akurasi lamda=0.6 dan gamma=0.3")
akurasides.2
##      Akurasi lamda=0.6 dan gamma=0.3
## SSE                     9.465378e+07
## MSE                     9.859769e+05
## MAPE                    1.099472e+01

Hasil akurasi dari data latih didapatkan skenario 2 dengan lamda=0.6 dan gamma=0.3 memiliki hasil yang lebih baik. Namun untuk kedua skenario dapat dikategorikan peramalan sangat baik berdasarkan nilai MAPE-nya.

Akurasi Data Uji

#Akurasi Data Testing
selisihdes1<-ramalandes1$mean-testing$`Jumlah Pengunjung`
selisihdes1
## Time Series:
## Start = 97 
## End = 120 
## Frequency = 1 
##  [1] 1520.75209 2076.13129 1239.51049 1125.88969  523.26889 -506.35190
##  [7] 1431.02730 1210.40650 1116.78570 1183.16490 -164.45589 1170.92331
## [13] 1068.30251 2866.68171  -31.93909 1621.44012 2479.81932 2861.19852
## [19] 1626.57772 1010.95693 1672.33613 1409.71533 1881.09453 1645.47373
SSEtestingdes1<-sum(selisihdes1^2)
MSEtestingdes1<-SSEtestingdes1/length(testing$`Jumlah Pengunjung`)
MAPEtestingdes1<-sum(abs(selisihdes1/testing$`Jumlah Pengunjung`)*100)/length(testing$`Jumlah Pengunjung`)

selisihdes2<-ramalandes2$mean-testing$`Jumlah Pengunjung`
selisihdes2
## Time Series:
## Start = 97 
## End = 120 
## Frequency = 1 
##  [1]   715.72698  1112.89793   118.06888  -153.76016  -914.58921 -2102.41826
##  [7]  -323.24731  -702.07635  -953.90540 -1045.73445 -2551.56350 -1374.39254
## [13] -1635.22159     4.94936 -3051.87969 -1556.70874  -856.53778  -633.36683
## [19] -2026.19588 -2800.02493 -2296.85397 -2717.68302 -2404.51207 -2798.34112
SSEtestingdes2<-sum(selisihdes2^2)
MSEtestingdes2<-SSEtestingdes2/length(testing$`Jumlah Pengunjung`)
MAPEtestingdes2<-sum(abs(selisihdes2/testing$`Jumlah Pengunjung`)*100)/length(testing$`Jumlah Pengunjung`)

selisihdesopt<-ramalandesopt$mean-testing$`Jumlah Pengunjung`
selisihdesopt
## Time Series:
## Start = 97 
## End = 120 
## Frequency = 1 
##  [1]   910.56928  1345.49236   388.41544   154.33852  -568.73840 -1718.81532
##  [7]    98.10776  -242.96916  -457.04608  -511.12300 -1979.19992  -764.27684
## [13]  -987.35376   690.56932 -2328.50760  -795.58452   -57.66144   203.26164
## [19] -1151.81528 -1887.89221 -1346.96913 -1730.04605 -1379.12297 -1735.19989
SSEtestingdesopt<-sum(selisihdesopt^2)
MSEtestingdesopt<-SSEtestingdesopt/length(testing$`Jumlah Pengunjung`)
MAPEtestingdesopt<-sum(abs(selisihdesopt/testing$`Jumlah Pengunjung`)*100)/length(testing$`Jumlah Pengunjung`)

akurasitestingdes <-
  matrix(c(SSEtestingdes1,MSEtestingdes1,MAPEtestingdes1,SSEtestingdes2,MSEtestingdes2,
           MAPEtestingdes2,SSEtestingdesopt,MSEtestingdesopt,MAPEtestingdesopt),
         nrow=3,ncol=3)
row.names(akurasitestingdes)<- c("SSE", "MSE", "MAPE")
colnames(akurasitestingdes) <- c("des ske1","des ske2","des opt")
akurasitestingdes
##          des ske1     des ske2      des opt
## SSE  5.853842e+07 7.181079e+07 3.329451e+07
## MSE  2.439101e+06 2.992116e+06 1.387271e+06
## MAPE 3.164272e+01 2.953080e+01 1.955453e+01

Perbandingan SES dan DES

MSEfull <-
  matrix(c(MSEtesting1,MSEtesting2,MSEtestingopt,MSEtestingdes1,MSEtestingdes2,
           MSEtestingdesopt),nrow=3,ncol=2)
row.names(MSEfull)<- c("ske 1", "ske 2", "ske opt")
colnames(MSEfull) <- c("ses","des")
MSEfull
##              ses     des
## ske 1   31346543 2439101
## ske 2   16363747 2992116
## ske opt 26273834 1387271

Kedua metode dapat dibandingkan dengan menggunakan ukuran akurasi yang sama. Contoh di atas adalah perbandingan kedua metode dengan ukuran akurasi MSE. Hasilnya didapatkan metode DES lebih baik dibandingkan metode SES dilihat dari MSE yang lebih kecil nilainya.

Pemulusan Data Musiman

Selanjutnya melakukan pembagian data dan mengubahnya menjadi data deret waktu.

#membagi data menjadi training dan testing
training <- training_ma$`Jumlah Pengunjung`
testing <- testing_ma$`Jumlah Pengunjung`
training.ts <- ts(training, frequency = 13)
testing.ts <- ts(testing, frequency = 13)

Kemudian akan dilakukan eskplorasi dengan plot data deret waktu sebagai berikut.

#Membuat plot time series
plot(data1.ts, col="red",main="Plot semua data")
points(data1.ts)

plot(training.ts, col="blue",main="Plot data latih")
points(training.ts)

plot(testing.ts, col="green",main="Plot data uji")
points(testing.ts)

Metode Holt-Winter untuk peramalan data musiman menggunakan tiga persamaan pemulusan yang terdiri atas persamaan untuk level \((L_t)\), trend \((B_t)\), dan komponen seasonal / musiman \((S_t)\) dengan parameter pemulusan berupa \(\alpha\), \(\beta\), dan \(\gamma\). Metode Holt-Winter musiman terbagi menjadi dua, yaitu metode aditif dan metode multiplikatif.

Pemulusan data musiman dengan metode Winter dilakukan menggunakan fungsi HoltWinters() dengan memasukkan argumen tambahan, yaitu gamma() dan seasonal() . Arguman seasonal() diinisialisasi menyesuaikan jenis musiman, aditif atau multiplikatif.

Winter Aditif

Perhitungan dengan model aditif dilakukan jika plot data asli menunjukkan fluktuasi musiman yang relatif stabil (konstan).

Pemulusan

#Pemulusan dengan winter aditif 
winter1 <- HoltWinters(training.ts,alpha=0.2,beta=0.1,gamma=0.1,seasonal = "additive")
winter1$fitted
## Time Series:
## Start = c(2, 1) 
## End = c(8, 5) 
## Frequency = 13 
##              xhat    level      trend     season
## 2.000000 5739.777 6597.992  21.148267 -879.36391
## 2.076923 6906.431 6674.985  26.732732  204.71302
## 2.153846 6387.766 6725.832  29.144111 -367.21006
## 2.230769 6920.049 6784.823  32.128793  103.09763
## 2.307692 7780.115 6829.342  33.367809  917.40533
## 2.384615 6599.939 6860.887  33.185512 -294.13314
## 2.461538 7332.212 6906.284  34.406734  391.52071
## 2.538462 7767.590 7182.449  58.582499  526.55917
## 2.615385 6602.174 6939.913  28.470692 -366.21006
## 2.692308 7440.511 7111.549  42.787218  286.17456
## 2.769231 7311.112 6967.034  24.057001  320.02071
## 2.846154 6192.824 6829.869   7.934765 -644.97929
## 2.923077 6899.642 7066.439  30.798281 -197.59467
## 3.000000 6265.588 7092.308  30.305435 -857.02605
## 3.076923 7530.829 7271.296  45.173678  214.35853
## 3.153846 6599.630 6946.704   8.197107 -355.27133
## 3.230769 7207.194 7078.575  20.564505  108.05370
## 3.307692 7997.838 7064.101  17.060633  916.67614
## 3.384615 6691.970 6974.794   6.423873 -289.24825
## 3.461538 7517.232 7018.824  10.184476  488.22377
## 3.538462 7139.014 6750.562 -17.660171  406.11194
## 3.615385 6335.015 6668.099 -24.140449 -308.94396
## 3.692308 6602.929 6436.556 -44.880745  211.25369
## 3.769231 6594.202 6384.289 -45.619319  255.53177
## 3.846154 5798.441 6392.230 -40.263354 -553.52523
## 3.923077 6324.780 6545.278 -20.932175 -199.56606
## 4.000000 6027.109 6816.390   8.272229 -797.55308
## 4.076923 7131.243 7035.440  29.350047   66.45225
## 4.153846 7041.505 7294.942  52.365195 -305.80174
## 4.230769 7486.119 7340.406  51.675089   94.03821
## 4.307692 8558.319 7610.657  73.532703  874.12910
## 4.384615 7308.107 7524.726  57.586322 -274.20584
## 4.461538 8106.480 7663.891  65.744190  376.84518
## 4.538462 8265.445 7811.339  73.914581  380.19083
## 4.615385 7477.625 7803.765  65.765688 -391.90514
## 4.692308 8126.078 7853.605  64.173180  208.29939
## 4.769231 7977.290 7661.763  38.571619  276.95563
## 4.846154 7585.162 7993.477  67.885813 -476.20051
## 4.923077 8012.804 8030.730  64.822575  -82.74844
## 5.000000 7325.516 7984.992  53.766492 -713.24180
## 5.076923 8417.684 8190.255  68.916162  158.51284
## 5.153846 7897.275 8148.034  57.802483 -308.56216
## 5.230769 8376.848 8143.782  51.596989  181.46867
## 5.307692 8656.073 7830.609  15.120039  810.34358
## 5.384615 7318.519 7572.315 -12.221421 -241.57437
## 5.461538 7857.845 7469.590 -21.271802  409.52674
## 5.538462 7636.515 7322.749 -33.828692  347.59526
## 5.615385 7379.863 7764.417  13.720999 -398.27517
## 5.692308 7757.862 7650.966   1.003740  105.89315
## 5.769231 7936.116 7550.997  -9.093508  394.21240
## 5.846154 6665.271 7197.280 -43.555821 -488.45346
## 5.923077 7047.596 7212.270 -37.701238 -126.97278
## 6.000000 6453.513 7146.650 -40.493161 -652.64312
## 6.076923 7273.109 7191.054 -32.003429  114.05812
## 6.153846 6972.279 7321.429 -15.765599 -333.38414
## 6.230769 7266.437 7252.007 -21.131178   35.56086
## 6.307692 7879.387 7202.389 -23.979918  700.97774
## 6.384615 6426.228 6768.932 -64.927649 -277.77589
## 6.461538 6960.485 6669.558 -68.372209  359.29918
## 6.538462 6934.981 6477.889 -80.701913  537.79403
## 6.615385 5820.265 6354.391 -84.981536 -449.14421
## 6.692308 6461.074 6461.356 -65.786838   65.50416
## 6.769231 6571.170 6381.955 -67.148311  256.36315
## 6.846154 5733.526 6270.173 -71.611702 -465.03513
## 6.923077 5977.033 6187.856 -72.682216 -138.14047
## 7.000000 5459.880 6147.967 -69.402876 -618.68419
## 7.076923 6289.397 6170.588 -60.200472  179.00944
## 7.153846 5663.573 6081.508 -63.088412 -354.84645
## 7.230769 6288.471 6299.305 -34.999878   24.16590
## 7.307692 6893.549 6379.811 -23.449300  537.18682
## 7.384615 6256.838 6552.252  -3.860270 -291.55413
## 7.461538 6731.348 6436.424 -15.057022  309.98036
## 7.538462 6948.909 6441.298 -13.063972  520.67554
## 7.615385 6162.284 6536.852  -2.202157 -372.36542
## 7.692308 6835.763 6755.793  19.912157   60.05827
## 7.769231 7407.739 7115.352  53.876892  238.50958
## 7.846154 6900.146 7302.281  67.182116 -469.31719
## 7.923077 7285.630 7345.834  64.819188 -125.02311
## 8.000000 6574.239 7120.327  35.786580 -581.87457
## 8.076923 7278.126 7082.266  28.401792  167.45768
## 8.153846 6972.010 7179.243  35.259280 -242.49232
## 8.230769 7139.287 7050.100  18.819085   70.36821
## 8.307692 7921.018 7266.862  38.613337  615.54294
xhat1 <- winter1$fitted[,2]

winter1.opt<- HoltWinters(training.ts, alpha= NULL,  beta = NULL, gamma = NULL, seasonal = "additive")
winter1.opt
## Holt-Winters exponential smoothing with trend and additive seasonal component.
## 
## Call:
## HoltWinters(x = training.ts, alpha = NULL, beta = NULL, gamma = NULL,     seasonal = "additive")
## 
## Smoothing parameters:
##  alpha: 0.1999953
##  beta : 0
##  gamma: 0.08031043
## 
## Coefficients:
##           [,1]
## a   6796.18294
## b     21.14827
## s1  -351.75345
## s2   304.48229
## s3   521.50067
## s4  -332.79837
## s5   173.19452
## s6   264.42448
## s7  -534.84333
## s8  -262.22172
## s9  -686.40179
## s10  159.91025
## s11 -346.08604
## s12  112.07391
## s13  478.29331
winter1.opt$fitted
## Time Series:
## Start = c(2, 1) 
## End = c(8, 5) 
## Frequency = 13 
##              xhat    level    trend     season
## 2.000000 5739.777 6597.992 21.14827 -879.36391
## 2.076923 6900.845 6674.984 21.14827  204.71302
## 2.153846 6375.301 6721.363 21.14827 -367.21006
## 2.230769 6899.096 6774.850 21.14827  103.09763
## 2.307692 7751.132 6812.579 21.14827  917.40533
## 2.384615 6564.716 6837.700 21.14827 -294.13314
## 2.461538 7290.774 6878.105 21.14827  391.52071
## 2.538462 7697.000 7149.293 21.14827  526.55917
## 2.615385 6538.386 6883.448 21.14827 -366.21006
## 2.692308 7367.838 7060.515 21.14827  286.17456
## 2.769231 7250.069 6908.900 21.14827  320.02071
## 2.846154 6157.207 6781.038 21.14827 -644.97929
## 2.923077 6861.493 7037.939 21.14827 -197.59467
## 3.000000 6221.513 7061.789 21.14827 -861.42417
## 3.076923 7474.397 7240.431 21.14827  212.81830
## 3.153846 6567.435 6903.108 21.14827 -356.82109
## 3.230769 7183.939 7054.366 21.14827  108.42412
## 3.307692 7984.958 7045.127 21.14827  918.68180
## 3.384615 6695.688 6962.487 21.14827 -287.94698
## 3.461538 7513.491 7020.496 21.14827  471.84613
## 3.538462 7219.464 6763.953 21.14827  434.36225
## 3.615385 6409.238 6704.211 21.14827 -316.12085
## 3.692308 6754.939 6503.117 21.14827  230.67408
## 3.769231 6779.777 6486.478 21.14827  272.15099
## 3.846154 5975.975 6524.070 21.14827 -569.24334
## 3.923077 6527.441 6703.020 21.14827 -196.72685
## 4.000000 6185.993 6975.674 21.14827 -810.82913
## 4.076923 7294.627 7175.819 21.14827   97.65906
## 4.153846 7100.563 7394.438 21.14827 -315.02314
## 4.230769 7516.684 7396.874 21.14827   98.66226
## 4.307692 8536.968 7630.480 21.14827  885.33944
## 4.384615 7241.482 7496.439 21.14827 -276.10517
## 4.461538 8016.274 7612.488 21.14827  382.63736
## 4.538462 8162.904 7733.379 21.14827  408.37598
## 4.615385 7327.180 7693.548 21.14827 -387.51647
## 4.692308 7968.544 7728.860 21.14827  218.53500
## 4.769231 7824.087 7525.505 21.14827  277.43370
## 4.846154 7373.027 7870.428 21.14827 -518.54951
## 4.923077 7808.589 7903.371 21.14827 -115.93031
## 5.000000 7122.625 7854.803 21.14827 -753.32608
## 5.076923 8250.267 8068.022 21.14827  161.09653
## 5.153846 7711.632 8011.519 21.14827 -321.03442
## 5.230769 8195.804 8007.741 21.14827  166.91469
## 5.307692 8556.969 7700.336 21.14827  835.48450
## 5.384615 7243.427 7467.897 21.14827 -245.61797
## 5.461538 7849.389 7413.561 21.14827  414.67988
## 5.538462 7720.769 7310.835 21.14827  388.78631
## 5.615385 7428.800 7790.618 21.14827 -382.96638
## 5.692308 7842.371 7674.810 21.14827  146.41301
## 5.769231 7980.682 7578.087 21.14827  381.44679
## 5.846154 6752.095 7245.707 21.14827 -514.76057
## 5.923077 7190.857 7308.035 21.14827 -138.32670
## 6.000000 6602.139 7272.613 21.14827 -691.62323
## 6.076923 7506.232 7348.933 21.14827  136.15091
## 6.153846 7177.938 7485.832 21.14827 -329.04189
## 6.230769 7494.710 7412.195 21.14827   61.36664
## 6.307692 8134.370 7359.203 21.14827  754.01912
## 6.384615 6671.169 6919.888 21.14827 -269.86717
## 6.461538 7253.638 6857.604 21.14827  374.88490
## 6.538462 7254.101 6696.829 21.14827  536.12346
## 6.615385 6205.544 6611.360 21.14827 -426.96391
## 6.692308 6877.092 6747.397 21.14827  108.54668
## 6.769231 6960.753 6671.729 21.14827  267.87551
## 6.846154 6089.946 6570.330 21.14827 -501.53141
## 6.923077 6374.139 6509.490 21.14827 -156.49989
## 7.000000 5831.261 6484.012 21.14827 -673.89948
## 7.076923 6717.392 6522.908 21.14827  173.33602
## 7.153846 6091.237 6429.580 21.14827 -359.49182
## 7.230769 6704.774 6646.077 21.14827   37.54902
## 7.307692 7326.712 6699.469 21.14827  606.09477
## 7.384615 6554.351 6829.873 21.14827 -296.66974
## 7.461538 7017.145 6679.555 21.14827  316.44185
## 7.538462 7186.496 6663.475 21.14827  501.87239
## 7.615385 6376.815 6745.723 21.14827 -390.05587
## 7.692308 7043.696 6945.104 21.14827   77.44441
## 7.769231 7513.961 7264.306 21.14827  228.50693
## 7.846154 6890.537 7397.259 21.14827 -527.86994
## 7.923077 7246.370 7396.700 21.14827 -171.47876
## 8.000000 6488.331 7135.381 21.14827 -668.19810
## 8.076923 7257.573 7099.865 21.14827  136.56056
## 8.153846 6918.109 7193.696 21.14827 -296.73603
## 8.230769 7130.282 7061.227 21.14827   47.90759
## 8.307692 7944.455 7282.114 21.14827  641.19306
xhat1.opt <- winter1.opt$fitted[,2]

Peramalan

#Forecast
forecast1 <- predict(winter1, n.ahead = 24)
forecast1.opt <- predict(winter1.opt, n.ahead = 24)

Plot Deret Waktu

#Plot time series
plot(training.ts,main="Winter 0.2;0.1;0.1",type="l",col="black",
     pch=12, xlim = c(1,25))
lines(xhat1,type="l",col="red")
lines(xhat1.opt,type="l",col="blue")
lines(forecast1,type="l",col="red")
lines(forecast1.opt,type="l",col="blue")
legend("topleft",c("Actual Data",expression(paste(winter1)),
                   expression(paste(winter1.opt))),cex=0.5,
       col=c("black","red","blue"),lty=1)

Akurasi Data Latih

#Akurasi data training
SSE1<-winter1$SSE
MSE1<-winter1$SSE/length(training.ts)
RMSE1<-sqrt(MSE1)
akurasi1 <- matrix(c(SSE1,MSE1,RMSE1))
row.names(akurasi1)<- c("SSE", "MSE", "RMSE")
colnames(akurasi1) <- c("Akurasi")
akurasi1
##           Akurasi
## SSE  6.879442e+07
## MSE  7.166085e+05
## RMSE 8.465273e+02
SSE1.opt<-winter1.opt$SSE
MSE1.opt<-winter1.opt$SSE/length(training.ts)
RMSE1.opt<-sqrt(MSE1.opt)
akurasi1.opt <- matrix(c(SSE1.opt,MSE1.opt,RMSE1.opt))
row.names(akurasi1.opt)<- c("SSE1.opt", "MSE1.opt", "RMSE1.opt")
colnames(akurasi1.opt) <- c("Akurasi")
akurasi1.opt
##                Akurasi
## SSE1.opt  65111311.104
## MSE1.opt    678242.824
## RMSE1.opt      823.555
akurasi1.train = data.frame(Model_Winter = c("Winter 1","Winter1 optimal"),
                            Nilai_SSE=c(SSE1,SSE1.opt),
                            Nilai_MSE=c(MSE1,MSE1.opt),Nilai_RMSE=c(RMSE1,RMSE1.opt))
akurasi1.train
##      Model_Winter Nilai_SSE Nilai_MSE Nilai_RMSE
## 1        Winter 1  68794417  716608.5   846.5273
## 2 Winter1 optimal  65111311  678242.8   823.5550

Akurasi Data Uji

#Akurasi Data Testing
forecast1<-data.frame(forecast1)
testing.ts<-data.frame(testing.ts)
selisih1<-forecast1-testing.ts
SSEtesting1<-sum(selisih1^2)
MSEtesting1<-SSEtesting1/length(testing.ts)

forecast1.opt<-data.frame(forecast1.opt)
selisih1.opt<-forecast1.opt-testing.ts
SSEtesting1.opt<-sum(selisih1.opt^2)
MSEtesting1.opt<-SSEtesting1.opt/length(testing.ts)

Winter Multiplikatif

Model multiplikatif digunakan cocok digunakan jika plot data asli menunjukkan fluktuasi musiman yang bervariasi.

Pemulusan

#Pemulusan dengan winter multiplikatif 
winter2 <- HoltWinters(training.ts,alpha=0.2,beta=0.1,gamma=0.3,seasonal = "multiplicative")
winter2$fitted
## Time Series:
## Start = c(2, 1) 
## End = c(8, 5) 
## Frequency = 13 
##              xhat    level      trend    season
## 2.000000 5774.163 6597.992  21.148267 0.8723434
## 2.076923 6902.070 6675.274  26.761575 1.0298469
## 2.153846 6394.822 6726.297  29.187754 0.9466118
## 2.230769 6918.545 6785.524  32.191692 1.0147893
## 2.307692 7781.037 6830.222  33.442294 1.1336565
## 2.384615 6601.920 6861.893  33.265216 0.9574719
## 2.461538 7329.149 6907.499  34.499291 1.0557693
## 2.538462 7794.441 7171.566  57.456028 1.0782151
## 2.615385 6587.940 6944.767  29.030514 0.9446704
## 2.692308 7486.772 7128.361  44.486912 1.0437656
## 2.769231 7355.157 6984.536  25.655631 1.0492092
## 2.846154 6193.344 6848.134   9.449955 0.9031378
## 2.923077 6934.684 7110.626  34.754097 0.9705129
## 3.000000 6314.826 7133.081  33.524158 0.8811461
## 3.076923 7626.389 7324.166  49.280322 1.0343045
## 3.153846 6670.191 6997.467  11.682321 0.9516406
## 3.230769 7269.116 7124.278  23.195269 1.0170190
## 3.307692 8068.428 7100.844  18.532302 1.1333054
## 3.384615 6736.787 7013.063   7.900964 0.9595246
## 3.461538 7741.915 7050.815  10.886039 1.0963245
## 3.538462 6918.553 6766.730 -18.610984 1.0252564
## 3.615385 6501.041 6727.919 -20.631021 0.9692503
## 3.692308 6477.701 6459.047 -45.455175 1.0099959
## 3.769231 6511.378 6431.076 -43.706675 1.0194146
## 3.846154 6045.116 6456.159 -36.827781 0.9417051
## 3.923077 6344.366 6572.220 -21.538843 0.9685048
## 4.000000 6197.442 6848.178   8.210798 0.9038930
## 4.076923 6850.380 7051.889  27.760867 0.9676156
## 4.153846 7210.627 7375.557  57.351544 0.9700950
## 4.230769 7511.113 7390.928  53.153456 1.0090047
## 4.307692 8601.169 7655.752  74.320594 1.1126892
## 4.384615 7366.348 7579.057  59.219003 0.9643993
## 4.461538 8080.387 7710.788  66.470182 1.0389763
## 4.538462 8106.871 7860.920  74.836362 1.0215625
## 4.615385 7356.631 7887.033  69.964009 0.9245487
## 4.692308 8143.623 7965.946  70.858916 1.0132911
## 4.769231 8079.871 7780.684  45.246871 1.0324485
## 4.846154 7900.414 8089.989  71.652620 0.9679933
## 4.923077 8281.188 8064.861  61.974575 1.0189930
## 5.000000 7482.463 7965.659  45.856931 0.9339635
## 5.076923 8315.259 8140.115  58.716889 1.0142004
## 5.153846 7861.276 8109.450  49.778635 0.9634827
## 5.230769 8492.453 8102.294  44.085210 1.0424819
## 5.307692 8451.009 7774.296   6.876833 1.0860842
## 5.384615 7365.985 7567.191 -14.521301 0.9752823
## 5.461538 7813.305 7450.138 -24.774441 1.0522454
## 5.538462 7380.458 7314.495 -35.861303 1.0139894
## 5.615385 7234.309 7798.076  16.082874 0.9257951
## 5.692308 7507.502 7708.237   5.490693 0.9732651
## 5.769231 8220.131 7661.429   0.260829 1.0728875
## 5.846154 6917.253 7287.535 -37.154675 0.9540539
## 5.923077 7181.099 7258.922 -36.300496 0.9942511
## 6.000000 6781.494 7167.686 -41.794068 0.9516695
## 6.076923 7111.994 7146.173 -39.765918 1.0007861
## 6.153846 6955.519 7300.856 -20.321082 0.9553584
## 6.230769 7077.039 7227.880 -25.586528 0.9826091
## 6.307692 7541.049 7211.852 -24.630687 1.0492301
## 6.384615 6526.463 6861.449 -57.207887 0.9591757
## 6.461538 6905.840 6747.429 -62.889076 1.0331062
## 6.538462 7119.968 6575.773 -73.765794 1.0950415
## 6.615385 5780.117 6429.139 -81.052598 0.9105290
## 6.692308 6282.727 6567.714 -59.089917 0.9652927
## 6.769231 6518.608 6531.471 -56.805152 1.0067868
## 6.846154 6096.013 6440.774 -60.194314 0.9554011
## 6.923077 6131.886 6293.494 -68.902976 0.9851068
## 7.000000 5880.075 6226.441 -68.717947 0.9549106
## 7.076923 6298.051 6166.085 -67.881741 1.0327716
## 7.153846 5679.880 6068.564 -70.845636 0.9470067
## 7.230769 6150.433 6290.878 -41.529684 0.9841719
## 7.307692 6300.601 6394.763 -26.988182 0.9894510
## 7.384615 6352.434 6685.608   4.795073 0.9494844
## 7.461538 6625.780 6552.342  -9.011019 1.0126004
## 7.538462 7106.193 6583.864  -4.957686 1.0801480
## 7.615385 6300.391 6650.343   2.185914 0.9470671
## 7.692308 6668.593 6856.867  22.619711 0.9693447
## 7.769231 7328.620 7264.366  61.107705 1.0004295
## 7.846154 7093.759 7474.286  75.988915 0.9395366
## 7.923077 7443.424 7483.910  69.352463 0.9854581
## 8.000000 6947.106 7226.628  36.688997 0.9564646
## 8.076923 7319.798 7108.140  21.171315 1.0267188
## 8.153846 7214.764 7187.984  27.038588 0.9999642
## 8.230769 7085.084 7002.062   5.742537 1.0110276
## 8.307692 7573.030 7214.311  26.393121 1.0458969
xhat2 <- winter2$fitted[,2]

winter2.opt<- HoltWinters(training.ts, alpha= NULL,  beta = NULL, gamma = NULL, seasonal = "multiplicative")
winter2.opt$fitted
## Time Series:
## Start = c(2, 1) 
## End = c(8, 5) 
## Frequency = 13 
##              xhat    level    trend    season
## 2.000000 5774.163 6597.992 21.14827 0.8723434
## 2.076923 6898.044 6676.977 21.14827 1.0298469
## 2.153846 6384.970 6723.929 21.14827 0.9466118
## 2.230769 6899.878 6778.173 21.14827 1.0147893
## 2.307692 7750.974 6815.997 21.14827 1.1336565
## 2.384615 6570.109 6840.786 21.14827 0.9574719
## 2.461538 7287.600 6881.496 21.14827 1.0557693
## 2.538462 7729.116 7147.288 21.14827 1.0782151
## 2.615385 6526.905 6888.040 21.14827 0.9446704
## 2.692308 7413.767 7081.756 21.14827 1.0437656
## 2.769231 7286.169 6923.291 21.14827 1.0492092
## 2.846154 6152.321 6791.014 21.14827 0.9031378
## 2.923077 6893.933 7082.243 21.14827 0.9705129
## 3.000000 6234.883 7099.371 21.14827 0.8756220
## 3.076923 7555.002 7302.700 21.14827 1.0315617
## 3.153846 6612.657 6949.689 21.14827 0.9486173
## 3.230769 7236.510 7102.337 21.14827 1.0158666
## 3.307692 8054.389 7082.000 21.14827 1.1339182
## 3.384615 6727.219 6996.219 21.14827 0.9586528
## 3.461538 7576.601 7050.209 21.14827 1.0714493
## 3.538462 7216.472 6792.174 21.14827 1.0591707
## 3.615385 6450.018 6735.213 21.14827 0.9546585
## 3.692308 6737.868 6507.691 21.14827 1.0320162
## 3.769231 6769.286 6494.521 21.14827 1.0389241
## 3.846154 6018.215 6534.059 21.14827 0.9180816
## 3.923077 6543.508 6722.828 21.14827 0.9702745
## 4.000000 6221.188 7007.647 21.14827 0.8851001
## 4.076923 7304.243 7228.977 21.14827 1.0074643
## 4.153846 7144.309 7450.119 21.14827 0.9562380
## 4.230769 7561.965 7441.677 21.14827 1.0132846
## 4.307692 8662.911 7669.657 21.14827 1.1263985
## 4.384615 7249.531 7525.805 21.14827 0.9605904
## 4.461538 8069.525 7647.022 21.14827 1.0523404
## 4.538462 8195.249 7755.403 21.14827 1.0538411
## 4.615385 7258.805 7710.605 21.14827 0.9388304
## 4.692308 8014.234 7762.306 21.14827 1.0296500
## 4.769231 7875.090 7549.650 21.14827 1.0401928
## 4.846154 7333.684 7881.411 21.14827 0.9280137
## 4.923077 7835.216 7924.391 21.14827 0.9861150
## 5.000000 7065.806 7867.130 21.14827 0.8957348
## 5.076923 8299.783 8122.290 21.14827 1.0191988
## 5.153846 7709.324 8054.924 21.14827 0.9545883
## 5.230769 8273.724 8049.666 21.14827 1.0251411
## 5.307692 8642.160 7724.922 21.14827 1.1156831
## 5.384615 7262.035 7496.139 21.14827 0.9660446
## 5.461538 7882.382 7432.808 21.14827 1.0574763
## 5.538462 7714.862 7326.827 21.14827 1.0499303
## 5.615385 7354.544 7799.226 21.14827 0.9404337
## 5.692308 7829.632 7686.591 21.14827 1.0158143
## 5.769231 8053.253 7590.763 21.14827 1.0579803
## 5.846154 6759.019 7253.474 21.14827 0.9291230
## 5.923077 7206.687 7318.754 21.14827 0.9818506
## 6.000000 6619.121 7277.215 21.14827 0.9069323
## 6.076923 7484.132 7357.184 21.14827 1.0143393
## 6.153846 7169.764 7500.402 21.14827 0.9532295
## 6.230769 7480.891 7420.862 21.14827 1.0052245
## 6.307692 8125.618 7368.848 21.14827 1.0995429
## 6.384615 6710.978 6960.141 21.14827 0.9612805
## 6.461538 7246.351 6883.327 21.14827 1.0495150
## 6.538462 7263.277 6727.302 21.14827 1.0762882
## 6.615385 6221.377 6644.624 21.14827 0.9333317
## 6.692308 6871.701 6789.110 21.14827 1.0090221
## 6.769231 6971.313 6712.495 21.14827 1.0352958
## 6.846154 6176.878 6609.576 21.14827 0.9315539
## 6.923077 6399.218 6520.810 21.14827 0.9781807
## 7.000000 5923.436 6487.561 21.14827 0.9100785
## 7.076923 6669.469 6507.931 21.14827 1.0215022
## 7.153846 6106.851 6423.277 21.14827 0.9476176
## 7.230769 6680.553 6653.437 21.14827 1.0008941
## 7.307692 7205.816 6712.766 21.14827 1.0700783
## 7.384615 6576.157 6862.397 21.14827 0.9553445
## 7.461538 6967.020 6693.910 21.14827 1.0375219
## 7.538462 7172.065 6688.042 21.14827 1.0689912
## 7.615385 6389.170 6770.864 21.14827 0.9406888
## 7.692308 7024.214 6984.531 21.14827 1.0026457
## 7.769231 7534.230 7315.979 21.14827 1.0268638
## 7.846154 6904.480 7445.246 21.14827 0.9247408
## 7.923077 7270.923 7439.101 21.14827 0.9746219
## 8.000000 6531.824 7156.434 21.14827 0.9100313
## 8.076923 7225.906 7103.575 21.14827 1.0142016
## 8.153846 6940.962 7205.000 21.14827 0.9605341
## 8.230769 7101.417 7056.459 21.14827 1.0033642
## 8.307692 7885.600 7288.650 21.14827 1.0787712
xhat2.opt <- winter2.opt$fitted[,2]

Peramalan

#Forecast
forecast2 <- predict(winter2, n.ahead = 24)
forecast2.opt <- predict(winter2.opt, n.ahead = 24)

Plot Deret Waktu

#Plot time series
plot(training.ts,main="Winter 0.2;0.1;0.1",type="l",col="black",
     xlim = c(1,25),pch=12)
lines(xhat2,type="l",col="red")
lines(xhat2.opt,type="l",col="blue")
lines(forecast2,type="l",col="red")
lines(forecast2.opt,type="l",col="blue")
legend("topleft",c("Actual Data",expression(paste(winter2)),
                   expression(paste(winter2.opt))),cex=0.5,
       col=c("black","red","blue"),lty=1)

Akurasi Data Latih

#Akurasi data training
SSE2<-winter2$SSE
MSE2<-winter2$SSE/length(training.ts)
RMSE2<-sqrt(MSE2)
akurasi1 <- matrix(c(SSE2,MSE2,RMSE2))
row.names(akurasi1)<- c("SSE2", "MSE2", "RMSE2")
colnames(akurasi1) <- c("Akurasi lamda=0.2")
akurasi1
##       Akurasi lamda=0.2
## SSE2       72935600.642
## MSE2         759745.840
## RMSE2           871.634
SSE2.opt<-winter2.opt$SSE
MSE2.opt<-winter2.opt$SSE/length(training.ts)
RMSE2.opt<-sqrt(MSE2.opt)
akurasi1.opt <- matrix(c(SSE2.opt,MSE2.opt,RMSE2.opt))
row.names(akurasi1.opt)<- c("SSE2.opt", "MSE2.opt", "RMSE2.opt")
colnames(akurasi1.opt) <- c("Akurasi")
akurasi1.opt
##                Akurasi
## SSE2.opt  6.679399e+07
## MSE2.opt  6.957708e+05
## RMSE2.opt 8.341287e+02
akurasi2.train = data.frame(Model_Winter = c("Winter 1","winter2 optimal"),
                            Nilai_SSE=c(SSE2,SSE2.opt),
                            Nilai_MSE=c(MSE2,MSE2.opt),Nilai_RMSE=c(RMSE2,RMSE2.opt))
akurasi2.train
##      Model_Winter Nilai_SSE Nilai_MSE Nilai_RMSE
## 1        Winter 1  72935601  759745.8   871.6340
## 2 winter2 optimal  66793993  695770.8   834.1287

Akurasi Data Uji

#Akurasi Data Testing
forecast2<-data.frame(forecast2)
testing.ts<-data.frame(testing.ts)
selisih2<-forecast2-testing.ts
SSEtesting2<-sum(selisih2^2)
MSEtesting2<-SSEtesting2/length(testing.ts)

forecast2.opt<-data.frame(forecast2.opt)
selisih2.opt<-forecast2.opt-testing.ts
SSEtesting2.opt<-sum(selisih2.opt^2)
MSEtesting2.opt<-SSEtesting2.opt/length(testing.ts)