MPDW Project 1

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("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")
## Warning: package 'rio' was built under R version 4.3.3

Import Data

data <- read.csv ("C:/Users/Muhammad Rizqa Salas/Downloads/Semester 5/MPDW/Project/Data Air MPDW.csv")

Eksplorasi Data

View(data)
str(data)
## 'data.frame':    100 obs. of  2 variables:
##  $ Periode: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Air    : int  185 194 192 198 210 208 214 220 225 219 ...
dim(data)
## [1] 100   2
data.ts <- ts(data$Air)
summary(data.ts)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   133.0   161.8   189.0   185.8   210.8   230.0
ts.plot(data.ts, xlab="Time Period ", ylab="Reading", 
        main = "Time Series Plot")
points(data.ts)

Single Moving Average & Double Moving Average

Pembagian Data

training_ma <- data[1:80,]
testing_ma <- data[81:100,]
train_ma.ts <- ts(training_ma$Air)
test_ma.ts <- ts(testing_ma$Air)

Eksplorasi Data

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

Single Moving Average (SMA)

data.sma<-SMA(train_ma.ts, n=3)
data.sma
## Time Series:
## Start = 1 
## End = 80 
## Frequency = 1 
##  [1]       NA       NA 190.3333 194.6667 200.0000 205.3333 210.6667 214.0000
##  [9] 219.6667 221.3333 219.0000 209.6667 201.0000 185.6667 171.6667 155.3333
## [17] 146.3333 142.3333 141.0000 146.6667 155.6667 168.3333 177.3333 182.6667
## [25] 186.6667 190.3333 195.3333 201.3333 208.0000 215.0000 220.6667 224.0000
## [33] 226.6667 226.6667 226.0000 217.0000 206.3333 187.6667 171.6667 155.3333
## [41] 146.3333 142.3333 141.0000 146.6667 155.6667 168.3333 177.3333 182.6667
## [49] 186.6667 190.3333 195.3333 201.3333 208.0000 215.0000 220.6667 224.0000
## [57] 226.6667 226.6667 226.0000 217.0000 208.3333 196.0000 185.0000 171.0000
## [65] 158.3333 147.0000 139.6667 134.6667 138.3333 145.0000 155.0000 162.3333
## [73] 172.0000 179.3333 186.3333 189.6667 195.3333 201.0000 208.0000 215.6667
data.ramal<-c(NA,data.sma)
data.ramal #forecast 1 periode ke depan
##  [1]       NA       NA       NA 190.3333 194.6667 200.0000 205.3333 210.6667
##  [9] 214.0000 219.6667 221.3333 219.0000 209.6667 201.0000 185.6667 171.6667
## [17] 155.3333 146.3333 142.3333 141.0000 146.6667 155.6667 168.3333 177.3333
## [25] 182.6667 186.6667 190.3333 195.3333 201.3333 208.0000 215.0000 220.6667
## [33] 224.0000 226.6667 226.6667 226.0000 217.0000 206.3333 187.6667 171.6667
## [41] 155.3333 146.3333 142.3333 141.0000 146.6667 155.6667 168.3333 177.3333
## [49] 182.6667 186.6667 190.3333 195.3333 201.3333 208.0000 215.0000 220.6667
## [57] 224.0000 226.6667 226.6667 226.0000 217.0000 208.3333 196.0000 185.0000
## [65] 171.0000 158.3333 147.0000 139.6667 134.6667 138.3333 145.0000 155.0000
## [73] 162.3333 172.0000 179.3333 186.3333 189.6667 195.3333 201.0000 208.0000
## [81] 215.6667
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,]    185        NA       NA
##   [2,]    194        NA       NA
##   [3,]    192  190.3333       NA
##   [4,]    198  194.6667 190.3333
##   [5,]    210  200.0000 194.6667
##   [6,]    208  205.3333 200.0000
##   [7,]    214  210.6667 205.3333
##   [8,]    220  214.0000 210.6667
##   [9,]    225  219.6667 214.0000
##  [10,]    219  221.3333 219.6667
##  [11,]    213  219.0000 221.3333
##  [12,]    197  209.6667 219.0000
##  [13,]    193  201.0000 209.6667
##  [14,]    167  185.6667 201.0000
##  [15,]    155  171.6667 185.6667
##  [16,]    144  155.3333 171.6667
##  [17,]    140  146.3333 155.3333
##  [18,]    143  142.3333 146.3333
##  [19,]    140  141.0000 142.3333
##  [20,]    157  146.6667 141.0000
##  [21,]    170  155.6667 146.6667
##  [22,]    178  168.3333 155.6667
##  [23,]    184  177.3333 168.3333
##  [24,]    186  182.6667 177.3333
##  [25,]    190  186.6667 182.6667
##  [26,]    195  190.3333 186.6667
##  [27,]    201  195.3333 190.3333
##  [28,]    208  201.3333 195.3333
##  [29,]    215  208.0000 201.3333
##  [30,]    222  215.0000 208.0000
##  [31,]    225  220.6667 215.0000
##  [32,]    225  224.0000 220.6667
##  [33,]    230  226.6667 224.0000
##  [34,]    225  226.6667 226.6667
##  [35,]    223  226.0000 226.6667
##  [36,]    203  217.0000 226.0000
##  [37,]    193  206.3333 217.0000
##  [38,]    167  187.6667 206.3333
##  [39,]    155  171.6667 187.6667
##  [40,]    144  155.3333 171.6667
##  [41,]    140  146.3333 155.3333
##  [42,]    143  142.3333 146.3333
##  [43,]    140  141.0000 142.3333
##  [44,]    157  146.6667 141.0000
##  [45,]    170  155.6667 146.6667
##  [46,]    178  168.3333 155.6667
##  [47,]    184  177.3333 168.3333
##  [48,]    186  182.6667 177.3333
##  [49,]    190  186.6667 182.6667
##  [50,]    195  190.3333 186.6667
##  [51,]    201  195.3333 190.3333
##  [52,]    208  201.3333 195.3333
##  [53,]    215  208.0000 201.3333
##  [54,]    222  215.0000 208.0000
##  [55,]    225  220.6667 215.0000
##  [56,]    225  224.0000 220.6667
##  [57,]    230  226.6667 224.0000
##  [58,]    225  226.6667 226.6667
##  [59,]    223  226.0000 226.6667
##  [60,]    203  217.0000 226.0000
##  [61,]    199  208.3333 217.0000
##  [62,]    186  196.0000 208.3333
##  [63,]    170  185.0000 196.0000
##  [64,]    157  171.0000 185.0000
##  [65,]    148  158.3333 171.0000
##  [66,]    136  147.0000 158.3333
##  [67,]    135  139.6667 147.0000
##  [68,]    133  134.6667 139.6667
##  [69,]    147  138.3333 134.6667
##  [70,]    155  145.0000 138.3333
##  [71,]    163  155.0000 145.0000
##  [72,]    169  162.3333 155.0000
##  [73,]    184  172.0000 162.3333
##  [74,]    185  179.3333 172.0000
##  [75,]    190  186.3333 179.3333
##  [76,]    194  189.6667 186.3333
##  [77,]    202  195.3333 189.6667
##  [78,]    207  201.0000 195.3333
##  [79,]    215  208.0000 201.0000
##  [80,]    225  215.6667 208.0000
##  [81,]     NA        NA 215.6667
##  [82,]     NA        NA 215.6667
##  [83,]     NA        NA 215.6667
##  [84,]     NA        NA 215.6667
##  [85,]     NA        NA 215.6667
##  [86,]     NA        NA 215.6667
##  [87,]     NA        NA 215.6667
##  [88,]     NA        NA 215.6667
##  [89,]     NA        NA 215.6667
##  [90,]     NA        NA 215.6667
##  [91,]     NA        NA 215.6667
##  [92,]     NA        NA 215.6667
##  [93,]     NA        NA 215.6667
##  [94,]     NA        NA 215.6667
##  [95,]     NA        NA 215.6667
##  [96,]     NA        NA 215.6667
##  [97,]     NA        NA 215.6667
##  [98,]     NA        NA 215.6667
##  [99,]     NA        NA 215.6667
## [100,]     NA        NA 215.6667

Plot Data Deret Waktu dari Hasil Peramalan

ts.plot(data.ts, xlab="Time Period ", ylab="Air", main= "SMA N=3 Data Ketinggian Air")
points(data.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)

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 = 3")
akurasi_train.sma
##      Akurasi m = 3
## SSE   20968.000000
## MSE     275.894737
## MAPE      8.100288

Dalam hal ini nilai MAPE data latih pada metode pemulusan SMA kurang dari 9%, 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    44321.55556
## MSE     2216.07778
## MAPE      25.38152

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

Double Moving Average (DMA)

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

t = 1:20
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,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.ramal2, f[-1]))
data.gab2
##        aktual pemulusan1 pemulusan2       At          Bt  ramalan
##   [1,]    185         NA         NA       NA          NA       NA
##   [2,]    194         NA         NA       NA          NA       NA
##   [3,]    192   190.3333         NA       NA          NA       NA
##   [4,]    198   194.6667         NA       NA          NA       NA
##   [5,]    210   200.0000   210.0000 205.0000   5.0000000       NA
##   [6,]    208   205.3333   216.0000 210.6667   5.3333333 210.0000
##   [7,]    214   210.6667   221.3333 216.0000   5.3333333 216.0000
##   [8,]    220   214.0000   222.0000 218.0000   4.0000000 221.3333
##   [9,]    225   219.6667   229.4444 224.5556   4.8888889 222.0000
##  [10,]    219   221.3333   227.3333 224.3333   3.0000000 229.4444
##  [11,]    213   219.0000   217.0000 218.0000  -1.0000000 227.3333
##  [12,]    197   209.6667   195.6667 202.6667  -7.0000000 217.0000
##  [13,]    193   201.0000   183.2222 192.1111  -8.8888889 195.6667
##  [14,]    167   185.6667   159.4444 172.5556 -13.1111111 183.2222
##  [15,]    155   171.6667   142.7778 157.2222 -14.4444444 159.4444
##  [16,]    144   155.3333   124.2222 139.7778 -15.5555556 142.7778
##  [17,]    140   146.3333   123.4444 134.8889 -11.4444444 124.2222
##  [18,]    143   142.3333   131.0000 136.6667  -5.6666667 123.4444
##  [19,]    140   141.0000   136.5556 138.7778  -2.2222222 131.0000
##  [20,]    157   146.6667   153.3333 150.0000   3.3333333 136.5556
##  [21,]    170   155.6667   171.4444 163.5556   7.8888889 153.3333
##  [22,]    178   168.3333   191.2222 179.7778  11.4444444 171.4444
##  [23,]    184   177.3333   197.7778 187.5556  10.2222222 191.2222
##  [24,]    186   182.6667   195.7778 189.2222   6.5555556 197.7778
##  [25,]    190   186.6667   195.5556 191.1111   4.4444444 195.7778
##  [26,]    195   190.3333   197.8889 194.1111   3.7777778 195.5556
##  [27,]    201   195.3333   204.4444 199.8889   4.5555556 197.8889
##  [28,]    208   201.3333   212.6667 207.0000   5.6666667 204.4444
##  [29,]    215   208.0000   220.8889 214.4444   6.4444444 212.6667
##  [30,]    222   215.0000   228.7778 221.8889   6.8888889 220.8889
##  [31,]    225   220.6667   232.8889 226.7778   6.1111111 228.7778
##  [32,]    225   224.0000   232.2222 228.1111   4.1111111 232.8889
##  [33,]    230   226.6667   232.4444 229.5556   2.8888889 232.2222
##  [34,]    225   226.6667   228.4444 227.5556   0.8888889 232.4444
##  [35,]    223   226.0000   225.1111 225.5556  -0.4444444 228.4444
##  [36,]    203   217.0000   204.5556 210.7778  -6.2222222 225.1111
##  [37,]    193   206.3333   186.1111 196.2222 -10.1111111 204.5556
##  [38,]    167   187.6667   155.6667 171.6667 -16.0000000 186.1111
##  [39,]    155   171.6667   137.8889 154.7778 -16.8888889 155.6667
##  [40,]    144   155.3333   122.8889 139.1111 -16.2222222 137.8889
##  [41,]    140   146.3333   123.4444 134.8889 -11.4444444 122.8889
##  [42,]    143   142.3333   131.0000 136.6667  -5.6666667 123.4444
##  [43,]    140   141.0000   136.5556 138.7778  -2.2222222 131.0000
##  [44,]    157   146.6667   153.3333 150.0000   3.3333333 136.5556
##  [45,]    170   155.6667   171.4444 163.5556   7.8888889 153.3333
##  [46,]    178   168.3333   191.2222 179.7778  11.4444444 171.4444
##  [47,]    184   177.3333   197.7778 187.5556  10.2222222 191.2222
##  [48,]    186   182.6667   195.7778 189.2222   6.5555556 197.7778
##  [49,]    190   186.6667   195.5556 191.1111   4.4444444 195.7778
##  [50,]    195   190.3333   197.8889 194.1111   3.7777778 195.5556
##  [51,]    201   195.3333   204.4444 199.8889   4.5555556 197.8889
##  [52,]    208   201.3333   212.6667 207.0000   5.6666667 204.4444
##  [53,]    215   208.0000   220.8889 214.4444   6.4444444 212.6667
##  [54,]    222   215.0000   228.7778 221.8889   6.8888889 220.8889
##  [55,]    225   220.6667   232.8889 226.7778   6.1111111 228.7778
##  [56,]    225   224.0000   232.2222 228.1111   4.1111111 232.8889
##  [57,]    230   226.6667   232.4444 229.5556   2.8888889 232.2222
##  [58,]    225   226.6667   228.4444 227.5556   0.8888889 232.4444
##  [59,]    223   226.0000   225.1111 225.5556  -0.4444444 228.4444
##  [60,]    203   217.0000   204.5556 210.7778  -6.2222222 225.1111
##  [61,]    199   208.3333   190.7778 199.5556  -8.7777778 204.5556
##  [62,]    186   196.0000   173.7778 184.8889 -11.1111111 190.7778
##  [63,]    170   185.0000   162.1111 173.5556 -11.4444444 173.7778
##  [64,]    157   171.0000   145.0000 158.0000 -13.0000000 162.1111
##  [65,]    148   158.3333   132.1111 145.2222 -13.1111111 145.0000
##  [66,]    136   147.0000   123.4444 135.2222 -11.7777778 132.1111
##  [67,]    135   139.6667   122.3333 131.0000  -8.6666667 123.4444
##  [68,]    133   134.6667   123.1111 128.8889  -5.7777778 122.3333
##  [69,]    147   138.3333   139.8889 139.1111   0.7777778 123.1111
##  [70,]    155   145.0000   156.3333 150.6667   5.6666667 139.8889
##  [71,]    163   155.0000   172.7778 163.8889   8.8888889 156.3333
##  [72,]    169   162.3333   178.7778 170.5556   8.2222222 172.7778
##  [73,]    184   172.0000   189.7778 180.8889   8.8888889 178.7778
##  [74,]    185   179.3333   195.5556 187.4444   8.1111111 189.7778
##  [75,]    190   186.3333   200.5556 193.4444   7.1111111 195.5556
##  [76,]    194   189.6667   198.7778 194.2222   4.5555556 200.5556
##  [77,]    202   195.3333   205.1111 200.2222   4.8888889 198.7778
##  [78,]    207   201.0000   212.3333 206.6667   5.6666667 205.1111
##  [79,]    215   208.0000   221.1111 214.5556   6.5555556 212.3333
##  [80,]    225   215.6667   230.5556 223.1111   7.4444444 221.1111
##  [81,]     NA         NA         NA       NA          NA 230.5556
##  [82,]     NA         NA         NA       NA          NA 238.0000
##  [83,]     NA         NA         NA       NA          NA 245.4444
##  [84,]     NA         NA         NA       NA          NA 252.8889
##  [85,]     NA         NA         NA       NA          NA 260.3333
##  [86,]     NA         NA         NA       NA          NA 267.7778
##  [87,]     NA         NA         NA       NA          NA 275.2222
##  [88,]     NA         NA         NA       NA          NA 282.6667
##  [89,]     NA         NA         NA       NA          NA 290.1111
##  [90,]     NA         NA         NA       NA          NA 297.5556
##  [91,]     NA         NA         NA       NA          NA 305.0000
##  [92,]     NA         NA         NA       NA          NA 312.4444
##  [93,]     NA         NA         NA       NA          NA 319.8889
##  [94,]     NA         NA         NA       NA          NA 327.3333
##  [95,]     NA         NA         NA       NA          NA 334.7778
##  [96,]     NA         NA         NA       NA          NA 342.2222
##  [97,]     NA         NA         NA       NA          NA 349.6667
##  [98,]     NA         NA         NA       NA          NA 357.1111
##  [99,]     NA         NA         NA       NA          NA 364.5556
## [100,]     NA         NA         NA       NA          NA 372.0000

Visualisasi DMA

ts.plot(data.ts, xlab="Time Period ", ylab="Sales", main= "DMA N=4 Data Sales")
points(data.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)

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 = 3")
akurasi_train.dma
##      Akurasi m = 3
## SSE    7700.740741
## MSE     105.489599
## MAPE      4.677993

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

Menghitung nilai keakuratan data uji

error_test.dma = test_ma.ts-data.gab2[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   376014.56790
## MSE    18800.72840
## MAPE      74.64062

Perhitungan akurasi menggunakan data latih menghasilkan nilai MAPE yang mendekati 75% sehingga nilai akurasi ini dapat dikategorikan sebagai sangat baik.

Pada data latih, metode DMA lebih baik dibandingkan dengan metode SMA, sedangkan pada data uji, metode SMA lebih baik dibandingkan DMA

Single Exponential Smoothing & Double Exponential Smoothing

Pembagian Data

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

#membagi training dan testing
training<-data[1:80,]
testing<-data[81:100,]
train.ts <- ts(training$Air)
test.ts <- ts(testing$Air)

Eksplorasi

#Eksplorasi dengan GGPLOT
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.2
ggplot() + 
  geom_line(data = training, aes(x = Periode, y = Air, col = "Data Latih")) +
  geom_line(data = testing, aes(x = Periode, y = Air, col = "Data Uji")) +
  labs(x = "Periode Waktu", y = "Membaca", color = "Legend") +
  scale_colour_manual(name="Keterangan:", breaks = c("Data Latih", "Data Uji"),
                      values = c("blue", "red")) + 
  theme_bw() + theme(legend.position = "bottom",
                     plot.caption = element_text(hjust=0.5, size=12))

SES

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       199.1546 167.2480 231.0612 150.3577 247.9515
##  82       199.1546 166.6161 231.6930 149.3913 248.9179
##  83       199.1546 165.9963 232.3129 148.4434 249.8658
##  84       199.1546 165.3878 232.9213 147.5128 250.7964
##  85       199.1546 164.7902 233.5190 146.5987 251.7105
##  86       199.1546 164.2027 234.1065 145.7003 252.6089
##  87       199.1546 163.6249 234.6843 144.8167 253.4925
##  88       199.1546 163.0564 235.2528 143.9472 254.3620
##  89       199.1546 162.4967 235.8125 143.0912 255.2180
##  90       199.1546 161.9455 236.3637 142.2481 256.0611
##  91       199.1546 161.4022 236.9070 141.4173 256.8919
##  92       199.1546 160.8667 237.4425 140.5983 257.7109
##  93       199.1546 160.3386 237.9706 139.7906 258.5186
##  94       199.1546 159.8175 238.4917 138.9937 259.3154
##  95       199.1546 159.3033 239.0059 138.2073 260.1019
##  96       199.1546 158.7956 239.5136 137.4309 260.8783
##  97       199.1546 158.2942 240.0149 136.6641 261.6451
##  98       199.1546 157.7989 240.5102 135.9066 262.4026
##  99       199.1546 157.3095 240.9997 135.1581 263.1511
## 100       199.1546 156.8257 241.4834 134.4182 263.8910
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       221.0654 205.5417 236.5892 197.3239 244.8070
##  82       221.0654 202.1163 240.0146 192.0852 250.0457
##  83       221.0654 199.2216 242.9093 187.6582 254.4727
##  84       221.0654 196.6680 245.4629 183.7527 258.3782
##  85       221.0654 194.3574 247.7735 180.2190 261.9119
##  86       221.0654 192.2314 249.8995 176.9675 265.1634
##  87       221.0654 190.2517 251.8792 173.9399 268.1910
##  88       221.0654 188.3917 253.7391 171.0953 271.0356
##  89       221.0654 186.6321 255.4988 168.4042 273.7267
##  90       221.0654 184.9581 257.1728 165.8441 276.2868
##  91       221.0654 183.3584 258.7725 163.3975 278.7334
##  92       221.0654 181.8238 260.3071 161.0506 281.0803
##  93       221.0654 180.3471 261.7838 158.7920 283.3389
##  94       221.0654 178.9220 263.2089 156.6126 285.5183
##  95       221.0654 177.5436 264.5873 154.5045 287.6264
##  96       221.0654 176.2075 265.9234 152.4611 289.6698
##  97       221.0654 174.9100 267.2209 150.4768 291.6540
##  98       221.0654 173.6481 268.4828 148.5469 293.5840
##  99       221.0654 172.4189 269.7120 146.6669 295.4639
## 100       221.0654 171.2200 270.9109 144.8334 297.2975
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=20)
ramalan1
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  81       199.1546 167.1375 231.1717 150.1886 248.1206
##  82       199.1546 166.5034 231.8058 149.2189 249.0903
##  83       199.1546 165.8814 232.4278 148.2677 250.0415
##  84       199.1546 165.2709 233.0383 147.3339 250.9753
##  85       199.1546 164.6711 233.6381 146.4166 251.8926
##  86       199.1546 164.0816 234.2276 145.5151 252.7941
##  87       199.1546 163.5018 234.8074 144.6284 253.6808
##  88       199.1546 162.9314 235.3778 143.7559 254.5533
##  89       199.1546 162.3697 235.9395 142.8970 255.4122
##  90       199.1546 161.8165 236.4927 142.0510 256.2582
##  91       199.1546 161.2714 237.0378 141.2173 257.0919
##  92       199.1546 160.7340 237.5751 140.3954 257.9138
##  93       199.1546 160.2041 238.1051 139.5849 258.7243
##  94       199.1546 159.6812 238.6280 138.7853 259.5239
##  95       199.1546 159.1652 239.1440 137.9961 260.3131
##  96       199.1546 158.6558 239.6534 137.2170 261.0922
##  97       199.1546 158.1527 240.1565 136.4476 261.8616
##  98       199.1546 157.6557 240.6535 135.6874 262.6217
##  99       199.1546 157.1645 241.1447 134.9363 263.3729
## 100       199.1546 156.6791 241.6301 134.1939 264.1153
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       221.0654 205.5587 236.5722 197.3500 244.7809
##  82       221.0654 202.1371 239.9938 192.1170 250.0139
##  83       221.0654 199.2456 242.8853 187.6948 254.4361
##  84       221.0654 196.6947 245.4361 183.7937 258.3372
##  85       221.0654 194.3867 247.7442 180.2638 261.8671
##  86       221.0654 192.2630 249.8679 177.0159 265.1150
##  87       221.0654 190.2855 251.8454 173.9916 268.1393
##  88       221.0654 188.4276 253.7033 171.1502 270.9807
##  89       221.0654 186.6699 255.4610 168.4620 273.6689
##  90       221.0654 184.9978 257.1331 165.9047 276.2262
##  91       221.0654 183.3998 258.7311 163.4608 278.6701
##  92       221.0654 181.8669 260.2640 161.1164 281.0145
##  93       221.0654 180.3917 261.7392 158.8604 283.2705
##  94       221.0654 178.9682 263.1627 156.6833 285.4476
##  95       221.0654 177.5913 264.5396 154.5775 287.5534
##  96       221.0654 176.2567 265.8742 152.5364 289.5945
##  97       221.0654 174.9607 267.1702 150.5543 291.5766
##  98       221.0654 173.7001 268.4308 148.6265 293.5044
##  99       221.0654 172.4723 269.6586 146.7486 295.3823
## 100       221.0654 171.2747 270.8562 144.9170 297.2139
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        224.999 212.8757 237.1223 206.4580 243.5400
##  82        224.999 207.8549 242.1431 198.7794 251.2186
##  83        224.999 204.0022 245.9958 192.8872 257.1108
##  84        224.999 200.7542 249.2438 187.9198 262.0782
##  85        224.999 197.8926 252.1054 183.5434 266.4546
##  86        224.999 195.3056 254.6924 179.5868 270.4112
##  87        224.999 192.9265 257.0715 175.9483 274.0497
##  88        224.999 190.7121 259.2859 172.5617 277.4363
##  89        224.999 188.6323 261.3657 169.3809 280.6171
##  90        224.999 186.6652 263.3328 166.3725 283.6255
##  91        224.999 184.7942 265.2038 163.5110 286.4870
##  92        224.999 183.0065 266.9915 160.7770 289.2210
##  93        224.999 181.2918 268.7062 158.1546 291.8434
##  94        224.999 179.6419 270.3561 155.6314 294.3666
##  95        224.999 178.0500 271.9480 153.1967 296.8013
##  96        224.999 176.5103 273.4877 150.8419 299.1561
##  97        224.999 175.0180 274.9800 148.5597 301.4383
##  98        224.999 173.5690 276.4290 146.3436 303.6544
##  99        224.999 172.1597 277.8383 144.1883 305.8097
## 100        224.999 170.7871 279.2109 142.0890 307.9090
#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.9999365
##  beta : FALSE
##  gamma: FALSE
## 
## Coefficients:
##       [,1]
## a 224.9994
plot(sesopt)

#ramalan
ramalanopt<- forecast(sesopt, h=20)
ramalanopt
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  81       224.9994 212.8951 237.1037 206.4874 243.5113
##  82       224.9994 207.8818 242.1169 198.8204 251.1784
##  83       224.9994 204.0350 245.9637 192.9371 257.0616
##  84       224.9994 200.7919 249.2068 187.9773 262.0215
##  85       224.9994 197.9347 252.0640 183.6075 266.3912
##  86       224.9994 195.3516 254.6472 179.6570 270.3417
##  87       224.9994 192.9761 257.0226 176.0241 273.9747
##  88       224.9994 190.7651 259.2336 172.6426 277.3561
##  89       224.9994 188.6885 261.3102 169.4667 280.5320
##  90       224.9994 186.7244 263.2743 166.4629 283.5359
##  91       224.9994 184.8563 265.1425 163.6058 286.3929
##  92       224.9994 183.0713 266.9274 160.8759 289.1228
##  93       224.9994 181.3592 268.6395 158.2576 291.7412
##  94       224.9994 179.7119 270.2868 155.7382 294.2606
##  95       224.9994 178.1224 271.8763 153.3072 296.6915
##  96       224.9994 176.5850 273.4137 150.9561 299.0427
##  97       224.9994 175.0950 274.9037 148.6773 301.3214
##  98       224.9994 173.6483 276.3505 146.4646 303.5341
##  99       224.9994 172.2411 277.7576 144.3126 305.6861
## 100       224.9994 170.8706 279.1282 142.2165 307.7822

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        48747.49261
## MSE          609.34366
## RMSE          24.68489
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         11453.4808
## MSE           143.1685
## RMSE           11.9653

Akurasi Data Uji

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

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

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

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

akurasitesting1 <- matrix(c(SSEtesting1,SSEtesting2,SSEtestingopt))
row.names(akurasitesting1)<- c("SSE1", "SSE2", "SSEopt")
akurasitesting1
##            [,1]
## SSE1   25292.63
## SSE2   52909.08
## SSEopt 59900.82
akurasitesting2 <- matrix(c(MSEtesting1,MSEtesting2,MSEtestingopt))
row.names(akurasitesting2)<- c("MSE1", "MSE2", "MSEopt")
akurasitesting2
##            [,1]
## MSE1   12646.31
## MSE2   26454.54
## MSEopt 29950.41

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       211.2980 166.1767 256.4192 142.2910 280.3049
##  82       218.2353 171.8328 264.6378 147.2688 289.2018
##  83       225.1726 177.0810 273.2643 151.6228 298.7225
##  84       232.1100 181.8975 282.3224 155.3167 308.9033
##  85       239.0473 186.2728 291.8218 158.3357 319.7589
##  86       245.9846 190.2093 301.7600 160.6836 331.2857
##  87       252.9220 193.7185 312.1254 162.3781 343.4658
##  88       259.8593 196.8187 322.9000 163.4470 356.2717
##  89       266.7967 199.5312 334.0621 163.9231 369.6702
##  90       273.7340 201.8793 345.5887 163.8417 383.6263
##  91       280.6713 203.8857 357.4570 163.2378 398.1048
##  92       287.6087 205.5724 369.6449 162.1450 413.0723
##  93       294.5460 206.9597 382.1323 160.5943 428.4977
##  94       301.4833 208.0661 394.9006 158.6140 444.3527
##  95       308.4207 208.9082 407.9332 156.2295 460.6119
##  96       315.3580 209.5009 421.2151 153.4636 477.2525
##  97       322.2954 209.8575 434.7332 150.3365 494.2542
##  98       329.2327 209.9897 448.4757 146.8663 511.5991
##  99       336.1700 209.9080 462.4321 143.0689 529.2711
## 100       343.1074 209.6218 476.5930 138.9588 547.2560
#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=20)
ramalandes2
##     Point Forecast    Lo 80    Hi 80     Lo 95    Hi 95
##  81       230.3102 214.6107 246.0098 206.29982 254.3206
##  82       237.3654 217.4548 257.2760 206.91478 267.8161
##  83       244.4206 219.4489 269.3923 206.22974 282.6115
##  84       251.4758 220.7528 282.1989 204.48899 298.4627
##  85       258.5310 221.4721 295.5900 201.85426 315.2078
##  86       265.5862 221.6780 309.4945 198.43431 332.7381
##  87       272.6414 221.4204 323.8624 194.30566 350.9772
##  88       279.6966 220.7365 338.6568 189.52485 369.8684
##  89       286.7518 219.6546 353.8490 184.13550 389.3682
##  90       293.8070 218.1977 369.4163 178.17256 409.4415
##  91       300.8622 216.3846 385.3399 171.66483 430.0596
##  92       307.9174 214.2312 401.6037 164.63666 451.1982
##  93       314.9726 211.7512 418.1941 157.10901 472.8363
##  94       322.0278 208.9566 435.0991 149.10024 494.9554
##  95       329.0830 205.8580 452.3081 140.62659 517.5395
##  96       336.1382 202.4650 469.8115 131.70264 540.5738
##  97       343.1934 198.7862 487.6007 122.34156 564.0453
##  98       350.2486 194.8293 505.6679 112.55533 587.9420
##  99       357.3038 190.6017 524.0060 102.35494 612.2527
## 100       364.3590 186.1099 542.6082  91.75052 636.9676

Membandingkan plot data uji dan data latih

plot(data.ts)
lines(des.1$fitted[,1], lty=2, col="blue")
lines(ramalandes1$mean, col="red")

#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.7469984
##  beta : 1
##  gamma: FALSE
## 
## Coefficients:
##         [,1]
## a 224.260724
## b   9.639556
plot(des.opt)

#ramalan
ramalandesopt<- forecast(des.opt, h=20)
ramalandesopt
##     Point Forecast     Lo 80    Hi 80       Lo 95    Hi 95
##  81       233.9003 224.81180 242.9888  220.000655 247.7999
##  82       243.5398 227.20072 259.8790  218.551314 268.5284
##  83       253.1794 227.06827 279.2905  213.245871 293.1129
##  84       262.8189 225.14593 300.4920  205.203042 320.4349
##  85       272.4585 221.74809 323.1689  194.903627 350.0134
##  86       282.0981 217.05313 347.1430  182.620432 381.5757
##  87       291.7376 211.18124 372.2940  168.537273 414.9380
##  88       301.3772 204.22168 398.5327  152.790664 449.9637
##  89       311.0167 196.24474 425.7887  135.488128 486.5453
##  90       320.6563 187.30800 454.0046  116.717679 524.5949
##  91       330.2958 177.45983 483.1318   96.553333 564.0383
##  92       339.9354 166.74177 513.1290   75.058599 604.8122
##  93       349.5749 155.19000 543.9599   52.288824 646.8611
##  94       359.2145 142.83646 575.5925   28.292847 690.1362
##  95       368.8541 129.70962 607.9985    3.114207 734.5939
##  96       378.4936 115.83508 641.1521  -23.207943 780.1952
##  97       388.1332 101.23603 675.0303  -50.638141 826.9045
##  98       397.7727  85.93360 709.6118  -79.144057 874.6895
##  99       407.4123  69.94718 744.8774 -108.696058 923.5206
## 100       417.0518  53.29460 780.8091 -139.266847 973.3705

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 -11.00000 -11.36000  -5.19360 -14.05274
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                      95485.01024
## MSE                       1193.56263
## MAPE                        17.20881
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 -11.000000  -5.420000   3.787600  -7.211128
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                      11557.12411
## MSE                        144.46405
## MAPE                         5.16045

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

Akurasi Data Uji

#Akurasi Data Testing
selisihdes1<-ramalandes1$mean-testing$Air
selisihdes1
## Time Series:
## Start = 81 
## End = 100 
## Frequency = 1 
##  [1] -15.702041  -8.764704   2.172633  18.109970  39.047308  57.984645
##  [7]  82.921982 104.859320 124.796657 138.733994 143.671332 152.608669
## [13] 114.546006 143.483344 143.420681 140.358018 144.295355 144.232693
## [19] 148.170030 153.107367
SSEtestingdes1<-sum(selisihdes1^2)
MSEtestingdes1<-SSEtestingdes1/length(testing$Air)
MAPEtestingdes1<-sum(abs(selisihdes1/testing$Air)*100)/length(testing$Air)

selisihdes2<-ramalandes2$mean-testing$Air
selisihdes2
## Time Series:
## Start = 81 
## End = 100 
## Frequency = 1 
##  [1]   3.310222  10.365423  21.420624  37.475826  58.531027  77.586228
##  [7] 102.641429 124.696630 144.751831 158.807032 163.862234 172.917435
## [13] 134.972636 164.027837 164.083038 161.138239 165.193440 165.248641
## [19] 169.303843 174.359044
SSEtestingdes2<-sum(selisihdes2^2)
MSEtestingdes2<-SSEtestingdes2/length(testing$Air)
MAPEtestingdes2<-sum(abs(selisihdes2/testing$Air)*100)/length(testing$Air)

selisihdesopt<-ramalandesopt$mean-testing$Air
selisihdesopt
## Time Series:
## Start = 81 
## End = 100 
## Frequency = 1 
##  [1]   6.900279  16.539835  30.179391  48.818946  72.458502  94.098058
##  [7] 121.737613 146.377169 169.016725 185.656281 193.295836 204.935392
## [13] 169.574948 201.214503 203.854059 203.493615 210.133170 212.772726
## [19] 219.412282 227.051837
SSEtestingdesopt<-sum(selisihdesopt^2)
MSEtestingdesopt<-SSEtestingdesopt/length(testing$Air)
MAPEtestingdesopt<-sum(abs(selisihdesopt/testing$Air)*100)/length(testing$Air)

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  263165.25843 352108.10616 537694.50544
## MSE   13158.26292  17605.40531  26884.72527
## MAPE     61.77873     72.30231     88.95545

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   12646.31 13158.26
## ske 2   26454.54 17605.41
## ske opt 29950.41 26884.73

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

Pemulusan Data Musiman

#membagi data menjadi training dan testing
training<-data[1:80,2]
testing<-data[81:100,2]
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(data.ts, col="red",main="Plot semua data")
points(data.ts)

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

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

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(7, 2) 
## Frequency = 13 
##              xhat    level      trend     season
## 2.000000 197.0771 209.3178 -3.5661877  -8.674556
## 2.076923 178.7401 199.7362 -4.1677295 -16.828402
## 2.153846 161.9649 190.8205 -4.6425315 -24.213018
## 2.230769 152.0624 182.5850 -5.0018301 -25.520710
## 2.307692 149.4838 175.1706 -5.2430786 -20.443787
## 2.384615 140.3527 168.6308 -5.3727542 -22.905325
## 2.461538 160.2870 163.1875 -5.3798089   2.479290
## 2.538462 170.1071 157.1503 -5.4455487  18.402367
## 2.615385 172.6380 151.6833 -5.4476912  26.402367
## 2.692308 166.0623 147.3080 -5.3404513  24.094675
## 2.769231 163.1297 145.5551 -4.9816966  22.556213
## 2.846154 152.3333 145.1475 -4.5242896  11.710059
## 2.923077 157.3264 148.1566 -3.7709552  12.940828
## 3.000000 137.8221 151.9203 -3.0174839 -11.080724
## 3.076923 141.0569 161.5384 -1.7539262 -18.727610
## 3.153846 147.1078 173.1731 -0.4150637 -25.650212
## 3.230769 160.7936 186.3365  0.9427796 -26.485704
## 3.307692 180.7250 199.5205  2.1669084 -20.962490
## 3.384615 190.6613 210.5425  3.0524091 -22.933544
## 3.461538 226.4181 220.4626  3.7391825   2.216330
## 3.538462 247.1228 224.9182  3.8108201  18.393797
## 3.615385 254.5041 224.3044  3.3683644  26.831326
## 3.692308 249.6399 221.3720  2.7382820  25.529694
## 3.769231 240.9736 214.7823  1.8054831  24.385841
## 3.846154 222.5624 206.9930  0.8460114  14.723397
## 3.923077 212.4160 196.7266 -0.2652374  15.954714
## 4.000000 177.5381 184.9781 -1.4135579  -6.026493
## 4.076923 161.4005 176.8569 -2.0843191 -13.372160
## 4.153846 147.7614 170.4925 -2.5123283 -20.218839
## 4.230769 142.8312 167.0279 -2.6075555 -21.589188
## 4.307692 143.7695 163.8541 -2.6641792 -17.420487
## 4.384615 141.2500 163.8361 -2.3995686 -20.186450
## 4.461538 167.8648 167.1865 -1.8245695   2.502881
## 4.538462 182.3911 167.3890 -1.6218654  16.623974
## 4.615385 188.8102 166.0889 -1.5896867  24.310997
## 4.692308 184.0898 163.9372 -1.6458905  21.798498
## 4.769231 182.4936 163.4733 -1.5276857  20.547954
## 4.846154 173.4478 164.4469 -1.2775573  10.278402
## 4.923077 179.3147 168.6798 -0.7265124  11.361431
## 5.000000 164.8280 173.6903 -0.1528068  -8.709537
## 5.076923 169.3384 183.5719  0.8506332 -15.084197
## 5.153846 176.2590 194.9549  1.9038657 -20.599748
## 5.230769 187.6700 206.6070  2.8786855 -21.815683
## 5.307692 204.2149 216.9517  3.6252862 -16.362045
## 5.384615 211.9885 225.7340  4.1409883 -17.886454
## 5.461538 240.1922 232.4772  4.4012185   3.313697
## 5.538462 254.2501 233.4400  4.0573752  16.752689
## 5.615385 254.3659 227.2474  3.0323732  24.086182
## 5.692308 243.4029 219.2066  1.9250543  22.271317
## 5.769231 231.9765 209.6510  0.7769954  21.548468
## 5.846154 210.0528 198.0327 -0.4625347  12.482582
## 5.923077 199.0923 186.9596 -1.5235903  13.656254
## 6.000000 167.9764 175.2176 -2.5454364  -4.695777
## 6.076923 152.2206 166.2769 -3.1849640 -10.871267
## 6.153846 139.4179 159.6478 -3.5293770 -16.700469
## 6.230769 132.3478 154.8348 -3.6577358 -18.829280
## 6.307692 136.4436 154.1075 -3.3646919 -14.299236
## 6.384615 134.6150 154.4541 -2.9935638 -16.845533
## 6.461538 156.6500 157.1375 -2.4258641   1.938324
## 6.538462 167.6555 157.1817 -2.1788642  12.652681
## 6.615385 176.0766 158.2717 -1.8519742  19.656906
## 6.692308 174.2100 158.2044 -1.6735072  17.679081
## 6.769231 174.9215 159.6889 -1.3577069  16.590347
## 6.846154 169.4091 162.1469 -0.9761379   8.238359
## 6.923077 176.9335 167.6889 -0.3243202   9.568869
## 7.000000 166.4010 173.3779  0.2770102  -7.253888
## 7.076923 172.3748 183.3747  1.2489895 -12.248919
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.8426618
##  beta : 0.8666595
##  gamma: 0.5990428
## 
## Coefficients:
##           [,1]
## a   239.971640
## b    21.833746
## s1  -23.991572
## s2  -26.592527
## s3  -22.534732
## s4  -22.552350
## s5   -6.278873
## s6   14.302942
## s7   28.970275
## s8   29.677517
## s9   25.014296
## s10  15.106637
## s11  10.891644
## s12  -3.599878
## s13 -15.135273
winter1.opt$fitted
## Time Series:
## Start = c(2, 1) 
## End = c(7, 2) 
## Frequency = 13 
##              xhat    level       trend      season
## 2.000000 197.0771 209.3178  -3.5661877  -8.6745562
## 2.076923 138.0469 180.4068 -25.5315135 -16.8284024
## 2.153846 131.7974 169.1610 -13.1506624 -24.2130178
## 2.230769 136.5333 166.2931  -4.2390598 -25.5207101
## 2.307692 142.8241 164.9753  -1.7073297 -20.4437870
## 2.384615 138.9319 163.4161  -1.5789061 -22.9053254
## 2.461538 164.4177 162.7373  -0.7988626   2.4792899
## 2.538462 167.8742 155.6878  -6.2160136  18.4023669
## 2.615385 173.0020 151.2632  -4.6635041  26.4023669
## 2.692308 173.8925 150.8113  -1.0134740  24.0946746
## 2.769231 187.2393 158.3150   6.3680709  22.5562130
## 2.846154 180.8118 163.6388   5.4630040  11.7100592
## 2.923077 201.9582 176.8443  12.1731246  12.9408284
## 3.000000 178.7361 183.1540   7.0915123 -11.5093923
## 3.076923 217.1268 209.0064  23.3508649 -15.2305347
## 3.153846 218.2892 224.6665  16.6855856 -23.0628899
## 3.230769 227.6699 238.5804  14.2834666 -25.1939660
## 3.307692 237.8016 248.0861  10.1427263 -20.4272127
## 3.384615 225.4305 247.4414   0.7937265 -22.8046533
## 3.461538 250.1319 247.8724   0.4793592   1.7801546
## 3.538462 235.7671 231.3874 -14.2229810  18.6027331
## 3.615385 212.8786 208.0913 -22.0862136  26.8734383
## 3.692308 204.8869 194.5341 -14.6945249  25.0473338
## 3.769231 184.6164 178.2495 -16.0725170  22.4394054
## 3.846154 171.8676 169.2415  -9.9499913  12.5760646
## 3.923077 153.9700 155.1898 -13.5048127  12.2849976
## 4.000000 120.3894 142.5529 -12.7525895  -9.4109668
## 4.076923 138.0956 149.6961   4.4902627 -16.0907530
## 4.153846 138.2992 155.7911   5.8810300 -23.3729064
## 4.230769 149.2189 165.6333   9.3139950 -25.7283683
## 4.307692 148.1265 167.1789   2.5814065 -21.6337908
## 4.384615 163.4542 177.2376   9.0617506 -22.8452255
## 4.461538 205.5402 191.8153  13.8421751  -0.1173235
## 4.538462 193.7679 182.4504  -6.2704328  17.5879075
## 4.615385 182.3724 167.9490 -13.4039526  27.8274066
## 4.692308 171.7166 157.6018 -10.7547232  24.8694907
## 4.769231 188.0811 162.2538   2.5976572  23.2295761
## 4.846154 190.4497 170.6818   7.6505610  12.1172808
## 4.923077 214.9603 187.2227  15.3554885  12.3820792
## 5.000000 199.7998 196.7130  10.2723653  -7.1856113
## 5.076923 225.2559 219.7940  21.3730855 -15.9112611
## 5.153846 234.4890 238.4235  18.9953261 -22.9298493
## 5.230769 234.8911 249.4228  12.0654944 -26.5972734
## 5.307692 237.1981 253.1535   4.8420491 -20.7974402
## 5.384615 229.2870 251.9300  -0.4147464 -22.2282658
## 5.461538 241.6442 247.9028  -3.5455227  -2.7130485
## 5.538462 228.1524 228.6465 -17.1613967  16.6672583
## 5.615385 182.9293 190.2902 -35.5301830  28.1693151
## 5.692308 171.1012 168.3021 -23.7937378  26.5927435
## 5.769231 168.0317 157.0631 -12.9130989  23.8817019
## 5.846154 147.4446 145.8086 -11.4756490  13.1116756
## 5.923077 149.6136 142.3849  -4.4973587  11.7260534
## 6.000000 125.0991 136.5278  -5.6757685  -5.7529568
## 6.076923 126.1049 140.0378   2.2851669 -16.2181338
## 6.153846 134.7757 149.8186   8.7812938 -23.8242106
## 6.230769 137.0586 157.1036   7.4845193 -27.5295284
## 6.307692 166.2342 172.9654  14.7447448 -21.4758801
## 6.384615 162.1515 178.2435   6.5403786 -22.6323225
## 6.461538 188.1885 185.4988   7.1600318  -4.4703077
## 6.538462 183.9326 176.4894  -6.8533801  14.2965902
## 6.615385 192.5727 169.6928  -6.8041649  29.6840160
## 6.692308 172.1700 156.5075 -12.3344833  27.9969943
## 6.769231 183.9517 159.1977   0.6868073  24.0672186
## 6.846154 190.3892 168.3518   8.0251001  14.0122910
## 6.923077 214.2393 186.1609  16.5044856  11.5739683
## 7.000000 203.0571 196.5651  11.2175906  -4.7255217
## 7.076923 222.4062 217.8465  19.9394821 -15.3797463
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,15),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  81903.40138
## MSE   1023.79252
## RMSE    31.99676
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  9048.03207
## MSE1.opt   113.10040
## RMSE1.opt   10.63487
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 81903.401 1023.7925   31.99676
## 2 Winter1 optimal  9048.032  113.1004   10.63487

Akurasi Data Uji

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

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

Winter Multiplikatif

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

Pemulusan

#Pemulusan dengan winter multiplikatif 
winter2 <- HoltWinters(training.ts,alpha=0.2,beta=0.1,gamma=0.3,seasonal = "multiplicative")
winter2$fitted
## Time Series:
## Start = c(2, 1) 
## End = c(7, 2) 
## Frequency = 13 
##              xhat    level       trend    season
## 2.000000 197.0607 209.3178 -3.56618766 0.9577599
## 2.076923 177.4278 199.4744 -4.19391637 0.9085795
## 2.153846 160.0359 190.3435 -4.68760589 0.8620025
## 2.230769 150.6108 181.9353 -5.05966717 0.8515069
## 2.307692 148.8964 174.3834 -5.30889226 0.8806557
## 2.384615 140.3817 167.7354 -5.44280232 0.8649914
## 2.461538 159.3492 162.2044 -5.45162820 1.0165642
## 2.538462 166.0630 156.2905 -5.49784698 1.1012669
## 2.615385 166.9884 151.5077 -5.42634767 1.1431190
## 2.692308 161.8308 148.0079 -5.23368800 1.1334733
## 2.769231 159.9915 146.6860 -4.84251516 1.1279443
## 2.846154 152.2868 146.4551 -4.38134930 1.0718853
## 2.923077 157.1041 149.1106 -3.67766930 1.0802512
## 3.000000 137.7531 152.4490 -2.97605594 0.9215920
## 3.076923 142.2523 163.1986 -1.60349849 0.8803008
## 3.153846 148.3450 176.5326 -0.10974204 0.8408488
## 3.230769 162.1524 192.2771  1.47568079 0.8369034
## 3.307692 184.0040 208.0549  2.90589676 0.8722189
## 3.384615 193.8106 220.3612  3.84593523 0.8644266
## 3.461538 239.0486 231.4234  4.56755498 1.0129568
## 3.538462 264.2428 234.2043  4.38889790 1.1075034
## 3.615385 273.0459 231.5065  3.68022585 1.1609747
## 3.692308 268.3203 226.5654  2.81809036 1.1697454
## 3.769231 257.4265 218.2152  1.70126139 1.1705651
## 3.846154 237.2872 208.9087  0.60048483 1.1325864
## 3.923077 223.9430 197.0974 -0.64069621 1.1399106
## 4.000000 185.1753 184.3605 -1.85031816 1.0146030
## 4.076923 166.5258 174.3936 -2.66197201 0.9696863
## 4.153846 150.6674 166.2606 -3.20907262 0.9240475
## 4.230769 143.1539 161.3920 -3.37502442 0.9059401
## 4.307692 141.0841 157.3207 -3.44465246 0.9168685
## 4.384615 138.3274 157.3479 -3.09747313 0.8967718
## 4.461538 159.5085 161.3141 -2.39110405 1.0036842
## 4.538462 171.3155 162.6077 -2.02263131 1.0668209
## 4.615385 178.5793 162.9631 -1.78483135 1.1079613
## 4.692308 176.6164 162.5178 -1.65087815 1.0979041
## 4.769231 177.5291 163.3049 -1.40707578 1.0965502
## 4.846154 171.7037 165.0844 -1.08842373 1.0469995
## 4.923077 177.5437 169.5922 -0.52879926 1.0501607
## 5.000000 167.5576 174.8637  0.05123146 0.9579376
## 5.076923 173.1109 184.8200  1.04174319 0.9313958
## 5.153846 181.1158 196.3598  2.09154620 0.9126456
## 5.230769 190.2477 208.0683  3.05323899 0.9011286
## 5.307692 209.5545 218.8346  3.82454608 0.9411447
## 5.384615 218.2877 227.0040  4.25902832 0.9438937
## 5.461538 244.4307 232.6853  4.40125434 1.0309767
## 5.538462 257.1713 232.9292  3.98551913 1.0855016
## 5.615385 257.2635 226.9338  2.98743185 1.1189200
## 5.692308 247.4899 219.5070  1.94600863 1.1175732
## 5.769231 237.0616 210.4488  0.84558952 1.1219494
## 5.846154 216.5924 199.3399 -0.34985891 1.0884585
## 5.923077 203.7550 188.0402 -1.44484657 1.0919619
## 6.000000 177.3165 176.3834 -2.46603611 1.0195444
## 6.076923 161.0976 165.8125 -3.27652613 0.9911504
## 6.153846 147.8291 157.2699 -3.80313845 0.9632647
## 6.230769 137.3893 150.3878 -4.11103039 0.9392422
## 6.307692 139.0389 148.3232 -3.90638279 0.9627607
## 6.384615 137.0676 147.7326 -3.57481311 0.9508170
## 6.461538 147.8871 149.6125 -3.02933794 1.0088955
## 6.538462 152.3374 150.7685 -2.61080284 1.0282114
## 6.615385 160.7323 154.3165 -1.99492637 1.0552171
## 6.692308 162.7590 156.9211 -1.53496987 1.0474488
## 6.769231 166.1485 160.5875 -1.01483059 1.0412090
## 6.846154 166.4817 164.9225 -0.47984731 1.0123993
## 6.923077 174.4448 171.4594  0.22181903 1.0160976
## 7.000000 171.7475 178.0891  0.86260716 0.9597422
## 7.076923 180.4938 187.9650  1.76394391 0.9513244
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(7, 2) 
## Frequency = 13 
##              xhat    level       trend    season
## 2.000000 197.0607 209.3178  -3.5661877 0.9577599
## 2.076923 139.0478 177.3346 -24.2959119 0.9085795
## 2.153846 134.6750 168.9349 -12.6998680 0.8620025
## 2.230769 136.6450 166.0295  -5.5550571 0.8515069
## 2.307692 141.8638 164.0417  -2.9528044 0.8806557
## 2.384615 138.5338 162.2570  -2.1006943 0.8649914
## 2.461538 163.3718 161.6910  -0.9811639 1.0165642
## 2.538462 165.0951 155.0348  -5.1209786 1.1012669
## 2.615385 173.4877 153.9463  -2.1793497 1.1431190
## 2.692308 176.5596 155.3409   0.4277633 1.1334733
## 2.769231 187.7747 161.7119   4.7632371 1.1279443
## 2.846154 180.9071 165.0506   3.7240869 1.0718853
## 2.923077 200.6913 176.4552   9.3268865 1.0802512
## 3.000000 175.9696 181.0120   5.8471884 0.9417228
## 3.076923 214.9972 210.9240  23.4020234 0.9175130
## 3.153846 213.1745 227.4213  18.3651261 0.8673160
## 3.230769 228.2507 247.6921  19.7552691 0.8534417
## 3.307692 243.0094 260.8161  14.9179161 0.8813181
## 3.384615 223.9555 257.2327   1.4215158 0.8658493
## 3.461538 265.2852 259.7463   2.2182427 1.0126760
## 3.538462 231.4823 230.4174 -20.7948089 1.1042812
## 3.615385 205.8389 204.3078 -24.6718621 1.1458671
## 3.692308 203.0055 193.1956 -14.7803663 1.1378262
## 3.769231 184.3960 178.4108 -14.7835589 1.1269271
## 3.846154 173.1419 170.5399  -9.7409512 1.0767604
## 3.923077 153.1092 155.6345 -13.5083081 1.0772766
## 4.000000 125.1854 143.7153 -12.3490858 0.9529498
## 4.076923 137.1288 149.2419   0.6908873 0.9146022
## 4.153846 135.0102 152.7750   2.7642505 0.8680133
## 4.230769 147.0122 163.8732   8.8436899 0.8511744
## 4.307692 147.5265 165.2580   3.4025833 0.8746946
## 4.384615 163.7369 178.4666  10.5558611 0.8662297
## 4.461538 210.5180 195.5688  15.3312738 0.9981884
## 4.538462 192.9665 181.4050  -6.1847684 1.1012795
## 4.615385 180.3969 167.8487 -11.5622142 1.1542707
## 4.692308 173.3193 160.6815  -8.3561265 1.1378232
## 4.769231 188.9091 165.5986   1.3264439 1.1317001
## 4.846154 189.5814 171.7980   4.8811548 1.0730269
## 4.923077 213.7880 186.3138  11.9094880 1.0785213
## 5.000000 194.6439 193.3644   8.3649878 0.9648765
## 5.076923 222.7990 220.8305  22.2989298 0.9163801
## 5.153846 230.4283 242.3400  21.7230568 0.8726259
## 5.230769 233.8547 258.4310  17.6145288 0.8471601
## 5.307692 243.9394 266.5821  10.7111579 0.8797165
## 5.384615 228.7828 262.9469   0.2457964 0.8692595
## 5.461538 251.8074 259.2527  -2.6283723 0.9812297
## 5.538462 228.0419 230.0433 -22.0186994 1.0962256
## 5.615385 173.9083 187.3420 -37.1062812 1.1575697
## 5.692308 168.7427 169.8612 -22.7898782 1.1473529
## 5.769231 167.7991 160.6893 -12.8558051 1.1350543
## 5.846154 148.8930 149.5891 -11.5751226 1.0788250
## 5.923077 148.6666 144.8178  -6.6119104 1.0756894
## 6.000000 127.1748 137.6448  -7.0211830 0.9735973
## 6.076923 126.2307 138.8306  -1.0343586 0.9160682
## 6.153846 132.1206 146.4633   5.2881033 0.8706387
## 6.230769 133.8790 152.6659   5.9551802 0.8440177
## 6.307692 165.2477 172.6962  16.2227594 0.8747012
## 6.384615 162.1170 178.3117   8.4849723 0.8678791
## 6.461538 190.8471 187.7179   9.1569833 0.9693825
## 6.538462 185.0124 176.4699  -5.7280609 1.0835797
## 6.615385 191.6071 169.8959  -6.3451530 1.1715448
## 6.692308 171.7457 158.4447 -10.0699350 1.1575131
## 6.769231 185.2394 162.6531   0.3457965 1.1364462
## 6.846154 190.1716 169.9783   5.4371735 1.0841211
## 6.923077 212.8281 185.2938  12.6432502 1.0752313
## 7.000000 197.9724 193.0295   9.0632767 0.9796112
## 7.076923 219.7170 217.8304  20.5435452 0.9217326
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.1",type="l",col="black",
     xlim=c(1,13),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        97090.39423
## MSE2         1213.62993
## RMSE2          34.83719
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  11555.30460
## MSE2.opt    144.44131
## RMSE2.opt    12.01837
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  97090.39 1213.6299   34.83719
## 2 winter2 optimal  11555.30  144.4413   12.01837

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)