Data yang digunakan adalah data IDX COMPOSITE (JKSE) dari April 2020 - Desember 2022 yang bersumber dari yahoo finance.
#install.packages("rio") #install jika belum ada
library(tseries)
## Warning: package 'tseries' was built under R version 4.3.1
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(forecast)
## Warning: package 'forecast' was built under R version 4.3.1
library(TTR)
## Warning: package 'TTR' was built under R version 4.3.1
library(TSA)
## Warning: package 'TSA' was built under R version 4.3.1
## 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(imputeTS)
## Warning: package 'imputeTS' was built under R version 4.3.1
##
## Attaching package: 'imputeTS'
## The following object is masked from 'package:tseries':
##
## na.remove
library(ggplot2)
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following object is masked from 'package:imputeTS':
##
## na.locf
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(zoo)
library(rio)
## Warning: package 'rio' was built under R version 4.3.1
data1 <- import("https://raw.githubusercontent.com/divanm/mpdw/main/Data/DATA%20IDX%20COMPOSITE%20JKSE.csv")
data1
## Date Open High Low Close Adj Close Volume
## 1 2020-04-06 4623.429 4975.536 4562.902 4649.079 4649.079 255758500
## 2 2020-04-13 4649.079 4747.725 4480.607 4634.821 4634.821 218419900
## 3 2020-04-20 4634.821 4669.542 4441.090 4496.064 4496.064 238397200
## 4 2020-04-27 4496.064 4726.774 4474.893 4716.403 4716.403 183906700
## 5 2020-05-04 4716.403 4716.403 4576.228 4597.430 4597.430 179791700
## 6 2020-05-11 4597.430 4659.862 4460.273 4507.607 4507.607 231060000
## 7 2020-05-18 4507.607 4609.042 4487.179 4545.952 4545.952 139287000
## 8 2020-05-25 4545.952 4755.957 4541.834 4753.612 4753.612 288083800
## 9 2020-06-01 4753.612 5014.764 4753.612 4947.782 4947.782 372565600
## 10 2020-06-08 4947.782 5139.406 4712.073 4880.359 4880.359 490084700
## 11 2020-06-15 4880.359 5018.985 4809.619 4942.275 4942.275 336775500
## 12 2020-06-22 4942.275 4977.651 4879.133 4904.088 4904.088 260206800
## 13 2020-06-29 4904.088 4997.482 4862.041 4973.794 4973.794 249816600
## 14 2020-07-06 4973.794 5111.564 4973.490 5031.256 5031.256 358094500
## 15 2020-07-13 5031.256 5116.464 5024.934 5079.585 5079.585 349862400
## 16 2020-07-20 5079.585 5162.980 5031.888 5082.991 5082.991 427056800
## 17 2020-07-27 5082.991 5149.630 5080.121 5149.627 5149.627 356913600
## 18 2020-08-03 5149.627 5187.964 4928.468 5143.893 5143.893 423927900
## 19 2020-08-10 5157.834 5279.349 5157.834 5247.690 5247.690 340206700
## 20 2020-08-17 5247.690 5327.316 5243.995 5272.810 5272.810 188318800
## 21 2020-08-24 5272.810 5381.948 5261.408 5346.659 5346.659 665155800
## 22 2020-08-31 5346.659 5369.447 5188.609 5239.851 5239.851 568186400
## 23 2020-09-07 5235.010 5256.305 4754.799 5016.712 5016.712 492882200
## 24 2020-09-14 5060.024 5187.279 5013.186 5059.223 5059.223 503336800
## 25 2020-09-21 5058.990 5075.819 4820.331 4945.791 4945.791 406370800
## 26 2020-09-28 4962.953 4991.762 4841.362 4926.734 4926.734 440809400
## 27 2020-10-05 4947.040 5057.836 4915.685 5053.663 5053.663 421591900
## 28 2020-10-12 5078.129 5182.531 5064.171 5103.414 5103.414 525143900
## 29 2020-10-19 5116.758 5135.078 5063.697 5112.188 5112.188 522912300
## 30 2020-10-26 5113.149 5158.265 5110.618 5128.225 5128.225 210436500
## 31 2020-11-02 5108.029 5335.529 5073.500 5335.529 5335.529 516535700
## 32 2020-11-09 5371.971 5520.908 5319.420 5461.058 5461.058 669558400
## 33 2020-11-16 5500.034 5628.442 5462.460 5571.656 5571.656 789934400
## 34 2020-11-23 5583.330 5795.836 5583.330 5783.335 5783.335 1255563200
## 35 2020-11-30 5779.671 5853.156 5563.862 5810.483 5810.483 1160743700
## 36 2020-12-07 5854.303 6004.423 5854.303 5938.329 5938.329 1003237500
## 37 2020-12-14 5959.275 6160.977 5959.275 6104.324 6104.324 1292048600
## 38 2020-12-21 6131.623 6195.154 5853.261 6008.709 6008.709 692226400
## 39 2020-12-28 6067.000 6143.870 5962.010 5979.073 5979.073 526030000
## 40 2021-01-04 5997.830 6275.742 5929.048 6257.835 6257.835 1007037000
## 41 2021-01-11 6278.413 6472.312 6278.374 6373.412 6373.412 1527600500
## 42 2021-01-18 6365.026 6504.992 6283.313 6307.127 6307.127 1081229300
## 43 2021-01-25 6322.519 6322.727 5825.292 5862.352 5862.352 813369600
## 44 2021-02-01 5856.777 6179.368 5735.469 6151.729 6151.729 872980000
## 45 2021-02-08 6193.551 6286.291 6157.135 6222.521 6222.521 563483000
## 46 2021-02-15 6244.385 6314.555 6173.594 6231.932 6231.932 739117700
## 47 2021-02-22 6267.025 6312.873 6184.517 6241.796 6241.796 880483600
## 48 2021-03-01 6281.857 6394.452 6245.308 6258.749 6258.749 987879800
## 49 2021-03-08 6304.000 6364.357 6167.718 6358.209 6358.209 652024500
## 50 2021-03-15 6374.762 6387.736 6268.839 6356.160 6356.160 742809300
## 51 2021-03-22 6346.795 6354.939 6058.843 6195.562 6195.562 712370600
## 52 2021-03-29 6205.569 6230.990 5892.645 6011.456 6011.456 462735200
## 53 2021-04-05 6040.055 6113.156 5944.421 6070.209 6070.209 720785500
## 54 2021-04-12 6080.792 6115.620 5883.524 6086.258 6086.258 669695000
## 55 2021-04-19 6084.785 6096.995 5973.247 6016.864 6016.864 675194300
## 56 2021-04-26 6018.340 6033.900 5950.868 5995.616 5995.616 641211400
## 57 2021-05-03 5999.661 6005.088 5922.493 5928.309 5928.309 667078400
## 58 2021-05-10 5942.106 5985.372 5911.376 5938.351 5938.351 240955800
## 59 2021-05-17 5950.137 5958.793 5742.038 5773.120 5773.120 696962000
## 60 2021-05-24 5793.067 5904.838 5759.340 5848.616 5848.616 679387300
## 61 2021-05-31 5869.218 6103.859 5860.536 6065.166 6065.166 687508700
## 62 2021-06-07 6075.507 6134.882 5972.449 6095.497 6095.497 1116799300
## 63 2021-06-14 6110.797 6124.872 5944.053 6007.120 6007.120 955804200
## 64 2021-06-21 5959.965 6130.096 5884.918 6022.399 6022.399 851733600
## 65 2021-06-28 6015.279 6043.432 5913.591 6023.008 6023.008 825550700
## 66 2021-07-05 6024.165 6080.222 5985.354 6039.844 6039.844 754205300
## 67 2021-07-12 6060.054 6114.286 5947.618 6072.510 6072.510 716924100
## 68 2021-07-19 6062.966 6166.305 6015.149 6101.690 6101.690 597748400
## 69 2021-07-26 6109.031 6160.463 6068.512 6070.039 6070.039 869133600
## 70 2021-08-02 6098.008 6263.539 6048.101 6203.431 6203.431 1228093800
## 71 2021-08-09 6203.747 6239.015 6042.475 6139.492 6139.492 869347300
## 72 2021-08-16 6144.943 6147.304 5938.407 6030.772 6030.772 796085900
## 73 2021-08-23 6037.700 6138.497 6021.954 6041.366 6041.366 977033500
## 74 2021-08-30 6062.113 6169.056 6054.281 6126.921 6126.921 893890700
## 75 2021-09-06 6137.126 6150.358 5982.766 6094.873 6094.873 958513400
## 76 2021-09-13 6080.062 6137.669 6052.970 6133.246 6133.246 992844400
## 77 2021-09-20 6132.034 6163.884 5996.407 6144.815 6144.815 950159400
## 78 2021-09-27 6141.470 6286.943 6086.263 6228.845 6228.845 1102928200
## 79 2021-10-04 6234.799 6497.656 6234.799 6481.769 6481.769 1172175100
## 80 2021-10-11 6482.957 6680.009 6451.678 6633.338 6633.338 941178200
## 81 2021-10-18 6649.281 6687.134 6585.557 6643.738 6643.738 757917300
## 82 2021-10-25 6626.367 6680.117 6509.878 6591.346 6591.346 899190300
## 83 2021-11-01 6618.122 6627.851 6480.010 6581.785 6581.785 828841100
## 84 2021-11-08 6599.405 6714.158 6592.055 6651.054 6651.054 921099300
## 85 2021-11-15 6661.849 6720.988 6592.228 6720.263 6720.263 1134263700
## 86 2021-11-22 6731.515 6754.464 6544.896 6561.553 6561.553 1087199900
## 87 2021-11-29 6552.803 6647.477 6484.578 6538.506 6538.506 795330100
## 88 2021-12-06 6552.816 6652.922 6525.985 6652.922 6652.922 1078695000
## 89 2021-12-13 6663.739 6688.379 6559.303 6601.932 6601.932 1011838100
## 90 2021-12-20 6571.345 6592.167 6529.593 6562.900 6562.900 941359400
## 91 2021-12-27 6570.558 6621.579 6562.554 6581.482 6581.482 763376600
## 92 2022-01-03 6586.260 6738.110 6586.133 6701.316 6701.316 884588500
## 93 2022-01-10 6697.376 6727.767 6625.757 6693.401 6693.401 854569300
## 94 2022-01-17 6711.406 6726.373 6534.270 6726.373 6726.373 805658500
## 95 2022-01-24 6700.822 6712.262 6523.929 6645.511 6645.511 986322200
## 96 2022-01-31 6656.707 6731.391 6626.656 6731.391 6731.391 777116900
## 97 2022-02-07 6751.349 6874.351 6748.909 6815.607 6815.607 1238259600
## 98 2022-02-14 6791.316 6899.410 6698.509 6892.818 6892.818 1092845600
## 99 2022-02-21 6896.752 6929.911 6758.861 6888.171 6888.171 1127214800
## 100 2022-02-28 6964.697 6996.935 6861.959 6928.328 6928.328 769293800
## 101 2022-03-07 6905.324 6929.863 6814.183 6922.602 6922.602 1085654100
## 102 2022-03-14 6949.206 7032.702 6894.921 6954.965 6954.965 949839000
## 103 2022-03-21 6945.893 7055.341 6929.934 7002.532 7002.532 1086012100
## 104 2022-03-28 6996.318 7099.497 6987.223 7078.760 7078.760 890142300
## 105 2022-04-04 7082.247 7216.494 7060.214 7210.835 7210.835 986772300
## 106 2022-04-11 7212.003 7355.300 7146.586 7235.532 7235.532 1073108900
## 107 2022-04-18 7245.504 7297.394 7174.810 7225.606 7225.606 1118782600
## 108 2022-04-25 7204.161 7267.112 7121.860 7228.914 7228.914 805992800
## 109 2022-05-02 NA NA NA NA NA NA
## 110 2022-05-09 7154.917 7156.484 6509.879 6597.993 6597.993 778348200
## 111 2022-05-16 6603.893 6965.106 6574.136 6918.144 6918.144 816107000
## 112 2022-05-23 6930.939 7032.822 6802.713 7026.256 7026.256 750357000
## 113 2022-05-30 7052.173 7233.995 6974.616 7182.961 7182.961 949041500
## 114 2022-06-06 7163.174 7257.997 7051.223 7086.648 7086.648 1281571500
## 115 2022-06-13 6992.230 7138.496 6882.644 6936.967 6936.967 1322143900
## 116 2022-06-20 6937.008 7067.747 6859.599 7042.937 7042.937 1133599100
## 117 2022-06-27 7043.018 7070.519 6777.317 6794.328 6794.328 840889500
## 118 2022-07-04 6794.368 6796.519 6559.637 6740.219 6740.219 810131700
## 119 2022-07-11 6740.019 6757.087 6607.702 6651.905 6651.905 794121300
## 120 2022-07-18 6652.065 6901.720 6611.926 6886.962 6886.962 853012300
## 121 2022-07-25 6887.042 7032.353 6857.801 6951.123 6951.123 1387470600
## 122 2022-08-01 6951.123 7090.767 6902.630 7084.655 7084.655 1102623400
## 123 2022-08-08 7084.655 7181.100 7021.673 7129.277 7129.277 1169007600
## 124 2022-08-15 7129.277 7230.111 7080.753 7172.434 7172.434 931624200
## 125 2022-08-22 7172.434 7210.163 7064.501 7135.248 7135.248 1241361100
## 126 2022-08-29 7135.088 7223.126 7015.347 7177.179 7177.179 1359158600
## 127 2022-09-05 7177.139 7287.700 7147.976 7242.656 7242.656 1535050500
## 128 2022-09-12 7242.696 7377.495 7163.073 7168.870 7168.870 1462367300
## 129 2022-09-19 7168.950 7252.186 7127.457 7178.583 7178.583 1266925400
## 130 2022-09-26 7178.503 7178.503 6926.860 7040.798 7040.798 1036700200
## 131 2022-10-03 7040.798 7135.908 6995.062 7026.783 7026.783 1020558200
## 132 2022-10-10 7026.663 7026.663 6814.530 6814.530 6814.530 1046699200
## 133 2022-10-17 6814.530 7058.911 6747.380 7017.771 7017.771 995211200
## 134 2022-10-24 7017.811 7108.816 7016.702 7056.040 7056.040 989950000
## 135 2022-10-31 7056.040 7128.136 6962.853 7045.527 7045.527 907843500
## 136 2022-11-07 7045.527 7111.440 6956.288 7089.206 7089.206 989493100
## 137 2022-11-14 7089.206 7104.764 6955.529 7082.181 7082.181 831349300
## 138 2022-11-21 7082.181 7108.831 7013.221 7053.150 7053.150 816522900
## 139 2022-11-28 7053.110 7090.277 6967.950 7019.639 7019.639 932257000
## 140 2022-12-05 7019.639 7053.903 6683.629 6715.118 6715.118 763168800
## 141 2022-12-12 6715.118 6854.098 6641.810 6812.193 6812.193 1047258100
## 142 2022-12-19 6812.154 6844.121 6715.045 6800.673 6800.673 668236600
## 143 2022-12-26 6800.713 6858.147 6796.167 6835.808 6835.808 117543200
Mengecek ringkasan dan tipe data
str(data1)
## 'data.frame': 143 obs. of 7 variables:
## $ Date : IDate, format: "2020-04-06" "2020-04-13" ...
## $ Open : num 4623 4649 4635 4496 4716 ...
## $ High : num 4976 4748 4670 4727 4716 ...
## $ Low : num 4563 4481 4441 4475 4576 ...
## $ Close : num 4649 4635 4496 4716 4597 ...
## $ Adj Close: num 4649 4635 4496 4716 4597 ...
## $ Volume : int 255758500 218419900 238397200 183906700 179791700 231060000 139287000 288083800 372565600 490084700 ...
summary(data1)
## Date Open High Low
## Min. :2020-04-06 Min. :4496 Min. :4609 Min. :4441
## 1st Qu.:2020-12-10 1st Qu.:5808 1st Qu.:5918 1st Qu.:5737
## Median :2021-08-16 Median :6256 Median :6319 Median :6162
## Mean :2021-08-16 Mean :6185 Mean :6276 Mean :6090
## 3rd Qu.:2022-04-21 3rd Qu.:6869 3rd Qu.:6956 3rd Qu.:6749
## Max. :2022-12-26 Max. :7246 Max. :7377 Max. :7175
## NA's :1 NA's :1 NA's :1
## Close Adj Close Volume
## Min. :4496 Min. :4496 Min. :1.175e+08
## 1st Qu.:5820 1st Qu.:5820 1st Qu.:6.086e+08
## Median :6237 Median :6237 Median :8.210e+08
## Mean :6196 Mean :6196 Mean :7.996e+08
## 3rd Qu.:6874 3rd Qu.:6874 3rd Qu.:1.006e+09
## Max. :7243 Max. :7243 Max. :1.535e+09
## NA's :1 NA's :1 NA's :1
Mengubah tipe data Close menjadi numeric dan tipe data Date menjadi Date
data1$Date <- as.Date(data1$Date)
data1$Close <- as.numeric(data1$Close)
Mengecek keberadaan missing value
# Cek apakah ada missing value:
data1[which(is.na(data1$Close)),]
## Date Open High Low Close Adj Close Volume
## 109 2022-05-02 NA NA NA NA NA NA
Dari output di atas, dapat terlihat bahwa terdapat missing value pada baris ke-87 atau pada tanggal 2 mei 2022. Hal ini melanggar salah satu syarat data time series, yaitu rentang waktu yang tidak sama. Oleh karena itu, akan dilakukan penanganan missing value # Menduga missing value
data <- na_interpolation(data1, option = "spline")
data[109,]
## Date Open High Low Close Adj Close Volume
## 109 2022-05-02 7324.78 7258.343 6799.028 6840.217 6840.217 697324161
# Cek berdasarkan plot
ggplot(data, aes(x=Date, y=Close), x_axis_labels=daily$Date)+
labs(title = "Distribution of Missing Values",
y="Nilai IHSG",
subtitle = "Time Series with missing regions") +
geom_line() + geom_point() + theme_minimal() +
theme(legend.position="none", plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))
# Cek berdasarkan tabel
data[which(is.na(data$Close)),]
## [1] Date Open High Low Close Adj Close Volume
## <0 rows> (or 0-length row.names)
Setelah dilakukan penanganan, dapat terlihat bahwa nilai data Close pada tanggal 2 mei 2022 telah terisi dengan nilai 6840.217
Eksplorasi data diperlukan untuk melihat pola dari data time series. Selain itu, eksplorasi juga berguna dalam pembagian data training dan data testing. Data testing yang baik adalah data testing yang memiliki pola seperti data trainingnya. Maka dari itu, diperlukan eksplorasi data untuk menentukan proporsi terbaik data training vs data testing.
Mengubah data agar terbaca sebagai data deret waktu dengan fungsi
ts() .
Close <- data$Close
data1.ts <- ts(Close)
data1.ts
## Time Series:
## Start = 1
## End = 143
## Frequency = 1
## [1] 4649.079 4634.821 4496.064 4716.403 4597.430 4507.607 4545.952 4753.612
## [9] 4947.782 4880.359 4942.275 4904.088 4973.794 5031.256 5079.585 5082.991
## [17] 5149.627 5143.893 5247.690 5272.810 5346.659 5239.851 5016.712 5059.223
## [25] 4945.791 4926.734 5053.663 5103.414 5112.188 5128.225 5335.529 5461.058
## [33] 5571.656 5783.335 5810.483 5938.329 6104.324 6008.709 5979.073 6257.835
## [41] 6373.412 6307.127 5862.352 6151.729 6222.521 6231.932 6241.796 6258.749
## [49] 6358.209 6356.160 6195.562 6011.456 6070.209 6086.258 6016.864 5995.616
## [57] 5928.309 5938.351 5773.120 5848.616 6065.166 6095.497 6007.120 6022.399
## [65] 6023.008 6039.844 6072.510 6101.690 6070.039 6203.431 6139.492 6030.772
## [73] 6041.366 6126.921 6094.873 6133.246 6144.815 6228.845 6481.769 6633.338
## [81] 6643.738 6591.346 6581.785 6651.054 6720.263 6561.553 6538.506 6652.922
## [89] 6601.932 6562.900 6581.482 6701.316 6693.401 6726.373 6645.511 6731.391
## [97] 6815.607 6892.818 6888.171 6928.328 6922.602 6954.965 7002.532 7078.760
## [105] 7210.835 7235.532 7225.606 7228.914 6840.217 6597.993 6918.144 7026.256
## [113] 7182.961 7086.648 6936.967 7042.937 6794.328 6740.219 6651.905 6886.962
## [121] 6951.123 7084.655 7129.277 7172.434 7135.248 7177.179 7242.656 7168.870
## [129] 7178.583 7040.798 7026.783 6814.530 7017.771 7056.040 7045.527 7089.206
## [137] 7082.181 7053.150 7019.639 6715.118 6812.193 6800.673 6835.808
Mengambil kolom data yang diambil yaitu Date dan Close
data <- data[c("Date","Close")]
View(data)
Membuat plot data deret waktu
ts.plot(data1.ts, xlab="Time Period ", ylab="Close",
main = "Time Series Plot")
points(data1.ts)
# Double Moving Average (DMA) dan Double Exponential Smoothing (DES)
Pembagian data latih dan data uji dilakukan dengan perbandingan 80% data latih dan 20% data uji.
#membagi data latih dan data uji
training_ma <- data[1:115,]
testing_ma <- data[116:143,]
train_ma.ts <- ts(training_ma$Close)
test_ma.ts <- ts(testing_ma$Close)
Eksplorasi data dilakukan pada keseluruhan data, data latih serta data uji menggunakan plot data deret waktu.
#eksplorasi keseluruhan data
plot(data1.ts, col="red",main="Plot semua data")
points(data1.ts)
#eksplorasi data latih
plot(train_ma.ts, col="blue",main="Plot data latih")
points(train_ma.ts)
#eksplorasi data uji
plot(test_ma.ts, col="blue",main="Plot data uji")
points(test_ma.ts)
Eksplorasi data juga dapat dilakukan menggunakan package
ggplot2 dengan terlebih dahulu memanggil library
package ggplot2.
#Eksplorasi dengan GGPLOT
library(ggplot2)
ggplot() +
geom_line(data = training_ma, aes(x = Date, y = Close, col = "Data Latih")) +
geom_line(data = testing_ma, aes(x = Date, y = Close, col = "Data Uji")) +
labs(x = "Periode Waktu", y = "Close", 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))
Pemulusan menggunakan metode SMA dilakukan dengan fungsi
SMA(). Dalam hal ini akan dilakukan pemulusan dengan
parameter m=4.
data.sma<-SMA(train_ma.ts, n=4)
data.sma
## Time Series:
## Start = 1
## End = 115
## Frequency = 1
## [1] NA NA NA 4624.092 4611.179 4579.376 4591.848 4601.150
## [9] 4688.738 4781.926 4881.007 4918.626 4925.129 4962.853 4997.181 5041.906
## [17] 5085.865 5114.024 5156.050 5203.505 5252.763 5276.753 5219.008 5165.611
## [25] 5065.394 4987.115 4996.353 5007.401 5049.000 5099.373 5169.839 5259.250
## [33] 5374.117 5537.894 5656.633 5775.951 5909.118 5965.461 6007.609 6087.485
## [41] 6154.757 6229.362 6200.182 6173.655 6135.932 6117.134 6211.995 6238.750
## [49] 6272.672 6303.729 6292.170 6230.347 6158.347 6090.871 6046.197 6042.237
## [57] 6006.762 5969.785 5908.849 5872.099 5906.313 5945.600 6004.100 6047.546
## [65] 6037.006 6023.093 6039.440 6059.263 6071.021 6111.917 6128.663 6110.934
## [73] 6103.765 6084.638 6073.483 6099.102 6124.964 6150.445 6247.169 6372.192
## [81] 6496.922 6587.548 6612.552 6616.981 6636.112 6628.664 6617.844 6618.311
## [89] 6588.728 6589.065 6599.809 6611.907 6634.775 6675.643 6691.650 6699.169
## [97] 6729.721 6771.332 6831.997 6881.231 6907.980 6923.516 6952.107 6989.715
## [105] 7061.773 7131.915 7187.683 7225.222 7132.567 6973.182 6896.317 6845.652
## [113] 6931.339 7053.502 7058.208
Data pemulusan pada periode ke-t selanjutnya digunakan sebagai nilai peramalan pada periode ke t+1 sehingga hasil peramalan 1 periode kedepan adalah sebagai berikut.
data.ramal<-c(NA,data.sma)
data.ramal #forecast 1 periode ke depan
## [1] NA NA NA NA 4624.092 4611.179 4579.376 4591.848
## [9] 4601.150 4688.738 4781.926 4881.007 4918.626 4925.129 4962.853 4997.181
## [17] 5041.906 5085.865 5114.024 5156.050 5203.505 5252.763 5276.753 5219.008
## [25] 5165.611 5065.394 4987.115 4996.353 5007.401 5049.000 5099.373 5169.839
## [33] 5259.250 5374.117 5537.894 5656.633 5775.951 5909.118 5965.461 6007.609
## [41] 6087.485 6154.757 6229.362 6200.182 6173.655 6135.932 6117.134 6211.995
## [49] 6238.750 6272.672 6303.729 6292.170 6230.347 6158.347 6090.871 6046.197
## [57] 6042.237 6006.762 5969.785 5908.849 5872.099 5906.313 5945.600 6004.100
## [65] 6047.546 6037.006 6023.093 6039.440 6059.263 6071.021 6111.917 6128.663
## [73] 6110.934 6103.765 6084.638 6073.483 6099.102 6124.964 6150.445 6247.169
## [81] 6372.192 6496.922 6587.548 6612.552 6616.981 6636.112 6628.664 6617.844
## [89] 6618.311 6588.728 6589.065 6599.809 6611.907 6634.775 6675.643 6691.650
## [97] 6699.169 6729.721 6771.332 6831.997 6881.231 6907.980 6923.516 6952.107
## [105] 6989.715 7061.773 7131.915 7187.683 7225.222 7132.567 6973.182 6896.317
## [113] 6845.652 6931.339 7053.502 7058.208
Selanjutnya akan dilakukan peramalan sejumlah data uji yaitu 28 periode. Pada metode SMA, hasil peramalan 28 periode ke depan akan bernilai sama dengan hasil peramalan 1 periode kedepan. Dalam hal ini akan dilakukan pengguabungan data aktual train, data hasil pemulusan dan data hasil ramalan 28 periode kedepan.
data.gab<-cbind(aktual=c(train_ma.ts,rep(NA,28)),pemulusan=c(data.sma,rep(NA,28)),ramalan=c(data.ramal,rep(data.ramal[length(data.ramal)],27)))
data.gab #forecast 28 periode ke depan
## aktual pemulusan ramalan
## [1,] 4649.079 NA NA
## [2,] 4634.821 NA NA
## [3,] 4496.064 NA NA
## [4,] 4716.403 4624.092 NA
## [5,] 4597.430 4611.179 4624.092
## [6,] 4507.607 4579.376 4611.179
## [7,] 4545.952 4591.848 4579.376
## [8,] 4753.612 4601.150 4591.848
## [9,] 4947.782 4688.738 4601.150
## [10,] 4880.359 4781.926 4688.738
## [11,] 4942.275 4881.007 4781.926
## [12,] 4904.088 4918.626 4881.007
## [13,] 4973.794 4925.129 4918.626
## [14,] 5031.256 4962.853 4925.129
## [15,] 5079.585 4997.181 4962.853
## [16,] 5082.991 5041.906 4997.181
## [17,] 5149.627 5085.865 5041.906
## [18,] 5143.893 5114.024 5085.865
## [19,] 5247.690 5156.050 5114.024
## [20,] 5272.810 5203.505 5156.050
## [21,] 5346.659 5252.763 5203.505
## [22,] 5239.851 5276.753 5252.763
## [23,] 5016.712 5219.008 5276.753
## [24,] 5059.223 5165.611 5219.008
## [25,] 4945.791 5065.394 5165.611
## [26,] 4926.734 4987.115 5065.394
## [27,] 5053.663 4996.353 4987.115
## [28,] 5103.414 5007.401 4996.353
## [29,] 5112.188 5049.000 5007.401
## [30,] 5128.225 5099.373 5049.000
## [31,] 5335.529 5169.839 5099.373
## [32,] 5461.058 5259.250 5169.839
## [33,] 5571.656 5374.117 5259.250
## [34,] 5783.335 5537.894 5374.117
## [35,] 5810.483 5656.633 5537.894
## [36,] 5938.329 5775.951 5656.633
## [37,] 6104.324 5909.118 5775.951
## [38,] 6008.709 5965.461 5909.118
## [39,] 5979.073 6007.609 5965.461
## [40,] 6257.835 6087.485 6007.609
## [41,] 6373.412 6154.757 6087.485
## [42,] 6307.127 6229.362 6154.757
## [43,] 5862.352 6200.182 6229.362
## [44,] 6151.729 6173.655 6200.182
## [45,] 6222.521 6135.932 6173.655
## [46,] 6231.932 6117.134 6135.932
## [47,] 6241.796 6211.995 6117.134
## [48,] 6258.749 6238.750 6211.995
## [49,] 6358.209 6272.672 6238.750
## [50,] 6356.160 6303.729 6272.672
## [51,] 6195.562 6292.170 6303.729
## [52,] 6011.456 6230.347 6292.170
## [53,] 6070.209 6158.347 6230.347
## [54,] 6086.258 6090.871 6158.347
## [55,] 6016.864 6046.197 6090.871
## [56,] 5995.616 6042.237 6046.197
## [57,] 5928.309 6006.762 6042.237
## [58,] 5938.351 5969.785 6006.762
## [59,] 5773.120 5908.849 5969.785
## [60,] 5848.616 5872.099 5908.849
## [61,] 6065.166 5906.313 5872.099
## [62,] 6095.497 5945.600 5906.313
## [63,] 6007.120 6004.100 5945.600
## [64,] 6022.399 6047.546 6004.100
## [65,] 6023.008 6037.006 6047.546
## [66,] 6039.844 6023.093 6037.006
## [67,] 6072.510 6039.440 6023.093
## [68,] 6101.690 6059.263 6039.440
## [69,] 6070.039 6071.021 6059.263
## [70,] 6203.431 6111.917 6071.021
## [71,] 6139.492 6128.663 6111.917
## [72,] 6030.772 6110.934 6128.663
## [73,] 6041.366 6103.765 6110.934
## [74,] 6126.921 6084.638 6103.765
## [75,] 6094.873 6073.483 6084.638
## [76,] 6133.246 6099.102 6073.483
## [77,] 6144.815 6124.964 6099.102
## [78,] 6228.845 6150.445 6124.964
## [79,] 6481.769 6247.169 6150.445
## [80,] 6633.338 6372.192 6247.169
## [81,] 6643.738 6496.922 6372.192
## [82,] 6591.346 6587.548 6496.922
## [83,] 6581.785 6612.552 6587.548
## [84,] 6651.054 6616.981 6612.552
## [85,] 6720.263 6636.112 6616.981
## [86,] 6561.553 6628.664 6636.112
## [87,] 6538.506 6617.844 6628.664
## [88,] 6652.922 6618.311 6617.844
## [89,] 6601.932 6588.728 6618.311
## [90,] 6562.900 6589.065 6588.728
## [91,] 6581.482 6599.809 6589.065
## [92,] 6701.316 6611.907 6599.809
## [93,] 6693.401 6634.775 6611.907
## [94,] 6726.373 6675.643 6634.775
## [95,] 6645.511 6691.650 6675.643
## [96,] 6731.391 6699.169 6691.650
## [97,] 6815.607 6729.721 6699.169
## [98,] 6892.818 6771.332 6729.721
## [99,] 6888.171 6831.997 6771.332
## [100,] 6928.328 6881.231 6831.997
## [101,] 6922.602 6907.980 6881.231
## [102,] 6954.965 6923.516 6907.980
## [103,] 7002.532 6952.107 6923.516
## [104,] 7078.760 6989.715 6952.107
## [105,] 7210.835 7061.773 6989.715
## [106,] 7235.532 7131.915 7061.773
## [107,] 7225.606 7187.683 7131.915
## [108,] 7228.914 7225.222 7187.683
## [109,] 6840.217 7132.567 7225.222
## [110,] 6597.993 6973.182 7132.567
## [111,] 6918.144 6896.317 6973.182
## [112,] 7026.256 6845.652 6896.317
## [113,] 7182.961 6931.339 6845.652
## [114,] 7086.648 7053.502 6931.339
## [115,] 6936.967 7058.208 7053.502
## [116,] NA NA 7058.208
## [117,] NA NA 7058.208
## [118,] NA NA 7058.208
## [119,] NA NA 7058.208
## [120,] NA NA 7058.208
## [121,] NA NA 7058.208
## [122,] NA NA 7058.208
## [123,] NA NA 7058.208
## [124,] NA NA 7058.208
## [125,] NA NA 7058.208
## [126,] NA NA 7058.208
## [127,] NA NA 7058.208
## [128,] NA NA 7058.208
## [129,] NA NA 7058.208
## [130,] NA NA 7058.208
## [131,] NA NA 7058.208
## [132,] NA NA 7058.208
## [133,] NA NA 7058.208
## [134,] NA NA 7058.208
## [135,] NA NA 7058.208
## [136,] NA NA 7058.208
## [137,] NA NA 7058.208
## [138,] NA NA 7058.208
## [139,] NA NA 7058.208
## [140,] NA NA 7058.208
## [141,] NA NA 7058.208
## [142,] NA NA 7058.208
## [143,] NA NA 7058.208
Metode pemulusan Double Moving Average (DMA) pada dasarnya mirip dengan SMA. Namun demikian, metode ini lebih cocok digunakan untuk pola data trend. Proses pemulusan dengan rata rata dalam metode ini dilakukan sebanyak 4 kali.
dma <- SMA(data.sma, n = 4)
At <- 2*data.sma - dma
Bt <- 2/(4-1)*(data.sma - dma)
data.dma<- At+Bt
data.ramal2<- c(NA, data.dma)
t = 1:28
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,28)), pemulusan1 = c(data.sma,rep(NA,28)),pemulusan2 = c(data.dma, rep(NA,28)),At = c(At, rep(NA,28)), Bt = c(Bt,rep(NA,28)),ramalan = c(data.ramal2, f[-1]))
data.gab2
## aktual pemulusan1 pemulusan2 At Bt ramalan
## [1,] 4649.079 NA NA NA NA NA
## [2,] 4634.821 NA NA NA NA NA
## [3,] 4496.064 NA NA NA NA NA
## [4,] 4716.403 4624.092 NA NA NA NA
## [5,] 4597.430 4611.179 NA NA NA NA
## [6,] 4507.607 4579.376 NA NA NA NA
## [7,] 4545.952 4591.848 4575.555 4582.072 -6.517171 NA
## [8,] 4753.612 4601.150 4609.920 4606.412 3.507894 4575.555
## [9,] 4947.782 4688.738 4811.172 4762.198 48.973429 4609.920
## [10,] 4880.359 4781.926 4975.277 4897.937 77.340373 4811.172
## [11,] 4942.275 4881.007 5119.009 5023.808 95.201009 4975.277
## [12,] 4904.088 4918.626 5087.045 5019.678 67.367737 5119.009
## [13,] 4973.794 4925.129 5005.890 4973.586 32.304586 5087.045
## [14,] 5031.256 4962.853 5031.102 5003.803 27.299601 5005.890
## [15,] 5079.585 4997.181 5074.236 5043.414 30.822327 5031.102
## [16,] 5082.991 5041.906 5142.138 5102.046 40.092794 5074.236
## [17,] 5149.627 5085.865 5192.387 5149.778 42.608988 5142.138
## [18,] 5143.893 5114.024 5204.491 5168.304 36.186707 5192.387
## [19,] 5247.690 5156.050 5250.365 5212.639 37.725932 5204.491
## [20,] 5272.810 5203.505 5309.578 5267.149 42.429321 5250.365
## [21,] 5346.659 5252.763 5371.392 5323.941 47.451640 5309.578
## [22,] 5239.851 5276.753 5367.561 5331.237 36.323222 5371.392
## [23,] 5016.712 5219.008 5187.343 5200.009 -12.666077 5367.561
## [24,] 5059.223 5165.611 5060.741 5102.689 -41.948283 5187.343
## [25,] 4945.791 5065.394 4871.566 4949.097 -77.531514 5060.741
## [26,] 4926.734 4987.115 4783.503 4864.948 -81.444783 4871.566
## [27,] 5053.663 4996.353 4900.910 4939.087 -38.177043 4783.503
## [28,] 5103.414 5007.401 4996.292 5000.735 -4.443420 4900.910
## [29,] 5112.188 5049.000 5114.054 5088.033 26.021830 4996.292
## [30,] 5128.225 5099.373 5201.608 5160.714 40.894104 5114.054
## [31,] 5335.529 5169.839 5317.232 5258.275 58.957357 5201.608
## [32,] 5461.058 5259.250 5450.724 5374.135 76.589783 5317.232
## [33,] 5571.656 5374.117 5621.571 5522.589 98.981547 5450.724
## [34,] 5783.335 5537.894 5875.593 5740.514 135.079549 5621.571
## [35,] 5810.483 5656.633 5989.399 5856.292 133.106242 5875.593
## [36,] 5938.329 5775.951 6092.287 5965.753 126.534627 5989.399
## [37,] 6104.324 5909.118 6224.483 6098.337 126.145894 6092.287
## [38,] 6008.709 5965.461 6196.579 6104.132 92.447082 6224.483
## [39,] 5979.073 6007.609 6162.733 6100.683 62.049479 6196.579
## [40,] 6257.835 6087.485 6245.930 6182.552 63.378011 6162.733
## [41,] 6373.412 6154.757 6322.973 6255.686 67.286072 6245.930
## [42,] 6307.127 6229.362 6411.959 6338.920 73.038981 6322.973
## [43,] 5862.352 6200.182 6253.907 6232.417 21.490011 6411.959
## [44,] 6151.729 6173.655 6147.265 6157.821 -10.555928 6253.907
## [45,] 6222.521 6135.932 6054.515 6087.082 -32.566935 6147.265
## [46,] 6231.932 6117.134 6051.147 6077.542 -26.394694 6054.515
## [47,] 6241.796 6211.995 6299.187 6264.310 34.877116 6051.147
## [48,] 6258.749 6238.750 6343.411 6301.547 41.864705 6299.187
## [49,] 6358.209 6272.672 6376.895 6335.206 41.689494 6343.411
## [50,] 6356.160 6303.729 6381.966 6350.671 31.295003 6376.895
## [51,] 6195.562 6292.170 6317.737 6307.510 10.226766 6381.966
## [52,] 6011.456 6230.347 6156.376 6185.964 -29.588277 6317.737
## [53,] 6070.209 6158.347 6012.011 6070.546 -58.534159 6156.376
## [54,] 6086.258 6090.871 5920.767 5988.809 -68.041667 6012.011
## [55,] 6016.864 6046.197 5904.124 5960.953 -56.829142 5920.767
## [56,] 5995.616 6042.237 5971.943 6000.061 -28.117432 5904.124
## [57,] 5928.309 6006.762 5940.504 5967.007 -26.503235 5971.943
## [58,] 5938.351 5969.785 5892.352 5923.325 -30.973328 5940.504
## [59,] 5773.120 5908.849 5787.084 5835.790 -48.706014 5892.352
## [60,] 5848.616 5872.099 5759.975 5804.824 -44.849752 5787.084
## [61,] 6065.166 5906.313 5893.066 5898.365 -5.298869 5759.975
## [62,] 6095.497 5945.600 6007.907 5982.984 24.922994 5893.066
## [63,] 6007.120 6004.100 6124.220 6076.172 48.047872 6007.907
## [64,] 6022.399 6047.546 6166.972 6119.201 47.770589 6124.220
## [65,] 6023.008 6037.006 6084.411 6065.449 18.962118 6166.972
## [66,] 6039.844 6023.093 6015.021 6018.250 -3.228841 6084.411
## [67,] 6072.510 6039.440 6043.889 6042.109 1.779378 6015.021
## [68,] 6101.690 6059.263 6091.867 6078.825 13.041646 6043.889
## [69,] 6070.039 6071.021 6109.048 6093.837 15.211060 6091.867
## [70,] 6203.431 6111.917 6181.096 6153.425 27.671427 6109.048
## [71,] 6139.492 6128.663 6188.575 6164.610 23.964681 6181.096
## [72,] 6030.772 6110.934 6119.767 6116.233 3.533244 6188.575
## [73,] 6041.366 6103.765 6087.008 6093.711 -6.703003 6119.767
## [74,] 6126.921 6084.638 6047.368 6062.276 -14.908101 6087.008
## [75,] 6094.873 6073.483 6040.613 6053.761 -13.147949 6047.368
## [76,] 6133.246 6099.102 6113.859 6107.956 5.903076 6040.613
## [77,] 6144.815 6124.964 6173.992 6154.381 19.611470 6113.859
## [78,] 6228.845 6150.445 6214.522 6188.891 25.631022 6173.992
## [79,] 6481.769 6247.169 6400.084 6338.918 61.166056 6214.522
## [80,] 6633.338 6372.192 6619.691 6520.691 98.999654 6400.084
## [81,] 6643.738 6496.922 6797.323 6677.163 120.160339 6619.691
## [82,] 6591.346 6587.548 6856.864 6749.138 107.726685 6797.323
## [83,] 6581.785 6612.552 6771.299 6707.800 63.498881 6856.864
## [84,] 6651.054 6616.981 6681.114 6655.461 25.653422 6771.299
## [85,] 6720.263 6636.112 6674.136 6658.926 15.209371 6681.114
## [86,] 6561.553 6628.664 6637.142 6633.751 3.391174 6674.136
## [87,] 6538.506 6617.844 6606.084 6610.788 -4.704101 6637.142
## [88,] 6652.922 6618.311 6606.775 6611.389 -4.614522 6606.084
## [89,] 6601.932 6588.728 6547.631 6564.070 -16.439046 6606.775
## [90,] 6562.900 6589.065 6565.028 6574.643 -9.614767 6547.631
## [91,] 6581.482 6599.809 6601.193 6600.640 0.553772 6565.028
## [92,] 6701.316 6611.907 6636.124 6626.438 9.686707 6601.193
## [93,] 6693.401 6634.775 6677.917 6660.660 17.257100 6636.124
## [94,] 6726.373 6675.643 6750.825 6720.752 30.072957 6677.917
## [95,] 6645.511 6691.650 6755.244 6729.807 25.437622 6750.825
## [96,] 6731.391 6699.169 6738.935 6723.029 15.906555 6755.244
## [97,] 6815.607 6729.721 6780.845 6760.395 20.449910 6738.935
## [98,] 6892.818 6771.332 6851.938 6819.696 32.242574 6780.845
## [99,] 6888.171 6831.997 6955.234 6905.939 49.294779 6851.938
## [100,] 6928.328 6881.231 7010.666 6958.892 51.773967 6955.234
## [101,] 6922.602 6907.980 7007.721 6967.825 39.896627 7010.666
## [102,] 6954.965 6923.516 6985.742 6960.852 24.890340 7007.721
## [103,] 7002.532 6952.107 7011.937 6988.005 23.932210 6985.742
## [104,] 7078.760 6989.715 7067.024 7036.100 30.923523 7011.937
## [105,] 7210.835 7061.773 7195.098 7141.768 53.330139 7067.024
## [106,] 7235.532 7131.915 7295.311 7229.952 65.358317 7195.098
## [107,] 7225.606 7187.683 7345.870 7282.595 63.274536 7295.311
## [108,] 7228.914 7225.222 7347.844 7298.795 49.049072 7345.870
## [109,] 6840.217 7132.567 7071.268 7095.788 -24.519694 7347.844
## [110,] 6597.993 6973.182 6712.380 6816.701 -104.320814 7071.268
## [111,] 6918.144 6896.317 6628.808 6735.812 -107.003425 6712.380
## [112,] 7026.256 6845.652 6651.857 6729.375 -77.518229 6628.808
## [113,] 7182.961 6931.339 6964.198 6951.054 13.143941 6651.857
## [114,] 7086.648 7053.502 7256.502 7175.302 81.199782 6964.198
## [115,] 6936.967 7058.208 7201.596 7144.241 57.355089 7256.502
## [116,] NA NA NA NA NA 7201.596
## [117,] NA NA NA NA NA 7258.951
## [118,] NA NA NA NA NA 7316.306
## [119,] NA NA NA NA NA 7373.661
## [120,] NA NA NA NA NA 7431.016
## [121,] NA NA NA NA NA 7488.371
## [122,] NA NA NA NA NA 7545.726
## [123,] NA NA NA NA NA 7603.081
## [124,] NA NA NA NA NA 7660.436
## [125,] NA NA NA NA NA 7717.791
## [126,] NA NA NA NA NA 7775.146
## [127,] NA NA NA NA NA 7832.502
## [128,] NA NA NA NA NA 7889.857
## [129,] NA NA NA NA NA 7947.212
## [130,] NA NA NA NA NA 8004.567
## [131,] NA NA NA NA NA 8061.922
## [132,] NA NA NA NA NA 8119.277
## [133,] NA NA NA NA NA 8176.632
## [134,] NA NA NA NA NA 8233.987
## [135,] NA NA NA NA NA 8291.342
## [136,] NA NA NA NA NA 8348.697
## [137,] NA NA NA NA NA 8406.052
## [138,] NA NA NA NA NA 8463.408
## [139,] NA NA NA NA NA 8520.763
## [140,] NA NA NA NA NA 8578.118
## [141,] NA NA NA NA NA 8635.473
## [142,] NA NA NA NA NA 8692.828
## [143,] NA NA NA NA NA 8750.183
Hasil pemulusan menggunakan metode DMA divisualisasikan sebagai berikut
ts.plot(data1.ts, xlab="Time Period ", ylab="Close", main= "DMA N=4 Data Close")
points(data1.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)
Selanjutnya perhitungan akurasi dilakukan baik pada data latih maupun data uji. Perhitungan akurasi dilakukan dengan ukuran akurasi SSE, MSE dan MAPE.
#Menghitung nilai keakuratan data latih
error_train.dma = train_ma.ts-data.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 = 4")
akurasi_train.dma
## Akurasi m = 4
## SSE 2.996853e+06
## MSE 2.774864e+04
## MAPE 1.979160e+00
Perhitungan akurasi pada data latih menggunakan nilai MAPE menghasilkan nilai MAPE yang kurang dari 10% sehingga dikategorikan sangat baik. Selanjutnya, perhitungan nilai akurasi dilakukan pada data uji.
#Menghitung nilai keakuratan data uji
error_test.dma = test_ma.ts-data.gab2[116:143,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 = 4")
akurasi_test.dma
## Akurasi m = 4
## SSE 3.411581e+07
## MSE 1.218422e+06
## MAPE 1.414680e+01
Perhitungan akurasi menggunakan data latih menghasilkan nilai MAPE yang kurang dari 10% sehingga nilai akurasi ini dapat dikategorikan sebagai sangat baik.
Nilai pemulusan pada periode ke-t didapat dari persamaan:
\[ \tilde{y}_T=\lambda y_t+(1-\lambda)\tilde{y}_{T-1} \]
Nilai parameter \(\lambda\) adalah nilai antara 0 dan 1.
Nilai pemulusan periode ke-t bertindak sebagai nilai ramalan pada periode ke-\((T+\tau)\).
\[ \tilde{y}_{T+\tau}(T)=\tilde{y}_T \]
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_ma.ts, gamma = FALSE, beta = 0.2, alpha = 0.2)
plot(des.1)
#ramalan
ramalandes1<- forecast(des.1, h=28)
ramalandes1
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 116 7043.486 6783.969 7303.002 6646.590 7440.382
## 117 7038.680 6771.794 7305.565 6630.513 7446.846
## 118 7033.874 6757.273 7310.475 6610.849 7456.899
## 119 7029.068 6740.269 7317.867 6587.389 7470.747
## 120 7024.262 6720.728 7327.796 6560.047 7488.478
## 121 7019.456 6698.662 7340.250 6528.844 7510.068
## 122 7014.650 6674.140 7355.161 6493.884 7535.416
## 123 7009.844 6647.264 7372.425 6455.325 7564.364
## 124 7005.039 6618.159 7391.918 6413.357 7596.720
## 125 7000.233 6586.958 7413.508 6368.183 7632.282
## 126 6995.427 6553.791 7437.062 6320.004 7670.850
## 127 6990.621 6518.786 7462.455 6269.012 7712.230
## 128 6985.815 6482.059 7489.571 6215.387 7756.243
## 129 6981.009 6443.716 7518.302 6159.291 7802.727
## 130 6976.203 6403.854 7548.553 6100.870 7851.536
## 131 6971.397 6362.556 7580.238 6040.255 7902.539
## 132 6966.591 6319.901 7613.282 5977.564 7955.619
## 133 6961.786 6275.955 7647.616 5912.898 8010.673
## 134 6956.980 6230.779 7683.180 5846.352 8067.608
## 135 6952.174 6184.426 7719.921 5778.006 8126.342
## 136 6947.368 6136.945 7757.790 5707.934 8186.802
## 137 6942.562 6088.379 7796.745 5636.201 8248.923
## 138 6937.756 6038.765 7836.747 5562.868 8312.644
## 139 6932.950 5988.140 7877.761 5487.987 8377.913
## 140 6928.144 5936.534 7919.755 5411.607 8444.682
## 141 6923.338 5883.976 7962.700 5333.772 8512.905
## 142 6918.533 5830.494 8006.571 5254.521 8582.544
## 143 6913.727 5776.110 8051.344 5173.891 8653.562
#Lamda=0.6 dan gamma=0.3
des.2<- HoltWinters(train_ma.ts, gamma = FALSE, beta = 0.3, alpha = 0.6)
plot(des.2)
#ramalan
ramalandes2<- forecast(des.2, h=28)
ramalandes2
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 116 7014.581 6835.589 7193.572 6740.837 7288.325
## 117 7014.706 6787.705 7241.708 6667.537 7361.876
## 118 7014.832 6730.129 7299.536 6579.416 7450.249
## 119 7014.958 6664.683 7365.233 6479.259 7550.658
## 120 7015.084 6592.573 7437.595 6368.909 7661.259
## 121 7015.210 6514.609 7515.810 6249.607 7780.812
## 122 7015.336 6431.362 7599.309 6122.225 7908.446
## 123 7015.461 6343.253 7687.669 5987.408 8043.515
## 124 7015.587 6250.608 7780.566 5845.653 8185.522
## 125 7015.713 6153.687 7877.739 5697.358 8334.068
## 126 7015.839 6052.705 7978.973 5542.852 8488.825
## 127 7015.965 5947.843 8084.087 5382.413 8649.517
## 128 7016.091 5839.257 8192.924 5216.279 8815.902
## 129 7016.216 5727.085 8305.348 5044.659 8987.773
## 130 7016.342 5611.447 8421.238 4867.740 9164.944
## 131 7016.468 5492.452 8540.484 4685.687 9347.249
## 132 7016.594 5370.199 8662.989 4498.649 9534.538
## 133 7016.720 5244.776 8788.664 4306.765 9726.674
## 134 7016.845 5116.265 8917.425 4110.159 9923.532
## 135 7016.971 4984.743 9049.199 3908.947 10124.996
## 136 7017.097 4850.279 9183.915 3703.235 10330.959
## 137 7017.223 4712.938 9321.508 3493.123 10541.323
## 138 7017.349 4572.780 9461.917 3278.704 10755.993
## 139 7017.475 4429.863 9605.086 3060.065 10974.884
## 140 7017.600 4284.241 9750.960 2837.288 11197.913
## 141 7017.726 4135.962 9899.490 2610.449 11425.004
## 142 7017.852 3985.076 10050.628 2379.621 11656.083
## 143 7017.978 3831.627 10204.329 2144.874 11891.081
Selanjutnya jika ingin membandingkan plot data latih dan data uji adalah sebagai berikut.
#Visually evaluate the prediction
plot(data1.ts)
lines(des.1$fitted[,1], lty=2, col="blue")
lines(ramalandes1$mean, col="red")
Untuk mendapatkan nilai parameter optimum dari DES, argumen
alpha dan beta dapat dibuat NULL
seperti berikut.
#Lamda dan gamma optimum
des.opt<- HoltWinters(train_ma.ts, gamma = FALSE)
des.opt
## Holt-Winters exponential smoothing with trend and without seasonal component.
##
## Call:
## HoltWinters(x = train_ma.ts, gamma = FALSE)
##
## Smoothing parameters:
## alpha: 1
## beta : 0.0197573
## gamma: FALSE
##
## Coefficients:
## [,1]
## a 6936.96680
## b 12.49961
plot(des.opt)
#ramalan
ramalandesopt<- forecast(des.opt, h=28)
ramalandesopt
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 116 6949.466 6792.310 7106.623 6709.117 7189.816
## 117 6961.966 6737.507 7186.425 6618.686 7305.246
## 118 6974.466 6696.850 7252.081 6549.890 7399.042
## 119 6986.965 6663.263 7310.667 6491.906 7482.025
## 120 6999.465 6634.035 7364.895 6440.588 7558.342
## 121 7011.964 6607.789 7416.140 6393.831 7630.098
## 122 7024.464 6583.716 7465.212 6350.399 7698.530
## 123 7036.964 6561.295 7512.632 6309.491 7764.436
## 124 7049.463 6540.166 7558.760 6270.561 7828.366
## 125 7061.963 6520.072 7603.854 6233.212 7890.713
## 126 7074.462 6500.819 7648.106 6197.150 7951.775
## 127 7086.962 6482.258 7691.666 6162.147 8011.777
## 128 7099.462 6464.273 7734.650 6128.024 8070.899
## 129 7111.961 6446.770 7777.152 6094.639 8129.283
## 130 7124.461 6429.673 7819.249 6061.875 8187.047
## 131 7136.961 6412.919 7861.002 6029.634 8244.287
## 132 7149.460 6396.454 7902.466 5997.837 8301.083
## 133 7161.960 6380.236 7943.684 5966.416 8357.504
## 134 7174.459 6364.224 7984.695 5935.311 8413.607
## 135 7186.959 6348.387 8025.531 5904.474 8469.444
## 136 7199.459 6332.697 8066.220 5873.861 8525.056
## 137 7211.958 6317.129 8106.788 5843.434 8580.482
## 138 7224.458 6301.660 8147.255 5813.161 8635.755
## 139 7236.957 6286.274 8187.641 5783.012 8690.903
## 140 7249.457 6270.951 8227.963 5752.962 8745.952
## 141 7261.957 6255.679 8268.235 5722.987 8800.926
## 142 7274.456 6240.442 8308.470 5693.068 8855.844
## 143 7286.956 6225.230 8348.682 5663.186 8910.725
Selanjutnya akan dilakukan perhitungan akurasi pada data latih maupun data uji dengan ukuran akurasi SSE, MSE dan MAPE.
#Akurasi Data Training
ssedes.train1<-des.1$SSE
msedes.train1<-ssedes.train1/length(train_ma.ts)
sisaandes1<-ramalandes1$residuals
head(sisaandes1)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] NA NA -124.49853 139.97828 6.64908 -71.13083
mapedes.train1 <- sum(abs(sisaandes1[3:length(train_ma.ts)]/train_ma.ts[3:length(train_ma.ts)])
*100)/length(train_ma.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 4.593269e+06
## MSE 3.994147e+04
## MAPE 2.590253e+00
ssedes.train2<-des.2$SSE
msedes.train2<-ssedes.train2/length(train_ma.ts)
sisaandes2<-ramalandes2$residuals
head(sisaandes2)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] NA NA -124.49853 207.20749 -36.71897 -98.53073
mapedes.train2 <- sum(abs(sisaandes2[3:length(train_ma.ts)]/train_ma.ts[3:length(train_ma.ts)])
*100)/length(train_ma.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 2.184852e+06
## MSE 1.899872e+04
## MAPE 1.583727e+00
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 Testing
selisihdes1<-ramalandes1$mean-testing_ma$Close
selisihdes1
## Time Series:
## Start = 116
## End = 143
## Frequency = 1
## [1] 0.5486256 244.3516252 293.6546248 377.1631904 137.3001740
## [6] 68.3331536 -70.0044717 -119.4324291 -167.3955435 -135.0153959
## [11] -181.7524353 -252.0348857 -183.0551281 -197.5739065 -64.5946379
## [16] -55.3858763 152.0616543 -55.9854441 -99.0603745 -93.3530779
## [21] -141.8381653 -139.6191497 -115.3937871 -86.6889325 213.0261761
## [26] 111.1455817 117.8597134 77.9185730
SSEtestingdes1<-sum(selisihdes1^2)
MSEtestingdes1<-SSEtestingdes1/length(testing_ma$Close)
MAPEtestingdes1<-sum(abs(selisihdes1/testing_ma$Close)*100)/length(testing_ma$Close)
selisihdes2<-ramalandes2$mean-testing_ma$Close
selisihdes2
## Time Series:
## Start = 116
## End = 143
## Frequency = 1
## [1] -28.356353 220.378355 274.613063 363.053337 128.122029 64.086717
## [7] -69.319200 -113.815449 -156.846855 -119.534999 -161.340330 -226.691072
## [13] -152.779606 -162.366676 -24.455699 -10.315229 202.064010 -1.051380
## [19] -39.194603 -28.555598 -72.108977 -64.958253 -35.801182 -2.164619
## [25] 302.482198 205.533312 217.179152 182.169720
SSEtestingdes2<-sum(selisihdes2^2)
MSEtestingdes2<-SSEtestingdes2/length(testing_ma$Close)
MAPEtestingdes2<-sum(abs(selisihdes2/testing_ma$Close)*100)/length(testing_ma$Close)
selisihdesopt<-ramalandesopt$mean-testing_ma$Close
selisihdesopt
## Time Series:
## Start = 116
## End = 143
## Frequency = 1
## [1] -93.47061 167.63789 234.24638 335.06044 112.50292 60.84140
## [7] -60.19073 -92.31320 -122.97082 -73.28517 -102.71672 -155.69367
## [13] -69.40842 -66.62170 83.66306 110.17732 334.93034 144.18874
## [19] 118.41931 141.43210 110.25250 129.77702 171.30787 217.31822
## [25] 534.33883 449.76373 473.78335 451.14771
SSEtestingdesopt<-sum(selisihdesopt^2)
MSEtestingdesopt<-SSEtestingdesopt/length(testing_ma$Close)
MAPEtestingdesopt<-sum(abs(selisihdesopt/testing_ma$Close)*100)/length(testing_ma$Close)
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 7.363921e+05 7.295707e+05 1.504534e+06
## MSE 2.629972e+04 2.605610e+04 5.373336e+04
## MAPE 2.028529e+00 1.873444e+00 2.701025e+00