Pada bagian ini akan dijelaskan data yang akan digunakan, pembersihan data, serta referensi sumber dari data tersebut.
Data yang digunakan berasal dari tabel data produksi bulanan perkebunan besar dalam satuan ton. Pada data tersebut terdapat beberapa jenis tanaman perkebunan besar diantaranya adalah karet kering, minyak sawit, biji sawit, coklat, kopi, teh, kulit kina, gula tebu, serta tembakau. Data tersebut tercatat produksinya dengan periode bulanan, yakni produksi bulan januari, produksi bulan februari, dan seterusnya dalam setiap satu tahunnya.
Data yang akan dipakai adalah data produksi bulanan untuk tanaman perkebunan karet sawit mulai dari tahun 2019 hingga 2018. Pada data tersebut akan diambil setiap bulannya selama 10 tahun, sehingga didapatkan: 10 tahun x 12 bulan = 120 periode data produksi karet kering.
Sebelum dianalisis menggunakan bantuan R dengan interface RStudio, maka data terlebih dahulu dirapihkan pada Excel dan disimpan pada github dengan format data csv.
Berikut ini merupakan referensi tabel seutuhnya (penuh) yang digunakan.
Tahun 2009: https://www.bps.go.id/indicator/54/761/10/produksi-bulanan-perkebunan-besar.html
Tahun 2010: https://www.bps.go.id/indicator/54/761/9/produksi-bulanan-perkebunan-besar.html
Tahun 2011: https://www.bps.go.id/indicator/54/761/8/produksi-bulanan-perkebunan-besar.html
Tahun 2012: https://www.bps.go.id/indicator/54/761/7/produksi-bulanan-perkebunan-besar.html
Tahun 2013: https://www.bps.go.id/indicator/54/761/6/produksi-bulanan-perkebunan-besar.html
Tahun 2014: https://www.bps.go.id/indicator/54/761/5/produksi-bulanan-perkebunan-besar.html
Tahun 2015: https://www.bps.go.id/indicator/54/761/4/produksi-bulanan-perkebunan-besar.html
Tahun 2016: https://www.bps.go.id/indicator/54/761/3/produksi-bulanan-perkebunan-besar.html
Tahun 2017: https://www.bps.go.id/indicator/54/761/2/produksi-bulanan-perkebunan-besar.html
Tahun 2018: https://www.bps.go.id/indicator/54/761/1/produksi-bulanan-perkebunan-besar.html
Package R yang akan digunakan untuk tugas praktikum pekan
pertama dari mata kuliah Metode Peramalan Deret Waktu (MPDW) adalah:
forecast, graphics, TTR,
TSA . Jika packages tersebut belum tersedia, maka
dilakukan tahap penginstallan terlebih dahulu.
#install.packages("forecast")
#install.packages("graphics")
#install.packages("TTR")
#install.packages("TSA")
Jika packages tersebut sudah ada, maka akan dipanggil library package tersebut.
library("forecast")
## Warning: package 'forecast' was built under R version 4.3.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.3.1
library("TSA")
## Warning: package 'TSA' was built under R version 4.3.1
## Registered S3 methods overwritten by 'TSA':
## method from
## fitted.Arima forecast
## plot.Arima forecast
##
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
##
## acf, arima
## The following object is masked from 'package:utils':
##
## tar
Menginstall package library rio terlebih dahulu sebelum digunakan apabila belum tersedia.
#install.packages("rio")
Memasukkan data yang akan digunakan berbentuk csv dari link github yang tersedia.
library(rio)
## Warning: package 'rio' was built under R version 4.3.1
dt.set <- import("https://raw.githubusercontent.com/jonathanmarjonoxz/MPDW/main/Responsi1/Data_ProduksiKaretKering.csv")
Melihat data menggunakan fungsi View(), struktur data
menggunakan fungsi str(), dan dimensi data menggunakan
fungsi dim().
View(dt.set)
str(dt.set)
## 'data.frame': 120 obs. of 2 variables:
## $ Periode : int 1 2 3 4 5 6 7 8 9 10 ...
## $ Produksi Karet Kering: num 50 45.5 40.1 38.8 47.2 43.5 45.8 41.7 38.4 38.2 ...
dim(dt.set)
## [1] 120 2
Mengubah data agar terbaca sebagai data deret waktu dengan fungsi
ts().
dt.set.ts <- ts(dt.set$`Produksi Karet Kering`)
Menampilkan ringkasan data.
Berikut hasil ringkasan datanya, dengan nilai terkecil 31.00, kuartil1 40.15, median 45.52, mean 48.24, serta kuartil3 51.88, dan maksimum data 85.09.
summary(dt.set.ts)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 31.00 40.15 45.52 48.24 51.88 85.09
Membuat plot data deret waktu, saat plot dibuat terlihat ada sedikit perbedaan pola data dari periode data ke 1-60 dengan periode data ke 61-120.
ts.plot(dt.set.ts, xlab="Time Period", ylab="Produksi Karet Kering (Ton)",
main = "Time Series Plot")
points(dt.set.ts)
Melihat plot data deret waktu dengan lebih detail dengan cara memberikan sebuah pembatasan dengan batas masing-masing 60 data pada dt.set yang dimiliki, sehingga dibagi 50% pada data deretwaktu, serta 50% sisanya pada data deretwaktu2.
deretwaktu <- dt.set[1:60,]
deretwaktu2 <- dt.set[61:120,]
deretwaktu.ts <- ts(deretwaktu$`Produksi Karet Kering`)
deretwaktu2.ts <- ts(deretwaktu2$`Produksi Karet Kering`)
Kemudian dibuat plot dari data deretwaktu, sehingga terlihat pada plot ini data terlihat mengikuti pola trend.
ts.plot(deretwaktu.ts, xlab="Time Period", ylab="Produksi Karet Kering (Ton)",
main = "Time Series Plot")
points(deretwaktu.ts)
Serta dibuat plot dari data deretwaktu2. Namun, pada data deretwaktu2 terlihat data serupa mengikuti pola musiman.
ts.plot(deretwaktu2.ts, xlab="Time Period", ylab="Produksi Karet Kering (Ton)",
main = "Time Series Plot")
points(deretwaktu2.ts)
Sehingga akan dicoba secara lebih detail untuk pemulusan analisis deret waktu yang memiliki pola data trend serta pola musiman, namun dalam analisis kali ini data tetap tidak akan dipisah, melainkan dengan memanfaatkan 80% data untuk meramal serta 20% data yang diramal (yang dilakukan forecast).
Pembagian data menjadi dua dari dt.set, sehingga dibagi ke dalam dt.ramal dan dt.uji yang dilakukan dengan perbandingan 80% dt.ramal dan 20% dt.uji.
brapadtramal = (80/100)*nrow(dt.set)
brapadtramal
## [1] 96
brapadtuji = (20/100)*nrow(dt.set)
brapadtuji
## [1] 24
Berdasarkan perhitungan dengan rumus di atas diperoleh sebanyak 96 periode untuk data ramal serta 24 periode untuk data uji. Oleh karena itu data ramal akan diambil dari baris 1-96 pada dt.set, serta data uji akan menggunakan baris berikutnya yakni 97-120 pada dt.set.
Berikut sedikit penjelasan untuk penamaannya:
data ramal = dt.ramal = dt.forecast = data yang dimilki untuk meramal.
data uji = dt.uji = dt.test = data yang akan diramal.
#Membagi data dt.ramal dan dt.uji dengan 80% dan 20%
dt.ramal_ma <- dt.set[1:96,] #Periode 1-96
dt.uji_ma <- dt.set[97:120,] #Periode 97-120
#Mengubah agar terbaca sebagai data deret waktu
dt.ramal_ma.ts <- ts(dt.ramal_ma$`Produksi Karet Kering`)
dt.uji_ma.ts <- ts(dt.uji_ma$`Produksi Karet Kering`)
Eksplorasi data dilakukan pada keseluruhan data dt.set, dt.ramal, serta dt.uji menggunakan plot data deret waktu.
#Eksplorasi pada keseluruhan data
plot(dt.set.ts, col="orchid",main="Plot Semua Data")
points(dt.set.ts)
#Eksplorasi dt.ramal (periode 1-96)
plot(dt.ramal_ma.ts, col="dodgerblue4",main="Plot Data Ramal")
points(dt.ramal_ma.ts)
#Eksplorasi dt.uji (periode 97-120)
plot(dt.uji_ma.ts, col="dodgerblue4",main="Plot Data Uji")
points(dt.uji_ma.ts)
Eksplorasi data juga dapat dilakukan menggunakan package
ggplot2 dengan terlebih dahulu memanggil library
package ggplot2.
#Eksplorasi dengan package GGPLOT
library(ggplot2)
ggplot() +
geom_line(data = dt.ramal_ma, aes(x = Periode, y =`Produksi Karet Kering`, col = "Data Ramal")) +
geom_line(data = dt.uji_ma, aes(x = Periode, y =`Produksi Karet Kering`, col = "Data Uji")) +
labs(x = "Periode Waktu", y = "Produksi Karet Kering", color = "Legend") +
scale_colour_manual(name="Keterangan:", breaks = c("Data Ramal", "Data Uji"),
values = c("royalblue", "red2")) +
theme_bw() + theme(legend.position = "bottom",
plot.caption = element_text(hjust=0.5, size=12))
Ide dasar dari Single Moving Average (SMA) adalah data suatu periode dipengaruhi oleh data periode sebelumnya. Metode pemulusan ini cocok digunakan untuk pola data stasioner atau konstan. Prinsip dasar metode pemulusan ini adalah data pemulusan pada periode ke-t merupakan rata rata dari m buah data pada periode ke-t hingga periode ke (t-m+1). Data pemulusan pada periode ke-t selanjutnya digunakan sebagai nilai peramalan pada periode ke t+1.
Pemulusan menggunakan metode SMA dilakukan dengan fungsi
SMA(). Dalam hal ini akan dilakukan pemulusan dengan
parameter m=4.
data.sma<-SMA(dt.ramal_ma.ts, n=4)
data.sma
## Time Series:
## Start = 1
## End = 96
## Frequency = 1
## [1] NA NA NA 43.6000 42.9000 42.4000 43.8250 44.5500 42.3500
## [10] 41.0250 39.5500 42.4250 45.7750 48.0000 48.4250 45.1750 44.4500 43.9500
## [19] 45.4250 46.2000 43.9500 42.6000 41.0750 44.0250 47.7625 50.3175 50.9625
## [28] 47.7975 47.0025 46.4250 47.9950 48.8525 46.4975 45.0775 43.4525 46.5525
## [37] 49.9400 52.1550 52.4000 48.6250 47.8175 47.2300 48.8300 49.7050 47.3100
## [46] 45.8625 44.2075 47.3600 51.6225 53.9975 55.6775 52.7750 50.5150 49.2375
## [55] 49.9525 51.5750 52.3825 55.6850 57.9025 63.2550 62.8725 60.6350 57.3675
## [64] 50.0500 49.7000 49.6500 50.2000 50.1250 47.1825 44.8825 42.4825 42.2625
## [73] 41.3000 39.7150 38.0500 34.7450 36.2200 37.6575 37.5000 37.2750 45.3875
## [82] 53.0800 60.2400 72.1725 63.0500 54.3900 47.8675 36.5850 38.0800 39.5450
## [91] 39.3575 39.1175 47.4975 55.4350 62.8150 75.1025
Data pemulusan pada periode ke-t selanjutnya digunakan sebagai nilai peramalan pada periode ke t+1 sehingga hasil peramalan 1 periode kedepan adalah sebagai berikut.
data.ramal<-c(NA,data.sma)
data.ramal #forecast 1 periode ke depan
## [1] NA NA NA NA 43.6000 42.9000 42.4000 43.8250 44.5500
## [10] 42.3500 41.0250 39.5500 42.4250 45.7750 48.0000 48.4250 45.1750 44.4500
## [19] 43.9500 45.4250 46.2000 43.9500 42.6000 41.0750 44.0250 47.7625 50.3175
## [28] 50.9625 47.7975 47.0025 46.4250 47.9950 48.8525 46.4975 45.0775 43.4525
## [37] 46.5525 49.9400 52.1550 52.4000 48.6250 47.8175 47.2300 48.8300 49.7050
## [46] 47.3100 45.8625 44.2075 47.3600 51.6225 53.9975 55.6775 52.7750 50.5150
## [55] 49.2375 49.9525 51.5750 52.3825 55.6850 57.9025 63.2550 62.8725 60.6350
## [64] 57.3675 50.0500 49.7000 49.6500 50.2000 50.1250 47.1825 44.8825 42.4825
## [73] 42.2625 41.3000 39.7150 38.0500 34.7450 36.2200 37.6575 37.5000 37.2750
## [82] 45.3875 53.0800 60.2400 72.1725 63.0500 54.3900 47.8675 36.5850 38.0800
## [91] 39.5450 39.3575 39.1175 47.4975 55.4350 62.8150 75.1025
Selanjutnya akan dilakukan peramalan sejumlah data uji yaitu 24 periode. Pada metode SMA, hasil peramalan 24 periode ke depan akan bernilai sama dengan hasil peramalan 1 periode kedepan. Dalam hal ini akan dilakukan penggabungan data aktual dt.ramal, data hasil pemulusan dan data hasil ramalan 24 periode kedepan.
data.gab<-cbind(aktual=c(dt.ramal_ma.ts,rep(NA,24)),pemulusan=c(data.sma,rep(NA,24)),ramalan=c(data.ramal,rep(data.ramal[length(data.ramal)],23)))
data.gab #forecast 24 periode ke depan
## aktual pemulusan ramalan
## [1,] 50.00 NA NA
## [2,] 45.50 NA NA
## [3,] 40.10 NA NA
## [4,] 38.80 43.6000 NA
## [5,] 47.20 42.9000 43.6000
## [6,] 43.50 42.4000 42.9000
## [7,] 45.80 43.8250 42.4000
## [8,] 41.70 44.5500 43.8250
## [9,] 38.40 42.3500 44.5500
## [10,] 38.20 41.0250 42.3500
## [11,] 39.90 39.5500 41.0250
## [12,] 53.20 42.4250 39.5500
## [13,] 51.80 45.7750 42.4250
## [14,] 47.10 48.0000 45.7750
## [15,] 41.60 48.4250 48.0000
## [16,] 40.20 45.1750 48.4250
## [17,] 48.90 44.4500 45.1750
## [18,] 45.10 43.9500 44.4500
## [19,] 47.50 45.4250 43.9500
## [20,] 43.30 46.2000 45.4250
## [21,] 39.90 43.9500 46.2000
## [22,] 39.70 42.6000 43.9500
## [23,] 41.40 41.0750 42.6000
## [24,] 55.10 44.0250 41.0750
## [25,] 54.85 47.7625 44.0250
## [26,] 49.92 50.3175 47.7625
## [27,] 43.98 50.9625 50.3175
## [28,] 42.44 47.7975 50.9625
## [29,] 51.67 47.0025 47.7975
## [30,] 47.61 46.4250 47.0025
## [31,] 50.26 47.9950 46.4250
## [32,] 45.87 48.8525 47.9950
## [33,] 42.25 46.4975 48.8525
## [34,] 41.93 45.0775 46.4975
## [35,] 43.76 43.4525 45.0775
## [36,] 58.27 46.5525 43.4525
## [37,] 55.80 49.9400 46.5525
## [38,] 50.79 52.1550 49.9400
## [39,] 44.74 52.4000 52.1550
## [40,] 43.17 48.6250 52.4000
## [41,] 52.57 47.8175 48.6250
## [42,] 48.44 47.2300 47.8175
## [43,] 51.14 48.8300 47.2300
## [44,] 46.67 49.7050 48.8300
## [45,] 42.99 47.3100 49.7050
## [46,] 42.65 45.8625 47.3100
## [47,] 44.52 44.2075 45.8625
## [48,] 59.28 47.3600 44.2075
## [49,] 60.04 51.6225 47.3600
## [50,] 52.15 53.9975 51.6225
## [51,] 51.24 55.6775 53.9975
## [52,] 47.67 52.7750 55.6775
## [53,] 51.00 50.5150 52.7750
## [54,] 47.04 49.2375 50.5150
## [55,] 54.10 49.9525 49.2375
## [56,] 54.16 51.5750 49.9525
## [57,] 54.23 52.3825 51.5750
## [58,] 60.25 55.6850 52.3825
## [59,] 62.97 57.9025 55.6850
## [60,] 75.57 63.2550 57.9025
## [61,] 52.70 62.8725 63.2550
## [62,] 51.30 60.6350 62.8725
## [63,] 49.90 57.3675 60.6350
## [64,] 46.30 50.0500 57.3675
## [65,] 51.30 49.7000 50.0500
## [66,] 51.10 49.6500 49.7000
## [67,] 52.10 50.2000 49.6500
## [68,] 46.00 50.1250 50.2000
## [69,] 39.53 47.1825 50.1250
## [70,] 41.90 44.8825 47.1825
## [71,] 42.50 42.4825 44.8825
## [72,] 45.12 42.2625 42.4825
## [73,] 35.68 41.3000 42.2625
## [74,] 35.56 39.7150 41.3000
## [75,] 35.84 38.0500 39.7150
## [76,] 31.90 34.7450 38.0500
## [77,] 41.58 36.2200 34.7450
## [78,] 41.31 37.6575 36.2200
## [79,] 35.21 37.5000 37.6575
## [80,] 31.00 37.2750 37.5000
## [81,] 74.03 45.3875 37.2750
## [82,] 72.08 53.0800 45.3875
## [83,] 63.85 60.2400 53.0800
## [84,] 78.73 72.1725 60.2400
## [85,] 37.54 63.0500 72.1725
## [86,] 37.44 54.3900 63.0500
## [87,] 37.76 47.8675 54.3900
## [88,] 33.60 36.5850 47.8675
## [89,] 43.52 38.0800 36.5850
## [90,] 43.30 39.5450 38.0800
## [91,] 37.01 39.3575 39.5450
## [92,] 32.64 39.1175 39.3575
## [93,] 77.04 47.4975 39.1175
## [94,] 75.05 55.4350 47.4975
## [95,] 66.53 62.8150 55.4350
## [96,] 81.79 75.1025 62.8150
## [97,] NA NA 75.1025
## [98,] NA NA 75.1025
## [99,] NA NA 75.1025
## [100,] NA NA 75.1025
## [101,] NA NA 75.1025
## [102,] NA NA 75.1025
## [103,] NA NA 75.1025
## [104,] NA NA 75.1025
## [105,] NA NA 75.1025
## [106,] NA NA 75.1025
## [107,] NA NA 75.1025
## [108,] NA NA 75.1025
## [109,] NA NA 75.1025
## [110,] NA NA 75.1025
## [111,] NA NA 75.1025
## [112,] NA NA 75.1025
## [113,] NA NA 75.1025
## [114,] NA NA 75.1025
## [115,] NA NA 75.1025
## [116,] NA NA 75.1025
## [117,] NA NA 75.1025
## [118,] NA NA 75.1025
## [119,] NA NA 75.1025
## [120,] NA NA 75.1025
Adapun plot data deret waktu dari hasil peramalan yang dilakukan adalah sebagai berikut. Sehingga dapat dilihat plot dari data aktual (warna hitam), data pemulusan (warna biru), serta data peramalan (warna merah) dengan menggunakan parameter m=4.
ts.plot(dt.set.ts, xlab="Time Period", ylab="Produksi Karet Kering", main= "SMA N=4 Data Produksi Karet Kering")
points(dt.set.ts)
lines(data.gab[,2],col="cyan4",lwd=2)
lines(data.gab[,3],col="red2",lwd=2)
legend("topleft",c("data aktual","data pemulusan","data peramalan"), lty=8, col=c("black","cyan4","red2"), cex=0.5)
Selanjutnya perhitungan akurasi dilakukan dengan ukuran akurasi Sum Squares Error (SSE), Mean Square Error (MSE) dan Mean Absolute Percentage Error (MAPE). Perhitungan akurasi dilakukan baik pada dt.ramal maupun pada dt.uji.
#Menghitung nilai keakuratan dt.ramal
error_dt.ramal.sma = dt.ramal_ma.ts-data.ramal[1:length(dt.ramal_ma.ts)]
SSE_dt.ramal.sma = sum(error_dt.ramal.sma[5:length(dt.ramal_ma.ts)]^2)
MSE_dt.ramal.sma = mean(error_dt.ramal.sma[5:length(dt.ramal_ma.ts)]^2)
MAPE_dt.ramal.sma = mean(abs((error_dt.ramal.sma[5:length(dt.ramal_ma.ts)]/dt.ramal_ma.ts[5:length(dt.ramal_ma.ts)])*100))
akurasi_dt.ramal.sma <- matrix(c(SSE_dt.ramal.sma, MSE_dt.ramal.sma, MAPE_dt.ramal.sma))
row.names(akurasi_dt.ramal.sma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_dt.ramal.sma) <- c("Akurasi m = 4")
akurasi_dt.ramal.sma
## Akurasi m = 4
## SSE 11171.17876
## MSE 121.42586
## MAPE 15.61109
Dalam hal ini diperoleh nilai MAPE dari dt.ramal pada metode pemulusan SMA sebesar 15.61, karena cukup besar sehingga dapat dikatakan nilai ini memberikan nilai akurasi yang kurang baik. Selanjutnya dilakukan perhitungan nilai MAPE dt.uji pada metode pemulusan SMA.
#Menghitung nilai keakuratan dt.uji
error_dt.uji.sma = dt.uji_ma.ts-data.gab[97:120,3]
SSE_dt.uji.sma = sum(error_dt.uji.sma^2)
MSE_dt.uji.sma = mean(error_dt.uji.sma^2)
MAPE_dt.uji.sma = mean(abs((error_dt.uji.sma/dt.uji_ma.ts*100)))
akurasi_dt.uji.sma <- matrix(c(SSE_dt.uji.sma, MSE_dt.uji.sma, MAPE_dt.uji.sma))
row.names(akurasi_dt.uji.sma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_dt.uji.sma) <- c("Akurasi m = 4")
akurasi_dt.uji.sma
## Akurasi m = 4
## SSE 22848.12525
## MSE 952.00522
## MAPE 69.76289
Perhitungan akurasi menggunakan dt.uji menghasilkan nilai MAPE yang besar yakni 69.76, sehingga memiliki nilai akurasi yang kurang baik.
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.3.1
tabelSMA<-cbind(MAPE_dt.ramal.sma,MAPE_dt.uji.sma)
kable(tabelSMA,caption="Tabel Akurasi Metode SMA")
| MAPE_dt.ramal.sma | MAPE_dt.uji.sma |
|---|---|
| 15.61109 | 69.76289 |
Karena tidak ditemukan hasil peramalan yang akurat dengan SMA, maka dapat dikatakan pemanfaatkan SMA kurang ideal untuk dijadikan sebagai pemulusan dari data tersebut, oleh karena itu akan dicoba cara pemulusan lainnya yang lebih sesuai.
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.
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:24
f = c()
for (i in t) {
f[i] = At[length(At)] + Bt[length(Bt)]*(i)
}
data.gab2 <- cbind(aktual = c(dt.ramal_ma.ts,rep(NA,24)), pemulusan1 = c(data.sma,rep(NA,24)),pemulusan2 = c(data.dma, rep(NA,24)),At = c(At, rep(NA,24)), Bt = c(Bt,rep(NA,24)),ramalan = c(data.ramal2, f[-1]))
data.gab2
## aktual pemulusan1 pemulusan2 At Bt ramalan
## [1,] 50.00 NA NA NA NA NA
## [2,] 45.50 NA NA NA NA NA
## [3,] 40.10 NA NA NA NA NA
## [4,] 38.80 43.6000 NA NA NA NA
## [5,] 47.20 42.9000 NA NA NA NA
## [6,] 43.50 42.4000 NA NA NA NA
## [7,] 45.80 43.8250 44.89792 44.46875 0.42916667 NA
## [8,] 41.70 44.5500 46.43542 45.68125 0.75416667 44.89792
## [9,] 38.40 42.3500 40.79792 41.41875 -0.62083333 46.43542
## [10,] 38.20 41.0250 37.83750 39.11250 -1.27500000 40.79792
## [11,] 39.90 39.5500 35.68542 37.23125 -1.54583333 37.83750
## [12,] 53.20 42.4250 44.23750 43.51250 0.72500000 35.68542
## [13,] 51.80 45.7750 51.74375 49.35625 2.38750000 44.23750
## [14,] 47.10 48.0000 54.77083 52.06250 2.70833333 51.74375
## [15,] 41.60 48.4250 52.20625 50.69375 1.51250000 54.77083
## [16,] 40.20 45.1750 42.39375 43.50625 -1.11250000 52.20625
## [17,] 48.90 44.4500 41.01250 42.38750 -1.37500000 42.39375
## [18,] 45.10 43.9500 41.36667 42.40000 -1.03333333 41.01250
## [19,] 47.50 45.4250 46.55000 46.10000 0.45000000 41.36667
## [20,] 43.30 46.2000 48.18958 47.39375 0.79583333 46.55000
## [21,] 39.90 43.9500 42.39792 43.01875 -0.62083333 48.18958
## [22,] 39.70 42.6000 39.36042 40.65625 -1.29583333 42.39792
## [23,] 41.40 41.0750 37.10625 38.69375 -1.58750000 39.36042
## [24,] 55.10 44.0250 45.87917 45.13750 0.74166667 37.10625
## [25,] 54.85 47.7625 54.25729 51.65938 2.59791667 45.87917
## [26,] 49.92 50.3175 57.85500 54.84000 3.01500000 54.25729
## [27,] 43.98 50.9625 55.45521 53.65813 1.79708333 57.85500
## [28,] 42.44 47.7975 45.44333 46.38500 -0.94166667 55.45521
## [29,] 51.67 47.0025 43.64000 44.98500 -1.34500000 45.44333
## [30,] 47.61 46.4250 43.72187 44.80312 -1.08125000 43.64000
## [31,] 50.26 47.9950 49.14500 48.68500 0.46000000 43.72187
## [32,] 45.87 48.8525 50.99208 50.13625 0.85583333 49.14500
## [33,] 42.25 46.4975 44.92250 45.55250 -0.63000000 50.99208
## [34,] 41.93 45.0775 41.69729 43.04938 -1.35208333 44.92250
## [35,] 43.76 43.4525 39.25667 40.93500 -1.67833333 41.69729
## [36,] 58.27 46.5525 48.48167 47.71000 0.77166667 39.25667
## [37,] 55.80 49.9400 56.08063 53.62438 2.45625000 48.48167
## [38,] 50.79 52.1550 59.03833 56.28500 2.75333333 56.08063
## [39,] 44.74 52.4000 55.96354 54.53813 1.42541667 59.03833
## [40,] 43.17 48.6250 45.03333 46.47000 -1.43666667 55.96354
## [41,] 52.57 47.8175 43.76438 45.38563 -1.62125000 45.03333
## [42,] 48.44 47.2300 44.24979 45.44188 -1.19208333 43.76438
## [43,] 51.14 48.8300 50.00396 49.53438 0.46958333 44.24979
## [44,] 46.67 49.7050 51.88729 51.01438 0.87291667 50.00396
## [45,] 42.99 47.3100 45.71208 46.35125 -0.63916667 51.88729
## [46,] 42.65 45.8625 42.42188 43.79813 -1.37625000 45.71208
## [47,] 44.52 44.2075 39.93458 41.64375 -1.70916667 42.42188
## [48,] 59.28 47.3600 49.31833 48.53500 0.78333333 39.93458
## [49,] 60.04 51.6225 58.88813 55.98188 2.90625000 49.31833
## [50,] 52.15 53.9975 61.83188 58.69813 3.13375000 58.88813
## [51,] 51.24 55.6775 61.53271 59.19063 2.34208333 61.83188
## [52,] 47.67 52.7750 51.53646 52.03187 -0.49541667 61.53271
## [53,] 51.00 50.5150 45.97125 47.78875 -1.81750000 51.53646
## [54,] 47.04 49.2375 44.54792 46.42375 -1.87583333 45.97125
## [55,] 54.10 49.9525 48.84000 49.28500 -0.44500000 44.54792
## [56,] 54.16 51.5750 53.66667 52.83000 0.83666667 48.84000
## [57,] 54.23 52.3825 55.04188 53.97813 1.06375000 53.66667
## [58,] 60.25 55.6850 61.16208 58.97125 2.19083333 55.04188
## [59,] 62.97 57.9025 63.76292 61.41875 2.34416667 61.16208
## [60,] 75.57 63.2550 73.16958 69.20375 3.96583333 63.76292
## [61,] 52.70 62.8725 67.77875 65.81625 1.96250000 73.16958
## [62,] 51.30 60.6350 59.74958 60.10375 -0.35416667 67.77875
## [63,] 49.90 57.3675 51.25917 53.70250 -2.44333333 59.74958
## [64,] 46.30 50.0500 37.24792 42.36875 -5.12083333 51.25917
## [65,] 51.30 49.7000 41.80313 44.96188 -3.15875000 37.24792
## [66,] 51.10 49.6500 46.24688 47.60813 -1.36125000 41.80313
## [67,] 52.10 50.2000 50.70000 50.50000 0.20000000 46.24688
## [68,] 46.00 50.1250 50.46875 50.33125 0.13750000 50.70000
## [69,] 39.53 47.1825 43.67104 45.07563 -1.40458333 50.46875
## [70,] 41.90 44.8825 39.52417 41.66750 -2.14333333 43.67104
## [71,] 42.50 42.4825 36.33979 38.79688 -2.45708333 39.52417
## [72,] 45.12 42.2625 39.02917 40.32250 -1.29333333 36.33979
## [73,] 35.68 41.3000 38.91354 39.86813 -0.95458333 39.02917
## [74,] 35.56 39.7150 36.84000 37.99000 -1.15000000 38.91354
## [75,] 35.84 38.0500 34.24688 35.76813 -1.52125000 36.84000
## [76,] 31.90 34.7450 28.56583 31.03750 -2.47166667 34.24688
## [77,] 41.58 36.2200 34.61583 35.25750 -0.64166667 28.56583
## [78,] 41.31 37.6575 39.30646 38.64688 0.65958333 34.61583
## [79,] 35.21 37.5000 39.11563 38.46938 0.64625000 39.30646
## [80,] 31.00 37.2750 37.46146 37.38688 0.07458333 39.11563
## [81,] 74.03 45.3875 55.27500 51.32000 3.95500000 37.46146
## [82,] 72.08 53.0800 69.36229 62.84938 6.51291667 55.27500
## [83,] 63.85 60.2400 78.98063 71.48438 7.49625000 69.36229
## [84,] 78.73 72.1725 96.26000 86.62500 9.63500000 78.98063
## [85,] 37.54 63.0500 64.57396 63.96438 0.60958333 96.26000
## [86,] 37.44 54.3900 40.93479 46.31688 -5.38208333 64.57396
## [87,] 37.76 47.8675 28.69667 36.36500 -7.66833333 40.93479
## [88,] 33.60 36.5850 13.43813 22.69688 -9.25875000 28.69667
## [89,] 43.52 38.0800 27.82896 31.92938 -4.10041667 13.43813
## [90,] 43.30 39.5450 37.92104 38.57063 -0.64958333 27.82896
## [91,] 37.01 39.3575 40.96688 40.32313 0.64375000 37.92104
## [92,] 32.64 39.1175 39.27167 39.21000 0.06166667 40.96688
## [93,] 77.04 47.4975 57.69438 53.61563 4.07875000 39.27167
## [94,] 75.05 55.4350 72.24021 65.51813 6.72208333 57.69438
## [95,] 66.53 62.8150 82.14625 74.41375 7.73250000 72.24021
## [96,] 81.79 75.1025 99.91917 89.99250 9.92666667 82.14625
## [97,] NA NA NA NA NA 99.91917
## [98,] NA NA NA NA NA 109.84583
## [99,] NA NA NA NA NA 119.77250
## [100,] NA NA NA NA NA 129.69917
## [101,] NA NA NA NA NA 139.62583
## [102,] NA NA NA NA NA 149.55250
## [103,] NA NA NA NA NA 159.47917
## [104,] NA NA NA NA NA 169.40583
## [105,] NA NA NA NA NA 179.33250
## [106,] NA NA NA NA NA 189.25917
## [107,] NA NA NA NA NA 199.18583
## [108,] NA NA NA NA NA 209.11250
## [109,] NA NA NA NA NA 219.03917
## [110,] NA NA NA NA NA 228.96583
## [111,] NA NA NA NA NA 238.89250
## [112,] NA NA NA NA NA 248.81917
## [113,] NA NA NA NA NA 258.74583
## [114,] NA NA NA NA NA 268.67250
## [115,] NA NA NA NA NA 278.59917
## [116,] NA NA NA NA NA 288.52583
## [117,] NA NA NA NA NA 298.45250
## [118,] NA NA NA NA NA 308.37917
## [119,] NA NA NA NA NA 318.30583
## [120,] NA NA NA NA NA 328.23250
Hasil pemulusan menggunakan metode DMA divisualisasikan sebagai berikut.
ts.plot(dt.set.ts, xlab="Time Period", ylab="Produksi Karet Kering", main= "DMA N=4 Data Produksi Karet Kering")
points(dt.set.ts)
lines(data.gab2[,3],col="cyan4",lwd=2)
lines(data.gab2[,6],col="red2",lwd=2)
legend("topleft",c("data aktual","data pemulusan","data peramalan"), lty=8, col=c("black","cyan4","red2"), cex=0.8)
Selanjutnya perhitungan akurasi dilakukan baik pada dt.ramal maupun dt.uji. Perhitungan akurasi dilakukan dengan ukuran akurasi SSE, MSE dan MAPE.
#Menghitung nilai keakuratan dt.ramal
error_dt.ramal.dma = dt.ramal_ma.ts-data.ramal2[1:length(dt.ramal_ma.ts)]
SSE_dt.ramal.dma = sum(error_dt.ramal.dma[8:length(dt.ramal_ma.ts)]^2)
MSE_dt.ramal.dma = mean(error_dt.ramal.dma[8:length(dt.ramal_ma.ts)]^2)
MAPE_dt.ramal.dma = mean(abs((error_dt.ramal.dma[8:length(dt.ramal_ma.ts)]/dt.ramal_ma.ts[8:length(dt.ramal_ma.ts)])*100))
akurasi_dt.ramal.dma <- matrix(c(SSE_dt.ramal.dma, MSE_dt.ramal.dma, MAPE_dt.ramal.dma))
row.names(akurasi_dt.ramal.dma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_dt.ramal.dma) <- c("Akurasi m = 4")
akurasi_dt.ramal.dma
## Akurasi m = 4
## SSE 14660.64830
## MSE 164.72639
## MAPE 18.91563
Perhitungan akurasi dt.ramal menggunakan nilai MAPE menghasilkan nilai MAPE sebesar 18.92 sehingga dikategorikan baik. Selanjutnya, perhitungan akurasi dilakukan pada dt.uji.
#Menghitung nilai keakuratan dt.uji
error_dt.uji.dma = dt.uji_ma.ts-data.gab2[97:120,6]
SSE_dt.uji.dma = sum(error_dt.uji.dma^2)
MSE_dt.uji.dma = mean(error_dt.uji.dma^2)
MAPE_dt.uji.dma = mean(abs((error_dt.uji.dma/dt.uji_ma.ts*100)))
akurasi_dt.uji.dma <- matrix(c(SSE_dt.uji.dma, MSE_dt.uji.dma, MAPE_dt.uji.dma))
row.names(akurasi_dt.uji.dma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_dt.uji.dma) <- c("Akurasi m = 4")
akurasi_dt.uji.dma
## Akurasi m = 4
## SSE 778950.8765
## MSE 32456.2865
## MAPE 373.9132
Perhitungan akurasi menggunakan dt.uji menghasilkan nilai MAPE yang besar yakni 373.91, sehingga nilai akurasi ini tidak baik.
library(kableExtra)
tabelSMA<-cbind(MAPE_dt.ramal.dma,MAPE_dt.uji.dma)
kable(tabelSMA,caption="Tabel Akurasi Metode DMA")
| MAPE_dt.ramal.dma | MAPE_dt.uji.dma |
|---|---|
| 18.91563 | 373.9132 |
Pada dt.ramal maupun dt.uji, metode SMA lebih baik dibandingkan dengan menggunakan metode DMA. Hal tersebut dapat dilihat dari nilai MAPE yang diberikan oleh pemulusan dengan SMA lebih kecil dibandingkan dengan DMA. Pada DMA nilai MAPE data ramal sebesar 18.92 yang lebih besar daripada nilai MAPE data ramal pada SMA yaitu 15.61, kemudian untuk MAPE data uji pada DMA didapatkan 373.91 yang juga lebih besar dibandingkan MAPE data uji SMA yaitu 69.76.
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. Ada dua macam model, yaitu model tunggal dan ganda.
Data yang digunakan masih sama dengan pembagian data yang telah dilakukan pada tahapan sebelumnya, yakni 80% untuk data ramal serta 20% untuk data uji.
#Membagi forecasting dan testing
forecasting<-dt.set[1:96,]
testing<-dt.set[97:120,]
forecast.ts<-ts(forecasting$`Produksi Karet Kering`)
test.ts<-ts(testing$`Produksi Karet Kering`)
Eksplorasi dilakukan dengan membuat plot data deret waktu untuk keseluruhan data, data ramal, dan data uji. Hal ini sama dengan hasil yang sebelumnya.
#Eksplorasi data, sama serperti sebelumnya
plot(dt.set.ts, col="blueviolet",main="Plot Semua Data")
points(dt.set)
#Plot data ramal
plot(forecast.ts, col = "brown2",main="Plot Data Ramal")
points(forecast.ts)
#Plot data uji
plot(test.ts, col="cyan3", main="Plot Data Uji")
points(test.ts)
#Dengan package GGPLOT
library(ggplot2)
ggplot() +
geom_line(data = forecasting, aes(x = Periode, y = `Produksi Karet Kering`, col = "Data Ramal")) +
geom_line(data = testing, aes(x = Periode, y = `Produksi Karet Kering`, col = "Data Uji")) +
labs(x = "Periode Waktu", y = "Produksi Karet Kering", color = "Legend") +
scale_colour_manual(name="Keterangan:", breaks = c("Data Ramal", "Data Uji"),
values = c("cyan3", "brown2")) +
theme_bw() + theme(legend.position = "bottom",
plot.caption = element_text(hjust=0.5, size=12))
Single Exponential Smoothing merupakan metode pemulusan yang tepat digunakan untuk data dengan pola stasioner atau konstan.
Nilai pemulusan pada periode ke-t didapat dari persamaan:\[ \tilde{y}_T=\lambda y_t+(1-\lambda)\tilde{y}_{T-1} \]
Nilai parameter \(\lambda\) adalah nilai antara 0 dan 1.
Nilai pemulusan periode ke-t bertindak sebagai nilai ramalan pada periode ke-\((T+\tau)\).
\[ \tilde{y}_{T+\tau}(T)=\tilde{y}_T \]
Pemulusan dengan metode SES dapat dilakukan dengan dua fungsi dari
packages berbeda, yaitu (1) fungsi ses() dari
packages forecast dan (2) fungsi
HoltWinters dari packages stats .
Dengan menggunakan h=24 serta alpha =0.2 serta 0.7.
#Dengan cara fungsi SES
ses.1 <- ses(forecast.ts, h = 24, alpha = 0.2)
plot(ses.1)
ses.1
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 97 61.27642 47.97916 74.57368 40.94002 81.61283
## 98 61.27642 47.71582 74.83702 40.53728 82.01557
## 99 61.27642 47.45750 75.09534 40.14221 82.41064
## 100 61.27642 47.20392 75.34892 39.75439 82.79845
## 101 61.27642 46.95483 75.59801 39.37344 83.17940
## 102 61.27642 46.71000 75.84284 38.99901 83.55384
## 103 61.27642 46.46922 76.08363 38.63076 83.92209
## 104 61.27642 46.23229 76.32056 38.26841 84.28444
## 105 61.27642 45.99903 76.55381 37.91167 84.64118
## 106 61.27642 45.76928 76.78356 37.56030 84.99255
## 107 61.27642 45.54289 77.00996 37.21406 85.33878
## 108 61.27642 45.31971 77.23314 36.87273 85.68011
## 109 61.27642 45.09961 77.45324 36.53612 86.01673
## 110 61.27642 44.88246 77.67039 36.20402 86.34883
## 111 61.27642 44.66815 77.88470 35.87626 86.67659
## 112 61.27642 44.45657 78.09628 35.55268 87.00017
## 113 61.27642 44.24762 78.30523 35.23312 87.31973
## 114 61.27642 44.04120 78.51164 34.91743 87.63542
## 115 61.27642 43.83723 78.71562 34.60548 87.94737
## 116 61.27642 43.63561 78.91723 34.29713 88.25572
## 117 61.27642 43.43627 79.11657 33.99227 88.56058
## 118 61.27642 43.23914 79.31371 33.69078 88.86207
## 119 61.27642 43.04414 79.50871 33.39255 89.16030
## 120 61.27642 42.85120 79.70165 33.09747 89.45537
ses.2<- ses(forecast.ts, h = 24, alpha = 0.7)
plot(ses.2)
ses.2
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 97 77.68759 65.39093 89.98426 58.88147 96.49372
## 98 77.68759 62.67760 92.69758 54.73179 100.64339
## 99 77.68759 60.38465 94.99053 51.22503 104.15016
## 100 77.68759 58.36187 97.01332 48.13144 107.24374
## 101 77.68759 56.53161 98.84357 45.33231 110.04288
## 102 77.68759 54.84755 100.52763 42.75676 112.61842
## 103 77.68759 53.27941 102.09578 40.35850 115.01669
## 104 77.68759 51.80611 103.56908 38.10527 117.26991
## 105 77.68759 50.41227 104.96291 35.97359 119.40160
## 106 77.68759 49.08628 106.28891 33.94566 121.42953
## 107 77.68759 47.81910 107.55609 32.00767 123.36751
## 108 77.68759 46.60353 108.77165 30.14862 125.22656
## 109 77.68759 45.43374 109.94144 28.35958 127.01560
## 110 77.68759 44.30492 111.07026 26.63320 128.74198
## 111 77.68759 43.21304 112.16214 24.96332 130.41187
## 112 77.68759 42.15470 113.22049 23.34472 132.03046
## 113 77.68759 41.12698 114.24821 21.77296 133.60223
## 114 77.68759 40.12737 115.24782 20.24419 135.13100
## 115 77.68759 39.15368 116.22150 18.75506 136.62012
## 116 77.68759 38.20400 117.17119 17.30265 138.07254
## 117 77.68759 37.27663 118.09856 15.88435 139.49083
## 118 77.68759 36.37006 119.00512 14.49789 140.87730
## 119 77.68759 35.48297 119.89221 13.14120 142.23399
## 120 77.68759 34.61414 120.76104 11.81244 143.56274
Untuk mendapatkan gambar hasil pemulusan pada data forecast dengan
fungsi ses() , perlu digunakan
fungsi autoplot() dan autolayer() dari library
packages ggplot2 .
autoplot(ses.1) +
autolayer(fitted(ses.1), series="Fitted") +
ylab("Produksi Karet Kering") + xlab("Periode")
autoplot(ses.2) +
autolayer(fitted(ses.2), series="Fitted") +
ylab("Produksi Karet Kering") + xlab("Periode")
Pada fungsi ses() , terdapat beberapa argumen yang umum
digunakan, yaitu nilai y , gamma ,
beta , alpha , dan h .
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 periode yang akan diramalkan.
Kasus di atas merupakan contoh inisialisasi nilai parameter λ dengan
nilai alpha 0,2 dan 0,7 dan banyak periode data yang akan
diramalkan adalah sebanyak 24 periode. Selanjutnya akan digunakan fungsi
HoltWinters() dengan nilai inisialisasi parameter dan
panjang periode peramalan yang sama dengan fungsi ses()
.
#Dengan fungsi Holtwinter (cara kedua)
#alpha = 0.2
ses1<- HoltWinters(forecast.ts, gamma = FALSE, beta = FALSE, alpha = 0.2)
plot(ses1)
#Ramalan
ramalan1<- forecast(ses1, h=24)
ramalan1
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 97 61.27642 47.94624 74.60661 40.88967 81.66318
## 98 61.27642 47.68225 74.87059 40.48593 82.06691
## 99 61.27642 47.42329 75.12955 40.08989 82.46296
## 100 61.27642 47.16908 75.38376 39.70111 82.85174
## 101 61.27642 46.91938 75.63347 39.31922 83.23363
## 102 61.27642 46.67394 75.87891 38.94385 83.60899
## 103 61.27642 46.43256 76.12029 38.57469 83.97815
## 104 61.27642 46.19504 76.35780 38.21144 84.34140
## 105 61.27642 45.96121 76.59164 37.85383 84.69902
## 106 61.27642 45.73089 76.82195 37.50159 85.05126
## 107 61.27642 45.50394 77.04891 37.15449 85.39836
## 108 61.27642 45.28020 77.27264 36.81232 85.74053
## 109 61.27642 45.05956 77.49329 36.47487 86.07798
## 110 61.27642 44.84187 77.71098 36.14194 86.41090
## 111 61.27642 44.62703 77.92582 35.81337 86.73947
## 112 61.27642 44.41493 78.13792 35.48899 87.06385
## 113 61.27642 44.20546 78.34739 35.16864 87.38421
## 114 61.27642 43.99853 78.55431 34.85217 87.70068
## 115 61.27642 43.79405 78.75879 34.53945 88.01340
## 116 61.27642 43.59194 78.96091 34.23034 88.32251
## 117 61.27642 43.39211 79.16074 33.92472 88.62812
## 118 61.27642 43.19448 79.35836 33.62248 88.93036
## 119 61.27642 42.99900 79.55385 33.32351 89.22933
## 120 61.27642 42.80558 79.74727 33.02771 89.52514
#alpha = 0.7
ses2<- HoltWinters(forecast.ts, gamma = FALSE, beta = FALSE, alpha = 0.7)
plot(ses2)
#Ramalan
ramalan2<- forecast(ses2, h=24)
ramalan2
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 97 77.68759 65.40007 89.97512 58.89545 96.47974
## 98 77.68759 62.68876 92.68643 54.74885 100.62633
## 99 77.68759 60.39751 94.97767 51.24470 104.13048
## 100 77.68759 58.37623 96.99895 48.15342 107.22177
## 101 77.68759 56.54734 98.82785 45.35636 110.01882
## 102 77.68759 54.86453 100.51065 42.78273 112.59245
## 103 77.68759 53.29755 102.07763 40.38625 114.98894
## 104 77.68759 51.82535 103.54984 38.13470 117.24048
## 105 77.68759 50.43255 104.94264 36.00460 119.37059
## 106 77.68759 49.10754 106.26764 33.97818 121.39701
## 107 77.68759 47.84130 107.53388 32.04163 123.33356
## 108 77.68759 46.62664 108.74855 30.18396 125.19122
## 109 77.68759 45.45772 109.91746 28.39626 126.97893
## 110 77.68759 44.32974 111.04545 26.67116 128.70403
## 111 77.68759 43.23867 112.13651 25.00251 130.37267
## 112 77.68759 42.18111 113.19407 23.38512 131.99007
## 113 77.68759 41.15416 114.22103 21.81453 133.56066
## 114 77.68759 40.15529 115.21989 20.28689 135.08829
## 115 77.68759 39.18233 116.19286 18.79887 136.57631
## 116 77.68759 38.23335 117.14183 17.34754 138.02765
## 117 77.68759 37.30667 118.06852 15.93030 139.44489
## 118 77.68759 36.40078 118.97440 14.54486 140.83032
## 119 77.68759 35.51435 119.86084 13.18918 142.18600
## 120 77.68759 34.64617 120.72902 11.86141 143.51377
Fungsi HoltWinters memiliki argumen yang sama dengan
fungsi ses() . Argumen-argumen kedua fungsi dapat dilihat
lebih lanjut dengan ?ses() atau ?HoltWinters
.
Nilai parameter \(\alpha\) dari
kedua fungsi dapat dioptimalkan menyesuaikan dari error-nya
paling minimumnya. Caranya adalah dengan membuat parameter \(\alpha\) = NULL .
#SES
ses.opt <- ses(forecast.ts, h = 24, alpha = NULL)
plot(ses.opt)
ses.opt
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 97 77.77087 65.47434 90.06739 58.96496 96.57678
## 98 77.77087 62.71923 92.82251 54.75137 100.79037
## 99 77.77087 60.39562 95.14612 51.19772 104.34402
## 100 77.77087 58.34803 97.19371 48.06620 107.47554
## 101 77.77087 56.49661 99.04513 45.23470 110.30704
## 102 77.77087 54.79389 100.74784 42.63061 112.91112
## 103 77.77087 53.20893 102.33281 40.20662 115.33511
## 104 77.77087 51.72022 103.82152 37.92984 117.61190
## 105 77.77087 50.31211 105.22963 35.77632 119.76542
## 106 77.77087 48.97276 106.56898 33.72796 121.81377
## 107 77.77087 47.69300 107.84874 31.77073 123.77100
## 108 77.77087 46.46550 109.07623 29.89345 125.64829
## 109 77.77087 45.28436 110.25738 28.08704 127.45469
## 110 77.77087 44.14468 111.39706 26.34405 129.19769
## 111 77.77087 43.04238 112.49936 24.65823 130.88351
## 112 77.77087 41.97401 113.56773 23.02429 132.51744
## 113 77.77087 40.93661 114.60513 21.43773 134.10401
## 114 77.77087 39.92764 115.61410 19.89464 135.64709
## 115 77.77087 38.94488 116.59686 18.39164 137.15009
## 116 77.77087 37.98639 117.55535 16.92576 138.61598
## 117 77.77087 37.05045 118.49128 15.49437 140.04737
## 118 77.77087 36.13555 119.40619 14.09515 141.44659
## 119 77.77087 35.24033 120.30141 12.72602 142.81572
## 120 77.77087 34.36356 121.17818 11.38512 144.15662
#Lamda Optimum Holt Winter
sesopt<- HoltWinters(forecast.ts, gamma = FALSE, beta = FALSE,alpha = NULL)
sesopt
## Holt-Winters exponential smoothing without trend and without seasonal component.
##
## Call:
## HoltWinters(x = forecast.ts, alpha = NULL, beta = FALSE, gamma = FALSE)
##
## Smoothing parameters:
## alpha: 0.7085903
## beta : FALSE
## gamma: FALSE
##
## Coefficients:
## [,1]
## a 77.8083
plot(sesopt)
#Ramalan
ramalanopt<- forecast(sesopt, h=24)
ramalanopt
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 97 77.8083 65.52089 90.09571 59.01633 96.60027
## 98 77.8083 62.74883 92.86777 54.77683 100.83977
## 99 77.8083 60.41304 95.20356 51.20455 104.41205
## 100 77.8083 58.35574 97.26086 48.05817 107.55843
## 101 77.8083 56.49611 99.12049 45.21412 110.40248
## 102 77.8083 54.78621 100.83039 42.59905 113.01755
## 103 77.8083 53.19481 102.42179 40.16521 115.45139
## 104 77.8083 51.70023 103.91637 37.87945 117.73715
## 105 77.8083 50.28670 105.32990 35.71764 119.89896
## 106 77.8083 48.94230 106.67430 33.66156 121.95503
## 107 77.8083 47.65779 107.95881 31.69708 123.91952
## 108 77.8083 46.42581 109.19079 29.81293 125.80367
## 109 77.8083 45.24041 110.37619 28.00000 127.61660
## 110 77.8083 44.09665 111.51994 26.25079 129.36581
## 111 77.8083 42.99046 112.62614 24.55900 131.05760
## 112 77.8083 41.91834 113.69826 22.91934 132.69726
## 113 77.8083 40.87733 114.73927 21.32725 134.28935
## 114 77.8083 39.86487 115.75173 19.77883 135.83777
## 115 77.8083 38.87873 116.73787 18.27066 137.34594
## 116 77.8083 37.91696 117.69964 16.79977 138.81683
## 117 77.8083 36.97785 118.63875 15.36351 140.25309
## 118 77.8083 36.05985 119.55675 13.95955 141.65705
## 119 77.8083 35.16161 120.45499 12.58581 143.03079
## 120 77.8083 34.28190 121.33470 11.24041 144.37619
Setelah dilakukan peramalan, akan dilakukan perhitungan keakuratan hasil peramalan. Perhitungan akurasi ini dilakukan baik pada data ramal dan data uji.
#Keakuratan Metode -> pada data forecast/ramal
SSE1<-ses1$SSE
MSE1<-ses1$SSE/length(forecast.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 10203.6243
## MSE 106.2878
## RMSE 10.3096
SSE2<-ses2$SSE
MSE2<-ses2$SSE/length(forecast.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 8657.874662
## MSE 90.186194
## RMSE 9.496641
Diperoleh SSE sebesar 10203.62, MSE 106.29, dan RMSE 10.31 untuk lamda = 0.2, SSE sebesar 8657.87, MSE 90.19, dan RMSE 9.50 untuk lamda = 0.7.
#Cara Manual (lamda=0.2)
fitted1<-ramalan1$fitted
sisaan1<-ramalan1$residuals
head(sisaan1)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] NA -4.50 -9.00 -8.50 1.60 -2.42
resid1<-forecasting$`Produksi Karet Kering`-ramalan1$fitted
head(resid1)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] NA -4.50 -9.00 -8.50 1.60 -2.42
SSE.1=sum(sisaan1[2:length(forecast.ts)]^2)
SSE.1
## [1] 10203.62
MSE.1 = SSE.1/length(forecast.ts)
MSE.1
## [1] 106.2878
MAPE.1 = sum(abs(sisaan1[2:length(forecast.ts)]/forecast.ts[2:length(forecast.ts)])*
100)/length(forecast.ts)
MAPE.1
## [1] 14.43152
akurasi.1 <- matrix(c(SSE.1,MSE.1,MAPE.1))
row.names(akurasi.1)<- c("SSE", "MSE", "MAPE")
colnames(akurasi.1) <- c("Akurasi lamda=0.2")
akurasi.1
## Akurasi lamda=0.2
## SSE 10203.62429
## MSE 106.28775
## MAPE 14.43152
#Cara Manual (lamda=0.7)
fitted2<-ramalan2$fitted
sisaan2<-ramalan2$residuals
head(sisaan2)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] NA -4.50000 -6.75000 -3.32500 7.40250 -1.47925
resid2<-forecasting$`Produksi Karet Kering`-ramalan2$fitted
head(resid2)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] NA -4.50000 -6.75000 -3.32500 7.40250 -1.47925
SSE.2=sum(sisaan2[2:length(forecast.ts)]^2)
SSE.2
## [1] 8657.875
MSE.2 = SSE.2/length(forecast.ts)
MSE.2
## [1] 90.18619
MAPE.2 = sum(abs(sisaan2[2:length(forecast.ts)]/forecast.ts[2:length(forecast.ts)])*
100)/length(forecast.ts)
MAPE.2
## [1] 12.24126
akurasi.2 <- matrix(c(SSE.2,MSE.2,MAPE.2))
row.names(akurasi.2)<- c("SSE", "MSE", "MAPE")
colnames(akurasi.2) <- c("Akurasi lamda=0.7")
akurasi.2
## Akurasi lamda=0.7
## SSE 8657.87466
## MSE 90.18619
## MAPE 12.24126
Berdasarkan nilai SSE, MSE, RMSE, dan MAPE di antara kedua parameter, nilai parameter \(\lambda=0,7\) menghasilkan akurasi yang lebih baik dibandingkan \(\lambda=0,2\). Hal ini dilihat dari nilai masing-masing ukuran akurasi yang lebih kecil. Berdasarkan nilai MAPE-nya, hasil ini dapat dikategorikan sebagai peramalan yang sangat baik. MAPE \(\lambda=0,2\) dan \(\lambda=0,7\) secara berturut-turut sebesar 14.43 dan 12.24.
Akurasi data uji dapat dihitung dengan cara yang hampir sama dengan perhitungan akurasi data latih.
selisih1<-ramalan1$mean-testing$`Produksi Karet Kering`
SSEtesting1<-sum(selisih1^2)
MSEtesting1<-SSEtesting1/length(testing)
selisih2<-ramalan2$mean-testing$`Produksi Karet Kering`
SSEtesting2<-sum(selisih2^2)
MSEtesting2<-SSEtesting2/length(testing)
selisihopt<-ramalanopt$mean-testing$`Produksi Karet Kering`
SSEtestingopt<-sum(selisihopt^2)
MSEtestingopt<-SSEtestingopt/length(testing)
akurasitesting1 <- matrix(c(SSEtesting1,SSEtesting2,SSEtestingopt))
row.names(akurasitesting1)<- c("SSE1", "SSE2", "SSEopt")
akurasitesting1
## [,1]
## SSE1 9374.694
## SSE2 26385.467
## SSEopt 26558.478
akurasitesting2 <- matrix(c(MSEtesting1,MSEtesting2,MSEtestingopt))
row.names(akurasitesting2)<- c("MSE1", "MSE2", "MSEopt")
akurasitesting2
## [,1]
## MSE1 4687.347
## MSE2 13192.734
## MSEopt 13279.239
Selain dengan cara di atas, perhitungan nilai akurasi dapat
menggunakan
fungsi accuracy() dari package forecast .
Penggunaannya yaitu dengan
menuliskan accuracy(hasil ramalan, kondisi aktual) .
#Cara alternatif
accuracy(ramalanopt,testing$`Produksi Karet Kering`)
## ME RMSE MAE MPE MAPE MASE
## Training set 0.4131004 9.546261 6.190649 -1.465869 12.33682 1.068381
## Test set -29.9207996 33.265647 30.745391 -73.992447 74.97842 5.306033
## ACF1
## Training set 0.04588025
## Test set NA
Karena memiliki MAPE yang cukup besar untuk ramalan optimum (untuk training 12.34 dan testing 74.98), sehingga memiliki tingkat akurasi yang belum baik. Berikutnya akan dicoba metode pemulusan dengan DES.
Oleh karena itu, diperoleh untuk lamda 0.2 dengan akurasi data ramal = 14.43 (MAPE) dan akurasi data uji sebesar = 9374.69 (SSE). Untuk lamda 0.7 diperoleh akurasi data ramal = 12.24 (MAPE) dan akurasi data uji sebesar = 26385.47 (SSE). Sedangkan untuk akurasi dengan lamda optimum diperoleh akurasi data ramal = 12.34 (MAPE) dan akurasi data latih = 74.98 (MAPE).
Metode pemulusan Double Exponential Smoothing (DES) digunakan untuk data yang memiliki pola tren. Metode DES adalah metode semacam SES, hanya saja dilakukan dua kali, yaitu pertama untuk tahapan ‘level’ dan kedua untuk tahapan ‘tren’. Pemulusan menggunakan metode ini akan menghasilkan peramalan tidak konstan untuk periode berikutnya.
Pemulusan dengan metode DES kali ini akan menggunakan fungsi
HoltWinters() . Jika sebelumnya nilai argumen
beta dibuat FALSE , kali ini argumen tersebut
akan diinisialisasi bersamaan dengan nilai alpha .
Menggunakan parameter lamda=0.2, gamma=0.2 serta lamda=0.6, gamma=0.3.
#Lamda=0.2 dan gamma=0.2
des.1<- HoltWinters(forecast.ts, gamma = FALSE, beta = 0.2, alpha = 0.2)
plot(des.1)
#Ramalan
ramalandes1<- forecast(des.1, h=24)
ramalandes1
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 97 65.96863 50.85246 81.08480 42.85045 89.08681
## 98 68.61154 53.06612 84.15696 44.83687 92.38621
## 99 71.25445 55.14314 87.36576 46.61433 95.89458
## 100 73.89737 57.07558 90.71915 48.17066 99.62407
## 101 76.54028 58.86017 94.22038 49.50089 103.57966
## 102 79.18319 60.49775 97.86863 50.60627 107.76011
## 103 81.82610 61.99221 101.65999 51.49279 112.15941
## 104 84.46901 63.34961 105.58841 52.16967 116.76835
## 105 87.11192 64.57717 109.64668 52.64799 121.57586
## 106 89.75484 65.68260 113.82707 52.93953 126.57014
## 107 92.39775 66.67360 118.12190 53.05606 131.73944
## 108 95.04066 67.55749 122.52383 53.00877 137.07255
## 109 97.68357 68.34107 127.02607 52.80808 142.55906
## 110 100.32648 69.03054 131.62243 52.46346 148.18950
## 111 102.96939 69.63147 136.30731 51.98344 153.95534
## 112 105.61231 70.14886 141.07575 51.37564 159.84897
## 113 108.25522 70.58713 145.92330 50.64685 165.86358
## 114 110.89813 70.95024 150.84602 49.80310 171.99315
## 115 113.54104 71.24169 155.84039 48.84977 178.23232
## 116 116.18395 71.46461 160.90329 47.79162 184.57628
## 117 118.82686 71.62180 166.03193 46.63295 191.02078
## 118 121.46978 71.71576 171.22379 45.37758 197.56197
## 119 124.11269 71.74874 176.47663 44.02895 204.19643
## 120 126.75560 71.72278 181.78842 42.59017 210.92103
#Lamda=0.6 dan gamma=0.3
des.2<- HoltWinters(forecast.ts, gamma = FALSE, beta = 0.3, alpha = 0.6)
plot(des.2)
#Ramalan
ramalandes2<- forecast(des.2, h=24)
ramalandes2
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 97 86.38461 72.70305 100.0662 65.46047 107.3087
## 98 92.84343 75.49210 110.1948 66.30686 119.3800
## 99 99.30224 77.54039 121.0641 66.02036 132.5841
## 100 105.76106 78.98712 132.5350 64.81385 146.7083
## 101 112.21988 79.92444 144.5153 62.82827 161.6115
## 102 118.67870 80.41433 156.9431 60.15840 177.1990
## 103 125.13752 80.50039 169.7746 56.87093 193.4041
## 104 131.59633 80.21484 182.9778 53.01511 210.1776
## 105 138.05515 79.58253 196.5278 48.62899 227.4813
## 106 144.51397 78.62337 210.4046 43.74300 245.2849
## 107 150.97279 77.35379 224.5918 38.38225 263.5633
## 108 157.43161 75.78765 239.0756 32.56795 282.2953
## 109 163.89042 73.93690 253.8439 26.31838 301.4625
## 110 170.34924 71.81199 268.8865 19.64952 321.0490
## 111 176.80806 69.42219 284.1939 12.57555 341.0406
## 112 183.26688 66.77581 299.7579 5.10916 361.4246
## 113 189.72570 63.88033 315.5711 -2.73818 382.1896
## 114 196.18451 60.74260 331.6264 -10.95602 403.3250
## 115 202.64333 57.36887 347.9178 -19.53478 424.8214
## 116 209.10215 53.76492 364.4394 -28.46564 446.6699
## 117 215.56097 49.93609 381.1858 -37.74042 468.8624
## 118 222.01979 45.88736 398.1522 -47.35152 491.3911
## 119 228.47860 41.62335 415.3339 -57.29184 514.2490
## 120 234.93742 37.14843 432.7264 -67.55473 537.4296
Selanjutnya jika ingin membandingkan plot data ramal dan data uji adalah sebagai berikut.
#Visually evaluate the prediction
plot(dt.set.ts)
lines(des.1$fitted[,1], lty=2, col="blue")
lines(ramalandes1$mean, col="red")
Untuk mendapatkan nilai parameter optimum dari DES,
argumen alpha dan beta dapat
dibuat NULL seperti berikut.
#Lamda dan gamma optimum
des.opt<- HoltWinters(forecast.ts, gamma = FALSE)
des.opt
## Holt-Winters exponential smoothing with trend and without seasonal component.
##
## Call:
## HoltWinters(x = forecast.ts, gamma = FALSE)
##
## Smoothing parameters:
## alpha: 0.774612
## beta : 0.05266104
## gamma: FALSE
##
## Coefficients:
## [,1]
## a 79.005407
## b 1.528393
plot(des.opt)
#Ramalan
ramalandesopt<- forecast(des.opt, h=24)
ramalandesopt
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 97 80.53380 67.84439 93.22321 61.12702210 99.94058
## 98 82.06219 65.68900 98.43539 57.02155685 107.10283
## 99 83.59059 63.94062 103.24056 53.53854873 113.64262
## 100 85.11898 62.41046 107.82750 50.38929620 119.84866
## 101 86.64737 61.00983 112.28492 47.43813056 125.85661
## 102 88.17576 59.68931 116.66222 44.60949861 131.74203
## 103 89.70416 58.41846 120.98986 41.85680581 137.55151
## 104 91.23255 57.17713 125.28797 39.14928467 143.31582
## 105 92.76094 55.95140 129.57049 36.46560217 149.05629
## 106 94.28934 54.73122 133.84745 33.79041854 154.78825
## 107 95.81773 53.50918 138.12628 31.11239107 160.52307
## 108 97.34612 52.27968 142.41256 28.42294729 166.26930
## 109 98.87452 51.03840 146.71063 25.71549529 172.03354
## 110 100.40291 49.78199 151.02383 22.98489589 177.82092
## 111 101.93130 48.50779 155.35481 20.22709856 183.63550
## 112 103.45969 47.21371 159.70568 17.43888347 189.48050
## 113 104.98809 45.89805 164.07812 14.61767466 195.35850
## 114 106.51648 44.55946 168.47350 11.76140189 201.27156
## 115 108.04487 43.19686 172.89289 8.86839681 207.22135
## 116 109.57327 41.80936 177.33717 5.93731366 213.20922
## 117 111.10166 40.39625 181.80707 2.96706797 219.23625
## 118 112.63005 38.95696 186.30314 -0.04321143 225.30331
## 119 114.15844 37.49105 190.82584 -3.09422042 231.41111
## 120 115.68684 35.99814 195.37554 -6.18650989 237.56018
Selanjutnya akan dilakukan perhitungan akurasi pada data latih maupun data uji dengan ukuran akurasi SSE, MSE dan MAPE.
#Akurasi data ramal
ssedes.forecast1<-des.1$SSE
msedes.forecast1<-ssedes.forecast1/length(forecast.ts)
sisaandes1<-ramalandes1$residuals
head(sisaandes1)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] NA NA -0.90000 2.51600 14.84816 12.01996
mapedes.forecast1 <- sum(abs(sisaandes1[3:length(forecast.ts)]/forecast.ts[3:length(forecast.ts)])
*100)/length(forecast.ts)
akurasides.1 <- matrix(c(ssedes.forecast1,msedes.forecast1,mapedes.forecast1))
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 13278.0436
## MSE 138.3130
## MAPE 16.7852
Diperoleh nilai MAPE sebesar 16.78 untuk metode DES dengan lamda=0.2 dan gamma=0.2.
ssedes.forecast2<-des.2$SSE
msedes.forecast2<-ssedes.forecast2/length(forecast.ts)
sisaandes2<-ramalandes2$residuals
head(sisaandes2)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] NA NA -0.900000 3.002000 13.722440 3.440577
mapedes.forecast2 <- sum(abs(sisaandes2[3:length(forecast.ts)]/forecast.ts[3:length(forecast.ts)])
*100)/length(forecast.ts)
akurasides.2 <- matrix(c(ssedes.forecast2,msedes.forecast2,mapedes.forecast2))
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 10638.85009
## MSE 110.82136
## MAPE 13.61711
Diperoleh nilai MAPE sebesar 13.62 untuk lamda=0.6 dan gamma=0.3. Hasil dari akurasi dari data forecasting didapatkan pada skenario kedua yakni lamda=0.6 dan gamma=0.3 memiliki hasil yang lebih baik. Namun untuk kedua skenario dapat dikategorikan peramalan yang baik berdasarkan nilai MAPE-nya.
#Akurasi data uji
selisihdes1<-ramalandes1$mean-testing$`Produksi Karet Kering`
selisihdes1
## Time Series:
## Start = 97
## End = 120
## Frequency = 1
## [1] 26.738630 29.251542 31.594453 38.667365 31.010277 33.823189 42.956100
## [8] 50.149012 7.031924 11.604836 23.067747 9.950659 57.523571 60.316482
## [15] 63.819394 68.882306 65.505218 67.948129 73.261041 80.863953 69.456864
## [22] 70.259776 75.342688 74.365600
SSEtestingdes1<-sum(selisihdes1^2)
MSEtestingdes1<-SSEtestingdes1/length(testing$`Produksi Karet Kering`)
MAPEtestingdes1<-sum(abs(selisihdes1/testing$`Produksi Karet Kering`)*100)/length(testing$`Produksi Karet Kering`)
selisihdes2<-ramalandes2$mean-testing$`Produksi Karet Kering`
selisihdes2
## Time Series:
## Start = 97
## End = 120
## Frequency = 1
## [1] 47.15461 53.48343 59.64224 70.53106 66.68988 73.31870 86.26752
## [8] 97.27633 57.97515 66.36397 81.64279 72.34161 123.73042 130.33924
## [15] 137.65806 146.53688 146.97570 153.23451 162.36333 173.78215 166.19097
## [22] 170.80979 179.70860 182.54742
SSEtestingdes2<-sum(selisihdes2^2)
MSEtestingdes2<-SSEtestingdes2/length(testing$`Produksi Karet Kering`)
MAPEtestingdes2<-sum(abs(selisihdes2/testing$`Produksi Karet Kering`)*100)/length(testing$`Produksi Karet Kering`)
selisihdesopt<-ramalandesopt$mean-testing$`Produksi Karet Kering`
selisihdesopt
## Time Series:
## Start = 97
## End = 120
## Frequency = 1
## [1] 41.30380 42.70219 43.93059 49.88898 41.11737 42.81576 50.83416 56.91255
## [9] 12.68094 16.13934 26.48773 12.25612 58.71452 60.39291 62.78130 66.72969
## [17] 62.23809 63.56648 67.76487 74.25327 61.73166 61.42005 65.38844 63.29684
SSEtestingdesopt<-sum(selisihdesopt^2)
MSEtestingdesopt<-SSEtestingdesopt/length(testing$`Produksi Karet Kering`)
MAPEtestingdesopt<-sum(abs(selisihdesopt/testing$`Produksi Karet Kering`)*100)/length(testing$`Produksi Karet Kering`)
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 68891.2561 356787.2043 67942.6655
## MSE 2870.4690 14866.1335 2830.9444
## MAPE 114.2049 256.1443 118.6527
Didapakan nilai MAPEnya secara berturut-turut sebesar 114.20, 256.14, dan 118.65 (optimum).
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 4687.347 2870.469
## ske 2 13192.734 14866.134
## ske opt 13279.239 2830.944
Kedua metode dapat dibandingkan dengan menggunakan ukuran akurasi yang sama. Contoh di atas adalah perbandingan kedua metode dengan ukuran akurasi MSE. Hasilnya didapatkan metode DES lebih baik dibandingkan metode SES dilihat dari MSE yang lebih kecil nilainya. Hal ini sesuai sebab metode pemulusan DES lebih baik digunakan untuk data yang trend (bukan stasioner/konstan).
Dikarenakan data yang digunakan masih sama, maka sama seperti sebelumnya data akan dibagi dengan cara yang sama. Untuk frequency dicoba menggunakan nilai 3 serta nilai 11, sebab dilihat dari pola datanya membentuk pola yang mirip setiap 3 bulan, maupun 11 bulan.
#Membagi forecasting dan testing
forecasting<-dt.set[1:96,2]
testing<-dt.set[97:120,2]
forecast1.ts<-ts(forecasting, frequency = 3)
test1.ts<-ts(testing, frequency = 3)
forecast2.ts<-ts(forecasting,frequency=11)
test2.ts<-ts(testing, frequency = 11)
Sama seperti sebelumnya, dilakukan eksplorasi dengan plot deret waktu, tentunya akan menghasilkan hasil yang serupa.
#Membuat plot time series
plot(dt.set.ts, col="red",main="Plot Semua Data")
points(dt.set.ts)
#frequency=3
plot(forecast1.ts, col="blue",main="Plot Data Ramal")
points(forecast1.ts)
plot(test1.ts, col="green",main="Plot data Uji")
points(test1.ts)
#frequency=7
plot(forecast2.ts, col="orange",main="Plot Data Ramal")
points(forecast2.ts)
plot(test2.ts, col="pink",main="Plot data Uji")
points(test2.ts)
Metode Holt-Winter untuk peramalan data musiman menggunakan tiga persamaan pemulusan yang terdiri atas persamaan untuk level \((L_t)\) , trend \((B_t)\) , dan komponen seasonal / musiman \((S_t)\) dengan parameter pemulusan berupa \(\alpha\), \(\beta\), dan \(\gamma\). Metode Holt-Winter musiman terbagi menjadi dua, yaitu metode aditif dan metode multiplikatif.
Pemulusan data musiman dengan metode Winter dilakukan menggunakan
fungsi HoltWinters() dengan memasukkan argumen tambahan,
yaitu gamma() dan seasonal() .
Arguman seasonal() diinisialisasi menyesuaikan jenis
musiman, aditif atau multiplikatif.
Perhitungan dengan model aditif dilakukan jika plot data asli menunjukkan fluktuasi musiman yang relatif stabil (konstan).
#Pemulusan dengan winter aditif (frequency 3)
winter1f3 <- HoltWinters(forecast1.ts,alpha=0.2,beta=0.1,gamma=0.1,seasonal = "additive")
winter1f3$fitted
## Time Series:
## Start = c(2, 1)
## End = c(32, 3)
## Frequency = 3
## xhat level trend season
## 2.000000 41.37444 44.35000 -0.55333333 -2.42222222
## 2.333333 45.65473 43.28178 -0.60482222 2.97777778
## 2.666667 41.85654 42.98601 -0.57391689 -0.55555556
## 3.000000 39.57156 42.74078 -0.54104762 -2.62817778
## 3.333333 46.13035 43.44543 -0.41647880 3.10139911
## 3.666667 41.21371 42.14288 -0.50508571 -0.42407847
## 4.000000 38.38379 41.07505 -0.56135998 -2.12990252
## 4.333333 42.65887 40.47693 -0.56503571 2.74697147
## 4.666667 38.09073 39.36012 -0.62021306 -0.64917552
## 5.000000 39.29913 41.76176 -0.31802773 -2.14460544
## 5.333333 46.40216 43.94391 -0.06801032 2.52626207
## 5.666667 44.52098 44.01547 -0.05405354 0.55956576
## 6.000000 42.12021 43.37722 -0.11247312 -1.14453580
## 6.333333 45.31191 42.88070 -0.15087728 2.58208921
## 6.666667 43.69421 43.44744 -0.07911557 0.32588746
## 7.000000 42.30033 43.64948 -0.05099985 -1.29815247
## 7.333333 47.56055 44.63842 0.05299351 2.86913606
## 7.666667 44.24543 43.83930 -0.03221743 0.43835033
## 8.000000 41.93669 42.93800 -0.11912613 -0.88217899
## 8.333333 44.73597 42.37153 -0.16385997 2.52829227
## 8.666667 41.40062 41.54048 -0.23057927 0.09071555
## 9.000000 43.03207 44.04978 0.04340840 -1.06111438
## 9.333333 48.99795 46.45677 0.27976698 2.26141506
## 9.666667 48.40582 46.92095 0.29820791 1.18666626
## 10.000000 46.42800 46.33399 0.20969147 -0.11568009
## 10.333333 48.21119 45.74608 0.12993142 2.33517878
## 10.666667 47.59948 46.56778 0.19910757 0.83260051
## 11.000000 46.53358 46.76899 0.19931790 -0.43472030
## 11.333333 50.59932 47.71359 0.27384623 2.61188339
## 11.666667 48.05427 47.04157 0.17925989 0.83344185
## 12.000000 45.98654 46.05998 0.06317446 -0.13660699
## 12.333333 47.52742 45.31184 -0.01795641 2.23353804
## 12.666667 44.81620 44.54040 -0.09330487 0.36910011
## 13.000000 46.85250 47.13786 0.17577122 -0.46113044
## 13.333333 51.38999 49.10313 0.35472127 1.93214419
## 13.666667 51.12598 49.33785 0.34272140 1.44540445
## 14.000000 48.87305 48.40338 0.21500187 0.25466979
## 14.333333 49.46285 47.47777 0.10094090 1.88414470
## 14.666667 49.29775 48.20014 0.16308381 0.93452632
## 15.000000 48.13603 48.19167 0.14592883 -0.20157409
## 15.333333 51.27712 48.93840 0.20600827 2.13271633
## 15.666667 49.20275 48.22298 0.11386585 0.86590640
## 16.000000 47.12265 47.09430 -0.01038920 0.03874369
## 16.333333 47.85368 46.18938 -0.09984220 1.76414666
## 16.666667 45.62517 45.42280 -0.16651582 0.36888619
## 17.000000 47.77476 47.98725 0.10658081 -0.31906832
## 17.333333 52.39621 50.54688 0.35188559 1.49745219
## 17.666667 52.65775 50.84952 0.34696129 1.46127271
## 18.000000 51.89369 50.91293 0.31860622 0.66215079
## 18.333333 52.09869 50.38680 0.23413247 1.47775500
## 18.666667 51.96121 50.40119 0.21215874 1.34785241
## 19.000000 50.06710 49.62911 0.11373463 0.32425581
## 19.333333 52.13368 50.54943 0.19439259 1.38986007
## 19.666667 52.33816 51.14908 0.23491901 0.95415598
## 20.000000 52.68201 51.76237 0.27275585 0.64688762
## 20.333333 55.52480 53.54872 0.42411558 1.55196578
## 20.666667 57.14040 55.46188 0.57301948 1.10550335
## 21.000000 61.91476 59.72082 0.94161146 1.25232652
## 21.333333 61.72438 58.81948 0.75731636 2.14758139
## 21.666667 60.62062 57.49192 0.54882885 2.57987128
## 22.000000 56.74619 55.89662 0.33441647 0.51514609
## 22.333333 55.58093 54.14180 0.12549273 1.31363135
## 22.666667 55.17321 53.41111 0.03987419 1.72222175
## 23.000000 52.27420 52.63634 -0.04158994 -0.32054884
## 23.333333 53.48600 52.55991 -0.04507403 0.97115717
## 23.666667 52.21921 51.01764 -0.19479394 1.39636524
## 24.000000 47.50194 48.28500 -0.44857816 -0.33448520
## 24.333333 46.52770 46.71604 -0.56061696 0.37227752
## 24.666667 45.08994 45.34988 -0.64117091 0.38122839
## 25.000000 43.29151 44.71472 -0.64056967 -0.78264040
## 25.333333 41.80911 42.55185 -0.79279991 0.05006171
## 25.666667 39.97508 40.50923 -0.91778215 0.38363334
## 26.000000 36.37238 38.76443 -1.00048373 -1.39156136
## 26.333333 35.32967 36.86947 -1.08993142 -0.44986724
## 26.666667 36.11751 37.02960 -0.96492483 0.05282702
## 27.000000 34.49275 37.10318 -0.86107495 -1.74935214
## 27.333333 35.58898 36.38555 -0.84672996 0.05015912
## 27.666667 34.15074 34.62103 -0.93850959 0.46822656
## 28.000000 39.82547 41.65837 -0.14092446 -1.69197218
## 28.333333 48.15556 47.96835 0.50416611 -0.31695942
## 28.666667 56.08803 51.61140 0.81805499 3.65856710
## 29.000000 59.11714 56.95785 1.27089447 0.88839011
## 29.333333 55.69127 53.91332 0.83935170 0.93859610
## 29.666667 57.04667 51.10242 0.47432633 5.46992499
## 30.000000 46.97022 47.71941 0.08859293 -0.83778097
## 30.333333 44.43364 45.13396 -0.17881153 -0.52150538
## 30.666667 48.50233 44.77242 -0.19708438 3.92699139
## 31.000000 41.32634 43.53487 -0.30113091 -1.90739881
## 31.333333 41.38842 42.37047 -0.38745771 -0.59459677
## 31.666667 43.18171 40.23333 -0.56242603 3.51080528
## 32.000000 44.30460 46.44256 0.11473979 -2.25270601
## 32.333333 52.14156 52.70638 0.72964787 -1.29447008
## 32.666667 63.55060 56.31372 1.01741666 6.21946856
xhat1f3 <- winter1f3$fitted[,2]
winter1f3.opt<- HoltWinters(forecast1.ts, alpha= NULL, beta = NULL, gamma = NULL, seasonal = "additive")
winter1f3.opt
## Holt-Winters exponential smoothing with trend and additive seasonal component.
##
## Call:
## HoltWinters(x = forecast1.ts, alpha = NULL, beta = NULL, gamma = NULL, seasonal = "additive")
##
## Smoothing parameters:
## alpha: 0.7948401
## beta : 0.001457291
## gamma: 0.5627274
##
## Coefficients:
## [,1]
## a 70.0261792
## b -0.4461708
## s1 -0.1794088
## s2 -0.5980759
## s3 11.4583774
winter1f3.opt$fitted
## Time Series:
## Start = c(2, 1)
## End = c(32, 3)
## Frequency = 3
## xhat level trend season
## 2.000000 41.37444 44.35000 -0.5533333 -2.42222222
## 2.333333 44.17186 41.75040 -0.5563153 2.97777778
## 2.666667 42.49261 43.60097 -0.5528078 -0.55555556
## 3.000000 40.57780 43.84888 -0.5516409 -2.71943957
## 3.333333 50.22984 47.44805 -0.5455920 3.32737416
## 3.666667 39.12788 40.12261 -0.5554722 -0.43925273
## 4.000000 36.31573 38.98858 -0.5563153 -2.11654095
## 4.333333 41.71844 39.92996 -0.5541327 2.34261221
## 4.666667 36.85093 37.93046 -0.5562391 -0.52328599
## 5.000000 47.93281 50.36911 -0.5373017 -1.89900347
## 5.333333 54.50546 52.90561 -0.5328223 2.13267453
## 5.666667 47.30943 46.48663 -0.5414002 1.36419922
## 6.000000 39.40659 41.40715 -0.5480135 -1.45253949
## 6.333333 42.22039 41.48976 -0.5470945 1.27772039
## 6.666667 46.41758 46.25189 -0.5393574 0.70505069
## 7.000000 42.76344 44.66526 -0.5408835 -1.36094146
## 7.333333 49.40267 47.88919 -0.5353971 2.04887544
## 7.666667 42.51362 42.50315 -0.5424659 0.55293671
## 8.000000 38.52367 39.88327 -0.5454933 -0.81410977
## 8.333333 41.07297 40.27277 -0.5441308 1.34432787
## 8.666667 39.69602 39.98858 -0.5437520 0.25119678
## 9.000000 50.48431 51.68852 -0.5259093 -0.67830350
## 9.333333 55.49387 54.63264 -0.5208525 1.38208307
## 9.666667 51.18372 49.68145 -0.5273088 2.02957228
## 10.000000 42.71840 43.42834 -0.5356529 -0.17428860
## 10.333333 42.87401 42.67141 -0.5359754 0.73858473
## 10.666667 49.79895 49.12683 -0.5257869 1.19790970
## 11.000000 46.12642 46.86118 -0.5283224 -0.20642964
## 11.333333 50.84892 49.61839 -0.5235344 1.75407351
## 11.666667 45.55330 45.13740 -0.5293016 0.94519687
## 12.000000 41.72017 41.98251 -0.5331278 0.27078807
## 12.333333 42.26254 41.61616 -0.5328848 1.17926107
## 12.666667 42.30620 42.27352 -0.5311502 0.56383406
## 13.000000 54.21339 54.43103 -0.5126592 0.29501302
## 13.333333 56.02080 55.17948 -0.5108214 1.35214161
## 13.666667 52.40097 50.51101 -0.5168803 2.40684028
## 14.000000 43.85732 43.90488 -0.5257541 0.47818595
## 14.333333 43.05452 42.83282 -0.5265502 0.74825059
## 14.666667 50.87641 49.86955 -0.5155283 1.52238820
## 15.000000 47.29795 47.41747 -0.5183504 0.39883598
## 15.333333 51.28583 49.95293 -0.5139001 1.84680391
## 15.666667 46.49204 45.77018 -0.5192467 1.24110626
## 16.000000 42.78647 42.46737 -0.5233032 0.84239703
## 16.333333 42.62605 41.83560 -0.5234613 1.31391000
## 16.666667 43.13306 42.81753 -0.5212675 0.83679885
## 17.000000 55.45457 55.13050 -0.5025642 0.82664217
## 17.333333 59.30792 58.27261 -0.4972529 1.53256497
## 17.666667 54.28136 52.08595 -0.5055440 2.70094903
## 18.000000 50.00997 49.16302 -0.5090668 1.35602563
## 18.333333 46.98846 46.79404 -0.5117773 0.70618894
## 18.666667 51.31350 49.47080 -0.5071306 2.34982677
## 19.000000 46.14072 45.56692 -0.5120807 1.08587759
## 19.333333 52.04765 51.38120 -0.5028614 1.16931826
## 19.666667 53.91335 52.55731 -0.5004146 1.85645509
## 20.000000 53.81330 52.30858 -0.5000478 2.00476935
## 20.333333 57.84527 56.92468 -0.4925921 1.41318674
## 20.666667 61.91178 60.50542 -0.4866561 1.89301165
## 21.000000 73.15191 70.87487 -0.4708356 2.74788032
## 21.333333 55.65834 54.14803 -0.4945253 2.00483197
## 21.666667 53.15959 50.18932 -0.4995736 3.46984111
## 22.000000 46.98227 47.09890 -0.5033493 0.38672493
## 22.333333 47.05078 46.05325 -0.5041395 1.50166548
## 22.666667 51.52087 48.92656 -0.4992176 3.09352405
## 23.000000 47.90107 48.09282 -0.4997051 0.30795719
## 23.333333 52.42798 50.93059 -0.4948414 1.99223465
## 23.666667 47.86918 45.32653 -0.5022871 3.04493494
## 24.000000 38.47670 38.19593 -0.5119464 0.79271952
## 24.333333 41.14711 40.40496 -0.5079812 1.25012949
## 24.666667 42.54808 40.97231 -0.5064141 2.08218416
## 25.000000 43.19466 42.51016 -0.5034350 1.18793608
## 25.333333 36.92795 36.03377 -0.5121394 1.40631997
## 25.666667 36.29972 34.43433 -0.5137239 2.37910996
## 26.000000 33.36132 33.55521 -0.5142564 0.32037496
## 26.333333 32.61187 31.87943 -0.5159490 1.24839110
## 26.666667 40.31218 38.49171 -0.5055611 2.32603626
## 27.000000 38.42651 38.77925 -0.5044053 0.15166642
## 27.333333 37.49386 35.71823 -0.5081311 2.28375355
## 27.666667 31.97411 30.04853 -0.5156530 2.44123330
## 28.000000 62.27397 62.96058 -0.4669391 -0.21967715
## 28.333333 71.36633 70.28787 -0.4555806 1.53404364
## 28.666667 70.69027 63.85801 -0.4642869 7.29654924
## 29.000000 70.24147 69.78402 -0.4549744 0.91242090
## 29.333333 43.51005 43.33661 -0.4928529 0.66628942
## 29.666667 45.74389 38.01904 -0.4998839 8.22472904
## 30.000000 27.80118 31.17324 -0.5091318 -2.86293461
## 30.333333 34.73634 35.27325 -0.5024149 -0.03449213
## 30.666667 48.56319 41.75244 -0.4922407 7.30299642
## 31.000000 34.38500 37.07680 -0.4983371 -2.19346575
## 31.333333 39.14920 38.66492 -0.4952965 0.97957350
## 31.666667 39.18838 32.99585 -0.5028362 6.69536543
## 32.000000 60.22960 62.57900 -0.4589922 -1.89041147
## 32.333333 73.68612 73.89986 -0.4418255 0.22809241
## 32.666667 78.38524 67.77006 -0.4501146 11.06530136
xhat1f3.opt <- winter1f3.opt$fitted[,2]
#Pemulisan dengan winter aditif (frequency 11)
winter1f11 <- HoltWinters(forecast2.ts,alpha=0.2,beta=0.1,gamma=0.1,seasonal = "additive")
winter1f11$fitted
## Time Series:
## Start = c(2, 1)
## End = c(9, 8)
## Frequency = 11
## xhat level trend season
## 2.000000 52.09857 42.71942 0.227082009 9.1520661
## 2.090909 51.23160 43.16679 0.249110617 7.8157025
## 2.181818 46.37849 43.52958 0.260478563 2.5884298
## 2.272727 40.85224 43.93436 0.274908804 -3.3570248
## 2.363636 39.73711 44.35882 0.289863911 -4.9115702
## 2.454545 47.47427 44.74126 0.299121628 2.4338843
## 2.545455 48.72341 45.32553 0.327636278 3.0702479
## 2.636364 43.58117 44.92848 0.255167999 -1.6024793
## 2.727273 40.76212 45.96742 0.333544562 -5.5388430
## 2.818182 41.19945 46.80854 0.384302194 -5.9933884
## 2.909091 43.63424 46.93295 0.358313164 -3.6570248
## 3.000000 56.02422 46.50442 0.279628405 9.2401805
## 3.090909 51.70752 43.85920 -0.012856078 7.8611743
## 3.181818 47.22598 44.52484 0.054993583 2.6461507
## 3.272727 43.01491 46.10464 0.207473912 -3.2972044
## 3.363636 43.16417 47.69313 0.345575798 -4.8745394
## 3.454545 51.11171 48.20187 0.361892491 2.5479429
## 3.545455 49.79826 46.82942 0.188458350 2.7803748
## 3.636364 46.32915 47.39223 0.225893232 -1.2889731
## 3.727273 42.78999 47.87429 0.251510231 -5.3358124
## 3.818182 43.92337 49.61981 0.400910413 -6.0973445
## 3.909091 46.87812 50.41004 0.439842992 -3.9717638
## 4.000000 58.34178 49.92426 0.347280581 8.0702426
## 4.090909 55.14080 46.98918 0.019044912 8.1325729
## 4.181818 47.77957 44.73207 -0.208571128 3.2560720
## 4.272727 43.87802 46.62158 0.001237481 -2.7447968
## 4.363636 44.43762 49.00722 0.239676995 -4.8092726
## 4.454545 52.73830 50.51737 0.366724582 1.8542063
## 4.545455 52.42131 49.28443 0.206758582 2.9301143
## 4.636364 46.47616 47.64093 0.021732449 -1.1865051
## 4.727273 44.28683 48.88143 0.143609283 -4.7382117
## 4.818182 44.14073 49.85568 0.226672697 -5.9416142
## 4.909091 47.50685 51.48220 0.366658024 -4.3420135
## 5.000000 58.78871 51.68149 0.349921111 6.7572999
## 5.090909 56.12772 48.87167 0.033946889 7.2221088
## 5.181818 50.06977 46.21007 -0.235607602 4.0953065
## 5.272727 42.72687 44.86451 -0.346602997 -1.7910388
## 5.363636 43.51191 47.82853 -0.015540349 -4.3010823
## 5.454545 52.64797 51.11861 0.315021447 1.2143423
## 5.545455 53.82911 51.33404 0.305061963 2.1900098
## 5.636364 50.67556 51.12128 0.253279786 -0.6989978
## 5.727273 46.56066 50.77345 0.193168601 -4.4059581
## 5.818182 46.75477 51.85448 0.281955487 -5.3816729
## 5.909091 48.07218 52.19349 0.287660183 -4.4089611
## 6.000000 59.58833 53.68671 0.408216500 5.4934031
## 6.090909 59.45280 53.00926 0.299649940 6.1438908
## 6.181818 56.11087 52.26435 0.195193939 3.6513249
## 6.272727 53.09856 53.28737 0.277976577 -0.4667882
## 6.363636 53.03620 55.53963 0.475405418 -2.9788351
## 6.454545 62.62238 60.52180 0.926081319 1.1745044
## 6.545455 62.17392 59.46340 0.727633625 1.9828811
## 6.636364 57.58697 58.01625 0.510155263 -0.9394425
## 6.727273 53.29462 56.98902 0.356415940 -4.0508105
## 6.818182 50.80418 55.94651 0.216523523 -5.3588541
## 6.909091 52.56190 56.26220 0.226439992 -3.9267359
## 7.000000 61.45259 56.19626 0.197202001 5.0591368
## 7.090909 60.25916 54.52294 0.010150115 5.7260668
## 7.181818 55.38868 51.68126 -0.275032995 3.9824554
## 7.272727 47.96521 48.23449 -0.592206597 0.3229272
## 7.363636 44.53960 46.42924 -0.713510781 -1.1761315
## 7.454545 44.93422 45.30781 -0.754302740 0.3807136
## 7.545455 44.95304 44.59066 -0.750587154 1.1129677
## 7.636364 39.49502 41.98547 -0.936048023 -1.5543998
## 7.727273 34.63729 40.26242 -1.014748408 -4.6103802
## 7.818182 33.17833 39.48821 -0.990694141 -5.3191883
## 7.909091 33.18190 38.24185 -1.016260682 -4.0436878
## 8.000000 42.36784 38.90521 -0.848298711 4.3109293
## 8.090909 41.56122 37.84534 -0.869455501 4.5853343
## 8.181818 37.42292 35.70564 -0.996479925 2.7137610
## 8.272727 32.13735 33.42458 -1.124938399 -0.1622895
## 8.363636 39.05178 40.67817 -0.287085399 -1.3392993
## 8.454545 47.76578 46.99673 0.373478904 0.3955760
## 8.545455 51.65334 50.58705 0.695163264 0.3711242
## 8.636364 56.06504 56.69755 1.236696521 -1.8692013
## 8.727273 50.58127 54.22923 0.866195707 -4.5141631
## 8.818182 47.64909 52.46718 0.603370377 -5.4214544
## 8.909091 48.12648 51.09273 0.405588532 -3.3718399
## 9.000000 52.93438 48.59302 0.115058996 4.2263021
## 9.090909 50.82921 46.82520 -0.073228654 4.0772366
## 9.181818 47.22225 45.24613 -0.223812892 2.1999271
## 9.272727 45.74094 42.97987 -0.428057834 3.1891225
## 9.363636 40.54451 39.93163 -0.690076537 1.3029579
## 9.454545 48.26279 46.54065 0.039833322 1.6823134
## 9.545455 55.05076 51.93792 0.575577433 2.5372572
## 9.636364 52.26331 54.80935 0.805162296 -3.3512046
xhat1f11 <- winter1f11$fitted[,2]
winter1f11.opt<- HoltWinters(forecast2.ts, alpha= NULL, beta = NULL, gamma = NULL, seasonal = "additive")
winter1f11.opt
## Holt-Winters exponential smoothing with trend and additive seasonal component.
##
## Call:
## HoltWinters(x = forecast2.ts, alpha = NULL, beta = NULL, gamma = NULL, seasonal = "additive")
##
## Smoothing parameters:
## alpha: 1
## beta : 0
## gamma: 1
##
## Coefficients:
## [,1]
## a 83.392479
## b 0.227082
## s1 -5.538843
## s2 -5.993388
## s3 -3.657025
## s4 9.152066
## s5 7.815702
## s6 2.588430
## s7 -3.357025
## s8 -4.911570
## s9 2.433884
## s10 3.070248
## s11 -1.602479
winter1f11.opt$fitted
## Time Series:
## Start = c(2, 1)
## End = c(9, 8)
## Frequency = 11
## xhat level trend season
## 2.000000 52.09857 42.71942 0.227082 9.152066
## 2.090909 52.09072 44.04793 0.227082 7.815702
## 2.181818 46.79981 43.98430 0.227082 2.588430
## 2.272727 41.38163 44.51157 0.227082 -3.357025
## 2.363636 40.27254 44.95702 0.227082 -4.911570
## 2.454545 47.77254 45.11157 0.227082 2.433884
## 2.545455 49.76345 46.46612 0.227082 3.070248
## 2.636364 40.65435 42.02975 0.227082 -1.602479
## 2.727273 43.79072 49.10248 0.227082 -5.538843
## 2.818182 43.07254 48.83884 0.227082 -5.993388
## 2.909091 42.46345 45.89339 0.227082 -3.657025
## 3.000000 52.73617 43.35702 0.227082 9.152066
## 3.090909 40.29072 32.24793 0.227082 7.815702
## 3.181818 50.09981 47.28430 0.227082 2.588430
## 3.272727 49.13163 52.26157 0.227082 -3.357025
## 3.363636 48.59254 53.27702 0.227082 -4.911570
## 3.454545 51.55254 48.89157 0.227082 2.433884
## 3.545455 43.30345 40.00612 0.227082 3.070248
## 3.636364 47.22435 48.59975 0.227082 -1.602479
## 3.727273 43.90072 49.21248 0.227082 -5.538843
## 3.818182 50.03254 55.79884 0.227082 -5.993388
## 3.909091 48.43345 51.86339 0.227082 -3.657025
## 4.000000 55.28617 45.90702 0.227082 9.152066
## 4.090909 40.82072 32.77793 0.227082 7.815702
## 4.181818 38.75981 35.94430 0.227082 2.588430
## 4.272727 52.55163 55.68157 0.227082 -3.357025
## 4.363636 54.47254 59.15702 0.227082 -4.911570
## 4.454545 58.36254 55.70157 0.227082 2.433884
## 4.545455 45.60345 42.30612 0.227082 3.070248
## 4.636364 38.72435 40.09975 0.227082 -1.602479
## 4.727273 48.86072 54.17248 0.227082 -5.538843
## 4.818182 48.21254 53.97884 0.227082 -5.993388
## 4.909091 53.70345 57.13339 0.227082 -3.657025
## 5.000000 59.70617 50.32702 0.227082 9.152066
## 5.090909 41.88072 33.83793 0.227082 7.815702
## 5.181818 37.64981 34.83430 0.227082 2.588430
## 5.272727 38.80163 41.93157 0.227082 -3.357025
## 5.363636 57.95254 62.63702 0.227082 -4.911570
## 5.454545 67.61254 64.95157 0.227082 2.433884
## 5.545455 53.01345 49.71612 0.227082 3.070248
## 5.636364 46.79435 48.16975 0.227082 -1.602479
## 5.727273 43.96072 49.27248 0.227082 -5.538843
## 5.818182 50.77254 56.53884 0.227082 -5.993388
## 5.909091 49.60345 53.03339 0.227082 -3.657025
## 6.000000 67.13617 57.75702 0.227082 9.152066
## 6.090909 53.05072 45.00793 0.227082 7.815702
## 6.181818 49.22981 46.41430 0.227082 2.588430
## 6.272727 54.53163 57.66157 0.227082 -3.357025
## 6.363636 61.64254 66.32702 0.227082 -4.911570
## 6.454545 83.14254 80.48157 0.227082 2.433884
## 6.545455 53.56345 50.26612 0.227082 3.070248
## 6.636364 46.85435 48.22975 0.227082 -1.602479
## 6.727273 46.19072 51.50248 0.227082 -5.538843
## 6.818182 46.07254 51.83884 0.227082 -5.993388
## 6.909091 53.86345 57.29339 0.227082 -3.657025
## 7.000000 64.13617 54.75702 0.227082 9.152066
## 7.090909 50.99072 42.94793 0.227082 7.815702
## 7.181818 40.99981 38.18430 0.227082 2.588430
## 7.272727 33.81163 36.94157 0.227082 -3.357025
## 7.363636 40.57254 45.25702 0.227082 -4.911570
## 7.454545 50.07254 47.41157 0.227082 2.433884
## 7.545455 45.98345 42.68612 0.227082 3.070248
## 7.636364 31.23435 32.60975 0.227082 -1.602479
## 7.727273 31.85072 37.16248 0.227082 -5.538843
## 7.818182 35.61254 41.37884 0.227082 -5.993388
## 7.909091 34.46345 37.89339 0.227082 -3.657025
## 8.000000 54.61617 45.23702 0.227082 9.152066
## 8.090909 40.20072 32.15793 0.227082 7.815702
## 8.181818 30.20981 27.39430 0.227082 2.588430
## 8.272727 25.28163 28.41157 0.227082 -3.357025
## 8.363636 72.70254 77.38702 0.227082 -4.911570
## 8.454545 79.65254 76.99157 0.227082 2.433884
## 8.545455 64.71345 61.41612 0.227082 3.070248
## 8.636364 74.28435 75.65975 0.227082 -1.602479
## 8.727273 33.83072 39.14248 0.227082 -5.538843
## 8.818182 37.21254 42.97884 0.227082 -5.993388
## 8.909091 40.32345 43.75339 0.227082 -3.657025
## 9.000000 46.63617 37.25702 0.227082 9.152066
## 9.090909 42.41072 34.36793 0.227082 7.815702
## 9.181818 38.29981 35.48430 0.227082 2.588430
## 9.272727 31.29163 34.42157 0.227082 -3.357025
## 9.363636 31.31254 35.99702 0.227082 -4.911570
## 9.454545 84.61254 81.95157 0.227082 2.433884
## 9.545455 75.91345 72.61612 0.227082 3.070248
## 9.636364 62.08435 63.45975 0.227082 -1.602479
xhat1f11.opt <- winter1f11.opt$fitted[,2]
Untuk peramalan digunakan cara berikut, dengan n.ahead adalah nilai data yang akan diramal yaitu sejumlah 24 periode.
#Forecast
forecast1f3 <- predict(winter1f3, n.ahead = 24)
forecast1f3.opt <- predict(winter1f3.opt, n.ahead = 24)
forecast1f11 <- predict(winter1f11, n.ahead = 24)
forecast1f11.opt <- predict(winter1f11.opt, n.ahead = 24)
Membuat plot deret waktu.
#Plot time series (untuk frequency=3)
plot(forecast1.ts,main="Winter 0.2;0.1;0.1",type="l",col="black",
xlim=c(1,12),pch=12)
lines(xhat1f3,type="l",col="red")
lines(xhat1f3.opt,type="l",col="blue")
lines(forecast1f3,type="l",col="red")
lines(forecast1f3.opt,type="l",col="blue")
legend("topleft",c("Actual Data",expression(paste(winter1f3)),
expression(paste(winter1f3.opt))),cex=0.5,
col=c("black","red","blue"),lty=1)
#Plot time series (untuk frequency=11)
plot(forecast2.ts,main="Winter 0.2;0.1;0.1",type="l",col="black",
xlim=c(1,12),pch=12)
lines(xhat1f11,type="l",col="red")
lines(xhat1f11.opt,type="l",col="blue")
lines(forecast1f11,type="l",col="red")
lines(forecast1f11.opt,type="l",col="blue")
legend("topleft",c("Actual Data",expression(paste(winter1f11)),
expression(paste(winter1f11.opt))),cex=0.5,
col=c("black","red","blue"),lty=1)
#Akurasi data ramal (frequency=3)
SSE1f3<-winter1f3$SSE
MSE1f3<-winter1f3$SSE/length(forecast1.ts)
RMSE1f3<-sqrt(MSE1)
akurasi1f3 <- matrix(c(SSE1f3,MSE1f3,RMSE1f3))
row.names(akurasi1f3)<- c("SSE", "MSE", "RMSE")
colnames(akurasi1f3) <- c("Akurasi frequency = 3")
akurasi1f3
## Akurasi frequency = 3
## SSE 10790.3377
## MSE 112.3994
## RMSE 10.3096
#Akurasi data ramal (frequency=7)
SSE1f11<-winter1f11$SSE
MSE1f11<-winter1f11$SSE/length(forecast2.ts)
RMSE1f11<-sqrt(MSE1)
akurasi1f11 <- matrix(c(SSE1f11,MSE1f11,RMSE1f11))
row.names(akurasi1f11)<- c("SSE", "MSE", "RMSE")
colnames(akurasi1f11) <- c("Akurasi frequency = 11")
akurasi1f11
## Akurasi frequency = 11
## SSE 12560.4961
## MSE 130.8385
## RMSE 10.3096
Didapatkan untuk frequency 3, dengan SSE 10790.34, MSE 112.40, RMSE 10.31, kemudian untuk frequency = 7, dengan SSE 12560.50, MSE 130.84, dan RMSE 10.3096
#Akurasi data ramal dengan winter aditif dengan parameter optimum
#frequency=3
SSE1f3.opt<-winter1f3.opt$SSE
MSE1f3.opt<-winter1f3.opt$SSE/length(forecast1.ts)
RMSE1f3.opt<-sqrt(MSE1f3.opt)
akurasi1f3.opt <- matrix(c(SSE1f3.opt,MSE1f3.opt,RMSE1f3.opt))
row.names(akurasi1f3.opt)<- c("SSE1f3.opt", "MSE1f3.opt", "RMSE1f3.opt")
colnames(akurasi1f3.opt) <- c("Akurasi")
akurasi1f3.opt
## Akurasi
## SSE1f3.opt 8150.811571
## MSE1f3.opt 84.904287
## RMSE1f3.opt 9.214352
#frequency=7
SSE1f11.opt<-winter1f11.opt$SSE
MSE1f11.opt<-winter1f11.opt$SSE/length(forecast2.ts)
RMSE1f11.opt<-sqrt(MSE1f11.opt)
akurasi1f11.opt <- matrix(c(SSE1f11.opt,MSE1f11.opt,RMSE1f11.opt))
row.names(akurasi1f11.opt)<- c("SSE1f11.opt", "MSE1f11.opt", "RMSE1f11.opt")
colnames(akurasi1f11.opt) <- c("Akurasi")
akurasi1f11.opt
## Akurasi
## SSE1f11.opt 11951.94935
## MSE1f11.opt 124.49947
## RMSE1f11.opt 11.15793
Maka hasil akurasi tersebut akan digabungkan dalam sebuah tabel agar mempermudah untuk membandingkannya.
akurasi1f3.forecast = data.frame(Model_Winter = c("Winter 1f3","Winter1 optimalf3"),
Nilai_SSE=c(SSE1f3,SSE1f3.opt),
Nilai_MSE=c(MSE1f3,MSE1f3.opt),Nilai_RMSE=c(RMSE1f3,RMSE1f3.opt))
akurasi1f3.forecast
## Model_Winter Nilai_SSE Nilai_MSE Nilai_RMSE
## 1 Winter 1f3 10790.338 112.39935 10.309595
## 2 Winter1 optimalf3 8150.812 84.90429 9.214352
akurasi1f11.forecast = data.frame(Model_Winter = c("Winter 1f11","Winter1 optimalf11"),
Nilai_SSE=c(SSE1f11,SSE1f11.opt),
Nilai_MSE=c(MSE1f11,MSE1f11.opt),Nilai_RMSE=c(RMSE1f11,RMSE1f11.opt))
akurasi1f11.forecast
## Model_Winter Nilai_SSE Nilai_MSE Nilai_RMSE
## 1 Winter 1f11 12560.50 130.8385 10.30960
## 2 Winter1 optimalf11 11951.95 124.4995 11.15793
#Akurasi Data Testing
forecast1f3<-data.frame(forecast1f3)
testingf3.ts<-data.frame(test.ts)
selisih1f3<-forecast1f3-testingf3.ts
SSEtesting1f3<-sum(selisih1f3^2)
MSEtesting1f3<-SSEtesting1f3/length(testingf3.ts)
forecast1f3.opt<-data.frame(forecast1f3.opt)
selisih1f3.opt<-forecast1f3.opt-testingf3.ts
SSEtesting1f3.opt<-sum(selisih1f3.opt^2)
MSEtesting1f3.opt<-SSEtesting1f3.opt/length(testingf3.ts)
forecast1f11<-data.frame(forecast1f11)
testingf11.ts<-data.frame(test2.ts)
selisih1f11<-forecast1f11-testingf11.ts
SSEtesting1f11<-sum(selisih1f11^2)
MSEtesting1f11<-SSEtesting1f11/length(testingf11.ts)
forecast1f11.opt<-data.frame(forecast1f11.opt)
selisih1f11.opt<-forecast1f11.opt-testingf11.ts
SSEtesting1f11.opt<-sum(selisih1f11.opt^2)
MSEtesting1f11.opt<-SSEtesting1f11.opt/length(testingf11.ts)
cat("SSE frequency 3:" ,SSEtesting1f3, "\n")
## SSE frequency 3: 32704.4
cat("SSE optimum frequency 3:", SSEtesting1f3.opt, "\n")
## SSE optimum frequency 3: 14578.49
cat("SSE frequency 11:" ,SSEtesting1f11, "\n")
## SSE frequency 11: 30736.15
cat("SSE optimum frequency 11:", SSEtesting1f11.opt, "\n")
## SSE optimum frequency 11: 40287.72
Karena berdasarkan plot, hasil yang diperoleh paling serupa dengan frequency 11, maka walaupun akurasi untuk data ramal/forecast dan ujinya lebih baik di frequency 3, tetap digunakan frequency 11.
Mengembalikan penamaan
forecast.ts = forecast2.ts
test.ts = test2.ts
Model ini baik digunakan jika plot data asli menunjukkan fluktuasi musiman yang bervariasi.
#Pemulusan dengan winter multiplikatif
winter2 <- HoltWinters(forecast.ts,alpha=0.2,beta=0.1,gamma=0.3,seasonal = "multiplicative")
winter2$fitted
## Time Series:
## Start = c(2, 1)
## End = c(9, 8)
## Frequency = 11
## xhat level trend season
## 2.000000 51.85127 42.71942 0.22708201 1.2073456
## 2.090909 51.11613 43.16992 0.24942406 1.1772662
## 2.181818 46.32919 43.53553 0.26104199 1.0578269
## 2.272727 40.90539 43.94230 0.27561544 0.9250864
## 2.363636 39.78668 44.36809 0.29063255 0.8909051
## 2.454545 47.49785 44.75151 0.29991116 1.0543031
## 2.545455 48.89911 45.31741 0.32650969 1.0713172
## 2.636364 43.49895 44.93467 0.25558560 0.9625735
## 2.727273 40.50133 46.02158 0.33871804 0.8736210
## 2.818182 40.96108 47.00101 0.40278850 0.8640885
## 2.909091 43.52752 47.15820 0.37822907 0.9156665
## 3.000000 57.09164 46.70042 0.29462837 1.2148437
## 3.090909 52.49473 44.41173 0.03629648 1.1810362
## 3.181818 47.75940 44.88921 0.08041484 1.0620369
## 3.272727 43.20874 46.30491 0.21394312 0.9288437
## 3.363636 43.15777 47.96393 0.35845090 0.8931217
## 3.454545 51.90089 48.50651 0.37686348 1.0617289
## 3.545455 49.71336 47.10121 0.19864685 1.0510258
## 3.636364 47.11464 47.67218 0.23587972 0.9834388
## 3.727273 42.84596 48.00880 0.24595369 0.8879118
## 3.818182 43.22440 49.92475 0.41295307 0.8586884
## 3.909091 46.07972 50.95390 0.47457258 0.8959964
## 4.000000 57.59022 50.57362 0.38908737 1.1300464
## 4.090909 57.72043 48.19110 0.11192669 1.1949652
## 4.181818 50.37365 45.96648 -0.12172754 1.0987877
## 4.272727 45.52660 47.28204 0.02200085 0.9624252
## 4.363636 44.56739 49.43894 0.23549071 0.8971899
## 4.454545 52.13127 51.06156 0.37420394 1.0135218
## 4.545455 53.26191 49.97723 0.22835080 1.0608762
## 4.636364 47.66024 48.30302 0.03809466 0.9859151
## 4.727273 45.69258 49.33710 0.13769277 0.9235528
## 4.818182 43.79003 50.06976 0.19718951 0.8711496
## 4.909091 45.92792 51.95437 0.36593136 0.8778222
## 5.000000 55.62452 52.48937 0.38283867 1.0520558
## 5.090909 56.79157 50.47034 0.14265149 1.1220751
## 5.181818 54.64631 48.09238 -0.10940960 1.1388689
## 5.272727 46.48207 46.20466 -0.28724064 1.0122972
## 5.363636 44.85024 48.44591 -0.03439138 0.9264374
## 5.454545 50.84200 51.69069 0.29352621 0.9780275
## 5.545455 53.13624 52.25170 0.32027394 1.0107332
## 5.636364 52.99373 52.19675 0.28275189 1.0097986
## 5.727273 48.33710 51.42509 0.17731049 0.9367220
## 5.818182 47.43200 52.17096 0.23416611 0.9051023
## 5.909091 46.30258 52.31850 0.22550416 0.8812153
## 6.000000 54.27710 54.31370 0.40247383 0.9919753
## 6.090909 57.93012 54.69257 0.40011294 1.0515030
## 6.181818 59.43922 54.38890 0.32973518 1.0862700
## 6.272727 59.39205 54.86792 0.34466301 1.0756978
## 6.363636 56.11808 55.87781 0.41118630 0.9969635
## 6.454545 60.01892 60.19123 0.80140964 0.9840354
## 6.545455 60.27895 59.50511 0.65265649 1.0020144
## 6.636364 57.95367 58.36559 0.47343857 0.9849529
## 6.727273 54.57879 57.20369 0.30990451 0.9489720
## 6.818182 50.49852 55.76880 0.13542540 0.9033041
## 6.909091 51.49258 56.08168 0.15317100 0.9156703
## 7.000000 55.81304 56.14910 0.14459621 0.9914615
## 7.090909 57.57067 55.54470 0.06969597 1.0351756
## 7.181818 58.00553 53.37890 -0.15385383 1.0898165
## 7.272727 53.83486 49.83447 -0.49291145 1.0910654
## 7.363636 49.90318 47.15381 -0.71168593 1.0745240
## 7.454545 42.20365 45.06418 -0.84948046 0.9545162
## 7.545455 42.50017 44.82576 -0.78837404 0.9650928
## 7.636364 39.65810 42.62402 -0.92971105 0.9511634
## 7.727273 36.36638 40.83260 -1.01588130 0.9133444
## 7.818182 35.06708 39.70146 -1.02740777 0.9067340
## 7.909091 33.70641 37.97548 -1.09726460 0.9139923
## 8.000000 36.74999 38.60112 -0.92497443 0.9754180
## 8.090909 37.14315 38.61113 -0.83147587 0.9831521
## 8.181818 36.54625 37.38640 -0.87080135 1.0008394
## 8.272727 35.46944 35.40728 -0.98163331 1.0303202
## 8.363636 43.14043 41.91081 -0.23311726 1.0350966
## 8.454545 46.17376 47.26935 0.32604919 0.9701306
## 8.545455 48.12302 51.23950 0.69045880 0.9266910
## 8.636364 55.51947 58.53561 1.35102367 0.9270762
## 8.727273 51.85289 56.00788 0.96314899 0.9101624
## 8.818182 48.28215 53.80393 0.64643869 0.8867185
## 8.909091 50.54137 52.07709 0.40911084 0.9629458
## 9.000000 49.20923 48.96755 0.05724540 1.0037622
## 9.090909 46.43555 47.89121 -0.05611280 0.9707424
## 9.181818 45.33839 47.18908 -0.12071396 0.9632454
## 9.272727 56.35801 45.33913 -0.29363755 1.2511352
## 9.363636 47.96833 41.25406 -0.67278135 1.1820311
## 9.454545 47.71781 45.50021 -0.18088786 1.0529241
## 9.545455 53.50268 50.51100 0.33827949 1.0521817
## 9.636364 45.82645 53.32553 0.58590441 0.8500322
xhat2 <- winter2$fitted[,2]
#Winter multiplikatif parameter optimum
winter2.opt<- HoltWinters(forecast.ts, alpha= NULL, beta = NULL, gamma = NULL, seasonal = "multiplicative")
winter2.opt$fitted
## Time Series:
## Start = c(2, 1)
## End = c(9, 8)
## Frequency = 11
## xhat level trend season
## 2.000000 51.85127 42.71942 0.227082 1.2073456
## 2.090909 50.95038 43.05147 0.227082 1.1772662
## 2.181818 46.09317 43.34637 0.227082 1.0578269
## 2.272727 40.60201 43.66288 0.227082 0.9250864
## 2.363636 39.39441 43.99134 0.227082 0.8909051
## 2.454545 46.94861 44.30338 0.227082 1.0543031
## 2.545455 48.13585 44.70438 0.227082 1.0713172
## 2.636364 43.21211 44.66519 0.227082 0.9625735
## 2.727273 39.78290 45.31085 0.227082 0.8736210
## 2.818182 39.87190 45.91623 0.227082 0.8640885
## 2.909091 42.46261 46.14636 0.227082 0.9156665
## 3.000000 56.42730 46.08995 0.227082 1.2182841
## 3.090909 53.74092 45.15799 0.227082 1.1841099
## 3.181818 48.73196 45.49292 0.227082 1.0658782
## 3.272727 43.37219 46.25936 0.227082 0.9330074
## 3.363636 42.50558 47.14588 0.227082 0.8972539
## 3.454545 51.07550 47.52737 0.227082 1.0695442
## 3.545455 49.46998 46.99578 0.227082 1.0475853
## 3.636364 47.43835 47.42020 0.227082 0.9956151
## 3.727273 43.11902 47.66348 0.227082 0.9003658
## 3.818182 42.23226 48.63581 0.227082 0.8643011
## 3.909091 44.27654 49.25838 0.227082 0.8947382
## 4.000000 54.55338 49.27264 0.227082 1.1020946
## 4.090909 58.11505 48.42345 0.227082 1.1945408
## 4.181818 53.09892 47.52134 0.227082 1.1120560
## 4.272727 47.51679 48.18536 0.227082 0.9814997
## 4.363636 44.88897 49.20544 0.227082 0.9080857
## 4.454545 50.54100 50.04314 0.227082 1.0053865
## 4.545455 53.14148 49.72805 0.227082 1.0637842
## 4.636364 49.14724 49.07434 0.227082 0.9968725
## 4.727273 47.43988 49.62405 0.227082 0.9516309
## 4.818182 44.66184 49.94989 0.227082 0.8900864
## 4.909091 44.97669 50.86086 0.227082 0.8803777
## 5.000000 52.06601 51.26867 0.227082 1.0110739
## 5.090909 55.41113 50.65227 0.227082 1.0890690
## 5.181818 57.48252 49.77832 0.227082 1.1495263
## 5.272727 51.15341 48.94582 0.227082 1.0402764
## 5.363636 47.59012 49.90695 0.227082 0.9492579
## 5.454545 49.76997 51.36641 0.227082 0.9646558
## 5.545455 51.67964 51.82533 0.227082 0.9928386
## 5.636364 53.33254 52.01080 0.227082 1.0209552
## 5.727273 49.79447 51.71673 0.227082 0.9586219
## 5.818182 48.86719 52.06198 0.227082 0.9345586
## 5.909091 46.67580 52.10534 0.227082 0.8919098
## 6.000000 50.59516 53.11458 0.227082 0.9485110
## 6.090909 53.89815 53.69482 0.227082 0.9995596
## 6.181818 57.27157 53.95310 0.227082 1.0570577
## 6.272727 59.98239 54.44494 0.227082 1.0971313
## 6.363636 57.02387 54.92790 0.227082 1.0338843
## 6.454545 55.96569 56.84055 0.227082 0.9806905
## 6.545455 56.40557 56.75473 0.227082 0.9898872
## 6.636364 55.74437 56.49717 0.227082 0.9827255
## 6.727273 54.51503 56.16543 0.227082 0.9667068
## 6.818182 51.48461 55.59400 0.227082 0.9223147
## 6.909091 52.70760 55.80228 0.227082 0.9407139
## 7.000000 54.50789 55.86878 0.227082 0.9716918
## 7.090909 56.18585 55.86302 0.227082 1.0017071
## 7.181818 59.57796 55.13462 0.227082 1.0761584
## 7.272727 60.09013 53.61121 0.227082 1.1161225
## 7.363636 60.29893 52.30689 0.227082 1.1478084
## 7.454545 49.28257 51.07687 0.227082 0.9605999
## 7.545455 48.99375 50.89677 0.227082 0.9583344
## 7.636364 47.36276 49.81844 0.227082 0.9463936
## 7.727273 44.93270 48.87366 0.227082 0.9151126
## 7.818182 44.57875 48.16709 0.227082 0.9211596
## 7.909091 44.04654 47.10085 0.227082 0.9306671
## 8.000000 45.25488 47.07889 0.227082 0.9566419
## 8.090909 44.18494 46.91850 0.227082 0.9372021
## 8.181818 43.94428 46.24574 0.227082 0.9455910
## 8.272727 45.17294 45.18653 0.227082 0.9947005
## 8.363636 49.63083 48.13961 0.227082 1.0261365
## 8.454545 47.20755 50.42239 0.227082 0.9320443
## 8.545455 45.46079 52.32730 0.227082 0.8650239
## 8.636364 48.61700 56.16831 0.227082 0.8620739
## 8.727273 47.05855 55.18802 0.227082 0.8492008
## 8.818182 45.14532 54.35080 0.227082 0.8271725
## 8.909091 49.23719 53.73892 0.227082 0.9123741
## 9.000000 48.75908 52.35554 0.227082 0.9272850
## 9.090909 45.45335 52.05173 0.227082 0.8694411
## 9.181818 44.20065 52.04609 0.227082 0.8455704
## 9.272727 62.24827 51.47410 0.227082 1.2040008
## 9.363636 58.62751 49.39044 0.227082 1.1815889
## 9.454545 53.51984 51.08176 0.227082 1.0430919
## 9.545455 57.31677 53.24834 0.227082 1.0718338
## 9.636364 43.17172 54.28313 0.227082 0.7919933
xhat2.opt <- winter2.opt$fitted[,2]
Peramalan, dengan periode yang ingin diramal sebanyak 24 periode kedepan, sehingga n.ahead=24.
#Forecast
forecast2 <- predict(winter2, n.ahead = 24)
forecast2.opt <- predict(winter2.opt, n.ahead = 24)
#Plot time series
plot(forecast.ts,main="Winter 0.2;0.1;0.1",type="l",col="black",
xlim=c(1,12),pch=12)
lines(xhat2,type="l",col="red")
lines(xhat2.opt,type="l",col="blue")
lines(forecast2,type="l",col="red")
lines(forecast2.opt,type="l",col="blue")
legend("topleft",c("Actual Data",expression(paste(winter2)),
expression(paste(winter2.opt))),cex=0.5,
col=c("black","red","blue"),lty=1)
#Akurasi data training
SSE2<-winter2$SSE
MSE2<-winter2$SSE/length(forecast.ts)
RMSE2<-sqrt(MSE2)
akurasi1 <- matrix(c(SSE2,MSE2,RMSE2))
row.names(akurasi1)<- c("SSE2", "MSE2", "RMSE2")
colnames(akurasi1) <- c("Akurasi lamda=0.2")
akurasi1
## Akurasi lamda=0.2
## SSE2 12217.96374
## MSE2 127.27046
## RMSE2 11.28142
Didapatkan hasil SSE sebesar 12217.96, MSE sebesar 127.27, serta RMSE sebesar 11.28.
#Akurasi data latih, dengan parameter optimum
SSE2.opt<-winter2.opt$SSE
MSE2.opt<-winter2.opt$SSE/length(forecast.ts)
RMSE2.opt<-sqrt(MSE2.opt)
akurasi1.opt <- matrix(c(SSE2.opt,MSE2.opt,RMSE2.opt))
row.names(akurasi1.opt)<- c("SSE2.opt", "MSE2.opt", "RMSE2.opt")
colnames(akurasi1.opt) <- c("Akurasi")
akurasi1.opt
## Akurasi
## SSE2.opt 11028.71149
## MSE2.opt 114.88241
## RMSE2.opt 10.71832
Didapatkan hasil SSE sebesar 11028.71, MSE sebesar 114.88, serta RMSE sebesar 10.72.
Lalu dibuat sebuah tabel untuk melihat perbandingan antara winter multiplikatif dengan yang menggunakan parameter optimum maupun bukan yang optimum.
akurasi2.forecast = data.frame(Model_Winter = c("Winter 1","winter2 optimal"),
Nilai_SSE=c(SSE2,SSE2.opt),
Nilai_MSE=c(MSE2,MSE2.opt),Nilai_RMSE=c(RMSE2,RMSE2.opt))
akurasi2.forecast
## Model_Winter Nilai_SSE Nilai_MSE Nilai_RMSE
## 1 Winter 1 12217.96 127.2705 11.28142
## 2 winter2 optimal 11028.71 114.8824 10.71832
#Akurasi Data Testing
forecast2<-data.frame(forecast2)
testing.ts<-data.frame(test.ts)
selisih2<-forecast2-testing.ts
SSEtesting2<-sum(selisih2^2)
MSEtesting2<-SSEtesting2/length(testing.ts)
forecast2.opt<-data.frame(forecast2.opt)
selisih2.opt<-forecast2.opt-testing.ts
SSEtesting2.opt<-sum(selisih2.opt^2)
MSEtesting2.opt<-SSEtesting2.opt/length(testing.ts)
SSEtesting2
## [1] 36984.97
SSEtesting2.opt
## [1] 9913.769
Pada langkah metode Single Moving Average (SMA) dan Double Moving Average (DMA) telah diketahui metode pemulusan dengan Single Moving Average (SMA) lebih baik dibandingkan dengan DMA. Hal ini diakibatkan nilai MAPE yang diberikan oleh pemulusan dengan SMA lebih kecil dibandingkan dengan DMA.
Metode Double Exponential Smoothing (DES) lebih baik dibandingkan metode SES dilihat dari MSE yang lebih kecil nilainya. Hal ini sesuai sebab metode pemulusan DES lebih baik digunakan untuk data yang trend (bukan stasioner/konstan).
Sebelumnya dimanfaatkan nilai frequency=11 dengan parameter yang optimum, sehingga untuk winter aditif diperoleh keakuratan data ramal dengan nilai SSE sebesar 11951.95 dengan nilai SSE data uji sebesar 40287.72. Sedangkan untuk winter multiplikatif diperoleh keakuratan data ramal dengan nilai SSE sebesar 11028.71 dengan nilai SSE data uji 9913.769. Karena SSE data latih winter multiplikatif < daripada SSE data latih winter aditif, serta SSE data uji winter multiplikatif juga < daripada SSE data uji winter aditif maka dapat dikatakan winter multiplikatif lebih baik dibandingkan metode pemulusan winter aditif.
8.4 SMA, DES, atau winter multiplikatif?
#SMA vs DES
#SMA
cat("MAPE data ramal SMA:", MAPE_dt.ramal.sma, "\n")
## MAPE data ramal SMA: 15.61109
cat("MAPE data uji SMA:", MAPE_dt.uji.sma, "\n\n")
## MAPE data uji SMA: 69.76289
#DES
cat("MAPE data ramal DES:", mapedes.forecast2, "\n")
## MAPE data ramal DES: 13.61711
cat("MAAPE data uji DES:", MAPEtestingdes2, "\n")
## MAAPE data uji DES: 256.1443
cat("MAPE data ramal optim DES:", MAPEtestingdesopt , "\n\n")
## MAPE data ramal optim DES: 118.6527
#Diambil yang SMA karena mayoritas akurasi MAPE SMA didapatkan < daripada akurasi MAPE pada DES
#SMA vs winter multiplikatif
#SMA
cat("SSE data ramal SMA:", SSE_dt.ramal.sma, "\n")
## SSE data ramal SMA: 11171.18
cat("SSE data uji SMA:", SSE_dt.uji.sma, "\n\n")
## SSE data uji SMA: 22848.13
#Winter multiplikatif
cat("SSE data ramal optim winter multi:", SSE2.opt, "\n")
## SSE data ramal optim winter multi: 11028.71
cat("SSE data uji optim winter multi:", SSEtesting2.opt, "\n")
## SSE data uji optim winter multi: 9913.769
Oleh karena itu, untuk data tersebut disarankan menggunakan metode pemulusan winter multiplikatif.
Terkait data yang digunakan terkategorikan sebagai data yang kurang baik, hal ini disebabkan terlihat adanya dua pola yang berbeda. Maka hal ini mengakibatkan sulitnya menentukan pola sebaran data. Secara garis besar pola data deret waktu ada pola horizontal (konstan), pola musiman, pola siklis, ataupun pola trend. Pada analisis kali ini diasumsikan polanya mengikuti pola trend ataupun musiman dengan pengambilan asumsi berdasarkan eksplorasi data memalui plot time series. Sehingga hal ini mengakibatkan diharuskan mencoba satu persatu dari beragam metode pemulusan yang tersedia.