library(TTR)
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
setwd("C:\\asprak\\2022\\MPDW\\Praktikum 2")
#membuka file
dataekspo<-read.csv("data praktikum eksponensial.csv")
#membagi training dan testing
training<-dataekspo[1:40,2]
testing<-dataekspo[41:50,2]
#data time series
dataekspo.ts<-ts(dataekspo$Yt)
training.ts<-ts(training)
testing.ts<-ts(testing,start=41)
#eksplorasi data
plot(dataekspo.ts, col="red",main="Plot semua data")
points(dataekspo.ts)

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

#single eksponensial dengan lamda=0.2 dan lamda 0.7
#Cara 1 (fungsi ses)
ses.1 <- ses(training.ts, h = 10, alpha = 0.2)
plot(ses.1)

ses.1
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 41 51.2589 47.18575 55.33206 45.02955 57.48826
## 42 51.2589 47.10508 55.41272 44.90618 57.61162
## 43 51.2589 47.02596 55.49185 44.78517 57.73264
## 44 51.2589 46.94828 55.56953 44.66637 57.85143
## 45 51.2589 46.87198 55.64583 44.54968 57.96812
## 46 51.2589 46.79698 55.72082 44.43499 58.08282
## 47 51.2589 46.72323 55.79458 44.32219 58.19562
## 48 51.2589 46.65065 55.86715 44.21119 58.30661
## 49 51.2589 46.57920 55.93860 44.10192 58.41589
## 50 51.2589 46.50883 56.00898 43.99429 58.52352
ses.2<- ses(training.ts, h = 10, alpha = 0.7)
plot(ses.2)

ses.2
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 41 51.64682 46.89683 56.39681 44.38234 58.91130
## 42 51.64682 45.84872 57.44492 42.77939 60.51425
## 43 51.64682 44.96299 58.33065 41.42479 61.86885
## 44 51.64682 44.18162 59.11201 40.22979 63.06385
## 45 51.64682 43.47463 59.81901 39.14853 64.14511
## 46 51.64682 42.82411 60.46953 38.15364 65.14000
## 47 51.64682 42.21836 61.07528 37.22723 66.06640
## 48 51.64682 41.64925 61.64439 36.35685 66.93679
## 49 51.64682 41.11083 62.18281 35.53342 67.76022
## 50 51.64682 40.59863 62.69501 34.75006 68.54357
#Cara 2 (fungsi Holtwinter)
ses1<- HoltWinters(training.ts, gamma = FALSE, beta = FALSE, alpha = 0.2)
plot(ses1)

#ramalan
ramalan1<- forecast(ses1, h=10)
ramalan1
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 41 51.25907 47.18474 55.33340 45.02791 57.49023
## 42 51.25907 47.10405 55.41409 44.90451 57.61363
## 43 51.25907 47.02490 55.49324 44.78346 57.73468
## 44 51.25907 46.94720 55.57094 44.66463 57.85351
## 45 51.25907 46.87088 55.64726 44.54791 57.97023
## 46 51.25907 46.79586 55.72228 44.43318 58.08496
## 47 51.25907 46.72208 55.79606 44.32035 58.19779
## 48 51.25907 46.64949 55.86865 44.20932 58.30882
## 49 51.25907 46.57802 55.94012 44.10002 58.41812
## 50 51.25907 46.50762 56.01052 43.99236 58.52579
ses2<- HoltWinters(training.ts, gamma = FALSE, beta = FALSE, alpha = 0.7)
plot(ses2)

#ramalan
ramalan2<- forecast(ses2, h=10)
ramalan2
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 41 51.64682 46.89554 56.39810 44.38036 58.91328
## 42 51.64682 45.84714 57.44650 42.77697 60.51667
## 43 51.64682 44.96117 58.33247 41.42200 61.87164
## 44 51.64682 44.17959 59.11405 40.22668 63.06696
## 45 51.64682 43.47240 59.82124 39.14513 64.14851
## 46 51.64682 42.82170 60.47194 38.14997 65.14367
## 47 51.64682 42.21579 61.07785 37.22331 66.07033
## 48 51.64682 41.64652 61.64711 36.35269 66.94095
## 49 51.64682 41.10796 62.18568 35.52903 67.76461
## 50 51.64682 40.59562 62.69802 34.74546 68.54818
#Keakuratan Metode
#Pada data training
SSE1<-ses1$SSE
MSE1<-ses1$SSE/length(training.ts)
RMSE1<-sqrt(MSE1)
akurasi1 <- matrix(c(SSE1,MSE1,RMSE1))
row.names(akurasi1)<- c("SSE", "MSE", "MAPE")
colnames(akurasi1) <- c("Akurasi lamda=0.2")
akurasi1
## Akurasi lamda=0.2
## SSE 388.280675
## MSE 9.707017
## MAPE 3.115609
SSE2<-ses2$SSE
MSE2<-ses2$SSE/length(training.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 522.770369
## MSE 13.069259
## RMSE 3.615143
#Cara Manual
fitted1<-ramalan1$fitted
sisaan1<-ramalan1$residuals
head(sisaan1)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] NA -2.90000 -1.72000 -1.57600 -3.46080 7.03136
resid1<-training-ramalan1$fitted
head(resid1)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] NA -2.90000 -1.72000 -1.57600 -3.46080 7.03136
#export csv
hslses<-cbind(training.ts,fitted1,sisaan1)
hslses1<-data.frame(hslses)
write.csv(hslses1,"hslses.csv")
SSE.1=sum(sisaan1[2:length(training.ts)]^2)
SSE.1
## [1] 388.2807
MSE.1 = SSE.1/length(training.ts)
MSE.1
## [1] 9.707017
MAPE.1 = sum(abs(sisaan1[2:length(training.ts)]/training.ts[2:length(training.ts)])*100)/length(training.ts)
MAPE.1
## [1] 5.249856
akurasi.1 <- matrix(c(SSE.1,MSE.1,MAPE.1))
row.names(akurasi.1)<- c("SSE", "MSE", "MAPE")
colnames(akurasi.1) <- c("Akurasi lamda=0.2")
akurasi.1
## Akurasi lamda=0.2
## SSE 388.280675
## MSE 9.707017
## MAPE 5.249856
fitted2<-ramalan2$fitted
sisaan2<-ramalan2$residuals
head(sisaan2)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] NA -2.90000 -0.27000 -0.28100 -2.28430 9.11471
resid2<-training-ramalan2$fitted
head(resid2)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] NA -2.90000 -0.27000 -0.28100 -2.28430 9.11471
SSE.2=sum(sisaan2[2:length(training.ts)]^2)
SSE.2
## [1] 522.7704
MSE.2 = SSE.2/length(training.ts)
MSE.2
## [1] 13.06926
MAPE.2 = sum(abs(sisaan2[2:length(training.ts)]/training.ts[2:length(training.ts)])*100)/length(training.ts)
MAPE.2
## [1] 5.767118
akurasi.2 <- matrix(c(SSE.2,MSE.2,MAPE.2))
row.names(akurasi.2)<- c("SSE", "MSE", "MAPE")
colnames(akurasi.2) <- c("Akurasi lamda=0.7")
akurasi.2
## Akurasi lamda=0.7
## SSE 522.770369
## MSE 13.069259
## MAPE 5.767118
#Lamda Optimum Holt Winter
sesopt<- HoltWinters(training.ts, gamma = FALSE, beta = FALSE)
sesopt
## Holt-Winters exponential smoothing without trend and without seasonal component.
##
## Call:
## HoltWinters(x = training.ts, beta = FALSE, gamma = FALSE)
##
## Smoothing parameters:
## alpha: 0.161055
## beta : FALSE
## gamma: FALSE
##
## Coefficients:
## [,1]
## a 51.001
plot(sesopt)

#ramalan
ramalanopt<- forecast(sesopt, h=10)
ramalanopt
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 41 51.001 46.94040 55.06161 44.79084 57.21117
## 42 51.001 46.88807 55.11394 44.71082 57.29119
## 43 51.001 46.83640 55.16561 44.63179 57.37021
## 44 51.001 46.78537 55.21664 44.55374 57.44827
## 45 51.001 46.73494 55.26707 44.47662 57.52539
## 46 51.001 46.68511 55.31690 44.40041 57.60160
## 47 51.001 46.63584 55.36617 44.32506 57.67695
## 48 51.001 46.58712 55.41489 44.25055 57.75146
## 49 51.001 46.53894 55.46307 44.17686 57.82515
## 50 51.001 46.49126 55.51074 44.10395 57.89806
#Evaluasi Data Testing
selisih1<-ramalan1$mean-testing.ts
SSEtesting1<-sum(selisih1^2)
MSEtesting1<-SSEtesting1/length(testing.ts)
selisih2<-ramalan2$mean-testing.ts
SSEtesting2<-sum(selisih2^2)
MSEtesting2<-SSEtesting2/length(testing.ts)
selisihopt<-ramalanopt$mean-testing.ts
SSEtestingopt<-sum(selisihopt^2)
MSEtestingopt<-SSEtestingopt/length(testing.ts)
akurasitesting1 <- matrix(c(SSEtesting1,SSEtesting2,SSEtestingopt))
row.names(akurasitesting1)<- c("SSE1", "SSE2", "SSEopt")
akurasitesting1
## [,1]
## SSE1 95.28706
## SSE2 108.02806
## SSEopt 88.47392
akurasitesting2 <- matrix(c(MSEtesting1,MSEtesting2,MSEtestingopt))
row.names(akurasitesting2)<- c("MSE1", "MSE2", "MSEopt")
akurasitesting2
## [,1]
## MSE1 9.528706
## MSE2 10.802806
## MSEopt 8.847392
#Double Eksponensial Smoothing
#Lamda=0.2 dan gamma=0.2
des.1<- HoltWinters(training.ts, gamma = FALSE, beta = 0.2, alpha = 0.2)
plot(des.1)

#ramalan
ramalandes1<- forecast(des.1, h=10)
ramalandes1
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 41 52.93449 46.89794 58.97104 43.70238 62.16660
## 42 53.23737 47.02939 59.44534 43.74309 62.73164
## 43 53.54024 47.10629 59.97420 43.70036 63.38013
## 44 53.84312 47.12544 60.56081 43.56931 64.11693
## 45 54.14600 47.08556 61.20645 43.34798 64.94402
## 46 54.44888 46.98696 61.91080 43.03685 65.86090
## 47 54.75176 46.83121 62.67230 42.63833 66.86519
## 48 55.05464 46.62073 63.48854 42.15608 67.95319
## 49 55.35751 46.35839 64.35663 41.59454 69.12048
## 50 55.66039 46.04729 65.27350 40.95842 70.36236
#Lamda=0.6 dan gamma=0.3
des.2<- HoltWinters(training.ts, gamma = FALSE, beta = 0.3, alpha = 0.6)
plot(des.2)

#ramalan
ramalandes2<- forecast(des.2, h=10)
ramalandes2
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 41 51.35923 46.08547 56.63298 43.29371 59.42474
## 42 51.24032 44.55201 57.92864 41.01142 61.46922
## 43 51.12142 42.73300 59.50984 38.29244 63.95040
## 44 51.00252 40.68212 61.32292 35.21883 66.78621
## 45 50.88362 38.43488 63.33236 31.84491 69.92232
## 46 50.76472 36.01516 65.51427 28.20722 73.32221
## 47 50.64581 33.43979 67.85184 24.33147 76.96015
## 48 50.52691 30.72117 70.33265 20.23665 80.81717
## 49 50.40801 27.86889 72.94712 15.93741 84.87861
## 50 50.28911 24.89063 75.68759 11.44548 89.13273
#Lamda dan gamma optimum
des.opt<- HoltWinters(training.ts, gamma = FALSE)
des.opt
## Holt-Winters exponential smoothing with trend and without seasonal component.
##
## Call:
## HoltWinters(x = training.ts, gamma = FALSE)
##
## Smoothing parameters:
## alpha: 0.4635085
## beta : 0.2628024
## gamma: FALSE
##
## Coefficients:
## [,1]
## a 51.81211440
## b -0.03605837
plot(des.opt)

#ramalan
ramalandesopt<- forecast(des.opt, h=10)
ramalandesopt
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 41 51.77606 46.66859 56.88352 43.96486 59.58725
## 42 51.74000 45.82194 57.65805 42.68912 60.79088
## 43 51.70394 44.77088 58.63700 41.10074 62.30714
## 44 51.66788 43.54431 59.79145 39.24395 64.09181
## 45 51.63182 42.16755 61.09610 37.15746 66.10618
## 46 51.59576 40.66041 62.53112 34.87158 68.31995
## 47 51.55971 39.03793 64.08148 32.40931 70.71011
## 48 51.52365 37.31150 65.73580 29.78804 73.25926
## 49 51.48759 35.48986 67.48532 27.02118 75.95400
## 50 51.45153 33.57990 69.32316 24.11923 78.78383
#Akurasi Data Training
ssedes.train1<-des.1$SSE
msedes.train1<-ssedes.train1/length(training.ts)
sisaandes1<-ramalandes1$residuals
head(sisaandes1)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] NA NA 3.50000 5.36000 4.63360 15.86714
mapedes.train1<-sum(abs(sisaandes1[3:length(training.ts)]/training.ts[3:length(training.ts)])*100)/length(training.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 989.65686
## MSE 24.74142
## MAPE 7.75642
ssedes.train2<-des.2$SSE
msedes.train2<-ssedes.train2/length(training.ts)
sisaandes2<-ramalandes2$residuals
head(sisaandes2)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] NA NA 3.50000 3.47000 0.83340 11.62875
mapedes.train2<-sum(abs(sisaandes2[3:length(training.ts)]/training.ts[3:length(training.ts)])*100)/length(training.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 632.851720
## MSE 15.821293
## MAPE 6.232456
#bisa dilakukan juga pada kasus lamda dan gamma optimum
#Akurasi Data Testing
selisihdes1<-ramalandes1$mean-testing.ts
selisihdes1
## Time Series:
## Start = 41
## End = 50
## Frequency = 1
## [1] 5.03448806 3.73736622 9.54024438 0.04312254 1.64600071 2.44887887
## [7] 4.15175703 6.35463519 3.95751335 7.96039151
SSEtestingdes1<-sum(selisihdes1^2)
MSEtestingdes1<-SSEtestingdes1/length(testing.ts)
MAPEtestingdes1<-sum(abs(selisihdes1/testing.ts)*100)/length(testing.ts)
selisihdes2<-ramalandes2$mean-testing.ts
selisihdes2
## Time Series:
## Start = 41
## End = 50
## Frequency = 1
## [1] 3.45922576 1.74032361 7.12142147 -2.79748068 -1.61638283 -1.23528497
## [7] 0.04581288 1.82691074 -0.99199141 2.58910645
SSEtestingdes2<-sum(selisihdes2^2)
MSEtestingdes2<-SSEtestingdes2/length(testing.ts)
MAPEtestingdes2<-sum(abs(selisihdes2/testing.ts)*100)/length(testing.ts)
selisihdesopt<-ramalandesopt$mean-testing.ts
selisihdesopt
## Time Series:
## Start = 41
## End = 50
## Frequency = 1
## [1] 3.87605603 2.23999765 7.70393928 -2.13211910 -0.86817747 -0.40423584
## [7] 0.95970578 2.82364741 0.08758903 3.75153066
SSEtestingdesopt<-sum(selisihdesopt^2)
MSEtestingdesopt<-SSEtestingdesopt/length(testing.ts)
MAPEtestingdesopt<-sum(abs(selisihdesopt/testing.ts)*100)/length(testing.ts)
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 275.686644 88.701354 107.830825
## MSE 27.568664 8.870135 10.783082
## MAPE 9.330928 4.877651 5.225022
#SES atau 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 9.528706 27.568664
## ske 2 10.802806 8.870135
## ske opt 8.847392 10.783082
ramalandes1$mean
## Time Series:
## Start = 41
## End = 50
## Frequency = 1
## [1] 52.93449 53.23737 53.54024 53.84312 54.14600 54.44888 54.75176 55.05464
## [9] 55.35751 55.66039
ramalandes1
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 41 52.93449 46.89794 58.97104 43.70238 62.16660
## 42 53.23737 47.02939 59.44534 43.74309 62.73164
## 43 53.54024 47.10629 59.97420 43.70036 63.38013
## 44 53.84312 47.12544 60.56081 43.56931 64.11693
## 45 54.14600 47.08556 61.20645 43.34798 64.94402
## 46 54.44888 46.98696 61.91080 43.03685 65.86090
## 47 54.75176 46.83121 62.67230 42.63833 66.86519
## 48 55.05464 46.62073 63.48854 42.15608 67.95319
## 49 55.35751 46.35839 64.35663 41.59454 69.12048
## 50 55.66039 46.04729 65.27350 40.95842 70.36236
training1.ts<-ts(training,frequency=10)
des.coba<- HoltWinters(training1.ts)
plot(des.coba)
