1. Package

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

2. Import File

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

3. Mendefinisikan Data Deret Waktu

#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

4. Eksplorasi Data Deret Waktu

#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 SMA N=3

#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

6. Double Moving Average (DMA)

DMA N=3

#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 DMA

#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

Plot SMA dan DMA N=3

#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