MPDW Project 1
Library
## Warning: package 'forecast' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Warning: package 'TTR' was built under R version 4.3.3
## 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
## Warning: package 'rio' was built under R version 4.3.3
Import Data
Eksplorasi 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 ...
## [1] 100 2
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 133.0 161.8 189.0 185.8 210.8 230.0
Single Moving Average & Double Moving Average
Pembagian Data
Eksplorasi Data
Single Moving Average (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
## [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.
Eksplorasi
## 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
## 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
## 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
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)## 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
## 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
## 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
## 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)## 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)## 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
## 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
## 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
## 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.
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
## 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
Peramalan
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
Peramalan
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)