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
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
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)
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))
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.
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.
training <- df[1:n_train, ]
testing <- df[(n_train+1):n, ]
train.ts <- ts(training$Close)
test.ts <- ts(testing$Close)
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))
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
# 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.
# 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.
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
# 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%
# 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
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%).