Kumpulan Library

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.3
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
library("rio")
library("ggplot2")
## Warning: package 'ggplot2' was built under R version 4.3.2
library("readxl")
## Warning: package 'readxl' was built under R version 4.3.2

Import dan Seleksi Data

kloter5<-read_excel("C:/Users/Nabil Ibni Nawawi/Documents/KULIAH/Semester 5/MPDW/Data/Nabil.xlsx")
kloter5$periode<-c(401:500)

Eksplorasi Data

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

View(kloter5)
str(kloter5)
## tibble [100 × 2] (S3: tbl_df/tbl/data.frame)
##  $ periode: int [1:100] 401 402 403 404 405 406 407 408 409 410 ...
##  $ milisec: num [1:100] 27.3 27.4 27.4 27.2 27.3 ...
dim(kloter5)
## [1] 100   2

Data terdiri dari 100 baris dan 2 kolom, dengan kolom yaitu periode dan milisec (suhu dari selat sunda) dalam derajat Celcius. Periode data yang digunakan dimulai dari periode ke 401 sampai 500. dengan tipe data dari periode dan milisec yaitu integer dan numeric.

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

kloter5.ts <- ts(kloter5$milisec)

Menampilkan ringkasan data

summary(kloter5.ts)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   27.08   28.02   28.46   28.40   28.93   29.36

Terdapat nilai statistik 5 serangkai untuk data yang digunakan.

Membuat plot data deret waktu

ts.plot(kloter5.ts, xlab="Time Period", ylab="Suhu", 
        main = "Time Series Plot")
points(kloter5.ts)

Dari plot terlihat pola nya adalah tidak stasioner.

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 <- kloter5[1:80,]
testing_ma <- kloter5[81:100,]
train_ma.ts <- ts(training_ma$milisec)
test_ma.ts <- ts(testing_ma$milisec)

Eksplorasi Data

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

#eksplorasi keseluruhan data
plot(kloter5.ts, col="red",main="Plot semua data")
points(kloter5.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.

ggplot() + 
  geom_line(data = training_ma, aes(x = periode, y = milisec, col = "Data Latih")) +
  geom_line(data = testing_ma, aes(x = periode, y = milisec, col = "Data Uji")) +
  labs(x = "Periode Waktu", y = "Suhu", 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=3.

data.sma<-SMA(train_ma.ts, n=3)
data.sma
## Time Series:
## Start = 1 
## End = 80 
## Frequency = 1 
##  [1]       NA       NA 27.35723 27.31337 27.30667 27.29903 27.37253 27.36080
##  [9] 27.26073 27.21507 27.23713 27.30523 27.37450 27.47420 27.57613 27.55263
## [17] 27.36190 27.35727 27.48000 27.81313 28.03770 28.18117 28.24740 28.25850
## [25] 28.27227 28.10640 27.99917 27.84237 27.87230 27.89657 28.08087 28.24843
## [33] 28.39167 28.47013 28.49220 28.48343 28.45947 28.46100 28.48357 28.54657
## [41] 28.59157 28.57330 28.38930 28.32047 28.39350 28.64947 28.86490 28.99430
## [49] 29.03187 28.97053 28.86770 28.66500 28.61643 28.69193 28.89263 29.07513
## [57] 29.17123 29.24337 29.20470 29.10413 29.04730 29.01200 28.86307 28.79460
## [65] 28.77280 28.81880 28.75680 28.71737 28.82947 28.91837 28.86847 28.60007
## [73] 28.44383 28.29220 28.34280 28.34970 28.40317 28.37323 28.37770 28.34983

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 27.35723 27.31337 27.30667 27.29903 27.37253
##  [9] 27.36080 27.26073 27.21507 27.23713 27.30523 27.37450 27.47420 27.57613
## [17] 27.55263 27.36190 27.35727 27.48000 27.81313 28.03770 28.18117 28.24740
## [25] 28.25850 28.27227 28.10640 27.99917 27.84237 27.87230 27.89657 28.08087
## [33] 28.24843 28.39167 28.47013 28.49220 28.48343 28.45947 28.46100 28.48357
## [41] 28.54657 28.59157 28.57330 28.38930 28.32047 28.39350 28.64947 28.86490
## [49] 28.99430 29.03187 28.97053 28.86770 28.66500 28.61643 28.69193 28.89263
## [57] 29.07513 29.17123 29.24337 29.20470 29.10413 29.04730 29.01200 28.86307
## [65] 28.79460 28.77280 28.81880 28.75680 28.71737 28.82947 28.91837 28.86847
## [73] 28.60007 28.44383 28.29220 28.34280 28.34970 28.40317 28.37323 28.37770
## [81] 28.34983

Selanjutnya akan dilakukan peramalan sejumlah data uji yaitu 20 periode. Pada metode SMA, hasil peramalan 20 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 20 periode kedepan.

data.gab<-cbind(aktual=c(train_ma.ts,rep(NA,20)),pemulusan=c(data.sma,rep(NA,20)),ramalan=c(data.ramal,rep(data.ramal[length(data.ramal)],19)))
data.gab #forecast 20 periode ke depan
##         aktual pemulusan  ramalan
##   [1,] 27.3128        NA       NA
##   [2,] 27.3514        NA       NA
##   [3,] 27.4075  27.35723       NA
##   [4,] 27.1812  27.31337 27.35723
##   [5,] 27.3313  27.30667 27.31337
##   [6,] 27.3846  27.29903 27.30667
##   [7,] 27.4017  27.37253 27.29903
##   [8,] 27.2961  27.36080 27.37253
##   [9,] 27.0844  27.26073 27.36080
##  [10,] 27.2647  27.21507 27.26073
##  [11,] 27.3623  27.23713 27.21507
##  [12,] 27.2887  27.30523 27.23713
##  [13,] 27.4725  27.37450 27.30523
##  [14,] 27.6614  27.47420 27.37450
##  [15,] 27.5945  27.57613 27.47420
##  [16,] 27.4020  27.55263 27.57613
##  [17,] 27.0892  27.36190 27.55263
##  [18,] 27.5806  27.35727 27.36190
##  [19,] 27.7702  27.48000 27.35727
##  [20,] 28.0886  27.81313 27.48000
##  [21,] 28.2543  28.03770 27.81313
##  [22,] 28.2006  28.18117 28.03770
##  [23,] 28.2873  28.24740 28.18117
##  [24,] 28.2876  28.25850 28.24740
##  [25,] 28.2419  28.27227 28.25850
##  [26,] 27.7897  28.10640 28.27227
##  [27,] 27.9659  27.99917 28.10640
##  [28,] 27.7715  27.84237 27.99917
##  [29,] 27.8795  27.87230 27.84237
##  [30,] 28.0387  27.89657 27.87230
##  [31,] 28.3244  28.08087 27.89657
##  [32,] 28.3822  28.24843 28.08087
##  [33,] 28.4684  28.39167 28.24843
##  [34,] 28.5598  28.47013 28.39167
##  [35,] 28.4484  28.49220 28.47013
##  [36,] 28.4421  28.48343 28.49220
##  [37,] 28.4879  28.45947 28.48343
##  [38,] 28.4530  28.46100 28.45947
##  [39,] 28.5098  28.48357 28.46100
##  [40,] 28.6769  28.54657 28.48357
##  [41,] 28.5880  28.59157 28.54657
##  [42,] 28.4550  28.57330 28.59157
##  [43,] 28.1249  28.38930 28.57330
##  [44,] 28.3815  28.32047 28.38930
##  [45,] 28.6741  28.39350 28.32047
##  [46,] 28.8928  28.64947 28.39350
##  [47,] 29.0278  28.86490 28.64947
##  [48,] 29.0623  28.99430 28.86490
##  [49,] 29.0055  29.03187 28.99430
##  [50,] 28.8438  28.97053 29.03187
##  [51,] 28.7538  28.86770 28.97053
##  [52,] 28.3974  28.66500 28.86770
##  [53,] 28.6981  28.61643 28.66500
##  [54,] 28.9803  28.69193 28.61643
##  [55,] 28.9995  28.89263 28.69193
##  [56,] 29.2456  29.07513 28.89263
##  [57,] 29.2686  29.17123 29.07513
##  [58,] 29.2159  29.24337 29.17123
##  [59,] 29.1296  29.20470 29.24337
##  [60,] 28.9669  29.10413 29.20470
##  [61,] 29.0454  29.04730 29.10413
##  [62,] 29.0237  29.01200 29.04730
##  [63,] 28.5201  28.86307 29.01200
##  [64,] 28.8400  28.79460 28.86307
##  [65,] 28.9583  28.77280 28.79460
##  [66,] 28.6581  28.81880 28.77280
##  [67,] 28.6540  28.75680 28.81880
##  [68,] 28.8400  28.71737 28.75680
##  [69,] 28.9944  28.82947 28.71737
##  [70,] 28.9207  28.91837 28.82947
##  [71,] 28.6903  28.86847 28.91837
##  [72,] 28.1892  28.60007 28.86847
##  [73,] 28.4520  28.44383 28.60007
##  [74,] 28.2354  28.29220 28.44383
##  [75,] 28.3410  28.34280 28.29220
##  [76,] 28.4727  28.34970 28.34280
##  [77,] 28.3958  28.40317 28.34970
##  [78,] 28.2512  28.37323 28.40317
##  [79,] 28.4861  28.37770 28.37323
##  [80,] 28.3122  28.34983 28.37770
##  [81,]      NA        NA 28.34983
##  [82,]      NA        NA 28.34983
##  [83,]      NA        NA 28.34983
##  [84,]      NA        NA 28.34983
##  [85,]      NA        NA 28.34983
##  [86,]      NA        NA 28.34983
##  [87,]      NA        NA 28.34983
##  [88,]      NA        NA 28.34983
##  [89,]      NA        NA 28.34983
##  [90,]      NA        NA 28.34983
##  [91,]      NA        NA 28.34983
##  [92,]      NA        NA 28.34983
##  [93,]      NA        NA 28.34983
##  [94,]      NA        NA 28.34983
##  [95,]      NA        NA 28.34983
##  [96,]      NA        NA 28.34983
##  [97,]      NA        NA 28.34983
##  [98,]      NA        NA 28.34983
##  [99,]      NA        NA 28.34983
## [100,]      NA        NA 28.34983

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

ts.plot(kloter5.ts, xlab="Time Period ", ylab="Suhu", main= "SMA N=3 Suhu")
points(kloter5.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[4:length(train_ma.ts)]^2)
MSE_train.sma <- mean(error_train.sma[4:length(train_ma.ts)]^2)
MAPE_train.sma <- mean(abs((error_train.sma[4:length(train_ma.ts)]/train_ma.ts[4: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 = 3")
akurasi_train.sma
##      Akurasi m = 3
## SSE     4.66333256
## MSE     0.06056276
## MAPE    0.66782569

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

#Menghitung nilai keakuratan data uji
error_test.sma = test_ma.ts-data.gab[81:100,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 = 3")
akurasi_test.sma
##      Akurasi m = 3
## SSE      9.4894498
## MSE      0.4744725
## MAPE     2.1452753

Perhitungan akurasi menggunakan data latih menghasilkan nilai MAPE yang kurang dari 10% sehingga nilai akurasi ini dapat dikategorikan sebagai sangat baik.

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

data.sma2<-SMA(train_ma.ts, n=5)
data.sma2
## Time Series:
## Start = 1 
## End = 80 
## Frequency = 1 
##  [1]       NA       NA       NA       NA 27.31684 27.33120 27.34126 27.31898
##  [9] 27.29962 27.28630 27.28184 27.25924 27.29452 27.40992 27.47588 27.48382
## [17] 27.44392 27.46554 27.48730 27.58612 27.75658 27.97886 28.12020 28.22368
## [25] 28.25434 28.16142 28.11448 28.01132 27.92970 27.88906 27.99600 28.07926
## [33] 28.21864 28.35470 28.43664 28.46018 28.48132 28.47824 28.46824 28.51394
## [41] 28.54312 28.53654 28.47092 28.44526 28.44470 28.50566 28.62022 28.80770
## [49] 28.93250 28.96644 28.93864 28.81256 28.73972 28.73468 28.76582 28.86418
## [57] 29.03842 29.14198 29.17184 29.16532 29.12528 29.07630 28.93714 28.87922
## [65] 28.87750 28.80004 28.72610 28.79008 28.82096 28.81344 28.81988 28.72692
## [73] 28.64932 28.49752 28.38158 28.33806 28.37938 28.33922 28.38936 28.38360

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.ramal2<-c(NA,data.sma2)
data.ramal2 #forecast 1 periode ke depan
##  [1]       NA       NA       NA       NA       NA 27.31684 27.33120 27.34126
##  [9] 27.31898 27.29962 27.28630 27.28184 27.25924 27.29452 27.40992 27.47588
## [17] 27.48382 27.44392 27.46554 27.48730 27.58612 27.75658 27.97886 28.12020
## [25] 28.22368 28.25434 28.16142 28.11448 28.01132 27.92970 27.88906 27.99600
## [33] 28.07926 28.21864 28.35470 28.43664 28.46018 28.48132 28.47824 28.46824
## [41] 28.51394 28.54312 28.53654 28.47092 28.44526 28.44470 28.50566 28.62022
## [49] 28.80770 28.93250 28.96644 28.93864 28.81256 28.73972 28.73468 28.76582
## [57] 28.86418 29.03842 29.14198 29.17184 29.16532 29.12528 29.07630 28.93714
## [65] 28.87922 28.87750 28.80004 28.72610 28.79008 28.82096 28.81344 28.81988
## [73] 28.72692 28.64932 28.49752 28.38158 28.33806 28.37938 28.33922 28.38936
## [81] 28.38360

Selanjutnya akan dilakukan peramalan sejumlah data uji yaitu 20 periode. Pada metode SMA, hasil peramalan 20 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 20 periode kedepan.

data.gab2<-cbind(aktual=c(train_ma.ts,rep(NA,20)),pemulusan=c(data.sma2,rep(NA,20)),ramalan=c(data.ramal2,rep(data.ramal2[length(data.ramal2)],19)))
data.gab2 #forecast 20 periode ke depan
##         aktual pemulusan  ramalan
##   [1,] 27.3128        NA       NA
##   [2,] 27.3514        NA       NA
##   [3,] 27.4075        NA       NA
##   [4,] 27.1812        NA       NA
##   [5,] 27.3313  27.31684       NA
##   [6,] 27.3846  27.33120 27.31684
##   [7,] 27.4017  27.34126 27.33120
##   [8,] 27.2961  27.31898 27.34126
##   [9,] 27.0844  27.29962 27.31898
##  [10,] 27.2647  27.28630 27.29962
##  [11,] 27.3623  27.28184 27.28630
##  [12,] 27.2887  27.25924 27.28184
##  [13,] 27.4725  27.29452 27.25924
##  [14,] 27.6614  27.40992 27.29452
##  [15,] 27.5945  27.47588 27.40992
##  [16,] 27.4020  27.48382 27.47588
##  [17,] 27.0892  27.44392 27.48382
##  [18,] 27.5806  27.46554 27.44392
##  [19,] 27.7702  27.48730 27.46554
##  [20,] 28.0886  27.58612 27.48730
##  [21,] 28.2543  27.75658 27.58612
##  [22,] 28.2006  27.97886 27.75658
##  [23,] 28.2873  28.12020 27.97886
##  [24,] 28.2876  28.22368 28.12020
##  [25,] 28.2419  28.25434 28.22368
##  [26,] 27.7897  28.16142 28.25434
##  [27,] 27.9659  28.11448 28.16142
##  [28,] 27.7715  28.01132 28.11448
##  [29,] 27.8795  27.92970 28.01132
##  [30,] 28.0387  27.88906 27.92970
##  [31,] 28.3244  27.99600 27.88906
##  [32,] 28.3822  28.07926 27.99600
##  [33,] 28.4684  28.21864 28.07926
##  [34,] 28.5598  28.35470 28.21864
##  [35,] 28.4484  28.43664 28.35470
##  [36,] 28.4421  28.46018 28.43664
##  [37,] 28.4879  28.48132 28.46018
##  [38,] 28.4530  28.47824 28.48132
##  [39,] 28.5098  28.46824 28.47824
##  [40,] 28.6769  28.51394 28.46824
##  [41,] 28.5880  28.54312 28.51394
##  [42,] 28.4550  28.53654 28.54312
##  [43,] 28.1249  28.47092 28.53654
##  [44,] 28.3815  28.44526 28.47092
##  [45,] 28.6741  28.44470 28.44526
##  [46,] 28.8928  28.50566 28.44470
##  [47,] 29.0278  28.62022 28.50566
##  [48,] 29.0623  28.80770 28.62022
##  [49,] 29.0055  28.93250 28.80770
##  [50,] 28.8438  28.96644 28.93250
##  [51,] 28.7538  28.93864 28.96644
##  [52,] 28.3974  28.81256 28.93864
##  [53,] 28.6981  28.73972 28.81256
##  [54,] 28.9803  28.73468 28.73972
##  [55,] 28.9995  28.76582 28.73468
##  [56,] 29.2456  28.86418 28.76582
##  [57,] 29.2686  29.03842 28.86418
##  [58,] 29.2159  29.14198 29.03842
##  [59,] 29.1296  29.17184 29.14198
##  [60,] 28.9669  29.16532 29.17184
##  [61,] 29.0454  29.12528 29.16532
##  [62,] 29.0237  29.07630 29.12528
##  [63,] 28.5201  28.93714 29.07630
##  [64,] 28.8400  28.87922 28.93714
##  [65,] 28.9583  28.87750 28.87922
##  [66,] 28.6581  28.80004 28.87750
##  [67,] 28.6540  28.72610 28.80004
##  [68,] 28.8400  28.79008 28.72610
##  [69,] 28.9944  28.82096 28.79008
##  [70,] 28.9207  28.81344 28.82096
##  [71,] 28.6903  28.81988 28.81344
##  [72,] 28.1892  28.72692 28.81988
##  [73,] 28.4520  28.64932 28.72692
##  [74,] 28.2354  28.49752 28.64932
##  [75,] 28.3410  28.38158 28.49752
##  [76,] 28.4727  28.33806 28.38158
##  [77,] 28.3958  28.37938 28.33806
##  [78,] 28.2512  28.33922 28.37938
##  [79,] 28.4861  28.38936 28.33922
##  [80,] 28.3122  28.38360 28.38936
##  [81,]      NA        NA 28.38360
##  [82,]      NA        NA 28.38360
##  [83,]      NA        NA 28.38360
##  [84,]      NA        NA 28.38360
##  [85,]      NA        NA 28.38360
##  [86,]      NA        NA 28.38360
##  [87,]      NA        NA 28.38360
##  [88,]      NA        NA 28.38360
##  [89,]      NA        NA 28.38360
##  [90,]      NA        NA 28.38360
##  [91,]      NA        NA 28.38360
##  [92,]      NA        NA 28.38360
##  [93,]      NA        NA 28.38360
##  [94,]      NA        NA 28.38360
##  [95,]      NA        NA 28.38360
##  [96,]      NA        NA 28.38360
##  [97,]      NA        NA 28.38360
##  [98,]      NA        NA 28.38360
##  [99,]      NA        NA 28.38360
## [100,]      NA        NA 28.38360

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

ts.plot(kloter5.ts, xlab="Time Period ", ylab="Suhu", main= "SMA N=5 Suhu")
points(kloter5.ts)
lines(data.gab2[,2],col="green",lwd=2)
lines(data.gab2[,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.sma2 <- train_ma.ts-data.ramal2[1:length(train_ma.ts)]
SSE_train.sma2 <- sum(error_train.sma2[6:length(train_ma.ts)]^2)
MSE_train.sma2 <- mean(error_train.sma2[6:length(train_ma.ts)]^2)
MAPE_train.sma2 <- mean(abs((error_train.sma2[6:length(train_ma.ts)]/train_ma.ts[6:length(train_ma.ts)])*100))

akurasi_train.sma2 <- matrix(c(SSE_train.sma2, MSE_train.sma2, MAPE_train.sma2))
row.names(akurasi_train.sma2)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_train.sma2) <- c("Akurasi m = 5")
akurasi_train.sma2
##      Akurasi m = 5
## SSE     5.88097096
## MSE     0.07841295
## MAPE    0.78436293

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

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

akurasi_test.sma2 <- matrix(c(SSE_test.sma2, MSE_test.sma2, MAPE_test.sma2))
row.names(akurasi_test.sma2)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_test.sma2) <- c("Akurasi m = 5")
akurasi_test.sma2
##      Akurasi m = 5
## SSE      8.8317314
## MSE      0.4415866
## MAPE     2.0644555

Perhitungan akurasi menggunakan data latih menghasilkan nilai MAPE yang kurang dari 10% sehingga nilai akurasi ini dapat dikategorikan sebagai sangat 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 = 3)
At <- 2*data.sma - dma
Bt <- 2/(3-1)*(data.sma - dma)
data.dma<- At+Bt
data.ramal3<- c(NA, data.dma)

t = 1:20
f = c()

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

data.gab3 <- cbind(aktual = c(train_ma.ts,rep(NA,20)), pemulusan1 = c(data.sma,rep(NA,20)),pemulusan2 = c(data.dma, rep(NA,20)),At = c(At, rep(NA,20)), Bt = c(Bt,rep(NA,20)),ramalan = c(data.ramal3, f[-1]))
data.gab3
##         aktual pemulusan1 pemulusan2       At            Bt  ramalan
##   [1,] 27.3128         NA         NA       NA            NA       NA
##   [2,] 27.3514         NA         NA       NA            NA       NA
##   [3,] 27.4075   27.35723         NA       NA            NA       NA
##   [4,] 27.1812   27.31337         NA       NA            NA       NA
##   [5,] 27.3313   27.30667   27.26849 27.28758 -0.0190888889       NA
##   [6,] 27.3846   27.29903   27.28439 27.29171 -0.0073222222 27.26849
##   [7,] 27.4017   27.37253   27.46544 27.41899  0.0464555556 27.28439
##   [8,] 27.2961   27.36080   27.39416 27.37748  0.0166777778 27.46544
##   [9,] 27.0844   27.26073   27.11949 27.19011 -0.0706222222 27.39416
##  [10,] 27.2647   27.21507   27.08747 27.15127 -0.0638000000 27.11949
##  [11,] 27.3623   27.23713   27.23611 27.23662 -0.0005111111 27.08747
##  [12,] 27.2887   27.30523   27.41074 27.35799  0.0527555556 27.23611
##  [13,] 27.4725   27.37450   27.51226 27.44338  0.0688777778 27.41074
##  [14,] 27.6614   27.47420   27.65331 27.56376  0.0895555556 27.51226
##  [15,] 27.5945   27.57613   27.77851 27.67732  0.1011888889 27.65331
##  [16,] 27.4020   27.55263   27.58926 27.57094  0.0183111111 27.77851
##  [17,] 27.0892   27.36190   27.09192 27.22691 -0.1349888889 27.58926
##  [18,] 27.5806   27.35727   27.22393 27.29060 -0.0666666667 27.09192
##  [19,] 27.7702   27.48000   27.64056 27.56028  0.0802777778 27.22393
##  [20,] 28.0886   27.81313   28.33913 28.07613  0.2630000000 27.64056
##  [21,] 28.2543   28.03770   28.55921 28.29846  0.2607555556 28.33913
##  [22,] 28.2006   28.18117   28.52217 28.35167  0.1705000000 28.55921
##  [23,] 28.2873   28.24740   28.43136 28.33938  0.0919777778 28.52217
##  [24,] 28.2876   28.25850   28.31746 28.28798  0.0294777778 28.43136
##  [25,] 28.2419   28.27227   28.29802 28.28514  0.0128777778 28.31746
##  [26,] 27.7897   28.10640   27.89442 28.00041 -0.1059888889 28.29802
##  [27,] 27.9659   27.99917   27.74561 27.87239 -0.1267777778 27.89442
##  [28,] 27.7715   27.84237   27.56181 27.70209 -0.1402777778 27.74561
##  [29,] 27.8795   27.87230   27.80768 27.83999 -0.0323111111 27.56181
##  [30,] 28.0387   27.89657   27.94888 27.92272  0.0261555556 27.80768
##  [31,] 28.3244   28.08087   28.34278 28.21182  0.1309555556 27.94888
##  [32,] 28.3822   28.24843   28.59472 28.42158  0.1731444444 28.34278
##  [33,] 28.4684   28.39167   28.69436 28.54301  0.1513444444 28.59472
##  [34,] 28.5598   28.47013   28.67024 28.57019  0.1000555556 28.69436
##  [35,] 28.4484   28.49220   28.57393 28.53307  0.0408666667 28.67024
##  [36,] 28.4421   28.48343   28.48646 28.48494  0.0015111111 28.57393
##  [37,] 28.4879   28.45947   28.42167 28.44057 -0.0189000000 28.48646
##  [38,] 28.4530   28.46100   28.44707 28.45403 -0.0069666667 28.42167
##  [39,] 28.5098   28.48357   28.51468 28.49912  0.0155555556 28.44707
##  [40,] 28.6769   28.54657   28.64561 28.59609  0.0495222222 28.51468
##  [41,] 28.5880   28.59157   28.69357 28.64257  0.0510000000 28.64561
##  [42,] 28.4550   28.57330   28.57894 28.57612  0.0028222222 28.69357
##  [43,] 28.1249   28.38930   28.13179 28.26054 -0.1287555556 28.57894
##  [44,] 28.3815   28.32047   28.10602 28.21324 -0.1072222222 28.13179
##  [45,] 28.6741   28.39350   28.44499 28.41924  0.0257444444 28.10602
##  [46,] 28.8928   28.64947   29.03944 28.84446  0.1949888889 28.44499
##  [47,] 29.0278   28.86490   29.32279 29.09384  0.2289444444 29.03944
##  [48,] 29.0623   28.99430   29.31046 29.15238  0.1580777778 29.32279
##  [49,] 29.0055   29.03187   29.16822 29.10004  0.0681777778 29.31046
##  [50,] 28.8438   28.97053   28.91380 28.94217 -0.0283666667 29.16822
##  [51,] 28.7538   28.86770   28.68970 28.77870 -0.0890000000 28.91380
##  [52,] 28.3974   28.66500   28.32618 28.49559 -0.1694111111 28.68970
##  [53,] 28.6981   28.61643   28.41654 28.51649 -0.0999444444 28.32618
##  [54,] 28.9803   28.69193   28.76022 28.72608  0.0341444444 28.41654
##  [55,] 28.9995   28.89263   29.21057 29.05160  0.1589666667 28.76022
##  [56,] 29.2456   29.07513   29.45227 29.26370  0.1885666667 29.21057
##  [57,] 29.2686   29.17123   29.42103 29.29613  0.1249000000 29.45227
##  [58,] 29.2159   29.24337   29.40361 29.32349  0.0801222222 29.42103
##  [59,] 29.1296   29.20470   29.20123 29.20297 -0.0017333333 29.40361
##  [60,] 28.9669   29.10413   28.94427 29.02420 -0.0799333333 29.20123
##  [61,] 29.0454   29.04730   28.90448 28.97589 -0.0714111111 28.94427
##  [62,] 29.0237   29.01200   28.92704 28.96952 -0.0424777778 28.90448
##  [63,] 28.5201   28.86307   28.64096 28.75201 -0.1110555556 28.92704
##  [64,] 28.8400   28.79460   28.60402 28.69931 -0.0952888889 28.64096
##  [65,] 28.9583   28.77280   28.69809 28.73544 -0.0373555556 28.60402
##  [66,] 28.6581   28.81880   28.86560 28.84220  0.0234000000 28.69809
##  [67,] 28.6540   28.75680   28.70480 28.73080 -0.0260000000 28.86560
##  [68,] 28.8400   28.71737   28.62346 28.67041 -0.0469555556 28.70480
##  [69,] 28.9944   28.82947   28.95264 28.89106  0.0615888889 28.62346
##  [70,] 28.9207   28.91837   29.11163 29.01500  0.0966333333 28.95264
##  [71,] 28.6903   28.86847   28.86120 28.86483 -0.0036333333 29.11163
##  [72,] 28.1892   28.60007   28.20893 28.40450 -0.1955666667 28.86120
##  [73,] 28.4520   28.44383   28.05659 28.25021 -0.1936222222 28.20893
##  [74,] 28.2354   28.29220   27.98587 28.13903 -0.1531666667 28.05659
##  [75,] 28.3410   28.34280   28.30918 28.32599 -0.0168111111 27.98587
##  [76,] 28.4727   28.34970   28.39263 28.37117  0.0214666667 28.30918
##  [77,] 28.3958   28.40317   28.47906 28.44111  0.0379444444 28.39263
##  [78,] 28.2512   28.37323   28.36897 28.37110 -0.0021333333 28.47906
##  [79,] 28.4861   28.37770   28.36370 28.37070 -0.0070000000 28.36897
##  [80,] 28.3122   28.34983   28.31566 28.33274 -0.0170888889 28.36370
##  [81,]      NA         NA         NA       NA            NA 28.31566
##  [82,]      NA         NA         NA       NA            NA 28.29857
##  [83,]      NA         NA         NA       NA            NA 28.28148
##  [84,]      NA         NA         NA       NA            NA 28.26439
##  [85,]      NA         NA         NA       NA            NA 28.24730
##  [86,]      NA         NA         NA       NA            NA 28.23021
##  [87,]      NA         NA         NA       NA            NA 28.21312
##  [88,]      NA         NA         NA       NA            NA 28.19603
##  [89,]      NA         NA         NA       NA            NA 28.17894
##  [90,]      NA         NA         NA       NA            NA 28.16186
##  [91,]      NA         NA         NA       NA            NA 28.14477
##  [92,]      NA         NA         NA       NA            NA 28.12768
##  [93,]      NA         NA         NA       NA            NA 28.11059
##  [94,]      NA         NA         NA       NA            NA 28.09350
##  [95,]      NA         NA         NA       NA            NA 28.07641
##  [96,]      NA         NA         NA       NA            NA 28.05932
##  [97,]      NA         NA         NA       NA            NA 28.04223
##  [98,]      NA         NA         NA       NA            NA 28.02514
##  [99,]      NA         NA         NA       NA            NA 28.00806
## [100,]      NA         NA         NA       NA            NA 27.99097

Hasil pemulusan menggunakan metode DMA divisualisasikan sebagai berikut

ts.plot(kloter5.ts, xlab="Time Period ", ylab="Suhu", main= "DMA N=3 Suhu")
points(kloter5.ts)
lines(data.gab3[,3],col="green",lwd=2)
lines(data.gab3[,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.ramal3[1:length(train_ma.ts)]
SSE_train.dma = sum(error_train.dma[6:length(train_ma.ts)]^2)
MSE_train.dma = mean(error_train.dma[6:length(train_ma.ts)]^2)
MAPE_train.dma = mean(abs((error_train.dma[6:length(train_ma.ts)]/train_ma.ts[6: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 = 3")
akurasi_train.dma
##      Akurasi m = 3
## SSE     5.77028697
## MSE     0.07693716
## MAPE    0.80217863

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

#Menghitung nilai keakuratan data uji
error_test.dma = test_ma.ts-data.gab3[81:100,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 = 3")
akurasi_test.dma
##      Akurasi m = 3
## SSE     14.0410939
## MSE      0.7020547
## MAPE     2.5744735

Perhitungan akurasi menggunakan data latih menghasilkan nilai MAPE yang kurang dari 10% sehingga nilai akurasi ini dapat dikategorikan sebagai sangat baik.

Pada data suhu permukaan paut di Selat Sunda pada Tahun 2022-2024 kloter ke-5 atau periode ke 401-500 plot nya tidak berbentuk stasioner maka DMA lebih cocok daripada SMA.

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<-kloter5[1:80,]
testing<-kloter5[81:100,]
train.ts <- ts(training$milisec)
test.ts <- ts(testing$milisec)

Eksplorasi

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

#eksplorasi data
plot(kloter5.ts, col="black",main="Plot semua data")
points(kloter5.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 = training, aes(x = periode, y = milisec, col = "Data Latih")) +
  geom_line(data = testing, aes(x = periode, y = milisec, col = "Data Uji")) +
  labs(x = "Periode Waktu", y = "Suhu", 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 = 20, alpha = 0.2)
plot(ses.1)

ses.1
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  81       28.42388 28.07573 28.77203 27.89143 28.95634
##  82       28.42388 28.06883 28.77893 27.88088 28.96688
##  83       28.42388 28.06207 28.78569 27.87054 28.97722
##  84       28.42388 28.05543 28.79233 27.86039 28.98738
##  85       28.42388 28.04891 28.79885 27.85041 28.99735
##  86       28.42388 28.04250 28.80526 27.84061 29.00716
##  87       28.42388 28.03620 28.81157 27.83097 29.01680
##  88       28.42388 28.02999 28.81777 27.82148 29.02628
##  89       28.42388 28.02388 28.82388 27.81214 29.03562
##  90       28.42388 28.01787 28.82989 27.80294 29.04482
##  91       28.42388 28.01194 28.83582 27.79387 29.05389
##  92       28.42388 28.00610 28.84166 27.78494 29.06283
##  93       28.42388 28.00034 28.84743 27.77612 29.07164
##  94       28.42388 27.99465 28.85311 27.76743 29.08033
##  95       28.42388 27.98904 28.85872 27.75885 29.08892
##  96       28.42388 27.98350 28.86426 27.75038 29.09739
##  97       28.42388 27.97803 28.86973 27.74201 29.10575
##  98       28.42388 27.97262 28.87514 27.73374 29.11402
##  99       28.42388 27.96728 28.88048 27.72558 29.12219
## 100       28.42388 27.96201 28.88576 27.71750 29.13026
ses.2<- ses(train.ts, h = 20, alpha = 0.7)
plot(ses.2)

ses.2
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  81        28.3474 28.08122 28.61358 27.94031 28.75449
##  82        28.3474 28.02248 28.67232 27.85048 28.84432
##  83        28.3474 27.97285 28.72196 27.77457 28.92023
##  84        28.3474 27.92906 28.76574 27.70760 28.98720
##  85        28.3474 27.88944 28.80536 27.64701 29.04779
##  86        28.3474 27.85298 28.84182 27.59126 29.10354
##  87        28.3474 27.81904 28.87576 27.53934 29.15546
##  88        28.3474 27.78715 28.90765 27.49057 29.20423
##  89        28.3474 27.75697 28.93783 27.44442 29.25038
##  90        28.3474 27.72827 28.96653 27.40052 29.29428
##  91        28.3474 27.70084 28.99396 27.35857 29.33623
##  92        28.3474 27.67453 29.02027 27.31833 29.37647
##  93        28.3474 27.64921 29.04560 27.27960 29.41520
##  94        28.3474 27.62477 29.07003 27.24223 29.45257
##  95        28.3474 27.60113 29.09367 27.20608 29.48872
##  96        28.3474 27.57822 29.11658 27.17105 29.52375
##  97        28.3474 27.55598 29.13882 27.13702 29.55778
##  98        28.3474 27.53434 29.16046 27.10393 29.59087
##  99        28.3474 27.51326 29.18154 27.07170 29.62311
## 100        28.3474 27.49270 29.20210 27.04026 29.65455

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("Suhu") + 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 20 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=20)
ramalan1
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  81       28.42388 28.08767 28.76009 27.90970 28.93807
##  82       28.42388 28.08101 28.76675 27.89951 28.94825
##  83       28.42388 28.07448 28.77328 27.88952 28.95824
##  84       28.42388 28.06807 28.77969 27.87972 28.96805
##  85       28.42388 28.06177 28.78599 27.87009 28.97768
##  86       28.42388 28.05558 28.79218 27.86062 28.98714
##  87       28.42388 28.04950 28.79827 27.85131 28.99646
##  88       28.42388 28.04351 28.80426 27.84215 29.00562
##  89       28.42388 28.03761 28.81016 27.83313 29.01464
##  90       28.42388 28.03180 28.81596 27.82424 29.02352
##  91       28.42388 28.02607 28.82169 27.81549 29.03228
##  92       28.42388 28.02043 28.82733 27.80686 29.04091
##  93       28.42388 28.01487 28.83290 27.79835 29.04942
##  94       28.42388 28.00938 28.83839 27.78995 29.05781
##  95       28.42388 28.00396 28.84381 27.78166 29.06610
##  96       28.42388 27.99861 28.84916 27.77348 29.07428
##  97       28.42388 27.99332 28.85444 27.76540 29.08236
##  98       28.42388 27.98811 28.85966 27.75742 29.09034
##  99       28.42388 27.98295 28.86482 27.74953 29.09823
## 100       28.42388 27.97785 28.86991 27.74174 29.10603
ses2<- HoltWinters(train.ts, gamma = FALSE, beta = FALSE, alpha = 0.7)
plot(ses2)

#ramalan
ramalan2<- forecast(ses2, h=20)
ramalan2
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  81        28.3474 28.08231 28.61250 27.94197 28.75283
##  82        28.3474 28.02381 28.67099 27.85251 28.84229
##  83        28.3474 27.97438 28.72042 27.77691 28.91789
##  84        28.3474 27.93077 28.76403 27.71022 28.98458
##  85        28.3474 27.89131 28.80349 27.64988 29.04492
##  86        28.3474 27.85501 28.83979 27.59435 29.10045
##  87        28.3474 27.82120 28.87360 27.54265 29.15215
##  88        28.3474 27.78944 28.90536 27.49407 29.20073
##  89        28.3474 27.75939 28.93541 27.44812 29.24668
##  90        28.3474 27.73081 28.96399 27.40440 29.29040
##  91        28.3474 27.70349 28.99131 27.36262 29.33218
##  92        28.3474 27.67728 29.01752 27.32254 29.37226
##  93        28.3474 27.65206 29.04274 27.28397 29.41083
##  94        28.3474 27.62773 29.06707 27.24676 29.44804
##  95        28.3474 27.60419 29.09061 27.21076 29.48404
##  96        28.3474 27.58137 29.11343 27.17586 29.51894
##  97        28.3474 27.55922 29.13558 27.14198 29.55282
##  98        28.3474 27.53767 29.15713 27.10902 29.58578
##  99        28.3474 27.51668 29.17812 27.07692 29.61788
## 100        28.3474 27.49620 29.19860 27.04561 29.64919

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 = 20, alpha = NULL)
plot(ses.opt)

ses.opt
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  81       28.31463 28.05719 28.57206 27.92091 28.70834
##  82       28.31463 27.95314 28.67611 27.76178 28.86747
##  83       28.31463 27.87296 28.75630 27.63915 28.99011
##  84       28.31463 27.80524 28.82401 27.53559 29.09367
##  85       28.31463 27.74553 28.88373 27.44426 29.18499
##  86       28.31463 27.69151 28.93774 27.36165 29.26760
##  87       28.31463 27.64181 28.98744 27.28565 29.34360
##  88       28.31463 27.59555 29.03371 27.21489 29.41437
##  89       28.31463 27.55208 29.07717 27.14841 29.48084
##  90       28.31463 27.51096 29.11829 27.08553 29.54373
##  91       28.31463 27.47185 29.15741 27.02571 29.60355
##  92       28.31463 27.43447 29.19479 26.96854 29.66071
##  93       28.31463 27.39861 29.23064 26.91371 29.71555
##  94       28.31463 27.36411 29.26514 26.86094 29.76832
##  95       28.31463 27.33082 29.29844 26.81002 29.81923
##  96       28.31463 27.29861 29.33064 26.76077 29.86848
##  97       28.31463 27.26740 29.36185 26.71303 29.91622
##  98       28.31463 27.23709 29.39216 26.66668 29.96257
##  99       28.31463 27.20761 29.42164 26.62159 30.00766
## 100       28.31463 27.17890 29.45036 26.57768 30.05158
#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.9858288
##  beta : FALSE
##  gamma: FALSE
## 
## Coefficients:
##       [,1]
## a 28.31462
plot(sesopt)

#ramalan
ramalanopt<- forecast(sesopt, h=20)
ramalanopt
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  81       28.31462 28.05772 28.57152 27.92172 28.70751
##  82       28.31462 27.95387 28.67536 27.76290 28.86633
##  83       28.31462 27.87385 28.75539 27.64052 28.98872
##  84       28.31462 27.80627 28.82297 27.53717 29.09207
##  85       28.31462 27.74668 28.88256 27.44602 29.18321
##  86       28.31462 27.69277 28.93647 27.36358 29.26566
##  87       28.31462 27.64317 28.98606 27.28773 29.34150
##  88       28.31462 27.59700 29.03224 27.21711 29.41212
##  89       28.31462 27.55362 29.07562 27.15077 29.47846
##  90       28.31462 27.51258 29.11665 27.08801 29.54122
##  91       28.31462 27.47355 29.15569 27.02831 29.60092
##  92       28.31462 27.43624 29.19299 26.97126 29.65797
##  93       28.31462 27.40046 29.22877 26.91654 29.71270
##  94       28.31462 27.36603 29.26321 26.86388 29.76536
##  95       28.31462 27.33280 29.29643 26.81306 29.81617
##  96       28.31462 27.30066 29.32857 26.76391 29.86532
##  97       28.31462 27.26951 29.35972 26.71627 29.91297
##  98       28.31462 27.23927 29.38997 26.67001 29.95923
##  99       28.31462 27.20985 29.41939 26.62501 30.00422
## 100       28.31462 27.18119 29.44805 26.58119 30.04805

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         5.75900433
## MSE         0.07198755
## RMSE        0.26830496
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         3.36517356
## MSE         0.04206467
## RMSE        0.20509673
#Cara Manual
fitted1<-ramalan1$fitted
sisaan1<-ramalan1$residuals
head(sisaan1)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1]          NA  0.03860000  0.08698000 -0.15671600  0.02472720  0.07308176
resid1<-training$milisec-ramalan1$fitted
head(resid1)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1]          NA  0.03860000  0.08698000 -0.15671600  0.02472720  0.07308176
#Cara Manual
SSE.1=sum(sisaan1[2:length(train.ts)]^2)
SSE.1
## [1] 5.759004
MSE.1 = SSE.1/length(train.ts)
MSE.1
## [1] 0.07198755
MAPE.1 = sum(abs(sisaan1[2:length(train.ts)]/train.ts[2:length(train.ts)])*
               100)/length(train.ts)
MAPE.1
## [1] 0.7462402
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         5.75900433
## MSE         0.07198755
## MAPE        0.74624023
fitted2<-ramalan2$fitted
sisaan2<-ramalan2$residuals
head(sisaan2)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1]          NA  0.03860000  0.06768000 -0.20599600  0.08830120  0.07979036
resid2<-training$milisec-ramalan2$fitted
head(resid2)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1]          NA  0.03860000  0.06768000 -0.20599600  0.08830120  0.07979036
SSE.2=sum(sisaan2[2:length(train.ts)]^2)
SSE.2
## [1] 3.365174
MSE.2 = SSE.2/length(train.ts)
MSE.2
## [1] 0.04206467
MAPE.2 = sum(abs(sisaan2[2:length(train.ts)]/train.ts[2:length(train.ts)])*
               100)/length(train.ts)
MAPE.2
## [1] 0.5691131
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         3.36517356
## MSE         0.04206467
## MAPE        0.56911309

Berdasarkan nilai SSE, MSE, RMSE, dan MAPE di antara kedua parameter, nilai parameter \(\lambda=0,7\) menghasilkan akurasi yang lebih baik dibanding \(\lambda=0,2\) . Hal ini dilihat dari nilai masing-masing ukuran akurasi yang lebih kecil. Berdasarkan nilai MAPE-nya, hasil ini dapat dikategorikan sebagai peramalan sangat baik. Dibuktikan dengan nilai alpha yang dihasilkan ketika ‘alpha=NULL’ yaitu nilai alpha optimum 0.9858288

Akurasi Data Uji

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

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

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

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

akurasitesting1 <- matrix(c(SSEtesting1,SSEtesting2,SSEtestingopt))
row.names(akurasitesting1)<- c("SSE1", "SSE2", "SSEopt")
akurasitesting1
##             [,1]
## SSE1    8.106767
## SSE2    9.538600
## SSEopt 10.223978
akurasitesting2 <- matrix(c(MSEtesting1,MSEtesting2,MSEtestingopt))
row.names(akurasitesting2)<- c("MSE1", "MSE2", "MSEopt")
akurasitesting2
##            [,1]
## MSE1   4.053384
## MSE2   4.769300
## MSEopt 5.111989

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$milisec)
##                      ME      RMSE       MAE        MPE      MAPE     MASE
## Training set 0.01286353 0.1996021 0.1609908 0.04371635 0.5701632 1.000950
## Test set     0.53905738 0.7149818 0.6467627 1.84176571 2.2295634 4.021206
##                      ACF1
## Training set -0.003686783
## 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=20)
ramalandes1
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  81       28.19223 27.85812 28.52634 27.68125 28.70321
##  82       28.15250 27.80890 28.49610 27.62701 28.67799
##  83       28.11277 27.75666 28.46888 27.56815 28.65739
##  84       28.07304 27.70123 28.44485 27.50440 28.64167
##  85       28.03331 27.64253 28.42409 27.43566 28.63096
##  86       27.99358 27.58058 28.40658 27.36195 28.62521
##  87       27.95385 27.51546 28.39224 27.28340 28.62430
##  88       27.91412 27.44732 28.38092 27.20021 28.62803
##  89       27.87439 27.37631 28.37247 27.11264 28.63614
##  90       27.83466 27.30259 28.36673 27.02094 28.64839
##  91       27.79493 27.22635 28.36351 26.92537 28.66450
##  92       27.75520 27.14774 28.36266 26.82617 28.68423
##  93       27.71547 27.06692 28.36403 26.72359 28.70735
##  94       27.67574 26.98401 28.36747 26.61783 28.73365
##  95       27.63601 26.89915 28.37288 26.50907 28.76295
##  96       27.59628 26.81244 28.38013 26.39749 28.79507
##  97       27.55655 26.72398 28.38912 26.28324 28.82986
##  98       27.51682 26.63386 28.39979 26.16644 28.86720
##  99       27.47709 26.54215 28.41203 26.04723 28.90696
## 100       27.43736 26.44893 28.42579 25.92569 28.94903
#Lamda=0.8 dan gamma=0.5
des.2<- HoltWinters(train.ts, gamma = FALSE, beta = 0.5, alpha = 0.8)
plot(des.2)

#ramalan
ramalandes2<- forecast(des.2, h=20)
ramalandes2
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  81       28.32497 28.02281 28.62713 27.86286 28.78708
##  82       28.30374 27.83176 28.77573 27.58191 29.02558
##  83       28.28252 27.60688 28.95817 27.24921 29.31583
##  84       28.26130 27.35483 29.16777 26.87497 29.64763
##  85       28.24007 27.07922 29.40092 26.46471 30.01544
##  86       28.21885 26.78241 29.65529 26.02201 30.41569
##  87       28.19763 26.46608 29.92918 25.54945 30.84580
##  88       28.17640 26.13153 30.22127 25.04904 31.30376
##  89       28.15518 25.77983 30.53053 24.52240 31.78796
##  90       28.13396 25.41186 30.85606 23.97086 32.29705
##  91       28.11273 25.02836 31.19711 23.39559 32.82987
##  92       28.09151 24.62999 31.55302 22.79758 33.38544
##  93       28.07029 24.21734 31.92324 22.17771 33.96286
##  94       28.04906 23.79089 32.30723 21.53676 34.56137
##  95       28.02784 23.35113 32.70455 20.87543 35.18025
##  96       28.00662 22.89846 33.11477 20.19436 35.81887
##  97       27.98539 22.43326 33.53753 19.49413 36.47665
##  98       27.96417 21.95587 33.97247 18.77527 37.15307
##  99       27.94294 21.46662 34.41927 18.03826 37.84763
## 100       27.92172 20.96580 34.87764 17.28356 38.55988

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

#Visually evaluate the prediction
plot(kloter5.ts)
lines(des.2$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.9924358
##  beta : 0.005238895
##  gamma: FALSE
## 
## Coefficients:
##          [,1]
## a 28.31373030
## b  0.02890594
plot(des.opt)

#ramalan
ramalandesopt<- forecast(des.opt, h=20)
ramalandesopt
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  81       28.34264 28.08378 28.60149 27.94675 28.73852
##  82       28.37154 28.00590 28.73719 27.81234 28.93075
##  83       28.40045 27.95203 28.84887 27.71465 29.08625
##  84       28.42935 27.91054 28.94817 27.63590 29.22281
##  85       28.45826 27.87692 29.03960 27.56917 29.34735
##  86       28.48717 27.84884 29.12549 27.51093 29.46340
##  87       28.51607 27.82494 29.20721 27.45907 29.57307
##  88       28.54498 27.80431 29.28565 27.41222 29.67774
##  89       28.57388 27.78633 29.36144 27.36943 29.77834
##  90       28.60279 27.77056 29.43502 27.33001 29.87557
##  91       28.63170 27.75665 29.50674 27.29344 29.96996
##  92       28.66060 27.74435 29.57685 27.25931 30.06189
##  93       28.68951 27.73344 29.64558 27.22732 30.15169
##  94       28.71841 27.72375 29.71308 27.19720 30.23963
##  95       28.74732 27.71514 29.77950 27.16874 30.32590
##  96       28.77623 27.70750 29.84495 27.14175 30.41070
##  97       28.80513 27.70073 29.90953 27.11610 30.49416
##  98       28.83404 27.69475 29.97332 27.09165 30.57642
##  99       28.86294 27.68949 30.03640 27.06830 30.65759
## 100       28.89185 27.68487 30.09882 27.04594 30.73776

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  0.01750000 -0.25160000 -0.08041600 -0.03705216
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                       5.28276177
## MSE                       0.06603452
## MAPE                      0.71171590
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  0.017500 -0.268400  0.158180  0.083424
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.8 dan gamma=0.5")
akurasides.2
##      Akurasi lamda=0.8 dan gamma=0.5
## SSE                       4.28069051
## MSE                       0.05350863
## MAPE                      0.67126769

Hasil akurasi dari data latih didapatkan skenario 2 dengan lamda=0.8 dan gamma=0.5 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$milisec
selisihdes1
## Time Series:
## Start = 81 
## End = 100 
## Frequency = 1 
##  [1] -0.1973707 -0.3333006 -0.6278304 -0.8261603 -1.0119902 -1.1273201
##  [7] -1.0568500 -1.1120799 -1.3201098 -1.2689396 -1.3983695 -1.5684994
## [13] -1.6475293 -1.6869592 -1.6970891 -1.1874190 -0.7554488 -0.2086787
## [19] -0.3522086 -1.3934385
SSEtestingdes1<-sum(selisihdes1^2)
MSEtestingdes1<-SSEtestingdes1/length(testing$milisec)
MAPEtestingdes1<-sum(abs(selisihdes1/testing$milisec)*100)/length(testing$milisec)

selisihdes2<-ramalandes2$mean-testing$milisec
selisihdes2
## Time Series:
## Start = 81 
## End = 100 
## Frequency = 1 
##  [1] -0.0646322 -0.1820557 -0.4580792 -0.6379027 -0.8052263 -0.9020498
##  [7] -0.8130733 -0.8497968 -1.0393203 -0.9696439 -1.0805674 -1.2321909
## [13] -1.2927144 -1.3136379 -1.3052614 -0.7770850 -0.3266085  0.2386680
## [19]  0.1136445 -0.9090790
SSEtestingdes2<-sum(selisihdes2^2)
MSEtestingdes2<-SSEtestingdes2/length(testing$milisec)
MAPEtestingdes2<-sum(abs(selisihdes2/testing$milisec)*100)/length(testing$milisec)

selisihdesopt<-ramalandesopt$mean-testing$milisec
selisihdesopt
## Time Series:
## Start = 81 
## End = 100 
## Frequency = 1 
##  [1] -0.046963760 -0.114257823 -0.340151885 -0.469845947 -0.587040010
##  [6] -0.633734072 -0.494628135 -0.481222197 -0.620616259 -0.500810322
## [11] -0.561604384 -0.663098446 -0.673492509 -0.644286571 -0.585780633
## [16] -0.007474696  0.493131242  1.108537180  1.033643117  0.061049055
SSEtestingdesopt<-sum(selisihdesopt^2)
MSEtestingdesopt<-SSEtestingdesopt/length(testing$milisec)
MAPEtestingdesopt<-sum(abs(selisihdesopt/testing$milisec)*100)/length(testing$milisec)

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  26.174141 14.913019 6.7213305
## MSE   1.308707  0.745651 0.3360665
## MAPE  3.577285  2.633260 1.7572296

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   4.053384 1.3087070
## ske 2   4.769300 0.7456510
## ske opt 5.111989 0.3360665

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 karena data suhu permukaan laut di Selat Sunda pada Tahun 2022-2024 tidak berpola stasioner maka des lebih baik.

Pemulusan Data Musiman

Melakukan pembagian data dan mengubahnya menjadi data deret waktu.

#membagi data training dan testing lalu membuat jadi data time series
training2<-kloter5[1:80,2]
testing2<-kloter5[81:100,2]
training.ts<-ts(training2, frequency = 10)
testing.ts<-ts(testing2, frequency = 10)

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

#Membuat plot time series
plot(kloter5.ts, col="red",main="Plot semua data")
points(kloter5.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, 10) 
## Frequency = 10 
##         xhat    level        trend        season
## 2.0 27.24636 27.26676  0.017474394 -0.0378785000
## 2.1 27.23049 27.30743  0.019793229 -0.0967235000
## 2.2 27.44829 27.33886  0.020957333  0.0884765000
## 2.3 27.61496 27.36466  0.021441470  0.2288615000
## 2.4 27.50423 27.39539  0.022370249  0.0864765000
## 2.5 27.52232 27.43581  0.024175568  0.0623365000
## 2.6 27.53779 27.43592  0.021769112  0.0800965000
## 2.7 27.35515 27.36797  0.012797364 -0.0256185000
## 2.8 27.17859 27.42586  0.017306319 -0.2645785000
## 2.9 27.46918 27.56149  0.029138557 -0.1214485000
## 3.0 27.72744 27.71451  0.041526976 -0.0286031582
## 3.1 27.82141 27.86141  0.052064264 -0.0920670849
## 3.2 28.13938 27.98931  0.059648089  0.0904130454
## 3.3 28.37373 28.07855  0.062606584  0.2325766188
## 3.4 28.27851 28.12393  0.060883976  0.0936977751
## 3.5 28.29035 28.17749  0.060151788  0.0527106746
## 3.6 28.23186 28.13751  0.050138744  0.0442095108
## 3.7 28.17169 28.13446  0.044819557 -0.0075826805
## 3.8 27.91880 28.09924  0.036815660 -0.2172495500
## 3.9 28.09233 28.12819  0.036029566 -0.0718948245
## 4.0 28.20200 28.15350  0.034957006  0.0135459968
## 4.1 28.18861 28.21293  0.037405001 -0.0617317879
## 4.2 28.43258 28.28906  0.041276852  0.1022470255
## 4.3 28.60518 28.33750  0.041993220  0.2256861903
## 4.4 28.50227 28.37042  0.041085667  0.0907690217
## 4.5 28.45339 28.40073  0.040008254  0.0126584969
## 4.6 28.50119 28.43848  0.039782370  0.0229327622
## 4.7 28.47552 28.47560  0.039516529 -0.0395982686
## 4.8 28.32929 28.51061  0.039066147 -0.2203939236
## 4.9 28.55227 28.58578  0.042676431 -0.0761850668
## 5.0 28.72189 28.65338  0.045168953  0.0233379769
## 5.1 28.66802 28.67177  0.042491130 -0.0462443811
## 5.2 28.81500 28.67166  0.038230697  0.1051124977
## 5.3 28.81836 28.57187  0.024428599  0.2220559772
## 5.4 28.61108 28.50893  0.015691478  0.0864593713
## 5.5 28.56593 28.53722  0.016951885  0.0117549582
## 5.6 28.66491 28.61955  0.023489260  0.0218694005
## 5.7 28.70496 28.71562  0.030747087 -0.0413997979
## 5.8 28.64977 28.81783  0.037893790 -0.2059527864
## 5.9 28.90566 28.92687  0.045008337 -0.0662149800
## 6.0 29.01590 28.95951  0.043771051  0.0126266865
## 6.1 28.92610 28.95086  0.038528969 -0.0632861152
## 6.2 28.96150 28.88365  0.027954979  0.0499041044
## 6.3 29.06871 28.85892  0.022686884  0.1871074963
## 6.4 28.97634 28.86392  0.020918602  0.0915009968
## 6.5 28.94876 28.88947  0.021381734  0.0379044609
## 6.6 29.04844 28.97022  0.027318536  0.0509007064
## 6.7 29.06048 29.04157  0.031721682 -0.0128129842
## 6.8 28.96171 29.10438  0.034830039 -0.1774945996
## 6.9 29.13981 29.17279  0.038187756 -0.0711641221
## 7.0 29.20278 29.17639  0.034729565 -0.0083416446
## 7.1 29.10565 29.17965  0.031581971 -0.1055820734
## 7.2 29.25361 29.19484  0.029943065  0.0288317219
## 7.3 29.27339 29.07808  0.015272803  0.1800343683
## 7.4 29.10663 29.00667  0.006605085  0.0933535262
## 7.5 29.04890 28.98361  0.003638425  0.0616516686
## 7.6 28.97343 28.90909 -0.004177634  0.0685132900
## 7.7 28.83008 28.84103 -0.010566161 -0.0003795566
## 7.8 28.65801 28.83245 -0.010367802 -0.1640637314
## 7.9 28.80072 28.88935 -0.003640076 -0.0849968861
## 8.0 28.88754 28.90971 -0.001240430 -0.0209320192
## 8.1 28.75170 28.86902 -0.005185202 -0.1121376965
## 8.2 28.70505 28.75134 -0.016435202 -0.0298493254
## 8.3 28.80816 28.68429 -0.021496266  0.1453634945
## 8.4 28.59678 28.54824 -0.032951448  0.0814868877
## 8.5 28.45646 28.46414 -0.038067032  0.0303874324
## 8.6 28.43454 28.42932 -0.037742170  0.0429591821
## 8.7 28.34573 28.38383 -0.038516872  0.0004138776
## 8.8 28.14885 28.32641 -0.040407390 -0.1371528259
## 8.9 28.24439 28.35345 -0.033662322 -0.0753983033
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.8239454
##  beta : 0
##  gamma: 1
## 
## Coefficients:
##            [,1]
## a   28.43924106
## b    0.01747439
## s1  -0.09259198
## s2  -0.21096428
## s3  -0.08702441
## s4   0.11008075
## s5   0.19410530
## s6   0.11099282
## s7   0.05298637
## s8   0.02639950
## s9   0.01221761
## s10 -0.12704106
winter1.opt$fitted
## Time Series:
## Start = c(2, 1) 
## End = c(8, 10) 
## Frequency = 10 
##         xhat    level      trend       season
## 2.0 27.24636 27.26676 0.01747439 -0.037878500
## 2.1 27.30052 27.37977 0.01747439 -0.096723500
## 2.2 27.49345 27.38750 0.01747439  0.088476500
## 2.3 27.63405 27.38771 0.01747439  0.228861500
## 2.4 27.53167 27.42772 0.01747439  0.086476500
## 2.5 27.57677 27.49696 0.01747439  0.062336500
## 2.6 27.46800 27.37043 0.01747439  0.080096500
## 2.7 27.06765 27.07579 0.01747439 -0.025618500
## 2.8 27.26881 27.51591 0.01747439 -0.264578500
## 2.9 27.84253 27.94651 0.01747439 -0.121448500
## 3.0 28.16674 28.16673 0.01747439 -0.017466412
## 3.1 28.17502 28.25635 0.01747439 -0.098803992
## 3.2 28.39716 28.29490 0.01747439  0.084787295
## 3.3 28.47301 28.22185 0.01747439  0.233676841
## 3.4 28.20158 28.08656 0.01747439  0.097537300
## 3.5 28.18630 28.13726 0.01747439  0.031566796
## 3.6 27.85884 27.82796 0.01747439  0.013406278
## 3.7 28.01581 27.93364 0.01747439  0.064688799
## 3.8 27.59099 27.74982 0.01747439 -0.176305948
## 3.9 27.94436 28.00501 0.01747439 -0.078127057
## 4.0 28.11564 28.10022 0.01747439 -0.002050194
## 4.1 28.21287 28.28970 0.01747439 -0.094300619
## 4.2 28.52961 28.44669 0.01747439  0.065445525
## 4.3 28.63224 28.41373 0.01747439  0.201035304
## 4.4 28.49363 28.37152 0.01747439  0.104636459
## 4.5 28.33094 28.35173 0.01747439 -0.038257310
## 4.6 28.51052 28.46079 0.01747439  0.032255044
## 4.7 28.49878 28.45963 0.01747439  0.021677214
## 4.8 28.33134 28.43938 0.01747439 -0.125512638
## 4.9 28.55985 28.60389 0.01747439 -0.061518057
## 5.0 28.76999 28.71781 0.01747439  0.034702577
## 5.1 28.53832 28.58534 0.01747439 -0.064489496
## 5.2 28.60630 28.53416 0.01747439  0.054669323
## 5.3 28.36074 28.15498 0.01747439  0.188281839
## 5.4 28.30371 28.18956 0.01747439  0.096673681
## 5.5 28.51100 28.51222 0.01747439 -0.018687675
## 5.6 28.89002 28.84427 0.01747439  0.028273196
## 5.7 29.00636 28.97527 0.01747439  0.013617712
## 5.8 28.96221 29.03883 0.01747439 -0.094094638
## 5.9 29.06854 29.09197 0.01747439 -0.040911032
## 6.0 28.94441 28.92428 0.01747439  0.002662743
## 6.1 28.72301 28.78470 0.01747439 -0.079158749
## 6.2 28.52127 28.53388 0.01747439 -0.030083819
## 6.3 28.90646 28.69705 0.01747439  0.191936725
## 6.4 28.95472 28.77536 0.01747439  0.161882325
## 6.5 28.89574 28.82973 0.01747439  0.048529217
## 6.6 29.20548 29.13548 0.01747439  0.052530292
## 6.7 29.24590 29.20496 0.01747439  0.023465890
## 6.8 29.12872 29.19772 0.01747439 -0.086473913
## 6.9 29.15292 29.21592 0.01747439 -0.080477074
## 7.0 29.06670 29.08013 0.01747439 -0.030895775
## 7.1 28.96104 29.08005 0.01747439 -0.136484153
## 7.2 29.16767 29.14915 0.01747439  0.001047092
## 7.3 28.85547 28.63306 0.01747439  0.204935891
## 7.4 28.82503 28.63779 0.01747439  0.169765906
## 7.5 28.89267 28.76507 0.01747439  0.110124100
## 7.6 28.67039 28.58927 0.01747439  0.063642758
## 7.7 28.62890 28.59324 0.01747439  0.018184686
## 7.8 28.71581 28.78465 0.01747439 -0.086318244
## 7.9 28.93592 29.03167 0.01747439 -0.113225979
## 8.0 29.01943 29.03661 0.01747439 -0.034646548
## 8.1 28.67491 28.78289 0.01747439 -0.125452003
## 8.2 28.30468 28.40016 0.01747439 -0.112961231
## 8.3 28.75871 28.53902 0.01747439  0.202212059
## 8.4 28.33602 28.12532 0.01747439  0.193229019
## 8.5 28.23320 28.14689 0.01747439  0.068827053
## 8.6 28.43994 28.36171 0.01747439  0.060757205
## 8.7 28.41564 28.34281 0.01747439  0.055349492
## 8.8 28.20500 28.22480 0.01747439 -0.037270592
## 8.9 28.37545 28.47388 0.01747439 -0.115905356
xhat1.opt <- winter1.opt$fitted[,2]

Peramalan

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

Plot Deret Waktu

#Plot time series
plot(training.ts,main="Winter 0.2;0.1;0.1",type="l",col="black",
     xlim=c(1,12),pch=12)
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.05290476
## MSE  0.07566131
## RMSE 0.27506601
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  3.68988297
## MSE1.opt  0.04612354
## RMSE1.opt 0.21476391
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  6.052905 0.07566131  0.2750660
## 2 Winter1 optimal  3.689883 0.04612354  0.2147639

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)

akurasi.holtadd <- matrix(c(SSEtesting1,MSEtesting1))
row.names(akurasi.holtadd)<- c("SSE", "MSE")
colnames(akurasi.holtadd) <- c("Akurasi alpha=0.2, beta=0.1, gamma=0.1")
akurasi.holtadd
##     Akurasi alpha=0.2, beta=0.1, gamma=0.1
## SSE                               19.73447
## MSE                               19.73447
akurasi.holtaddopt <- matrix(c(SSEtesting1.opt,MSEtesting1.opt))
row.names(akurasi.holtaddopt)<- c("SSE.opt", "MSE.opt")
colnames(akurasi.holtaddopt) <- c("Akurasi Optimum")
akurasi.holtaddopt
##         Akurasi Optimum
## SSE.opt        6.244331
## MSE.opt        6.244331

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, 10) 
## Frequency = 10 
##         xhat    level        trend    season
## 2.0 27.24659 27.26676  0.017474394 0.9986202
## 2.1 27.23076 27.30741  0.019791820 0.9964710
## 2.2 27.44827 27.33883  0.020954629 1.0032339
## 2.3 27.61458 27.36462  0.021437765 1.0083445
## 2.4 27.50390 27.39534  0.022366462 1.0031436
## 2.5 27.52272 27.43577  0.024172790 1.0022860
## 2.6 27.53824 27.43586  0.021763942 1.0029361
## 2.7 27.35533 27.36807  0.012809466 0.9990668
## 2.8 27.17791 27.42598  0.017319015 0.9903296
## 2.9 27.46991 27.56291  0.029280454 0.9955682
## 3.0 27.74812 27.71648  0.041709308 0.9996371
## 3.1 27.82700 27.85946  0.051836612 0.9969796
## 3.2 28.14224 27.98625  0.059331300 1.0034465
## 3.3 28.38304 28.07449  0.062222579 1.0087547
## 3.4 28.28904 28.11779  0.060330283 1.0039362
## 3.5 28.26284 28.16873  0.059391249 1.0012300
## 3.6 28.15532 28.13361  0.049940000 0.9989983
## 3.7 28.22104 28.14563  0.046147796 1.0010381
## 3.8 28.01213 28.10196  0.037166283 0.9954869
## 3.9 28.17303 28.11248  0.034501615 1.0009255
## 4.0 28.26450 28.12014  0.031817440 1.0039977
## 4.1 28.20207 28.16389  0.033010647 1.0001835
## 4.2 28.40202 28.23292  0.036612509 1.0046866
## 4.3 28.54555 28.28275  0.037933937 1.0079400
## 4.4 28.46197 28.32351  0.038216744 1.0035346
## 4.5 28.31728 28.35902  0.037946265 0.9971937
## 4.6 28.38797 28.42200  0.040449744 0.9973831
## 4.7 28.44504 28.48249  0.042453613 0.9971989
## 4.8 28.40787 28.52654  0.042613246 0.9943546
## 4.9 28.62799 28.58965  0.044663461 0.9997790
## 5.0 28.81908 28.64410  0.045641865 1.0045081
## 5.1 28.73396 28.64374  0.041040977 1.0017147
## 5.2 28.81504 28.62908  0.035471303 1.0052499
## 5.3 28.77911 28.52724  0.021740670 1.0080608
## 5.4 28.58136 28.47010  0.013851995 1.0034197
## 5.5 28.46817 28.50244  0.015700517 0.9982478
## 5.6 28.57661 28.60321  0.024208104 0.9982252
## 5.7 28.67246 28.71782  0.033247910 0.9972658
## 5.8 28.73203 28.82925  0.041066175 0.9952103
## 5.9 28.97730 28.92527  0.046561820 1.0001888
## 6.0 29.06359 28.94514  0.043892253 1.0025719
## 6.1 28.94687 28.92723  0.037712384 0.9993761
## 6.2 28.86563 28.85498  0.026716070 0.9994437
## 6.3 29.00749 28.84817  0.023363589 1.0047090
## 6.4 29.01030 28.86612  0.022822328 1.0042006
## 6.5 28.96175 28.88679  0.022607286 1.0018107
## 6.6 29.05221 28.96607  0.028274043 1.0019958
## 6.7 29.08499 29.03753  0.032593187 1.0005112
## 6.8 29.05807 29.09630  0.035210059 0.9974793
## 6.9 29.15570 29.14585  0.036644183 0.9990819
## 7.0 29.17761 29.14470  0.032864739 1.0000017
## 7.1 29.02977 29.15112  0.030220479 0.9948059
## 7.2 29.15326 29.18012  0.030098453 0.9980500
## 7.3 29.23121 29.08334  0.017410547 1.0044829
## 7.4 29.15183 29.02286  0.009621345 1.0041109
## 7.5 29.12041 28.99393  0.005766586 1.0041626
## 7.6 29.01356 28.90762 -0.003441336 1.0037843
## 7.7 28.86779 28.83254 -0.010605443 1.0015910
## 7.8 28.74958 28.81638 -0.011160324 0.9980683
## 7.9 28.77669 28.85428 -0.006254405 0.9975271
## 8.0 28.84215 28.87690 -0.003367067 0.9989132
## 8.1 28.68550 28.84313 -0.006407461 0.9947560
## 8.2 28.51448 28.73694 -0.016385818 0.9928251
## 8.3 28.72612 28.70797 -0.017644540 1.0012479
## 8.4 28.63652 28.59230 -0.027446770 1.0025090
## 8.5 28.48179 28.50590 -0.033342383 1.0003243
## 8.6 28.45972 28.47074 -0.033524082 1.0007914
## 8.7 28.42824 28.42444 -0.034801403 1.0013596
## 8.8 28.31890 28.35428 -0.038337319 1.0001046
## 8.9 28.27826 28.34938 -0.034993727 0.9987240
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, 10) 
## Frequency = 10 
##         xhat    level      trend    season
## 2.0 27.24659 27.26676 0.01747439 0.9986202
## 2.1 27.29955 27.37876 0.01747439 0.9964710
## 2.2 27.49345 27.38735 0.01747439 1.0032339
## 2.3 27.63395 27.38779 0.01747439 1.0083445
## 2.4 27.53123 27.42747 0.01747439 1.0031436
## 2.5 27.57678 27.49640 0.01747439 1.0022860
## 2.6 27.46952 27.37163 0.01747439 1.0029361
## 2.7 27.07194 27.07975 0.01747439 0.9990668
## 2.8 27.26382 27.51257 0.01747439 0.9903296
## 2.9 27.84071 27.94717 0.01747439 0.9955682
## 3.0 28.16829 28.16777 0.01747439 0.9993987
## 3.1 28.17108 28.25544 0.01747439 0.9963980
## 3.2 28.40214 28.29709 0.01747439 1.0030930
## 3.3 28.47949 28.22117 0.01747439 1.0085289
## 3.4 28.20116 28.08343 0.01747439 1.0035676
## 3.5 28.18274 28.13402 0.01747439 1.0011097
## 3.6 27.85841 27.83122 0.01747439 1.0003488
## 3.7 28.02295 27.93635 0.01747439 1.0024728
## 3.8 27.59085 27.74921 0.01747439 0.9936676
## 3.9 27.94237 28.00365 0.01747439 0.9971895
## 4.0 28.11627 28.09993 0.01747439 0.9999595
## 4.1 28.20816 28.28720 0.01747439 0.9965902
## 4.2 28.53132 28.44714 0.01747439 1.0023434
## 4.3 28.63758 28.41341 0.01747439 1.0072701
## 4.4 28.49420 28.36789 0.01747439 1.0038344
## 4.5 28.32330 28.34814 0.01747439 0.9985081
## 4.6 28.51027 28.46268 0.01747439 1.0010576
## 4.7 28.50227 28.46192 0.01747439 1.0008034
## 4.8 28.33054 28.43923 0.01747439 0.9955665
## 4.9 28.55870 28.60359 0.01747439 0.9978210
## 5.0 28.77296 28.71770 0.01747439 1.0013150
## 5.1 28.53667 28.58449 0.01747439 0.9977172
## 5.2 28.60792 28.53518 0.01747439 1.0019354
## 5.3 28.36748 28.15938 0.01747439 1.0067650
## 5.4 28.30545 28.18822 0.01747439 1.0035367
## 5.5 28.50222 28.50537 0.01747439 0.9992770
## 5.6 28.88552 28.84170 0.01747439 1.0009128
## 5.7 29.00665 28.97514 0.01747439 1.0004842
## 5.8 28.96019 29.03799 0.01747439 0.9967210
## 5.9 29.06866 29.09255 0.01747439 0.9985792
## 6.0 28.94735 28.92632 0.01747439 1.0001229
## 6.1 28.72245 28.78592 0.01747439 0.9971900
## 6.2 28.51998 28.53747 0.01747439 0.9987754
## 6.3 28.91482 28.70043 0.01747439 1.0068567
## 6.4 28.95884 28.77096 0.01747439 1.0059192
## 6.5 28.88998 28.82141 0.01747439 1.0017718
## 6.6 29.19892 29.12848 0.01747439 1.0018175
## 6.7 29.24463 29.20269 0.01747439 1.0008373
## 6.8 29.12681 29.19675 0.01747439 0.9970080
## 6.9 29.15058 29.21650 0.01747439 0.9971472
## 7.0 29.06871 29.08371 0.01747439 0.9988842
## 7.1 28.95679 29.08214 0.01747439 0.9950916
## 7.2 29.16958 29.15448 0.01747439 0.9999187
## 7.3 28.86808 28.64208 0.01747439 1.0072760
## 7.4 28.83134 28.63681 0.01747439 1.0061791
## 7.5 28.89039 28.75722 0.01747439 1.0040209
## 7.6 28.66799 28.58595 0.01747439 1.0022570
## 7.7 28.62829 28.59204 0.01747439 1.0006560
## 7.8 28.71393 28.78212 0.01747439 0.9970255
## 7.9 28.92989 29.02908 0.01747439 0.9959837
## 8.0 29.01979 29.03902 0.01747439 0.9987365
## 8.1 28.67564 28.78737 0.01747439 0.9955144
## 8.2 28.30266 28.40623 0.01747439 0.9957414
## 8.3 28.76620 28.54606 0.01747439 1.0070954
## 8.4 28.34788 28.13357 0.01747439 1.0069924
## 8.5 28.23402 28.14546 0.01747439 1.0025239
## 8.6 28.43612 28.35716 0.01747439 1.0021669
## 8.7 28.41632 28.34181 0.01747439 1.0020111
## 8.8 28.20859 28.22486 0.01747439 0.9988055
## 8.9 28.37039 28.46898 0.01747439 0.9959254
xhat2.opt <- winter2.opt$fitted[,2]

Peramalan

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

Plot Deret Waktu

#Plot time series
plot(training.ts,main="Winter 0.2;0.1;0.3",type="l",col="black",
     xlim=c(1,12),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         5.74733440
## MSE2         0.07184168
## RMSE2        0.26803298
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  3.72364532
## MSE2.opt  0.04654557
## RMSE2.opt 0.21574422
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  5.747334 0.07184168  0.2680330
## 2 winter2 optimal  3.723645 0.04654557  0.2157442

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)

akurasi.holtmult <- matrix(c(SSEtesting2,MSEtesting2))
row.names(akurasi.holtmult)<- c("SSE", "MSE")
colnames(akurasi.holtmult) <- c("Akurasi alpha=0.2, beta=0.1, gamma=0.3")
akurasi.holtmult
##     Akurasi alpha=0.2, beta=0.1, gamma=0.3
## SSE                               22.87837
## MSE                               22.87837
akurasi.holtmultopt <- matrix(c(SSEtesting2.opt,MSEtesting2.opt))
row.names(akurasi.holtmultopt)<- c("SSE.opt", "MSE.opt")
colnames(akurasi.holtmultopt) <- c("Akurasi Optimum")
akurasi.holtmultopt
##         Akurasi Optimum
## SSE.opt         6.29271
## MSE.opt         6.29271