#install.packages("forecast")
#install.packages("graphics")
#install.packages("TTR")
#install.packages("TSA"))
library("forecast")
## Warning: package 'forecast' was built under R version 4.2.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library("graphics")
library("TTR")
library("TSA")
## Warning: package 'TSA' was built under R version 4.2.3
## 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
#Data yang digunakan dalam kesempatan kali ini adalah data Harga Gula Pasir di Jawa Barat mingguan Minggu tahun 2022-2023 .
library(rio)
# R program to read a file in table format
# Using read.csv()
myData = read.csv("C:\\MAGANG\\1\\1\\data.csv")
myData
## Minggu Harga
## 1 1 13700
## 2 2 13700
## 3 3 13700
## 4 4 13650
## 5 5 13700
## 6 6 13700
## 7 7 13700
## 8 8 13700
## 9 9 13700
## 10 10 13700
## 11 11 13700
## 12 12 13700
## 13 13 13750
## 14 14 13700
## 15 15 13750
## 16 16 13750
## 17 17 13750
## 18 18 13750
## 19 19 13750
## 20 20 13750
## 21 21 13750
## 22 22 13800
## 23 23 13850
## 24 24 13800
## 25 25 13950
## 26 26 14400
## 27 27 14500
## 28 28 14500
## 29 29 14500
## 30 30 14500
## 31 31 14500
## 32 32 14550
## 33 33 14550
## 34 34 14650
## 35 35 14700
## 36 36 14750
## 37 37 14800
## 38 38 14950
## 39 39 14950
## 40 40 15000
## 41 41 15000
## 42 42 15050
## 43 43 15050
## 44 44 15050
## 45 45 15050
## 46 46 15000
## 47 47 15000
## 48 48 14950
## 49 49 14950
## 50 50 14900
## 51 51 14850
## 52 52 14850
## 53 53 14850
## 54 54 14800
## 55 55 14750
## 56 56 14700
## 57 57 14700
## 58 58 14650
## 59 59 14550
## 60 60 14550
## 61 61 14500
## 62 62 14500
## 63 63 14550
## 64 64 14550
## 65 65 14550
## 66 66 14550
## 67 67 14550
## 68 68 14550
## 69 69 14550
## 70 70 14550
## 71 71 14550
## 72 72 14550
## 73 73 14600
## 74 74 14600
## 75 75 14550
## 76 76 14550
## 77 77 14550
## 78 78 14600
## 79 79 14600
## 80 80 14650
## 81 81 14600
## 82 82 14600
## 83 83 14650
## 84 84 14600
## 85 85 14600
## 86 86 14600
## 87 87 14650
## 88 88 14600
## 89 89 14650
## 90 90 14700
## 91 91 14750
## 92 92 14750
## 93 93 14750
## 94 94 14750
## 95 95 14850
## 96 96 14850
## 97 97 14950
## 98 98 15000
## 99 99 15000
## 100 100 14950
## 101 101 14950
## 102 102 14950
## 103 103 15000
## 104 104 15050
## 105 105 15100
## 106 106 15150
#print(myData)
#data <- import ("https://raw.githubusercontent.com/Dindanafitrianimtd16/Mpdw5/main/Data/data.csv")
str(data)
## function (..., list = character(), package = NULL, lib.loc = NULL, verbose = getOption("verbose"),
## envir = .GlobalEnv, overwrite = TRUE)
dim(data)
## NULL
#str(data): Menampilkan struktur data seperti tipe data dan jumlah kolom. #dim(data): Menampilkan dimensi data (jumlah baris dan kolom).
data.ts <- ts(myData$Harga)
#data.ts: Mengkonversi kolom “Harga” dari myData menjadi objek deret waktu (time series).
summary(data.ts)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 13650 14500 14600 14498 14850 15150
#Memberikan ringkasan statistik dari deret waktu, seperti nilai minimum, maksimum, median, dll.
ts.plot(data.ts, xlab="Mingguan ", ylab="Harga",
main = "Harga Gula Perminggu di Jawa Barat")
points(data.ts)
##terlihat bahwa data berpola trend karena terjadi kenaikan sekuler
jangka panjang (perubahan sistematis selama periode waktu yang panjang)
dalam data. Metode pemulusan yang cocok adalah Double Moving Average
(DMA) dan Double Exponential Smoothing (DES).
#membagi 80% data latih (training) dan 20% data uji (testing)
training_ma <- myData[1:65,]
testing_ma <- myData[66:106,]
train_ma.ts <- ts(training_ma$Harga)
test_ma.ts <- ts(testing_ma$Harga)
#training_ma: Memisahkan 80% data sebagai data latih. #testing_ma: Memisahkan 20% data sebagai data uji. #train_ma.ts: Membuat deret waktu dari data latih. #test_ma.ts: Membuat deret waktu dari data uji
Eksplorasi data dilakukan pada keseluruhan data, data latih serta data uji menggunakan plot data deret waktu.
#eksplorasi keseluruhan data
plot(data.ts, col="yellow",main="Plot semua data")
points(data.ts)
#eksplorasi data latih
plot(train_ma.ts, col="red",main="Plot data latih")
points(train_ma.ts)
#eksplorasi data uji
plot(test_ma.ts, col="blue",main="Plot data uji")
points(test_ma.ts)
Eksplorasi data juga dapat dilakukan menggunakan package
ggplot2 .
#Eksplorasi dengan GGPLOT
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
ggplot() +
geom_line(data = training_ma, aes(x = Minggu, y = Harga, col = "Data Latih")) +
geom_line(data = testing_ma, aes(x = Minggu, y = Harga, col = "Data Uji")) +
labs(x = "Minggu", y = "Harga", color = "Legend") +
scale_colour_manual(name="Keterangan:", breaks = c("Data Latih", "Data Uji"),
values = c("orange", "red")) +
theme_bw() + theme(legend.position = "bottom",
plot.caption = element_text(hjust=0.5, size=12))
Metode pemulusan Double Moving Average (DMA) pada dasarnya mirip dengan SMA. Namun demikian, metode ini lebih cocok digunakan untuk pola data trend. Proses pemulusan dengan rata rata dalam metode ini dilakukan sebanyak 2 kali.
data.sma <- SMA(train_ma.ts, n=4)
dma <- SMA(data.sma, n = 4)
At <- 2*data.sma - dma
Bt <- 2/(4-1)*(data.sma - dma)
data.dma<- At+Bt
data.ramal2<- c(NA, data.dma)
t = 1:41
f = c()
for (i in t) {
f[i] = At[length(At)] + Bt[length(Bt)]*(i)
}
data.gab2 <- cbind(aktual = c(train_ma.ts,rep(NA,41)), pemulusan1 = c(data.sma,rep(NA,41)),pemulusan2 = c(data.dma, rep(NA,41)),At = c(At, rep(NA,41)), Bt = c(Bt,rep(NA,41)),ramalan = c(data.ramal2, f[-1]))
data.gab2
## aktual pemulusan1 pemulusan2 At Bt ramalan
## [1,] 13700 NA NA NA NA NA
## [2,] 13700 NA NA NA NA NA
## [3,] 13700 NA NA NA NA NA
## [4,] 13650 13687.5 NA NA NA NA
## [5,] 13700 13687.5 NA NA NA NA
## [6,] 13700 13687.5 NA NA NA NA
## [7,] 13700 13687.5 13687.50 13687.50 0.000000 NA
## [8,] 13700 13700.0 13715.62 13709.38 6.250000 13687.50
## [9,] 13700 13700.0 13710.42 13706.25 4.166667 13715.62
## [10,] 13700 13700.0 13705.21 13703.12 2.083333 13710.42
## [11,] 13700 13700.0 13700.00 13700.00 0.000000 13705.21
## [12,] 13700 13700.0 13700.00 13700.00 0.000000 13700.00
## [13,] 13750 13712.5 13728.12 13721.88 6.250000 13700.00
## [14,] 13700 13712.5 13722.92 13718.75 4.166667 13728.12
## [15,] 13750 13725.0 13745.83 13737.50 8.333333 13722.92
## [16,] 13750 13737.5 13763.54 13753.12 10.416667 13745.83
## [17,] 13750 13737.5 13753.12 13746.88 6.250000 13763.54
## [18,] 13750 13750.0 13770.83 13762.50 8.333333 13753.12
## [19,] 13750 13750.0 13760.42 13756.25 4.166667 13770.83
## [20,] 13750 13750.0 13755.21 13753.12 2.083333 13760.42
## [21,] 13750 13750.0 13750.00 13750.00 0.000000 13755.21
## [22,] 13800 13762.5 13778.12 13771.88 6.250000 13750.00
## [23,] 13850 13787.5 13829.17 13812.50 16.666667 13778.12
## [24,] 13800 13800.0 13841.67 13825.00 16.666667 13829.17
## [25,] 13950 13850.0 13933.33 13900.00 33.333333 13841.67
## [26,] 14400 14000.0 14234.38 14140.62 93.750000 13933.33
## [27,] 14500 14162.5 14511.46 14371.88 139.583333 14234.38
## [28,] 14500 14337.5 14754.17 14587.50 166.666667 14511.46
## [29,] 14500 14475.0 14860.42 14706.25 154.166667 14754.17
## [30,] 14500 14500.0 14718.75 14631.25 87.500000 14860.42
## [31,] 14500 14500.0 14578.12 14546.88 31.250000 14718.75
## [32,] 14550 14512.5 14538.54 14528.12 10.416667 14578.12
## [33,] 14550 14525.0 14551.04 14540.62 10.416667 14538.54
## [34,] 14650 14562.5 14625.00 14600.00 25.000000 14551.04
## [35,] 14700 14612.5 14711.46 14671.88 39.583333 14625.00
## [36,] 14750 14662.5 14782.29 14734.38 47.916667 14711.46
## [37,] 14800 14725.0 14865.62 14809.38 56.250000 14782.29
## [38,] 14950 14800.0 14966.67 14900.00 66.666667 14865.62
## [39,] 14950 14862.5 15029.17 14962.50 66.666667 14966.67
## [40,] 15000 14925.0 15086.46 15021.88 64.583333 15029.17
## [41,] 15000 14975.0 15115.62 15059.38 56.250000 15086.46
## [42,] 15050 15000.0 15098.96 15059.38 39.583333 15115.62
## [43,] 15050 15025.0 15097.92 15068.75 29.166667 15098.96
## [44,] 15050 15037.5 15084.38 15065.62 18.750000 15097.92
## [45,] 15050 15050.0 15086.46 15071.88 14.583333 15084.38
## [46,] 15000 15037.5 15037.50 15037.50 0.000000 15086.46
## [47,] 15000 15025.0 15004.17 15012.50 -8.333333 15037.50
## [48,] 14950 15000.0 14953.12 14971.88 -18.750000 15004.17
## [49,] 14950 14975.0 14917.71 14940.62 -22.916667 14953.12
## [50,] 14900 14950.0 14887.50 14912.50 -25.000000 14917.71
## [51,] 14850 14912.5 14834.38 14865.62 -31.250000 14887.50
## [52,] 14850 14887.5 14814.58 14843.75 -29.166667 14834.38
## [53,] 14850 14862.5 14794.79 14821.88 -27.083333 14814.58
## [54,] 14800 14837.5 14775.00 14800.00 -25.000000 14794.79
## [55,] 14750 14812.5 14750.00 14775.00 -25.000000 14775.00
## [56,] 14700 14775.0 14696.88 14728.12 -31.250000 14750.00
## [57,] 14700 14737.5 14648.96 14684.38 -35.416667 14696.88
## [58,] 14650 14700.0 14606.25 14643.75 -37.500000 14648.96
## [59,] 14550 14650.0 14540.62 14584.38 -43.750000 14606.25
## [60,] 14550 14612.5 14508.33 14550.00 -41.666667 14540.62
## [61,] 14500 14562.5 14447.92 14493.75 -45.833333 14508.33
## [62,] 14500 14525.0 14420.83 14462.50 -41.666667 14447.92
## [63,] 14550 14525.0 14472.92 14493.75 -20.833333 14420.83
## [64,] 14550 14525.0 14509.38 14515.62 -6.250000 14472.92
## [65,] 14550 14537.5 14553.12 14546.88 6.250000 14509.38
## [66,] NA NA NA NA NA 14553.12
## [67,] NA NA NA NA NA 14559.38
## [68,] NA NA NA NA NA 14565.62
## [69,] NA NA NA NA NA 14571.88
## [70,] NA NA NA NA NA 14578.12
## [71,] NA NA NA NA NA 14584.38
## [72,] NA NA NA NA NA 14590.62
## [73,] NA NA NA NA NA 14596.88
## [74,] NA NA NA NA NA 14603.12
## [75,] NA NA NA NA NA 14609.38
## [76,] NA NA NA NA NA 14615.62
## [77,] NA NA NA NA NA 14621.88
## [78,] NA NA NA NA NA 14628.12
## [79,] NA NA NA NA NA 14634.38
## [80,] NA NA NA NA NA 14640.62
## [81,] NA NA NA NA NA 14646.88
## [82,] NA NA NA NA NA 14653.12
## [83,] NA NA NA NA NA 14659.38
## [84,] NA NA NA NA NA 14665.62
## [85,] NA NA NA NA NA 14671.88
## [86,] NA NA NA NA NA 14678.12
## [87,] NA NA NA NA NA 14684.38
## [88,] NA NA NA NA NA 14690.62
## [89,] NA NA NA NA NA 14696.88
## [90,] NA NA NA NA NA 14703.12
## [91,] NA NA NA NA NA 14709.38
## [92,] NA NA NA NA NA 14715.62
## [93,] NA NA NA NA NA 14721.88
## [94,] NA NA NA NA NA 14728.12
## [95,] NA NA NA NA NA 14734.38
## [96,] NA NA NA NA NA 14740.62
## [97,] NA NA NA NA NA 14746.88
## [98,] NA NA NA NA NA 14753.12
## [99,] NA NA NA NA NA 14759.38
## [100,] NA NA NA NA NA 14765.62
## [101,] NA NA NA NA NA 14771.88
## [102,] NA NA NA NA NA 14778.12
## [103,] NA NA NA NA NA 14784.38
## [104,] NA NA NA NA NA 14790.62
## [105,] NA NA NA NA NA 14796.88
## [106,] NA NA NA NA NA 14803.12
ts.plot(data.ts, xlab="Minggu ", ylab="Harga", main= "DMA N=4 Data Harga Gula Per Minggu di Jawa Barat")
points(data.ts)
lines(data.gab2[,3],col="blue",lwd=2)
lines(data.gab2[,6],col="red",lwd=2)
legend("topleft",c("data aktual","data pemulusan","data peramalan"), lty=8, col=c("black","blue","red"), cex=0.8)
error_train.dma = train_ma.ts-data.ramal2[1:length(train_ma.ts)]
SSE_train.dma = sum(error_train.dma[8:length(train_ma.ts)]^2)
MSE_train.dma = mean(error_train.dma[8:length(train_ma.ts)]^2)
MAPE_train.dma = mean(abs((error_train.dma[8:length(train_ma.ts)]/train_ma.ts[8:length(train_ma.ts)])*100))
akurasi_train.dma <- matrix(c(SSE_train.dma, MSE_train.dma, MAPE_train.dma))
row.names(akurasi_train.dma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_train.dma) <- c("Akurasi m = 4")
akurasi_train.dma
## Akurasi m = 4
## SSE 6.489714e+05
## MSE 1.118916e+04
## MAPE 4.125129e-01
#Perhitungan akurasi menggunakan data latih menghasilkan nilai MAPE yang kurang dari 10% sehingga nilai akurasi ini dapat dikategorikan sebagai sangat baik.
error_test.dma = test_ma.ts-data.gab2[66:106,6]
SSE_test.dma = sum(error_test.dma^2)
MSE_test.dma = mean(error_test.dma^2)
MAPE_test.dma = mean(abs((error_test.dma/test_ma.ts*100)))
akurasi_test.dma <- matrix(c(SSE_test.dma, MSE_test.dma, MAPE_test.dma))
row.names(akurasi_test.dma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_test.dma) <- c("Akurasi m = 4")
akurasi_test.dma
## Akurasi m = 4
## SSE 6.625879e+05
## MSE 1.616068e+04
## MAPE 5.943042e-01
#Perhitungan akurasi menggunakan data uji menghasilkan nilai MAPE yang kurang dari 10% sehingga nilai akurasi ini dapat dikategorikan sebagai sangat baik.
Metode Exponential Smoothing adalah metode pemulusan dengan melakukan pembobotan menurun secara eksponensial. Nilai yang lebih baru diberi bobot yang lebih besar dari nilai terdahulu. Terdapat satu atau lebih parameter pemulusan yang ditentukan secara eksplisit dan hasil pemilihan parameter tersebut akan menentukan bobot yang akan diberikan pada nilai pengamatan.
Pembagian data latih dan data uji dilakukan dengan perbandingan 61% data latih dan 39% data uji.
#membagi 61% data latih (training) dan 39% data uji (testing)
training <- myData[1:65,]
testing <- myData[66:106,]
train.ts <- ts(training$Harga)
test.ts <- ts(testing$Harga)
Eksplorasi dilakukan dengan membuat plot data deret waktu untuk keseluruhan data, data latih, dan data uji.
#eksplorasi data
plot(data.ts, col="black",main="Plot semua data")
points(data.ts)
plot(train.ts, col="yellow",main="Plot data latih")
points(train.ts)
plot(test.ts, col="green",main="Plot data uji")
points(test.ts)
Eksplorasi data juga dapat dilakukan menggunakan package
ggplot2 .
#Eksplorasi dengan GGPLOT
library(ggplot2)
ggplot() +
geom_line(data = training, aes(x = Minggu, y = Harga, col = "Data Latih")) +
geom_line(data = testing, aes(x = Minggu, y = Harga, col = "Data Uji")) +
labs(x = "Minggu Waktu", y = "Harga Rata-rata", color = "Legend") +
scale_colour_manual(name="Keterangan:", breaks = c("Data Latih", "Data Uji"),
values = c("brown", "red")) +
theme_bw() + theme(legend.position = "bottom",
plot.caption = element_text(hjust=0.5, size=12))
#Metode pemulusan DES digunakan untuk data yang memiliki pola tren. Metode DES adalah metode semacam SES, hanya saja dilakukan dua kali, yaitu pertama untuk tahapan ‘level’ dan kedua untuk tahapan ‘tren’. Pemulusan menggunakan metode ini akan menghasilkan peramalan tidak konstan untuk Minggu berikutnya.
#beta=0.2 dan alpha=0.2
des.1<- HoltWinters(train.ts, gamma = FALSE, beta = 0.2, alpha = 0.2)
plot(des.1)
#ramalan
ramalandes1<- forecast(des.1, h=41)
ramalandes1
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 66 14404.96 14222.54 14587.38 14125.98 14683.95
## 67 14374.30 14186.70 14561.90 14087.39 14661.21
## 68 14343.63 14149.20 14538.06 14046.28 14640.99
## 69 14312.97 14109.96 14515.97 14002.50 14623.43
## 70 14282.30 14068.94 14495.66 13955.99 14608.61
## 71 14251.64 14026.14 14477.13 13906.77 14596.50
## 72 14220.97 13981.62 14460.32 13854.91 14587.03
## 73 14190.31 13935.44 14445.17 13800.52 14580.09
## 74 14159.64 13887.70 14431.59 13743.74 14575.55
## 75 14128.98 13838.48 14419.48 13684.69 14573.26
## 76 14098.31 13787.88 14408.75 13623.54 14573.08
## 77 14067.65 13735.98 14399.31 13560.41 14574.88
## 78 14036.98 13682.88 14391.08 13495.43 14578.53
## 79 14006.32 13628.64 14383.99 13428.71 14583.92
## 80 13975.65 13573.33 14377.97 13360.36 14590.94
## 81 13944.99 13517.02 14372.95 13290.47 14599.51
## 82 13914.32 13459.75 14368.89 13219.11 14609.53
## 83 13883.66 13401.57 14365.74 13146.37 14620.94
## 84 13852.99 13342.53 14363.45 13072.31 14633.68
## 85 13822.33 13282.66 14361.99 12996.98 14647.67
## 86 13791.66 13222.00 14361.32 12920.43 14662.89
## 87 13761.00 13160.57 14361.42 12842.73 14679.27
## 88 13730.33 13098.41 14362.25 12763.89 14696.77
## 89 13699.67 13035.54 14363.79 12683.97 14715.36
## 90 13669.00 12971.98 14366.03 12602.99 14735.01
## 91 13638.34 12907.74 14368.93 12520.99 14755.68
## 92 13607.67 12842.86 14372.48 12438.00 14777.34
## 93 13577.01 12777.35 14376.66 12354.04 14799.97
## 94 13546.34 12711.22 14381.46 12269.13 14823.55
## 95 13515.68 12644.48 14386.87 12183.30 14848.05
## 96 13485.01 12577.15 14392.87 12096.56 14873.46
## 97 13454.35 12509.25 14399.44 12008.94 14899.75
## 98 13423.68 12440.78 14406.58 11920.46 14926.90
## 99 13393.01 12371.75 14414.28 11831.13 14954.90
## 100 13362.35 12302.18 14422.52 11740.96 14983.74
## 101 13331.68 12232.07 14431.30 11649.97 15013.40
## 102 13301.02 12161.43 14440.60 11558.17 15043.86
## 103 13270.35 12090.28 14450.43 11465.59 15075.12
## 104 13239.69 12018.62 14460.76 11372.22 15107.16
## 105 13209.02 11946.45 14471.60 11278.08 15139.97
## 106 13178.36 11873.78 14482.94 11183.18 15173.54
#beta=0.3 dan aplha=0.6
des.2<- HoltWinters(train.ts, gamma = FALSE, beta = 0.3, alpha = 0.6)
plot(des.2)
#ramalan
ramalandes2<- forecast(des.2, h=41)
ramalandes2
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 66 14537.20 14429.99 14644.41 14373.239 14701.16
## 67 14536.15 14400.19 14672.12 14328.212 14744.09
## 68 14535.10 14364.58 14705.63 14274.307 14795.90
## 69 14534.06 14324.26 14743.86 14213.194 14854.92
## 70 14533.01 14279.94 14786.07 14145.975 14920.04
## 71 14531.96 14232.12 14831.80 14073.394 14990.52
## 72 14530.91 14181.13 14880.69 13995.974 15065.85
## 73 14529.86 14127.24 14932.49 13914.100 15145.62
## 74 14528.81 14070.62 14987.00 13828.071 15229.55
## 75 14527.76 14011.45 15044.08 13738.125 15317.40
## 76 14526.72 13949.84 15103.59 13644.459 15408.97
## 77 14525.67 13885.91 15165.43 13547.238 15504.10
## 78 14524.62 13819.75 15229.49 13446.607 15602.63
## 79 14523.57 13751.43 15295.71 13342.691 15704.45
## 80 14522.52 13681.05 15364.00 13235.600 15809.44
## 81 14521.47 13608.65 15434.30 13125.433 15917.51
## 82 14520.43 13534.30 15506.55 13012.282 16028.57
## 83 14519.38 13458.06 15580.70 12896.228 16142.53
## 84 14518.33 13379.96 15656.70 12777.345 16259.31
## 85 14517.28 13300.06 15734.50 12655.704 16378.86
## 86 14516.23 13218.40 15814.06 12531.367 16501.10
## 87 14515.18 13135.01 15895.35 12404.395 16625.97
## 88 14514.13 13049.94 15978.33 12274.843 16753.43
## 89 14513.09 12963.22 16062.96 12142.764 16883.41
## 90 14512.04 12874.87 16149.21 12008.206 17015.87
## 91 14510.99 12784.93 16237.05 11871.215 17150.76
## 92 14509.94 12693.44 16326.45 11731.835 17288.05
## 93 14508.89 12600.40 16417.38 11590.108 17427.68
## 94 14507.84 12505.86 16509.83 11446.072 17569.62
## 95 14506.80 12409.83 16603.76 11299.764 17713.83
## 96 14505.75 12312.34 16699.15 11151.221 17860.27
## 97 14504.70 12213.41 16795.99 11000.475 18008.92
## 98 14503.65 12113.06 16894.24 10847.559 18159.74
## 99 14502.60 12011.31 16993.89 10692.505 18312.70
## 100 14501.55 11908.19 17094.92 10535.340 18467.77
## 101 14500.50 11803.70 17197.31 10376.095 18624.91
## 102 14499.46 11697.87 17301.05 10214.796 18784.12
## 103 14498.41 11590.71 17406.11 10051.469 18945.35
## 104 14497.36 11482.24 17512.47 9886.139 19108.58
## 105 14496.31 11372.48 17620.14 9718.831 19273.79
## 106 14495.26 11261.45 17729.08 9549.568 19440.96
Nilai y adalah nilai data deret waktu,
gamma adalah parameter pemulusan untuk komponen musiman,
beta adalah parameter pemulusan untuk tren, dan
alpha adalah parameter pemulusan untuk stasioner, serta
h adalah banyaknya Minggu yang akan diramalkan.
Selanjutnya jika ingin membandingkan plot data latih dan data uji adalah sebagai berikut.
#Visually evaluate the prediction
plot(data.ts)
lines(des.1$fitted[,1], lty=2, col="orange")
lines(ramalandes1$mean, col="red")
Untuk mendapatkan nilai parameter optimum dari DES, argumen
alpha dan beta dapat dibuat NULL
seperti berikut.
#Lamda dan gamma optimum
des.opt<- HoltWinters(train.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.1770138
## gamma: FALSE
##
## Coefficients:
## [,1]
## a 14550.00000
## b -10.73672
plot(des.opt)
#ramalan
ramalandesopt<- forecast(des.opt, h=41)
ramalandesopt
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 66 14539.26 14448.93 14629.60 14401.105 14677.42
## 67 14528.53 14389.00 14668.05 14315.146 14741.91
## 68 14517.79 14332.24 14703.34 14234.018 14801.56
## 69 14507.05 14275.63 14738.48 14153.119 14860.99
## 70 14496.32 14218.17 14774.46 14070.926 14921.71
## 71 14485.58 14159.44 14811.72 13986.796 14984.36
## 72 14474.84 14099.25 14850.43 13900.430 15049.26
## 73 14464.11 14037.51 14890.70 13811.690 15116.52
## 74 14453.37 13974.18 14932.56 13720.517 15186.22
## 75 14442.63 13909.25 14976.01 13626.897 15258.37
## 76 14431.90 13842.73 15021.06 13530.842 15332.95
## 77 14421.16 13774.63 15067.69 13432.378 15409.94
## 78 14410.42 13704.98 15115.87 13331.538 15489.31
## 79 14399.69 13633.80 15165.58 13228.359 15571.01
## 80 14388.95 13561.11 15216.79 13122.882 15655.02
## 81 14378.21 13486.95 15269.47 13015.147 15741.28
## 82 14367.48 13411.34 15323.61 12905.193 15829.76
## 83 14356.74 13334.31 15379.17 12793.062 15920.42
## 84 14346.00 13255.87 15436.13 12678.792 16013.21
## 85 14335.27 13176.06 15494.47 12562.419 16108.11
## 86 14324.53 13094.90 15554.15 12443.981 16205.08
## 87 14313.79 13012.42 15615.17 12323.511 16304.07
## 88 14303.06 12928.62 15677.49 12201.045 16405.07
## 89 14292.32 12843.55 15741.09 12076.613 16508.02
## 90 14281.58 12757.20 15805.96 11950.247 16612.92
## 91 14270.85 12669.62 15872.07 11821.976 16719.71
## 92 14260.11 12580.80 15939.42 11691.830 16828.39
## 93 14249.37 12490.78 16007.97 11559.835 16938.91
## 94 14238.64 12399.56 16077.71 11426.019 17051.25
## 95 14227.90 12307.17 16148.62 11290.405 17165.39
## 96 14217.16 12213.63 16220.70 11153.020 17281.30
## 97 14206.42 12118.94 16293.91 11013.886 17398.96
## 98 14195.69 12023.12 16368.26 10873.026 17518.35
## 99 14184.95 11926.18 16443.72 10730.463 17639.44
## 100 14174.21 11828.15 16520.28 10586.216 17762.21
## 101 14163.48 11729.03 16597.93 10440.307 17886.65
## 102 14152.74 11628.83 16676.65 10292.756 18012.73
## 103 14142.00 11527.58 16756.43 10143.580 18140.43
## 104 14131.27 11425.27 16837.27 9992.800 18269.74
## 105 14120.53 11321.92 16919.14 9840.432 18400.63
## 106 14109.79 11217.55 17002.04 9686.493 18533.10
#Akurasi Data Training
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 0.00 -50.00 12.00 11.12
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 1.265543e+06
## MSE 1.946989e+04
## MAPE 6.210092e-01
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 0.00 -50.00 39.00 17.58
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 4.338883e+05
## MSE 6.675204e+03
## MAPE 3.303591e-01
Hasil akurasi dari data latih didapatkan skenario 2 dengan lamda=0.6 dan gamma=0.3 memiliki hasil yang lebih baik. Hal tersebut dapat dilihat berdasarkan nilai SSE, MSE,dan MAPE nya yang bernilai lebih kecil. Namun, kedua skenario tersebut dapat dikategorikan peramalan sangat baik berdasarkan nilai MAPE-nya.
#Akurasi Data Testing
selisihdes1 <- ramalandes1$mean - testing$Harga
selisihdes1
## Time Series:
## Start = 66
## End = 106
## Frequency = 1
## [1] -145.0380 -175.7030 -206.3681 -237.0331 -267.6982 -298.3633
## [7] -329.0283 -409.6934 -440.3585 -421.0235 -451.6886 -482.3537
## [13] -563.0187 -593.6838 -674.3488 -655.0139 -685.6790 -766.3440
## [19] -747.0091 -777.6742 -808.3392 -889.0043 -869.6693 -950.3344
## [25] -1030.9995 -1111.6645 -1142.3296 -1172.9947 -1203.6597 -1334.3248
## [31] -1364.9899 -1495.6549 -1576.3200 -1606.9850 -1587.6501 -1618.3152
## [37] -1648.9802 -1729.6453 -1810.3104 -1890.9754 -1971.6405
SSEtestingdes1<-sum(selisihdes1^2)
MSEtestingdes1<-SSEtestingdes1/length(testing$Harga)
MAPEtestingdes1<-sum(abs(selisihdes1/testing$Harga)*100)/length(testing$Harga)
selisihdes2<-ramalandes2$mean-testing$Harga
selisihdes2
## Time Series:
## Start = 66
## End = 106
## Frequency = 1
## [1] -12.79957 -13.84801 -14.89646 -15.94490 -16.99335 -18.04179
## [7] -19.09023 -70.13868 -71.18712 -22.23557 -23.28401 -24.33245
## [13] -75.38090 -76.42934 -127.47778 -78.52623 -79.57467 -130.62312
## [19] -81.67156 -82.72000 -83.76845 -134.81689 -85.86534 -136.91378
## [25] -187.96222 -239.01067 -240.05911 -241.10755 -242.15600 -343.20444
## [31] -344.25289 -445.30133 -496.34977 -497.39822 -448.44666 -449.49511
## [37] -450.54355 -501.59199 -552.64044 -603.68888 -654.73732
SSEtestingdes2<-sum(selisihdes2^2)
MSEtestingdes2<-SSEtestingdes2/length(testing$Harga)
MAPEtestingdes2<-sum(abs(selisihdes2/testing$Harga)*100)/length(testing$Harga)
selisihdesopt<-ramalandesopt$mean-testing$Harga
selisihdesopt
## Time Series:
## Start = 66
## End = 106
## Frequency = 1
## [1] -10.73672 -21.47344 -32.21017 -42.94689 -53.68361 -64.42033
## [7] -75.15705 -135.89378 -146.63050 -107.36722 -118.10394 -128.84066
## [13] -189.57739 -200.31411 -261.05083 -221.78755 -232.52427 -293.26100
## [19] -253.99772 -264.73444 -275.47116 -336.20788 -296.94460 -357.68133
## [25] -418.41805 -479.15477 -489.89149 -500.62821 -511.36494 -622.10166
## [31] -632.83838 -743.57510 -804.31182 -815.04855 -775.78527 -786.52199
## [37] -797.25871 -857.99543 -918.73216 -979.46888 -1040.20560
SSEtestingdesopt<-sum(selisihdesopt^2)
MSEtestingdesopt<-SSEtestingdesopt/length(testing$Harga)
MAPEtestingdesopt<-sum(abs(selisihdesopt/testing$Harga)*100)/length(testing$Harga)
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 4.723896e+07 3.287069e+06 1.025738e+07
## MSE 1.152170e+06 8.017243e+04 2.501800e+05
## MAPE 6.276898e+00 1.381311e+00 2.674876e+00
Hasil akurasi dari data latih DES Opt memiliki hasil
yang lebih baik karena memiliki nilai SSE, MSE, dan MAPE yang lebih
kecil dibandingkan hasil akurasi pada DES skenario 1 dan 2. Namun,
ketiga skenario tersebut dapat dikategorikan peramalan sangat baik
berdasarkan nilai MAPE-nya.
perbandingan <-
matrix(c(SSE_test.dma, MSE_test.dma, MAPE_test.dma, SSEtestingdesopt,MSEtestingdesopt,MAPEtestingdesopt),
nrow=3,ncol=2)
row.names(perbandingan)<- c("SSE", "MSE", "MAPE")
colnames(perbandingan) <- c("DMA","DES")
perbandingan
## DMA DES
## SSE 6.625879e+05 1.025738e+07
## MSE 1.616068e+04 2.501800e+05
## MAPE 5.943042e-01 2.674876e+00
Kedua metode dapat dibandingkan dengan menggunakan ukuran akurasi yang sama. Berdasarkan nilai SSE, MSE, dan MAPE, metode DMA lebih baik karena memiliki ukuran akurasi yang lebih kecil dibandingkan dengan metode DES. Berdasarkan nilai MAPE nya kedua metode tersebut memberikan peramalan dengan akurasi yang sangat baik karena kurang dari 10%
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
You can also embed plots, for example:
Note that the echo = FALSE parameter was added to the
code chunk to prevent printing of the R code that generated the
plot.