Latihan Pertemuan 2

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
library(graphics)
library(TTR)
## Warning: package 'TTR' was built under R version 4.5.1
library(TSA)
## Warning: package 'TSA' was built under R version 4.5.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(rio)
## Warning: package 'rio' was built under R version 4.5.1
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.1

Melakukan Import Data

data <- read.csv("C:/Users/Fathoni Sabri/OneDrive/Documents/Semester 5/MPDW/Pertemuan 2/Pertemuan 2/data_fathoni.csv")
df <- data
df
##           Date     Close    Volume
## 1    10/9/2023  973.5909  22298500
## 2   10/10/2023 1213.2440  13625200
## 3   10/11/2023 1512.8105  38431400
## 4   10/12/2023 1887.2686 219262300
## 5   10/13/2023 2356.5891  39504100
## 6   10/16/2023 2746.0256 227720100
## 7   10/17/2023 3425.0430 215604400
## 8   10/18/2023 3784.5225 311694400
## 9   10/19/2023 4044.1467 150507700
## 10  10/20/2023 4024.1758  85371300
## 11  10/23/2023 3734.5947  98962200
## 12  10/24/2023 3794.5081  40442200
## 13  10/25/2023 3814.4792  20457100
## 14  10/26/2023 3794.5081  23103000
## 15  10/27/2023 4054.1326  76315200
## 16  10/30/2023 4493.4961 136498000
## 17  10/31/2023 4573.3804  55551200
## 18   11/1/2023 4283.7998  50048400
## 19   11/2/2023 4044.1467  63249300
## 20   11/3/2023 4134.0171  54842200
## 21   11/6/2023 4283.7998  28846900
## 22   11/7/2023 4383.6553  26103200
## 23   11/8/2023 4393.6406  18257700
## 24   11/9/2023 5217.4487 111849600
## 25  11/10/2023 5217.4487         0
## 26  11/13/2023 5292.3403  69960400
## 27  11/14/2023 5367.2319  24752100
## 28  11/15/2023 5716.7261  63375300
## 29  11/16/2023 5691.7622  61909300
## 30  11/17/2023 6315.8589  60573100
## 31  11/20/2023 6790.1724  53008600
## 32  11/21/2023 6265.9312  80088500
## 33  11/22/2023 5641.8345  92961400
## 34  11/23/2023 6420.1572  52116100
## 35  11/24/2023 6070.4214  35573700
## 36  11/27/2023 5945.5151  27030500
## 37  11/28/2023 6245.2891  38044200
## 38  11/29/2023 6120.3838  28091900
## 39  11/30/2023 6869.8184  76689700
## 40   12/1/2023 6794.8745  49599600
## 41   12/4/2023 6844.8369  39120700
## 42   12/5/2023 6819.8560  50994200
## 43   12/6/2023 7194.5732  68123500
## 44   12/7/2023 7744.1587  57980500
## 45   12/8/2023 8043.9326  50224300
## 46  12/11/2023 7594.2715  38133500
## 47  12/12/2023 7644.2339  34839300
## 48  12/13/2023 7569.2905  14746100
## 49  12/14/2023 7194.5732  29173400
## 50  12/15/2023 7394.4224  22179600
## 51  12/18/2023 7144.6108  18483400
## 52  12/19/2023 7319.4790  21446100
## 53  12/20/2023 7444.3843  21918400
## 54  12/21/2023 7494.3467  11927700
## 55  12/22/2023 7494.3467  17981700
## 56  12/27/2023 7644.2339  42756100
## 57  12/28/2023 7669.2153  13392200
## 58  12/29/2023 7469.3657  15244000
## 59    1/2/2024 7594.2715  15012300
## 60    1/3/2024 7569.2905   6026800
## 61    1/4/2024 7519.3281  12323500
## 62    1/5/2024 7219.5542  16149400
## 63    1/8/2024 6744.9121  30456400
## 64    1/9/2024 5395.9297 100068600
## 65   1/10/2024 5670.7227  78655800
## 66   1/11/2024 5046.1934  53028700
## 67   1/12/2024 4696.4575  63660700
## 68   1/15/2024 4696.4575         0
## 69   1/16/2024 4876.3218  70243100
## 70   1/17/2024 5146.1182  65649600
## 71   1/18/2024 5645.7417  87583400
## 72   1/19/2024 5096.1558  49338700
## 73   1/22/2024 5345.9673  43627700
## 74   1/23/2024 5570.7979  36952000
## 75   1/24/2024 5370.9487  40178600
## 76   1/25/2024 5246.0430  11912100
## 77   1/26/2024 5196.0806  22713900
## 78   1/29/2024 5021.2124  13895700
## 79   1/30/2024 5021.2124  22206200
## 80   1/31/2024 4946.2690  11020900
## 81    2/1/2024 4846.3447  11197200
## 82    2/2/2024 4946.2690  12812900
## 83    2/5/2024 5171.0996  21611100
## 84    2/6/2024 5595.7793  37579800
## 85    2/7/2024 5395.9297  40129200
## 86   2/12/2024 5445.8921  13497400
## 87   2/13/2024 5046.1934  24426100
## 88   2/15/2024 5121.1372   8823500
## 89   2/16/2024 5470.8730  23471500
## 90   2/19/2024 5495.8545  16293100
## 91   2/20/2024 5495.8545   7225000
## 92   2/21/2024 5495.8545   8289400
## 93   2/22/2024 5570.7979   9897400
## 94   2/23/2024 5495.8545   7899600
## 95   2/26/2024 5495.8545   5992200
## 96   2/27/2024 5495.8545   4676700
## 97   2/28/2024 5945.5151  32515800
## 98   2/29/2024 6045.4399  20983000
## 99    3/1/2024 6195.3267  17035800
## 100   3/4/2024 6120.3838  10333200
## 101   3/5/2024 5895.5527  11693200
## 102   3/6/2024 5995.4775  11782200
## 103   3/7/2024 6245.2891  15735100
## 104   3/8/2024 6120.3838   8847000
## 105  3/13/2024 6145.3643  10280200
## 106  3/14/2024 5895.5527  15583100
## 107  3/15/2024 5545.8169  23637300
## 108  3/18/2024 5171.0996  14212600
## 109  3/19/2024 5345.9673   6320700
## 110  3/20/2024 5395.9297   8111400
## 111  3/21/2024 5345.9673   7186600

Eksplorasi Data

str(df)
## 'data.frame':    111 obs. of  3 variables:
##  $ Date  : chr  "10/9/2023" "10/10/2023" "10/11/2023" "10/12/2023" ...
##  $ Close : num  974 1213 1513 1887 2357 ...
##  $ Volume: int  22298500 13625200 38431400 219262300 39504100 227720100 215604400 311694400 150507700 85371300 ...
df$Date <- as.Date(df$Date, format = "%m/%d/%Y")
str(df)
## 'data.frame':    111 obs. of  3 variables:
##  $ Date  : Date, format: "2023-10-09" "2023-10-10" ...
##  $ Close : num  974 1213 1513 1887 2357 ...
##  $ Volume: int  22298500 13625200 38431400 219262300 39504100 227720100 215604400 311694400 150507700 85371300 ...
dim(df)
## [1] 111   3
df.ts <- ts(df$Close)
summary(df.ts)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   973.6  4946.3  5495.9  5523.3  6290.9  8043.9
ts.plot(df.ts, xlab="Periode", ylab="Harga (Rp)", 
        main = "Harga Saham Harian BREN")
points(df.ts)

Single Moving Average & Double Moving Average

Pembagian Data

n <- nrow(df)

n_train <- floor(0.8 * n)

training_ma <- df[1:n_train, ]
testing_ma  <- df[(n_train+1):n, ]

train_ma.ts <- ts(training_ma$Close)
test_ma.ts  <- ts(testing_ma$Close)
plot(df.ts, col="grey",main="Plot semua data")
points(df.ts)

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

plot(test_ma.ts, col="red",main="Plot data uji")
points(test_ma.ts)

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", y = "Harga (Rp)", 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))

Single Moving Average (SMA)

df.sma<-SMA(train_ma.ts, n=6)
df.sma
## Time Series:
## Start = 1 
## End = 88 
## Frequency = 1 
##  [1]       NA       NA       NA       NA       NA 1781.588 2190.163 2618.710
##  [9] 3040.599 3396.750 3626.418 3801.165 3866.071 3867.735 3869.400 3947.620
## [17] 4087.417 4168.966 4207.244 4263.829 4302.107 4283.800 4253.843 4409.451
## [25] 4605.002 4798.056 4978.628 5200.806 5417.160 5600.228 5862.349 6024.614
## [33] 6070.381 6187.619 6250.729 6189.005 6098.191 6073.934 6278.597 6341.050
## [41] 6470.120 6615.843 6774.057 7044.686 7240.372 7373.605 7506.838 7631.743
## [49] 7631.743 7573.454 7423.567 7377.768 7344.460 7331.969 7381.932 7423.567
## [57] 7511.001 7535.982 7560.963 7573.454 7577.618 7506.838 7352.787 7007.214
## [65] 6686.623 6266.107 5795.628 5375.112 5063.680 5022.045 5017.882 5026.209
## [73] 5134.460 5280.184 5362.622 5379.276 5304.332 5291.842 5237.716 5133.628
## [81] 5046.194 4996.231 4992.068 5087.829 5150.282 5233.552 5266.861 5296.005
df.ramal<-c(NA,df.sma)
df.ramal
##  [1]       NA       NA       NA       NA       NA       NA 1781.588 2190.163
##  [9] 2618.710 3040.599 3396.750 3626.418 3801.165 3866.071 3867.735 3869.400
## [17] 3947.620 4087.417 4168.966 4207.244 4263.829 4302.107 4283.800 4253.843
## [25] 4409.451 4605.002 4798.056 4978.628 5200.806 5417.160 5600.228 5862.349
## [33] 6024.614 6070.381 6187.619 6250.729 6189.005 6098.191 6073.934 6278.597
## [41] 6341.050 6470.120 6615.843 6774.057 7044.686 7240.372 7373.605 7506.838
## [49] 7631.743 7631.743 7573.454 7423.567 7377.768 7344.460 7331.969 7381.932
## [57] 7423.567 7511.001 7535.982 7560.963 7573.454 7577.618 7506.838 7352.787
## [65] 7007.214 6686.623 6266.107 5795.628 5375.112 5063.680 5022.045 5017.882
## [73] 5026.209 5134.460 5280.184 5362.622 5379.276 5304.332 5291.842 5237.716
## [81] 5133.628 5046.194 4996.231 4992.068 5087.829 5150.282 5233.552 5266.861
## [89] 5296.005
df.gab <- cbind(
  aktual = c(df.ts),
  pemulusan = c(df.sma,rep(NA,25)),
  ramalan = c(df.ramal,rep(df.ramal[length(df.ramal)],24)))
## Warning in cbind(aktual = c(df.ts), pemulusan = c(df.sma, rep(NA, 25)), :
## number of rows of result is not a multiple of vector length (arg 1)
df.gab
##           aktual pemulusan  ramalan
##   [1,]  973.5909        NA       NA
##   [2,] 1213.2440        NA       NA
##   [3,] 1512.8105        NA       NA
##   [4,] 1887.2686        NA       NA
##   [5,] 2356.5891        NA       NA
##   [6,] 2746.0256  1781.588       NA
##   [7,] 3425.0430  2190.163 1781.588
##   [8,] 3784.5225  2618.710 2190.163
##   [9,] 4044.1467  3040.599 2618.710
##  [10,] 4024.1758  3396.750 3040.599
##  [11,] 3734.5947  3626.418 3396.750
##  [12,] 3794.5081  3801.165 3626.418
##  [13,] 3814.4792  3866.071 3801.165
##  [14,] 3794.5081  3867.735 3866.071
##  [15,] 4054.1326  3869.400 3867.735
##  [16,] 4493.4961  3947.620 3869.400
##  [17,] 4573.3804  4087.417 3947.620
##  [18,] 4283.7998  4168.966 4087.417
##  [19,] 4044.1467  4207.244 4168.966
##  [20,] 4134.0171  4263.829 4207.244
##  [21,] 4283.7998  4302.107 4263.829
##  [22,] 4383.6553  4283.800 4302.107
##  [23,] 4393.6406  4253.843 4283.800
##  [24,] 5217.4487  4409.451 4253.843
##  [25,] 5217.4487  4605.002 4409.451
##  [26,] 5292.3403  4798.056 4605.002
##  [27,] 5367.2319  4978.628 4798.056
##  [28,] 5716.7261  5200.806 4978.628
##  [29,] 5691.7622  5417.160 5200.806
##  [30,] 6315.8589  5600.228 5417.160
##  [31,] 6790.1724  5862.349 5600.228
##  [32,] 6265.9312  6024.614 5862.349
##  [33,] 5641.8345  6070.381 6024.614
##  [34,] 6420.1572  6187.619 6070.381
##  [35,] 6070.4214  6250.729 6187.619
##  [36,] 5945.5151  6189.005 6250.729
##  [37,] 6245.2891  6098.191 6189.005
##  [38,] 6120.3838  6073.934 6098.191
##  [39,] 6869.8184  6278.597 6073.934
##  [40,] 6794.8745  6341.050 6278.597
##  [41,] 6844.8369  6470.120 6341.050
##  [42,] 6819.8560  6615.843 6470.120
##  [43,] 7194.5732  6774.057 6615.843
##  [44,] 7744.1587  7044.686 6774.057
##  [45,] 8043.9326  7240.372 7044.686
##  [46,] 7594.2715  7373.605 7240.372
##  [47,] 7644.2339  7506.838 7373.605
##  [48,] 7569.2905  7631.743 7506.838
##  [49,] 7194.5732  7631.743 7631.743
##  [50,] 7394.4224  7573.454 7631.743
##  [51,] 7144.6108  7423.567 7573.454
##  [52,] 7319.4790  7377.768 7423.567
##  [53,] 7444.3843  7344.460 7377.768
##  [54,] 7494.3467  7331.969 7344.460
##  [55,] 7494.3467  7381.932 7331.969
##  [56,] 7644.2339  7423.567 7381.932
##  [57,] 7669.2153  7511.001 7423.567
##  [58,] 7469.3657  7535.982 7511.001
##  [59,] 7594.2715  7560.963 7535.982
##  [60,] 7569.2905  7573.454 7560.963
##  [61,] 7519.3281  7577.618 7573.454
##  [62,] 7219.5542  7506.838 7577.618
##  [63,] 6744.9121  7352.787 7506.838
##  [64,] 5395.9297  7007.214 7352.787
##  [65,] 5670.7227  6686.623 7007.214
##  [66,] 5046.1934  6266.107 6686.623
##  [67,] 4696.4575  5795.628 6266.107
##  [68,] 4696.4575  5375.112 5795.628
##  [69,] 4876.3218  5063.680 5375.112
##  [70,] 5146.1182  5022.045 5063.680
##  [71,] 5645.7417  5017.882 5022.045
##  [72,] 5096.1558  5026.209 5017.882
##  [73,] 5345.9673  5134.460 5026.209
##  [74,] 5570.7979  5280.184 5134.460
##  [75,] 5370.9487  5362.622 5280.184
##  [76,] 5246.0430  5379.276 5362.622
##  [77,] 5196.0806  5304.332 5379.276
##  [78,] 5021.2124  5291.842 5304.332
##  [79,] 5021.2124  5237.716 5291.842
##  [80,] 4946.2690  5133.628 5237.716
##  [81,] 4846.3447  5046.194 5133.628
##  [82,] 4946.2690  4996.231 5046.194
##  [83,] 5171.0996  4992.068 4996.231
##  [84,] 5595.7793  5087.829 4992.068
##  [85,] 5395.9297  5150.282 5087.829
##  [86,] 5445.8921  5233.552 5150.282
##  [87,] 5046.1934  5266.861 5233.552
##  [88,] 5121.1372  5296.005 5266.861
##  [89,] 5470.8730        NA 5296.005
##  [90,] 5495.8545        NA 5296.005
##  [91,] 5495.8545        NA 5296.005
##  [92,] 5495.8545        NA 5296.005
##  [93,] 5570.7979        NA 5296.005
##  [94,] 5495.8545        NA 5296.005
##  [95,] 5495.8545        NA 5296.005
##  [96,] 5495.8545        NA 5296.005
##  [97,] 5945.5151        NA 5296.005
##  [98,] 6045.4399        NA 5296.005
##  [99,] 6195.3267        NA 5296.005
## [100,] 6120.3838        NA 5296.005
## [101,] 5895.5527        NA 5296.005
## [102,] 5995.4775        NA 5296.005
## [103,] 6245.2891        NA 5296.005
## [104,] 6120.3838        NA 5296.005
## [105,] 6145.3643        NA 5296.005
## [106,] 5895.5527        NA 5296.005
## [107,] 5545.8169        NA 5296.005
## [108,] 5171.0996        NA 5296.005
## [109,] 5345.9673        NA 5296.005
## [110,] 5395.9297        NA 5296.005
## [111,] 5345.9673        NA 5296.005
## [112,]  973.5909        NA 5296.005
## [113,] 1213.2440        NA 5296.005
ts.plot(df.ts, xlab="Periode", ylab="Harga (Rp)", main= "SMA N=6 Data Daily Close")
points(df.ts)
lines(df.gab[,2],col="blue",lwd=3)
lines(df.gab[,3],col="orange",lwd=3)
legend("topleft",c("data aktual","data pemulusan","data peramalan"), lty=8, col=c("black","blue","orange"), cex=0.5)

# Data Latih
error_train.sma = train_ma.ts-df.ramal[1:length(train_ma.ts)]

SSE_train.sma = sum(error_train.sma[7:length(train_ma.ts)]^2)
MSE_train.sma = mean(error_train.sma[7:length(train_ma.ts)]^2)
MAPE_train.sma = mean(abs((error_train.sma[7:length(train_ma.ts)]/train_ma.ts[7: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 = 6")
akurasi_train.sma
##      Akurasi m = 6
## SSE   3.425012e+07
## MSE   4.176844e+05
## MAPE  8.803236e+00

Dari data latih, didapati nilai MAPE dengen menggunakan metode pemulusan SMA adalah 8.8%, nilai ini bisa katakan cukup baik.

# Data Uji
error_test.sma = test_ma.ts-df.gab[101:111,3]
## Warning in `-.default`(test_ma.ts, df.gab[101:111, 3]): longer object length is
## not a multiple of shorter object length
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 = 6")
akurasi_test.sma
##      Akurasi m = 6
## SSE   6.420934e+06
## MSE   2.791711e+05
## MAPE  7.234390e+00

Perhitungan menggunakan data uji menunjukkan Nilai MAPE yang kurang dari 10%, artinya nilai akurasi ini masih dapat dikatakan cukup baik.

Double Moving Average (DMA)

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

t = 1:25
f = c()

for (i in t) {
  f[i] = At[length(At)] + Bt[length(Bt)]*(i)
}

df.gab2 <- cbind(aktual = c(df.ts), 
                   pemulusan1 = c(df.sma,rep(NA,25)),
                   pemulusan2 = c(dma, rep(NA,25)),
                   At = c(At, rep(NA,25)), 
                   Bt = c(Bt,rep(NA,25)),
                   ramalan = c(df.ramal2, f[-1]))
## Warning in cbind(aktual = c(df.ts), pemulusan1 = c(df.sma, rep(NA, 25)), :
## number of rows of result is not a multiple of vector length (arg 1)
df.gab2
##           aktual pemulusan1 pemulusan2       At           Bt  ramalan
##   [1,]  973.5909         NA         NA       NA           NA       NA
##   [2,] 1213.2440         NA         NA       NA           NA       NA
##   [3,] 1512.8105         NA         NA       NA           NA       NA
##   [4,] 1887.2686         NA         NA       NA           NA       NA
##   [5,] 2356.5891         NA         NA       NA           NA       NA
##   [6,] 2746.0256   1781.588         NA       NA           NA       NA
##   [7,] 3425.0430   2190.163         NA       NA           NA       NA
##   [8,] 3784.5225   2618.710         NA       NA           NA       NA
##   [9,] 4044.1467   3040.599         NA       NA           NA       NA
##  [10,] 4024.1758   3396.750         NA       NA           NA       NA
##  [11,] 3734.5947   3626.418   2775.705 4477.131  340.2852716       NA
##  [12,] 3794.5081   3801.165   3112.301 4490.029  275.5456340 4817.417
##  [13,] 3814.4792   3866.071   3391.619 4340.523  189.7808729 4765.575
##  [14,] 3794.5081   3867.735   3599.790 4135.681  107.1782091 4530.304
##  [15,] 4054.1326   3869.400   3737.923 4000.876   52.5905653 4242.859
##  [16,] 4493.4961   3947.620   3829.735 4065.505   47.1539632 4053.467
##  [17,] 4573.3804   4087.417   3906.568 4268.267   72.3397162 4112.659
##  [18,] 4283.7998   4168.966   3967.868 4370.064   80.4391059 4340.606
##  [19,] 4044.1467   4207.244   4024.730 4389.757   73.0054199 4450.503
##  [20,] 4134.0171   4263.829   4090.746 4436.912   69.2331326 4462.763
##  [21,] 4283.7998   4302.107   4162.864 4441.350   55.6971544 4506.145
##  [22,] 4383.6553   4283.800   4218.894 4348.706   25.9624295 4497.047
##  [23,] 4393.6406   4253.843   4246.631 4261.055    2.8847249 4374.668
##  [24,] 5217.4487   4409.451   4286.712 4532.190   49.0956298 4263.940
##  [25,] 5217.4487   4605.002   4353.005 4856.998  100.7985785 4581.286
##  [26,] 5292.3403   4798.056   4442.043 5154.068  142.4050075 4957.797
##  [27,] 5367.2319   4978.628   4554.797 5402.459  169.5324191 5296.473
##  [28,] 5716.7261   5200.806   4707.631 5693.981  197.2700575 5571.991
##  [29,] 5691.7622   5417.160   4901.517 5932.802  206.2570665 5891.251
##  [30,] 6315.8589   5600.228   5099.980 6100.476  200.0993002 6139.059
##  [31,] 6790.1724   5862.349   5309.538 6415.160  221.1244141 6300.576
##  [32,] 6265.9312   6024.614   5513.964 6535.264  204.2599230 6636.284
##  [33,] 5641.8345   6070.381   5695.923 6444.839  149.7832086 6739.523
##  [34,] 6420.1572   6187.619   5860.392 6514.847  130.8910645 6594.622
##  [35,] 6070.4214   6250.729   5999.320 6502.139  100.5637045 6645.738
##  [36,] 5945.5151   6189.005   6097.450 6280.561   36.6223036 6602.702
##  [37,] 6245.2891   6098.191   6136.757 6059.626  -15.4261013 6317.183
##  [38,] 6120.3838   6073.934   6144.977 6002.890  -28.4172417 6044.200
##  [39,] 6869.8184   6278.597   6179.679 6377.516   39.5672418 5974.473
##  [40,] 6794.8745   6341.050   6205.251 6476.850   54.3196614 6417.083
##  [41,] 6844.8369   6470.120   6241.816 6698.423   91.3213379 6531.169
##  [42,] 6819.8560   6615.843   6312.956 6918.730  121.1548719 6789.744
##  [43,] 7194.5732   6774.057   6425.600 7122.514  139.3827690 7039.885
##  [44,] 7744.1587   7044.686   6587.392 7501.980  182.9175781 7261.897
##  [45,] 8043.9326   7240.372   6747.688 7733.056  197.0735622 7684.898
##  [46,] 7594.2715   7373.605   6919.780 7827.429  181.5297308 7930.129
##  [47,] 7644.2339   7506.838   7092.567 7921.108  165.7083279 8008.959
##  [48,] 7569.2905   7631.743   7261.884 8001.603  147.9439453 8086.817
##  [49,] 7194.5732   7631.743   7404.831 7858.656   90.7648600 8149.547
##  [50,] 7394.4224   7573.454   7492.959 7653.949   32.1979221 7949.420
##  [51,] 7144.6108   7423.567   7523.492 7323.642  -39.9698676 7686.147
##  [52,] 7319.4790   7377.768   7524.186 7231.351  -58.5669325 7283.673
##  [53,] 7444.3843   7344.460   7497.123 7191.797  -61.0650662 7172.784
##  [54,] 7494.3467   7331.969   7447.160 7216.778  -46.0763889 7130.732
##  [55,] 7494.3467   7381.932   7405.525 7358.338   -9.4373752 7170.702
##  [56,] 7644.2339   7423.567   7380.544 7466.590   17.2092015 7348.901
##  [57,] 7669.2153   7511.001   7395.116 7626.886   46.3539063 7483.799
##  [58,] 7469.3657   7535.982   7421.485 7650.479   45.7987685 7673.240
##  [59,] 7594.2715   7560.963   7457.569 7664.358   41.3576986 7696.278
##  [60,] 7569.2905   7573.454   7497.816 7649.091   30.2549859 7705.715
##  [61,] 7519.3281   7577.618   7530.431 7624.804   18.8746907 7679.346
##  [62,] 7219.5542   7506.838   7544.309 7469.366  -14.9886665 7643.679
##  [63,] 6744.9121   7352.787   7517.940 7187.634  -66.0612848 7454.377
##  [64,] 5395.9297   7007.214   7429.812 6584.616 -169.0391710 7121.573
##  [65,] 5670.7227   6686.623   7284.089 6089.157 -238.9863987 6415.577
##  [66,] 5046.1934   6266.107   7066.198 5466.016 -320.0363932 5850.170
##  [67,] 4696.4575   5795.628   6769.199 4822.057 -389.4284830 5145.979
##  [68,] 4696.4575   5375.112   6413.912 4336.312 -415.5199001 4432.629
##  [69,] 4876.3218   5063.680   6032.394 4094.967 -387.4854817 3920.792
##  [70,] 5146.1182   5022.045   5701.533 4342.558 -271.7949707 3707.481
##  [71,] 5645.7417   5017.882   5423.409 4612.354 -162.2109538 4070.763
##  [72,] 5096.1558   5026.209   5216.759 4835.658  -76.2202636 4450.143
##  [73,] 5345.9673   5134.460   5106.565 5162.356   11.1582465 4759.438
##  [74,] 5570.7979   5280.184   5090.743 5469.624   75.7761610 5173.514
##  [75,] 5370.9487   5362.622   5140.567 5584.676   88.8218804 5545.400
##  [76,] 5246.0430   5379.276   5200.105 5558.446   71.6681641 5673.498
##  [77,] 5196.0806   5304.332   5247.847 5360.817   22.5940538 5630.114
##  [78,] 5021.2124   5291.842   5292.119 5291.564   -0.1110298 5383.411
##  [79,] 5021.2124   5237.716   5309.328 5166.103  -28.6450521 5291.453
##  [80,] 4946.2690   5133.628   5284.902 4982.353  -60.5099013 5137.458
##  [81,] 4846.3447   5046.194   5232.164 4860.223  -74.3883084 4921.843
##  [82,] 4946.2690   4996.231   5168.324 4824.139  -68.8369466 4785.835
##  [83,] 5171.0996   4992.068   5116.280 4867.856  -49.6847222 4755.302
##  [84,] 5595.7793   5087.829   5082.278 5093.380    2.2205784 4818.171
##  [85,] 5395.9297   5150.282   5067.705 5232.859   33.0306587 5095.601
##  [86,] 5445.8921   5233.552   5084.359 5382.745   59.6772136 5265.889
##  [87,] 5046.1934   5266.861   5121.137 5412.584   58.2893338 5442.423
##  [88,] 5121.1372   5296.005   5171.099 5420.911   49.9622884 5470.873
##  [89,] 5470.8730         NA         NA       NA           NA 5470.873
##  [90,] 5495.8545         NA         NA       NA           NA 5520.836
##  [91,] 5495.8545         NA         NA       NA           NA 5570.798
##  [92,] 5495.8545         NA         NA       NA           NA 5620.760
##  [93,] 5570.7979         NA         NA       NA           NA 5670.722
##  [94,] 5495.8545         NA         NA       NA           NA 5720.685
##  [95,] 5495.8545         NA         NA       NA           NA 5770.647
##  [96,] 5495.8545         NA         NA       NA           NA 5820.609
##  [97,] 5945.5151         NA         NA       NA           NA 5870.572
##  [98,] 6045.4399         NA         NA       NA           NA 5920.534
##  [99,] 6195.3267         NA         NA       NA           NA 5970.496
## [100,] 6120.3838         NA         NA       NA           NA 6020.458
## [101,] 5895.5527         NA         NA       NA           NA 6070.421
## [102,] 5995.4775         NA         NA       NA           NA 6120.383
## [103,] 6245.2891         NA         NA       NA           NA 6170.345
## [104,] 6120.3838         NA         NA       NA           NA 6220.308
## [105,] 6145.3643         NA         NA       NA           NA 6270.270
## [106,] 5895.5527         NA         NA       NA           NA 6320.232
## [107,] 5545.8169         NA         NA       NA           NA 6370.194
## [108,] 5171.0996         NA         NA       NA           NA 6420.157
## [109,] 5345.9673         NA         NA       NA           NA 6470.119
## [110,] 5395.9297         NA         NA       NA           NA 6520.081
## [111,] 5345.9673         NA         NA       NA           NA 6570.044
## [112,]  973.5909         NA         NA       NA           NA 6620.006
## [113,] 1213.2440         NA         NA       NA           NA 6669.968
ts.plot(df.ts, xlab="Periode", ylab="Harga (Rp)", main= "DMA N=6 Data Daily Close")
points(df.ts)
lines(df.gab2[,3],col="blue",lwd=2)
lines(df.gab2[,6],col="orange",lwd=2)
legend("topleft",c("data aktual","data pemulusan","data peramalan"), lty=8, col=c("black","blue","orange"), cex=0.8)

# Data Latih
error_train.dma = train_ma.ts-df.ramal2[1:length(train_ma.ts)]

SSE_train.dma = sum(error_train.dma[12:length(train_ma.ts)]^2)
MSE_train.dma = mean(error_train.dma[12:length(train_ma.ts)]^2)
MAPE_train.dma = mean(abs((error_train.dma[12:length(train_ma.ts)]/train_ma.ts[12: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 = 6")
akurasi_train.dma
##      Akurasi m = 6
## SSE   2.453720e+07
## MSE   3.186649e+05
## MAPE  8.081859e+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.

# Data Uji
error_test.dma = test_ma.ts-df.gab2[101:111,6]
## Warning in `-.default`(test_ma.ts, df.gab2[101:111, 6]): longer object length
## is not a multiple of shorter object length
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 = 6")
akurasi_test.dma
##      Akurasi m = 6
## SSE   1.125425e+07
## MSE   4.893153e+05
## MAPE  1.087979e+01


Perhitungan akurasi menggunakan data latih menghasilkan nilai MAPE yang kurang dari 10% sehingga nilai akurasi ini dapat dikategorikan sangat baik.


Metode terbaik dapat ditentukan melalui kecilnya nilai MAPE.


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

training <- df[1:n_train, ]
testing  <- df[(n_train+1):n, ]

train.ts <- ts(training$Close)
test.ts  <- ts(testing$Close)

Eksplorasi Data

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

plot(test.ts, col="red",main="Plot data uji")
points(test.ts)

ggplot() + 
  geom_line(data = training, aes(x = Date, y = Close, col = "Data Latih")) +
  geom_line(data = testing, aes(x = Date, y = Close, col = "Data Uji")) +
  labs(x = "Periode", y = "Harga (Rp)", 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))

Single Exponential Smoothing

ses.1 <- ses(train.ts, h = 30, alpha = 0.2)
plot(ses.1)

ses.1
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  89        5209.84 4312.898 6106.783 3838.085 6581.596
##  90        5209.84 4295.135 6124.546 3810.919 6608.762
##  91        5209.84 4277.710 6141.971 3784.270 6635.411
##  92        5209.84 4260.605 6159.075 3758.111 6661.570
##  93        5209.84 4243.803 6175.877 3732.414 6687.266
##  94        5209.84 4227.289 6192.392 3707.157 6712.523
##  95        5209.84 4211.047 6208.634 3682.318 6737.363
##  96        5209.84 4195.065 6224.615 3657.876 6761.805
##  97        5209.84 4179.332 6240.349 3633.813 6785.868
##  98        5209.84 4163.834 6255.846 3610.112 6809.569
##  99        5209.84 4148.563 6271.117 3586.757 6832.924
## 100        5209.84 4133.509 6286.172 3563.734 6855.947
## 101        5209.84 4118.662 6301.018 3541.028 6878.653
## 102        5209.84 4104.015 6315.666 3518.627 6901.054
## 103        5209.84 4089.559 6330.122 3496.518 6923.163
## 104        5209.84 4075.288 6344.393 3474.692 6944.989
## 105        5209.84 4061.193 6358.488 3453.136 6966.545
## 106        5209.84 4047.270 6372.411 3431.842 6987.839
## 107        5209.84 4033.511 6386.170 3410.800 7008.881
## 108        5209.84 4019.911 6399.769 3390.001 7029.680
## 109        5209.84 4006.465 6413.215 3369.437 7050.244
## 110        5209.84 3993.168 6426.513 3349.101 7070.580
## 111        5209.84 3980.014 6439.666 3328.984 7090.697
## 112        5209.84 3967.000 6452.681 3309.080 7110.601
## 113        5209.84 3954.121 6465.560 3289.383 7130.298
## 114        5209.84 3941.372 6478.309 3269.885 7149.796
## 115        5209.84 3928.750 6490.931 3250.582 7169.099
## 116        5209.84 3916.251 6503.430 3231.466 7188.214
## 117        5209.84 3903.872 6515.809 3212.534 7207.147
## 118        5209.84 3891.609 6528.072 3193.780 7225.901
ses.2<- ses(train.ts, h = 30, alpha = 0.7)
plot(ses.2)

ses.2
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  89       5133.687 4642.152 5625.223 4381.948 5885.427
##  90       5133.687 4533.691 5733.683 4216.073 6051.302
##  91       5133.687 4442.035 5825.340 4075.897 6191.478
##  92       5133.687 4361.178 5906.197 3952.237 6315.138
##  93       5133.687 4288.017 5979.358 3840.346 6427.028
##  94       5133.687 4220.700 6046.675 3737.394 6529.981
##  95       5133.687 4158.017 6109.358 3641.528 6625.847
##  96       5133.687 4099.124 6168.251 3551.460 6715.915
##  97       5133.687 4043.408 6223.967 3466.249 6801.125
##  98       5133.687 3990.404 6276.971 3385.187 6882.188
##  99       5133.687 3939.751 6327.624 3307.719 6959.655
## 100       5133.687 3891.161 6376.214 3233.407 7033.967
## 101       5133.687 3844.401 6422.974 3161.894 7105.481
## 102       5133.687 3799.279 6468.096 3092.885 7174.490
## 103       5133.687 3755.633 6511.742 3026.135 7241.240
## 104       5133.687 3713.328 6554.047 2961.434 7305.940
## 105       5133.687 3672.246 6595.128 2898.606 7368.769
## 106       5133.687 3632.289 6635.086 2837.497 7429.878
## 107       5133.687 3593.368 6674.007 2777.972 7489.403
## 108       5133.687 3555.406 6711.969 2719.914 7547.461
## 109       5133.687 3518.336 6749.039 2663.221 7604.154
## 110       5133.687 3482.098 6785.277 2607.799 7659.576
## 111       5133.687 3446.638 6820.737 2553.568 7713.807
## 112       5133.687 3411.908 6855.467 2500.453 7766.921
## 113       5133.687 3377.865 6889.509 2448.389 7818.985
## 114       5133.687 3344.470 6922.905 2397.316 7870.059
## 115       5133.687 3311.687 6955.688 2347.178 7920.197
## 116       5133.687 3279.483 6987.892 2297.927 7969.448
## 117       5133.687 3247.829 7019.546 2249.516 8017.859
## 118       5133.687 3216.698 7050.677 2201.905 8065.470
autoplot(ses.1) +
  autolayer(fitted(ses.1), series="Fitted") +
  ylab("Daily Close") + xlab("Time")

ses1<- HoltWinters(train.ts, gamma = FALSE, beta = FALSE, alpha = 0.2)
plot(ses1)

ramalan1<- forecast(ses1, h=30)
ramalan1
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  89        5209.84 4325.790 6093.891 3857.802 6561.878
##  90        5209.84 4308.283 6111.398 3831.027 6588.654
##  91        5209.84 4291.109 6128.572 3804.761 6614.919
##  92        5209.84 4274.250 6145.431 3778.978 6640.703
##  93        5209.84 4257.689 6161.992 3753.651 6666.030
##  94        5209.84 4241.412 6178.269 3728.757 6690.924
##  95        5209.84 4225.404 6194.277 3704.275 6715.406
##  96        5209.84 4209.652 6210.029 3680.184 6739.497
##  97        5209.84 4194.144 6225.537 3656.467 6763.214
##  98        5209.84 4178.870 6240.811 3633.107 6786.574
##  99        5209.84 4163.818 6255.863 3610.087 6809.593
## 100        5209.84 4148.980 6270.701 3587.395 6832.286
## 101        5209.84 4134.347 6285.334 3565.015 6854.666
## 102        5209.84 4119.910 6299.771 3542.936 6876.745
## 103        5209.84 4105.662 6314.019 3521.146 6898.535
## 104        5209.84 4091.596 6328.085 3499.633 6920.048
## 105        5209.84 4077.704 6341.977 3478.387 6941.294
## 106        5209.84 4063.980 6355.700 3457.399 6962.282
## 107        5209.84 4050.420 6369.261 3436.659 6983.022
## 108        5209.84 4037.015 6382.665 3416.159 7003.521
## 109        5209.84 4023.763 6395.918 3395.891 7023.790
## 110        5209.84 4010.656 6409.024 3375.847 7043.834
## 111        5209.84 3997.692 6421.989 3356.019 7063.661
## 112        5209.84 3984.865 6434.816 3336.402 7083.279
## 113        5209.84 3972.170 6447.511 3316.987 7102.694
## 114        5209.84 3959.605 6460.076 3297.770 7121.911
## 115        5209.84 3947.164 6472.517 3278.744 7140.937
## 116        5209.84 3934.845 6484.836 3259.903 7159.777
## 117        5209.84 3922.644 6497.037 3241.243 7178.437
## 118        5209.84 3910.557 6509.123 3222.759 7196.922
ses2<- HoltWinters(train.ts, gamma = FALSE, beta = FALSE, alpha = 0.7)
plot(ses2)

ramalan2<- forecast(ses2, h=30)
ramalan2
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  89       5133.687 4649.819 5617.556 4393.674 5873.700
##  90       5133.687 4543.051 5724.324 4230.386 6036.988
##  91       5133.687 4452.824 5814.551 4092.397 6174.978
##  92       5133.687 4373.228 5894.146 3970.666 6296.709
##  93       5133.687 4301.209 5966.166 3860.521 6406.854
##  94       5133.687 4234.942 6032.433 3759.174 6508.201
##  95       5133.687 4173.236 6094.139 3664.804 6602.571
##  96       5133.687 4115.262 6152.113 3576.140 6691.235
##  97       5133.687 4060.415 6206.960 3492.259 6775.116
##  98       5133.687 4008.238 6259.137 3412.461 6854.914
##  99       5133.687 3958.375 6309.000 3336.202 6931.173
## 100       5133.687 3910.543 6356.832 3263.049 7004.325
## 101       5133.687 3864.512 6402.863 3192.652 7074.723
## 102       5133.687 3820.094 6447.281 3124.719 7142.656
## 103       5133.687 3777.129 6490.246 3059.010 7208.365
## 104       5133.687 3735.483 6531.892 2995.319 7272.056
## 105       5133.687 3695.043 6572.332 2933.471 7333.904
## 106       5133.687 3655.709 6611.666 2873.314 7394.061
## 107       5133.687 3617.395 6649.980 2814.718 7452.657
## 108       5133.687 3580.025 6687.350 2757.566 7509.809
## 109       5133.687 3543.533 6723.842 2701.757 7565.618
## 110       5133.687 3507.860 6759.514 2647.200 7620.175
## 111       5133.687 3472.954 6794.421 2593.814 7673.560
## 112       5133.687 3438.766 6828.609 2541.528 7725.846
## 113       5133.687 3405.254 6862.121 2490.276 7777.098
## 114       5133.687 3372.380 6894.995 2439.999 7827.375
## 115       5133.687 3340.108 6927.267 2390.644 7876.731
## 116       5133.687 3308.406 6958.969 2342.161 7925.214
## 117       5133.687 3277.246 6990.129 2294.505 7972.869
## 118       5133.687 3246.600 7020.774 2247.637 8019.738
ses.opt <- ses(train.ts, h = 30, alpha = NULL)
plot(ses.opt)

ses.opt
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  89        5121.13 4672.760 5569.499 4435.408 5806.851
##  90        5121.13 4487.072 5755.188 4151.422 6090.838
##  91        5121.13 4344.583 5897.676 3933.504 6308.755
##  92        5121.13 4224.459 6017.801 3749.790 6492.470
##  93        5121.13 4118.626 6123.633 3587.933 6654.327
##  94        5121.13 4022.946 6219.314 3441.602 6800.657
##  95        5121.13 3934.958 6307.301 3307.037 6935.223
##  96        5121.13 3853.061 6389.198 3181.786 7060.473
##  97        5121.13 3776.142 6466.118 3064.148 7178.111
##  98        5121.13 3703.390 6538.870 2952.883 7289.376
##  99        5121.13 3634.193 6608.067 2847.056 7395.204
## 100        5121.13 3568.076 6674.184 2745.939 7496.321
## 101        5121.13 3504.661 6737.598 2648.954 7593.305
## 102        5121.13 3443.642 6798.618 2555.633 7686.626
## 103        5121.13 3384.766 6857.494 2465.590 7776.669
## 104        5121.13 3327.821 6914.438 2378.501 7863.758
## 105        5121.13 3272.630 6969.629 2294.094 7948.165
## 106        5121.13 3219.040 7023.219 2212.135 8030.124
## 107        5121.13 3166.919 7075.340 2132.423 8109.837
## 108        5121.13 3116.152 7126.107 2054.782 8187.478
## 109        5121.13 3066.640 7175.619 1979.059 8263.201
## 110        5121.13 3018.293 7223.967 1905.118 8337.141
## 111        5121.13 2971.033 7271.227 1832.840 8409.419
## 112        5121.13 2924.789 7317.470 1762.117 8480.143
## 113        5121.13 2879.499 7362.760 1692.852 8549.408
## 114        5121.13 2835.107 7407.153 1624.959 8617.300
## 115        5121.13 2791.560 7450.700 1558.360 8683.900
## 116        5121.13 2748.812 7493.447 1492.983 8749.276
## 117        5121.13 2706.821 7535.438 1428.763 8813.496
## 118        5121.13 2665.548 7576.711 1365.642 8876.617
HWopt<- HoltWinters(train.ts, gamma = FALSE, beta = FALSE,alpha = NULL)
HWopt
## 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.999919
##  beta : FALSE
##  gamma: FALSE
## 
## Coefficients:
##       [,1]
## a 5121.131
plot(HWopt)

ramalanopt<- forecast(HWopt, h=30)
ramalanopt
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  89       5121.131 4676.994 5565.268 4441.883 5800.380
##  90       5121.131 4493.052 5749.210 4160.567 6081.695
##  91       5121.131 4351.905 5890.357 3944.702 6297.561
##  92       5121.131 4232.911 6009.351 3762.716 6479.546
##  93       5121.131 4128.075 6114.187 3602.383 6639.879
##  94       5121.131 4033.296 6208.966 3457.431 6784.831
##  95       5121.131 3946.137 6296.125 3324.133 6918.129
##  96       5121.131 3865.012 6377.251 3200.062 7042.200
##  97       5121.131 3788.817 6453.446 3083.532 7158.730
##  98       5121.131 3716.750 6525.513 2973.315 7268.947
##  99       5121.131 3648.204 6594.058 2868.484 7373.778
## 100       5121.131 3582.710 6659.552 2768.320 7473.943
## 101       5121.131 3519.893 6722.369 2672.248 7570.014
## 102       5121.131 3459.448 6782.814 2579.807 7662.456
## 103       5121.131 3401.127 6841.136 2490.611 7751.651
## 104       5121.131 3344.719 6897.543 2404.343 7837.919
## 105       5121.131 3290.048 6952.215 2320.731 7921.531
## 106       5121.131 3236.962 7005.300 2239.544 8002.719
## 107       5121.131 3185.332 7056.930 2160.582 8081.680
## 108       5121.131 3135.044 7107.218 2083.673 8158.590
## 109       5121.131 3085.998 7156.265 2008.663 8233.599
## 110       5121.131 3038.106 7204.156 1935.419 8306.843
## 111       5121.131 2991.291 7250.971 1863.822 8378.441
## 112       5121.131 2945.483 7296.779 1793.764 8448.498
## 113       5121.131 2900.620 7341.643 1725.152 8517.110
## 114       5121.131 2856.645 7385.617 1657.899 8584.363
## 115       5121.131 2813.509 7428.754 1591.927 8650.335
## 116       5121.131 2771.164 7471.099 1527.166 8715.096
## 117       5121.131 2729.568 7512.694 1463.551 8778.711
## 118       5121.131 2688.684 7553.578 1401.024 8841.238

Akurasi Data Training

# Data Latih  
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       4.608103e+07
## MSE       5.236480e+05
## RMSE      7.236353e+02
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       12665699.042
## MSE         143928.398
## RMSE           379.379

Berdasarkan nilai SSE, MSE, RMSE, dan MAPE di antara kedua parameter, nilai parameter \(λ=0,7\) menghasilkan akurasi yang lebih baik dibanding \(λ=0,2\). Hal ini dilihat dari nilai masing-masing ukuran akurasi yang lebih kecil. Berdasarkan nilai MAPE-nya, hasil ini dapat dikategorikan sebagai peramalan sangat baik.

Akurasi Data Testing

# Data Uji
n_test <- nrow(testing)

e1   <- as.numeric(ramalan1$mean)[1:n_test] - as.numeric(testing$Close)
e2   <- as.numeric(ramalan2$mean)[1:n_test] - as.numeric(testing$Close)
eopt <- as.numeric(ramalanopt$mean)[1:n_test] - as.numeric(testing$Close)

SSEtesting1  <- sum(e1^2,  na.rm = TRUE)
MSEtesting1  <- mean(e1^2, na.rm = TRUE)
RMSEtesting1 <- sqrt(MSEtesting1)

SSEtesting2  <- sum(e2^2,  na.rm = TRUE)
MSEtesting2  <- mean(e2^2, na.rm = TRUE)
RMSEtesting2 <- sqrt(MSEtesting2)

SSEtestingopt  <- sum(eopt^2,  na.rm = TRUE)
MSEtestingopt  <- mean(eopt^2, na.rm = TRUE)
RMSEtestingopt <- sqrt(MSEtestingopt)

akurasitesting_SSE <- matrix(c(SSEtesting1, SSEtesting2, SSEtestingopt),
                             nrow = 3,
                             dimnames = list(c("SSE1","SSE2","SSEopt"), "Nilai"))
akurasitesting_MSE <- matrix(c(MSEtesting1, MSEtesting2, MSEtestingopt),
                             nrow = 3,
                             dimnames = list(c("MSE1","MSE2","MSEopt"), "Nilai"))
akurasitesting_RMSE <- matrix(c(RMSEtesting1, RMSEtesting2, RMSEtestingopt),
                              nrow = 3,
                              dimnames = list(c("RMSE1","RMSE2","RMSEopt"), "Nilai"))

akurasitesting_SSE
##           Nilai
## SSE1    8249117
## SSE2   10149179
## SSEopt 10488084
akurasitesting_MSE
##           Nilai
## MSE1   358657.3
## MSE2   441268.7
## MSEopt 456003.7
akurasitesting_RMSE
##            Nilai
## RMSE1   598.8800
## RMSE2   664.2806
## RMSEopt 675.2804

Berdasarkan nilai SSE, MSE, RMSE, dan MAPE di antara ketiga parameter, sesuai yang diharapkan bahwa nilai parameter \(λ=0,2\) menghasilkan akurasi yang lebih baik dibanding \(λ=0,7\) dan \(λ=0,Nulls\). Hal ini dilihat dari nilai masing-masing ukuran akurasi yang lebih kecil. Berdasarkan nilai MAPE-nya, hasil ini dapat dikategorikan sebagai peramalan sangat baik.

Double Exponential Smoothing (DES)

des.1<- HoltWinters(train.ts, gamma = FALSE, beta = 0.2, alpha = 0.2)
plot(des.1)

ramalandes1<- forecast(des.1, h=30)
ramalandes1
##     Point Forecast    Lo 80     Hi 80     Lo 95     Hi 95
##  89       5303.826 4535.285  6072.367 4128.4443  6479.207
##  90       5345.200 4554.836  6135.565 4136.4417  6553.959
##  91       5386.575 4567.439  6205.711 4133.8144  6639.335
##  92       5427.949 4572.691  6283.208 4119.9445  6735.954
##  93       5469.324 4570.427  6368.221 4094.5796  6844.068
##  94       5510.698 4560.688  6460.709 4057.7822  6963.615
##  95       5552.073 4543.673  6560.473 4009.8576  7094.288
##  96       5593.447 4519.689  6667.206 3951.2749  7235.620
##  97       5634.822 4489.103  6780.541 3882.5965  7387.047
##  98       5676.196 4452.309  6900.084 3804.4221  7547.971
##  99       5717.571 4409.696  7025.446 3717.3492  7717.793
## 100       5758.946 4361.638  7156.253 3621.9479  7895.943
## 101       5800.320 4308.480  7292.160 3518.7472  8081.893
## 102       5841.695 4250.537  7432.852 3408.2288  8275.160
## 103       5883.069 4188.093  7578.045 3290.8263  8475.312
## 104       5924.444 4121.401  7727.487 3166.9272  8681.960
## 105       5965.818 4050.686  7880.950 3036.8766  8894.760
## 106       6007.193 3976.150  8038.235 2900.9813  9113.404
## 107       6048.567 3897.971  8199.163 2759.5142  9337.620
## 108       6089.942 3816.308  8363.576 2612.7187  9567.165
## 109       6131.316 3731.302  8531.330 2460.8119  9801.820
## 110       6172.691 3643.082  8702.299 2303.9886 10041.393
## 111       6214.065 3551.762  8876.368 2142.4239 10285.706
## 112       6255.440 3457.445  9053.435 1976.2758 10534.604
## 113       6296.814 3360.224  9233.404 1805.6875 10787.941
## 114       6338.189 3260.186  9416.192 1630.7892 11045.588
## 115       6379.563 3157.406  9601.720 1451.6997 11307.427
## 116       6420.938 3051.958  9789.917 1268.5282 11573.347
## 117       6462.312 2943.906  9980.718 1081.3748 11843.250
## 118       6503.687 2833.311 10174.062  890.3321 12117.041
des.2<- HoltWinters(train.ts, gamma = FALSE, beta = 0.3, alpha = 0.6)
plot(des.2)

ramalandes2<- forecast(des.2, h=30)
ramalandes2
##     Point Forecast       Lo 80     Hi 80       Lo 95     Hi 95
##  89       5134.854  4638.76730  5630.941   4376.1547  5893.554
##  90       5101.422  4472.27086  5730.573   4139.2184  6063.625
##  91       5067.989  4278.91470  5857.064   3861.2038  6274.775
##  92       5034.557  4063.74622  6005.368   3549.8300  6519.284
##  93       5001.125  3830.10691  6172.142   3210.2076  6792.041
##  94       4967.692  3580.24387  6355.140   2845.7732  7089.611
##  95       4934.260  3315.73814  6552.781   2458.9446  7409.575
##  96       4900.827  3037.75781  6763.896   2051.5085  7750.146
##  97       4867.395  2747.20441  6987.585   1624.8435  8109.946
##  98       4833.962  2444.79971  7223.125   1180.0535  8487.871
##  99       4800.530  2131.13902  7469.921    718.0489  8883.011
## 100       4767.097  1806.72528  7727.469    239.5990  9294.596
## 101       4733.665  1471.99171  7995.338   -254.6338  9721.964
## 102       4700.232  1127.31737  8273.147   -764.0696 10164.534
## 103       4666.800   773.03822  8560.562  -1288.1947 10621.795
## 104       4633.368   409.45523  8857.280  -1826.5489 11093.284
## 105       4599.935    36.84041  9163.030  -2378.7160 11578.586
## 106       4566.503  -344.55850  9477.564  -2944.3172 12077.322
## 107       4533.070  -734.51448  9800.655  -3523.0053 12589.146
## 108       4499.638 -1132.81825 10132.094  -4114.4603 13113.736
## 109       4466.205 -1539.27603 10471.686  -4718.3858 13650.796
## 110       4432.773 -1953.70754 10819.253  -5334.5060 14200.052
## 111       4399.340 -2375.94449 11174.625  -5962.5636 14761.244
## 112       4365.908 -2805.82924 11537.645  -6602.3175 15334.133
## 113       4332.475 -3243.21365 11908.164  -7253.5412 15918.492
## 114       4299.043 -3687.95814 12286.044  -7916.0211 16514.107
## 115       4265.611 -4139.93088 12671.152  -8589.5557 17120.777
## 116       4232.178 -4599.00705 13063.363  -9273.9541 17738.310
## 117       4198.746 -5065.06826 13462.559  -9969.0351 18366.526
## 118       4165.313 -5538.00196 13868.628 -10674.6267 19005.253
plot(df.ts)
lines(des.1$fitted[,1], lty=2, col="blue")
lines(ramalandes1$mean, col="red")

des.opt<- HoltWinters(train.ts, gamma = FALSE)
des.opt
## Holt-Winters exponential smoothing with trend and without seasonal component.
## 
## Call:
## HoltWinters(x = train.ts, gamma = FALSE)
## 
## Smoothing parameters:
##  alpha: 1
##  beta : 0.06978366
##  gamma: FALSE
## 
## Coefficients:
##         [,1]
## a 5121.13721
## b  -26.91466
plot(des.opt)

ramalandesopt<- forecast(des.opt, h=30)
ramalandesopt
##     Point Forecast      Lo 80    Hi 80       Lo 95     Hi 95
##  89       5094.223 4654.99210 5533.453  4422.47755  5765.968
##  90       5067.308 4424.10336 5710.512  4083.61146  6051.004
##  91       5040.393 4225.38095 5855.405  3793.93952  6286.847
##  92       5013.479 4040.64702 5986.310  3525.66112  6501.296
##  93       4986.564 3863.14963 6109.978  3268.45004  6704.678
##  94       4959.649 3689.57079 6229.728  3017.23187  6902.067
##  95       4932.735 3518.02644 6347.443  2769.12520  7096.344
##  96       4905.820 3347.34691 6464.293  2522.34114  7289.299
##  97       4878.905 3176.76094 6581.050  2275.70017  7482.110
##  98       4851.991 3005.73775 6698.243  2028.39053  7675.591
##  99       4825.076 2833.90040 6816.251  1779.83575  7870.316
## 100       4798.161 2660.97492 6935.348  1529.61681  8066.706
## 101       4771.247 2486.75868 7055.735  1277.42383  8265.069
## 102       4744.332 2311.09999 7177.564  1023.02481  8465.639
## 103       4717.417 2133.88435 7300.950   766.24463  8668.590
## 104       4690.503 1955.02495 7425.980   506.95054  8874.055
## 105       4663.588 1774.45594 7552.720   245.04184  9082.134
## 106       4636.673 1592.12760 7681.219   -19.55753  9292.904
## 107       4609.759 1408.00269 7811.515  -286.90453  9506.422
## 108       4582.844 1222.05378 7943.634  -557.04108  9722.729
## 109       4555.929 1034.26120 8077.597  -829.99728  9941.856
## 110       4529.015  844.61149 8213.418 -1105.79373 10163.823
## 111       4502.100  653.09609 8351.104 -1384.44349 10388.643
## 112       4475.185  459.71049 8490.660 -1665.95348 10616.324
## 113       4448.271  264.45337 8632.088 -1950.32572 10846.867
## 114       4421.356   67.32603 8775.386 -2237.55821 11080.270
## 115       4394.441 -131.66810 8920.551 -2527.64570 11316.528
## 116       4367.527 -332.52387 9067.577 -2820.58033 11555.634
## 117       4340.612 -535.23471 9216.459 -3116.35205 11797.576
## 118       4313.697 -739.79295 9367.188 -3414.94912 12042.344

Akurasi Data Training

# Data Latih
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  59.91345 180.33915 364.32870 417.06315
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                     3.085466e+07
## MSE                     3.506212e+05
## MAPE                    9.301079e+00
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  59.91345 147.98589 251.43995 167.67836
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                     1.276363e+07
## MSE                     1.450412e+05
## MAPE                    5.371431e+00

Hasil akurasi dari data training didapatkan skenario 2 dengan \(λ=0,6\) dan \(\gamma = 0,3\) memiliki hasil yang baik. Meskipun begitu, untuk kedua skenario dapat dikategorikan peramalan yang sangat baik karena memiliki nilai MAPE yang kurang dari 10%

Akurasi Data Testing

# Data Uji
selisihdes1<-ramalandes1$mean-testing$Close
## Warning in `-.default`(ramalandes1$mean, testing$Close): longer object length
## is not a multiple of shorter object length
selisihdes1
## Time Series:
## Start = 89 
## End = 118 
## Frequency = 1 
##  [1] -167.04720 -150.65413 -109.27962  -67.90510 -101.47395   14.84393
##  [7]   56.21845   97.59296 -310.69317 -369.24346 -477.75566 -361.43827
## [13]  -95.23270 -153.78299 -362.22000 -195.94021 -179.54616  111.63988
## [19]  502.75023  918.84203  785.34887  776.76099  868.09790  784.56666
## [25]  800.95973  842.33424  883.70876  850.13992  966.45779 1007.83231
SSEtestingdes1<-sum(selisihdes1^2)
MSEtestingdes1<-SSEtestingdes1/length(testing$Close)
MAPEtestingdes1<-sum(abs(selisihdes1/testing$Close)*100)/length(testing$Close)
## Warning in `/.default`(selisihdes1, testing$Close): longer object length is not
## a multiple of shorter object length
selisihdes2<-ramalandes2$mean-testing$Close
## Warning in `-.default`(ramalandes2$mean, testing$Close): longer object length
## is not a multiple of shorter object length
selisihdes2
## Time Series:
## Start = 89 
## End = 118 
## Frequency = 1 
##  [1]  -336.0187  -394.4326  -427.8651  -461.2975  -569.6733  -528.1624
##  [7]  -561.5949  -595.0273 -1078.1204 -1211.4777 -1394.7969 -1353.2865
## [13] -1161.8879 -1295.2451 -1578.4891 -1487.0163 -1545.4292 -1329.0501
## [19] -1012.7468  -671.4619  -879.7621  -963.1569  -946.6270 -1104.9652
## [25] -1163.3791 -1196.8115 -1230.2440 -1338.6198 -1297.1089 -1330.5414
SSEtestingdes2<-sum(selisihdes2^2)
MSEtestingdes2<-SSEtestingdes2/length(testing$Close)
MAPEtestingdes2<-sum(abs(selisihdes2/testing$Close)*100)/length(testing$Close)
## Warning in `/.default`(selisihdes2, testing$Close): longer object length is not
## a multiple of shorter object length
selisihdesopt<-ramalandesopt$mean-testing$Close
## Warning in `-.default`(ramalandesopt$mean, testing$Close): longer object length
## is not a multiple of shorter object length
selisihdesopt
## Time Series:
## Start = 89 
## End = 118 
## Frequency = 1 
##  [1]  -376.6505  -428.5466  -455.4613  -482.3759  -584.2340  -536.2053
##  [7]  -563.1199  -590.0346 -1066.6099 -1193.4494 -1370.2507 -1322.2225
## [13] -1124.3061 -1251.1456 -1527.8718 -1429.8812 -1481.7763 -1258.8794
## [19]  -936.0583  -588.2556  -790.0380  -866.9150  -843.8673  -995.6877
## [25] -1047.5838 -1074.4985 -1101.4132 -1203.2712 -1155.2425 -1182.1571
SSEtestingdesopt<-sum(selisihdesopt^2)
MSEtestingdesopt<-SSEtestingdesopt/length(testing$Close)
MAPEtestingdesopt<-sum(abs(selisihdesopt/testing$Close)*100)/length(testing$Close)
## Warning in `/.default`(selisihdesopt, testing$Close): longer object length is
## not a multiple of shorter object length
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  9.419937e+06 3.506862e+07 3.118289e+07
## MSE  4.095625e+05 1.524723e+06 1.355778e+06
## MAPE 1.045737e+01 2.314689e+01 2.189011e+01
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   358657.3  409562.5
## ske 2   441268.7 1524722.7
## ske opt 456003.7 1355777.7

Model SES lebih baik daripada model DES karena menghasilkan \(\textit{nilai MSE}\) yang jauh lebih kecil pada dua skenario. Artinya, data tidak menunjukan tren yang kuat

Kesimpulan

Berdasarkan hasil perhitungan akurasi, dapat disimpulkan bahwa metode \(\textit{Single Exponential Smoothing (SES)}\) lebih tepat digunakan dibandingkan Double Exponential Smoothing (DES) karena menghasilkan nilai MSE yang lebih kecil pada data uji, baik dalam skenario parameter tetap maupun optimal. Hal ini menunjukkan bahwa data harga saham harian yang dianalisis cenderung tidak memiliki tren yang signifikan, sehingga penambahan komponen tren pada DES justru tidak meningkatkan kinerja model. Dengan demikian, model peramalan yang lebih sederhana seperti SES sudah cukup efektif dalam menggambarkan pola data dan memberikan hasil ramalan dengan tingkat akurasi yang sangat baik (MAPE < 10%).