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
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)
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 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 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))
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.
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.
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 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 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))
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.
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 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
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 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 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
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.
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.
Perhitungan dengan model aditif dilakukan jika plot data asli menunjukkan fluktuasi musiman yang relatif stabil (konstan).
#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]
#Forecast
forecast1 <- predict(winter1, n.ahead = 24)
forecast1.opt <- predict(winter1.opt, n.ahead = 24)
#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 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 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)
Model multiplikatif digunakan cocok digunakan jika plot data asli menunjukkan fluktuasi musiman yang bervariasi.
#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]
#Forecast
forecast2 <- predict(winter2, n.ahead = 24)
forecast2.opt <- predict(winter2.opt, n.ahead = 24)
#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 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 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)