library(readxl)
library(TTR)
library(forecast)
## Warning: package 'forecast' was built under R version 4.5.1
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
#membuka file
suntik<-read_excel("D:/MAGANG BKKBN/DATA FIKS/SUNTIK.xlsx")
head(suntik)
## # A tibble: 6 × 2
## PERIODE SUNTIK
## <chr> <dbl>
## 1 2020M1 988
## 2 2020M2 1189
## 3 2020M3 1011
## 4 2020M4 1031
## 5 2020M5 1021
## 6 2020M6 1653
#membagi training dan testing
training<-suntik[1:52,2]
testing<-suntik[53:75,2] #data time series
suntik.ts<-ts(suntik$SUNTIK)
training.ts<-ts(training)
testing.ts<-ts(testing,start=61)
#eksplorasi data
plot(suntik.ts, col="red",main="Plot semua data")
points(suntik.ts)

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

#Double Eksponensial Smoothing #Lamda=0.2 dan beta=0.2
des.1<- HoltWinters(training.ts, gamma = FALSE, beta = 0.2, alpha = 0.2)
plot(des.1)

#ramalan
ramalandes1<- forecast(des.1, h=23)
ramalandes1
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 53 672.5834 290.89710 1054.270 88.84458 1256.322
## 54 685.4063 292.88132 1077.931 85.09115 1285.721
## 55 698.2292 291.41533 1105.043 76.06108 1320.397
## 56 711.0521 286.29851 1135.806 61.44754 1360.657
## 57 723.8750 277.44883 1170.301 41.12510 1406.625
## 58 736.6979 264.88666 1208.509 15.12489 1458.271
## 59 749.5208 248.71110 1250.330 -16.40153 1515.443
## 60 762.3437 229.07448 1295.613 -53.22118 1577.909
## 61 775.1666 206.15944 1344.174 -95.05473 1645.388
## 62 787.9895 180.16074 1395.818 -141.60434 1717.583
## 63 800.8123 151.27240 1450.352 -192.57327 1794.198
## 64 813.6352 119.67956 1507.591 -247.67838 1874.949
## 65 826.4581 85.55398 1567.362 -306.65699 1959.573
## 66 839.2810 49.05208 1629.510 -369.26985 2047.832
## 67 852.1039 10.31468 1693.893 -435.30162 2139.509
## 68 864.9268 -30.53238 1760.386 -504.55983 2234.413
## 69 877.7497 -73.37705 1828.876 -576.87313 2332.373
## 70 890.5726 -118.11969 1899.265 -652.08913 2433.234
## 71 903.3955 -164.67166 1971.463 -730.07225 2536.863
## 72 916.2184 -212.95397 2045.391 -810.70171 2643.138
## 73 929.0413 -262.89608 2120.979 -893.86959 2751.952
## 74 941.8642 -314.43474 2198.163 -979.47920 2863.208
## 75 954.6871 -367.51310 2276.887 -1067.44359 2976.818
#Lamda=0.6 dan beta=0.3
des.2<- HoltWinters(training.ts, gamma = FALSE, beta = 0.3, alpha = 0.6)
plot(des.2)

#ramalan
ramalandes2<- forecast(des.2, h=23)
ramalandes2
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 53 572.7905 330.01601 815.5650 201.49896 944.082
## 54 568.2251 260.33188 876.1183 97.34307 1039.107
## 55 563.6596 177.50317 949.8161 -26.91572 1154.235
## 56 559.0942 83.99997 1034.1884 -167.49973 1285.688
## 57 554.5288 -18.54246 1127.6000 -321.90805 1430.966
## 58 549.9633 -129.02445 1228.9511 -488.45887 1588.386
## 59 545.3979 -246.67225 1337.4680 -665.96886 1756.765
## 60 540.8325 -370.91424 1452.5792 -853.56379 1935.229
## 61 536.2670 -501.30922 1573.8433 -1050.56891 2123.103
## 62 531.7016 -637.50398 1700.9072 -1256.44403 2319.847
## 63 527.1362 -779.20718 1833.4795 -1470.74358 2525.016
## 64 522.5707 -926.17270 1971.3142 -1693.09114 2738.233
## 65 518.0053 -1078.18852 2114.1991 -1923.16248 2959.173
## 66 513.4399 -1235.06915 2261.9489 -2160.67390 3187.554
## 67 508.8744 -1396.65016 2414.3990 -2405.37395 3423.123
## 68 504.3090 -1562.78428 2571.4023 -2657.03737 3665.655
## 69 499.7436 -1733.33839 2732.8255 -2915.46056 3914.948
## 70 495.1781 -1908.19124 2898.5475 -3180.45813 4170.814
## 71 490.6127 -2087.23174 3068.4571 -3451.86015 4433.086
## 72 486.0473 -2270.35748 3242.4520 -3729.51000 4701.605
## 73 481.4818 -2457.47361 3420.4372 -4013.26263 4976.226
## 74 476.9164 -2648.49192 3602.3247 -4302.98313 5256.816
## 75 472.3510 -2843.33004 3788.0319 -4598.54554 5543.247
#Lamda dan beta 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.5843328
## beta : 0.3268309
## gamma: FALSE
##
## Coefficients:
## [,1]
## a 577.363210
## b -5.373076
plot(des.opt)

#ramalan
ramalandesopt<- forecast(des.opt, h=23)
ramalandesopt
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 53 571.9901 329.0760 814.9042 200.48509 943.4952
## 54 566.6171 259.2461 873.9881 96.53369 1036.7004
## 55 561.2440 174.4975 947.9905 -30.23373 1152.7217
## 56 555.8709 77.7503 1033.9915 -175.35146 1287.0933
## 57 550.4978 -29.0370 1130.0327 -335.82421 1436.8199
## 58 545.1248 -144.5571 1234.8066 -509.65263 1599.9021
## 59 539.7517 -267.9023 1347.4057 -695.44850 1774.9519
## 60 534.3786 -398.4111 1467.1683 -892.20010 1960.9573
## 61 529.0055 -535.5790 1593.5901 -1099.13603 2157.1471
## 62 523.6325 -679.0064 1726.2713 -1315.64497 2362.9099
## 63 518.2594 -828.3664 1864.8851 -1541.22696 2577.7457
## 64 512.8863 -983.3845 2009.1571 -1775.46247 2801.2351
## 65 507.5132 -1143.8260 2158.8524 -2017.99216 3033.0186
## 66 502.1401 -1309.4861 2313.7664 -2268.50304 3272.7833
## 67 496.7671 -1480.1840 2473.7182 -2526.71872 3520.2529
## 68 491.3940 -1655.7585 2638.5465 -2792.39239 3775.1804
## 69 486.0209 -1836.0640 2808.1059 -3065.30156 4037.3434
## 70 480.6478 -2020.9684 2982.2641 -3345.24408 4306.5398
## 71 475.2748 -2210.3507 3160.9003 -3632.03500 4582.5845
## 72 469.9017 -2404.0997 3343.9031 -3925.50415 4865.3075
## 73 464.5286 -2602.1124 3531.1697 -4225.49416 5154.5514
## 74 459.1555 -2804.2933 3722.6044 -4531.85883 5450.1699
## 75 453.7825 -3010.5533 3918.1182 -4844.46183 5752.0268
#Ukuran Keakuratan Ramalan Data Training
ssedes.train1<-des.1$SSE
sisaandes1<-ramalandes1$residuals
head(sisaandes1)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## x
## [1,] NA
## [2,] NA
## [3,] -379.0000
## [4,] -469.0400
## [5,] -552.3104
## [6,] 45.1657
msedes.train1<-ssedes.train1/length(training.ts)
mapedes.train1 <- sum(abs(sisaandes1[3:length(training.ts)] / training.ts[3:length(training.ts)]) * 100) / length(training.ts)
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
## x
## [1,] NA
## [2,] NA
## [3,] -379.0000
## [4,] -264.3800
## [5,] -200.9436
## [6,] 502.6008
mapedes.train2<-sum(abs(sisaandes2[3:length(training.ts)]/training.ts[3:length(training.ts)])*100)/length(training.ts)
ssedes.trainopt<-des.opt$SSE
msedes.trainopt<-ssedes.trainopt/length(training.ts)
sisaandesopt<-ramalandesopt$residuals
head(sisaandesopt)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## x
## [1,] NA
## [2,] NA
## [3,] -379.0000
## [4,] -266.1572
## [5,] -198.4219
## [6,] 509.6276
mapedes.trainopt<-sum(abs(sisaandesopt[3:length(training.ts)]/training.ts[3:length(training.ts)])*100)/length(training.ts)
#Perbandingan Ukuran Keakuratan Ramalan Data Training
akurasi.4 <- data.frame(
"Perbandingan Ukuran Keakuratan" = c("SSE", "MSE", "MAPE"),
"Double Exponential Smoothing 1" = c(ssedes.train1, msedes.train1, mapedes.train1), "Double Exponential Smoothing 2" = c(ssedes.train2, msedes.train2, mapedes.train2),"Double Exponential Smoothing Opt" = c(ssedes.trainopt, msedes.trainopt, mapedes.trainopt))
akurasi.4
## Perbandingan.Ukuran.Keakuratan Double.Exponential.Smoothing.1
## 1 SSE 4.789107e+06
## 2 MSE 9.209821e+04
## 3 MAPE 3.277663e+01
## Double.Exponential.Smoothing.2 Double.Exponential.Smoothing.Opt
## 1 1.784535e+06 1.783827e+06
## 2 3.431797e+04 3.430437e+04
## 3 1.877983e+01 1.893564e+01
#Akurasi Data Testing
selisihdes1<-ramalandes1$mean-testing.ts
selisihdes1
## Time Series:
## Start = 61
## End = 75
## Frequency = 1
## testing.ts
## [1,] 213.1666
## [2,] 161.9895
## [3,] 131.8123
## [4,] 293.6352
## [5,] 353.4581
## [6,] 313.2810
## [7,] 343.1039
## [8,] 228.9268
## [9,] 274.7497
## [10,] 412.5726
## [11,] 466.3955
## [12,] 469.2184
## [13,] 502.0413
## [14,] 488.8642
## [15,] 572.6871
SSEtestingdes1<-sum(selisihdes1^2)
MSEtestingdes1<-SSEtestingdes1/length(testing.ts)
MAPEtestingdes1<-sum(abs(selisihdes1/testing.ts)*100)/length(testing.ts)
#Akurasi Data Testing
selisihdes2<-ramalandes2$mean-testing.ts
selisihdes2
## Time Series:
## Start = 61
## End = 75
## Frequency = 1
## testing.ts
## [1,] -25.7329701
## [2,] -94.2984042
## [3,] -141.8638383
## [4,] 2.5707276
## [5,] 45.0052935
## [6,] -12.5601406
## [7,] -0.1255747
## [8,] -131.6910088
## [9,] -103.2564429
## [10,] 17.1781230
## [11,] 53.6126889
## [12,] 39.0472548
## [13,] 54.4818207
## [14,] 23.9163866
## [15,] 90.3509525
SSEtestingdes2<-sum(selisihdes2^2)
MSEtestingdes2<-SSEtestingdes2/length(testing.ts)
MAPEtestingdes2<-sum(abs(selisihdes2/testing.ts)*100)/length(testing.ts)
#Akurasi Data Testing
selisihdesopt<-ramalandesopt$mean-testing.ts
selisihdesopt
## Time Series:
## Start = 61
## End = 75
## Frequency = 1
## testing.ts
## [1,] -32.994474
## [2,] -102.367550
## [3,] -150.740625
## [4,] -7.113701
## [5,] 34.513223
## [6,] -23.859853
## [7,] -12.232929
## [8,] -144.606005
## [9,] -116.979081
## [10,] 2.647843
## [11,] 38.274767
## [12,] 22.901691
## [13,] 37.528615
## [14,] 6.155539
## [15,] 71.782464
SSEtestingdesopt<-sum(selisihdesopt^2)
MSEtestingdesopt<-SSEtestingdesopt/length(testing.ts)
MAPEtestingdesopt<-sum(abs(selisihdesopt/testing.ts)*100)/length(testing.ts)
#Perbandingan Ukuran Keakuratan Ramalan Data Testing
akurasi.5 <- data.frame(
"Perbandingan Ukuran Keakuratan" = c("SSE", "MSE", "MAPE"),
"Double Exponential Smoothing 1" = c(SSEtestingdes1, MSEtestingdes1, MAPEtestingdes1), "Double Exponential Smoothing 2" = c(SSEtestingdes2, MSEtestingdes2, MAPEtestingdes2),"Double Exponential Smoothing Opt" = c(SSEtestingdesopt, MSEtestingdesopt, MAPEtestingdesopt))
akurasi.5
## Perbandingan.Ukuran.Keakuratan Double.Exponential.Smoothing.1
## 1 SSE 2.070880e+06
## 2 MSE 9.003828e+04
## 3 MAPE 4.768038e+01
## Double.Exponential.Smoothing.2 Double.Exponential.Smoothing.Opt
## 1 76271.64960 79441.659232
## 2 3316.15868 3453.985184
## 3 6.84295 6.342219
# Forecast 9 bulan ke depan (model terbaik: DES optimum)
des_final <- HoltWinters(suntik.ts, gamma = FALSE)
forecast_des_final <- forecast(des_final, h = 9)
forecast_des_final
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 76 236.7531 27.48297 446.0232 -83.29793 556.8041
## 77 223.7122 -39.80563 487.2300 -179.30352 626.7279
## 78 210.6713 -118.40076 539.7433 -292.60098 713.9435
## 79 197.6304 -206.18204 601.4428 -419.94742 815.2082
## 80 184.5895 -301.72315 670.9021 -559.16151 928.3405
## 81 171.5486 -404.05988 747.1570 -708.76858 1051.8657
## 82 158.5077 -512.51392 829.5293 -867.73129 1184.7466
## 83 145.4668 -626.58555 917.5191 -1035.28537 1326.2189
## 84 132.4259 -745.89053 1010.7423 -1210.84315 1475.6949
plot(forecast_des_final)
