library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(graphics)
library(TTR)
library(TSA)
## 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
df <- read.csv("D:/Kuliah/S1/Capstone/kumpulanData/harian.csv", sep = ";")
head(df)
## X Hari_1 Beban Hari_Jumat Hari_Kamis Hari_Minggu Hari_Rabu Hari_Sabtu
## 1 1 01/01/2013 386352 0 0 0 0 0
## 2 2 02/01/2013 464088 0 0 0 1 0
## 3 3 03/01/2013 470976 0 1 0 0 0
## 4 4 04/01/2013 458688 1 0 0 0 0
## 5 5 05/01/2013 453936 0 0 0 0 1
## 6 6 06/01/2013 430392 0 0 1 0 0
## Hari_Selasa Hari_Senin hari_raya IdulFitri IdulAdha LiburNasional TahunBaru
## 1 1 0 0 0 0 1 1
## 2 0 0 0 0 0 0 0
## 3 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0
## 5 0 0 0 0 0 0 0
## 6 0 0 0 0 0 0 0
## Natal Tahun Bulan_1 Bulan_2 Bulan_3 Bulan_4 Bulan_5 Bulan_6 Bulan_7 Bulan_8
## 1 0 2013 1 0 0 0 0 0 0 0
## 2 0 2013 1 0 0 0 0 0 0 0
## 3 0 2013 1 0 0 0 0 0 0 0
## 4 0 2013 1 0 0 0 0 0 0 0
## 5 0 2013 1 0 0 0 0 0 0 0
## 6 0 2013 1 0 0 0 0 0 0 0
## Bulan_9 Bulan_10 Bulan_11 Bulan_12 Tanggal_1 Tanggal_2 Tanggal_3 Tanggal_4
## 1 0 0 0 0 1 0 0 0
## 2 0 0 0 0 0 1 0 0
## 3 0 0 0 0 0 0 1 0
## 4 0 0 0 0 0 0 0 1
## 5 0 0 0 0 0 0 0 0
## 6 0 0 0 0 0 0 0 0
## Tanggal_5 Tanggal_6 Tanggal_7 Tanggal_8 Tanggal_9 Tanggal_10 Tanggal_11
## 1 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0
## 3 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0
## 5 1 0 0 0 0 0 0
## 6 0 1 0 0 0 0 0
## Tanggal_12 Tanggal_13 Tanggal_14 Tanggal_15 Tanggal_16 Tanggal_17 Tanggal_18
## 1 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0
## 3 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0
## 5 0 0 0 0 0 0 0
## 6 0 0 0 0 0 0 0
## Tanggal_19 Tanggal_20 Tanggal_21 Tanggal_22 Tanggal_23 Tanggal_24 Tanggal_25
## 1 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0
## 3 0 0 0 0 0 0 0
## 4 0 0 0 0 0 0 0
## 5 0 0 0 0 0 0 0
## 6 0 0 0 0 0 0 0
## Tanggal_26 Tanggal_27 Tanggal_28 Tanggal_29 Tanggal_30 Tanggal_31 Beban_lag_1
## 1 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 16098
## 3 0 0 0 0 0 0 19337
## 4 0 0 0 0 0 0 19624
## 5 0 0 0 0 0 0 19112
## 6 0 0 0 0 0 0 18914
#Menjadikan data terbaca sebagai data deret waktu
beban.ts <- ts(df$Beban)
head(beban.ts)
## Time Series:
## Start = 1
## End = 6
## Frequency = 1
## [1] 386352 464088 470976 458688 453936 430392
beban2.ts <- ts(df$Beban, start = c(2013,1), frequency = 12)
head(beban2.ts)
## Jan Feb Mar Apr May Jun
## 2013 386352 464088 470976 458688 453936 430392
#time series plot
ts.plot(beban.ts, xlab="Waktu", ylab="Yt", main="Time Series Plot")
points(beban.ts)
# 5. Single Moving Average ## SMA N=3
#Single Moving Average dengan N=3
df_ts_sma <- TTR::SMA(beban.ts, n=3)
ramal_sma <- c(NA,df_ts_sma)
df_sma <- cbind(df_aktual=c(beban.ts,NA), pemulusan=c(df_ts_sma,NA), ramal_sma)
head(df_sma)
## df_aktual pemulusan ramal_sma
## [1,] 386352 NA NA
## [2,] 464088 NA NA
## [3,] 470976 440472 NA
## [4,] 458688 464584 440472
## [5,] 453936 461200 464584
## [6,] 430392 447672 461200
tail(df_sma)
## df_aktual pemulusan ramal_sma
## [3888,] 703512 696640 692312
## [3889,] 699624 698960 696640
## [3890,] 648024 683720 698960
## [3891,] 613728 653792 683720
## [3892,] 671736 644496 653792
## [3893,] NA NA 644496
#Plot
ts.plot(beban.ts, xlab="periode waktu", ylab="Yt", col="blue", lty=3)
points(beban.ts)
lines(df_ts_sma, col="red", lwd=2)
lines(ramal_sma, col="black", lwd= 2)
title("Rataan Bergerak Sederhana N=3", cex.main=1, font.main=4 ,col.main="black")
legend("topleft", c("Data aktual","Pemulusan SMA","Ramalan SMA"),lty=1:3,col=c ("blue","red","black"))
## Ukuran Keakuratan Ramalan
# Ukuran Keakuratan
error.sma <- df_sma[, 1] - df_sma[, 3]
## SSE (Sum Square Error)
SSE.sma <- sum(error.sma^2, na.rm = T)
## MSE (Mean Squared Error)
MSE.sma <- mean(error.sma^2, na.rm = T)
## RMSE (Root Mean Square Error)
RMSE.sma <- sqrt(mean(error.sma^2, na.rm = T))
## MAD (Mean Absolute Deviation)
MAD.sma <- mean(abs(error.sma), na.rm = T)
## MAPE (Mean Absolute Percentage Error)
r.error.sma <- (error.sma/df_sma[, 1])*100 # Relative Error
MAPE.sma <- mean(abs(r.error.sma), na.rm = T)
akurasi <- data.frame(
"Ukuran Keakuratan" = c("SSE", "MSE", "MAPE", "RMSE", "MAD"),
"Simple Moving Average N=2" = c(SSE.sma, MSE.sma, MAPE.sma, RMSE.sma, MAD.sma))
akurasi
## Ukuran.Keakuratan Simple.Moving.Average.N.2
## 1 SSE 5.481657e+12
## 2 MSE 1.409529e+09
## 3 MAPE 5.644698e+00
## 4 RMSE 3.754369e+04
## 5 MAD 3.140304e+04
#Single Moving Average dengan N=3
df_ts_sma <- TTR::SMA(beban.ts, n=3)
#Double Moving Average dengan N=3
df_ts_dma <- TTR::SMA(df_ts_sma, n=3)
At <- 2*df_ts_sma-df_ts_dma
Bt <- df_ts_sma-df_ts_dma
pemulusan_dma <- At+Bt
ramal_dma <- c(NA, pemulusan_dma)
df_dma <- cbind(df_aktual=c(beban.ts,NA), pemulusan_dma=c(pemulusan_dma,NA), ramal_dma)
head(df_dma)
## df_aktual pemulusan_dma ramal_dma
## [1,] 386352 NA NA
## [2,] 464088 NA NA
## [3,] 470976 NA NA
## [4,] 458688 NA NA
## [5,] 453936 472762.7 NA
## [6,] 430392 427378.7 472762.7
tail(df_dma)
## df_aktual pemulusan_dma ramal_dma
## [3888,] 703512 719914.7 738626.7
## [3889,] 699624 704938.7 719914.7
## [3890,] 648024 664946.7 704938.7
## [3891,] 613728 603728.0 664946.7
## [3892,] 671736 612149.3 603728.0
## [3893,] NA NA 612149.3
#Plot
ts.plot(beban.ts, xlab="periode waktu", ylab="Yt", col="blue", lty=3)
points(beban.ts)
lines(pemulusan_dma,col="red",lwd=2)
lines(ramal_dma,col="black",lwd= 2)
title("Rataan Bergerak Berganda N=3", cex.main=1, font.main=4 ,col.main="black")
legend("topleft", c("Data Aktual","Pemulusan","Ramalan"),lty=1:3,col=c ("blue","red","black"))
## Ukuran Keakuratan Ramalan DMA 3
# Ukuran Keakuratan
error.dma <- df_dma[, 1] - df_dma[, 3]
## SSE (Sum Square Error)
SSE.dma <- sum(error.dma^2, na.rm = T)
## MSE (Mean Squared Error)
MSE.dma <- mean(error.dma^2, na.rm = T)
## RMSE (Root Mean Square Error)
RMSE.dma <- sqrt(mean(error.dma^2, na.rm = T))
## MAD (Mean Absolute Deviation)
MAD.dma <- mean(abs(error.dma), na.rm = T)
## MAPE (Mean Absolute Percentage Error)
r.error.dma <- (error.dma/df_dma[, 1])*100 # Relative Error
MAPE.dma <- mean(abs(r.error.dma), na.rm = T)
akurasi <- data.frame(
"Ukuran Keakuratan" = c("SSE", "MSE", "MAPE", "RMSE", "MAD"),
"Double Moving Average N=2" = c(SSE.dma, MSE.dma, MAPE.dma, RMSE.dma, MAD.dma))
akurasi
## Ukuran.Keakuratan Double.Moving.Average.N.2
## 1 SSE 8.721784e+12
## 2 MSE 2.243834e+09
## 3 MAPE 7.014185e+00
## 4 RMSE 4.736913e+04
## 5 MAD 3.984497e+04
#perbandingan SMA dan DMA
ts.plot(beban.ts, xlab="periode waktu", ylab="Yt", col="blue", lty=3)
points(beban.ts)
lines(pemulusan_dma,col="red",lwd=2)
lines(df_ts_sma,col="black",lwd= 2)
title("Perbandingan SMA dan DMA",cex.main=1,font.main=4 ,col.main="black")
legend("topleft", c("Data aktual","Pemulusan SMA","Pemulusan DMA"),lty=1:3,col=c ("blue","black","red"))
## Ukuran Keakuratan Ramalan SMA dan DMA
akurasi <- data.frame(
"Ukuran Keakuratan" = c("SSE", "MSE", "MAPE", "RMSE", "MAD"),
"Simple Moving Average N=3" = c(SSE.sma, MSE.sma, MAPE.sma, RMSE.sma, MAD.sma),
"Double Moving Average N=3" = c(SSE.dma, MSE.dma, MAPE.dma, RMSE.dma, MAD.dma))
akurasi
## Ukuran.Keakuratan Simple.Moving.Average.N.3 Double.Moving.Average.N.3
## 1 SSE 5.481657e+12 8.721784e+12
## 2 MSE 1.409529e+09 2.243834e+09
## 3 MAPE 5.644698e+00 7.014185e+00
## 4 RMSE 3.754369e+04 4.736913e+04
## 5 MAD 3.140304e+04 3.984497e+04