library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(forecast)
## Warning: package 'forecast' was built under R version 4.4.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.4.1
library(TSA)
## Warning: package 'TSA' was built under R version 4.4.1
## Registered S3 methods overwritten by 'TSA':
## method from
## fitted.Arima forecast
## plot.Arima forecast
##
## Attaching package: 'TSA'
##
## The following object is masked from 'package:readr':
##
## spec
##
## The following objects are masked from 'package:stats':
##
## acf, arima
##
## The following object is masked from 'package:utils':
##
## tar
data <- read.csv("D:\\Statistika dan Sains Data\\Semester 5\\MPDW\\dt_pt1.csv")
str(data)
## 'data.frame': 115 obs. of 2 variables:
## $ Tanggal : chr "2023-01-01" "2023-01-02" "2023-01-03" "2023-01-04" ...
## $ Penumpang.Berangkat: int 4521 5283 5352 5989 5884 6299 6002 6354 5380 5660 ...
Data yang digunakan adalah data yang berasal dari DEPHUB, berupa data harian penumpang berangkat di Bandara Sultan Aji (BPN) di Kalimantan Timur. Periode data yang digunakan secara keseluruhan adalah dari 1 Januari 2023 hingga 31 Juni 2024 dengan total 571 periode. Data ini kemudian dibagi ke 5 mahasiswa yang tergabung dalam kelompok. Sehingga data yang digunakan pada tugas ini berjumlah 115 hari (periode).
data$Tanggal <- as.Date(data$Tanggal, format = "%Y-%m-%d")
data
## Tanggal Penumpang.Berangkat
## 1 2023-01-01 4521
## 2 2023-01-02 5283
## 3 2023-01-03 5352
## 4 2023-01-04 5989
## 5 2023-01-05 5884
## 6 2023-01-06 6299
## 7 2023-01-07 6002
## 8 2023-01-08 6354
## 9 2023-01-09 5380
## 10 2023-01-10 5660
## 11 2023-01-11 5878
## 12 2023-01-12 5630
## 13 2023-01-13 6313
## 14 2023-01-14 6148
## 15 2023-01-15 6292
## 16 2023-01-16 5512
## 17 2023-01-17 5188
## 18 2023-01-18 5894
## 19 2023-01-19 6453
## 20 2023-01-20 7702
## 21 2023-01-21 6865
## 22 2023-01-22 5755
## 23 2023-01-23 5831
## 24 2023-01-24 5437
## 25 2023-01-25 6355
## 26 2023-01-26 6175
## 27 2023-01-27 6493
## 28 2023-01-28 6374
## 29 2023-01-29 5764
## 30 2023-01-30 5300
## 31 2023-01-31 5790
## 32 2023-02-01 6126
## 33 2023-02-02 6204
## 34 2023-02-03 6403
## 35 2023-02-04 6010
## 36 2023-02-05 6303
## 37 2023-02-06 5823
## 38 2023-02-07 4358
## 39 2023-02-08 6570
## 40 2023-02-09 6790
## 41 2023-02-10 7166
## 42 2023-02-11 7166
## 43 2023-02-12 6792
## 44 2023-02-13 6057
## 45 2023-02-14 5962
## 46 2023-02-15 7170
## 47 2023-02-16 7140
## 48 2023-02-17 7705
## 49 2023-02-18 7315
## 50 2023-02-19 6951
## 51 2023-02-20 6230
## 52 2023-02-21 6725
## 53 2023-02-22 7459
## 54 2023-02-23 7299
## 55 2023-02-24 7718
## 56 2023-02-25 8149
## 57 2023-02-26 7459
## 58 2023-02-27 7220
## 59 2023-02-28 7080
## 60 2023-03-01 7000
## 61 2023-03-02 6561
## 62 2023-03-03 7210
## 63 2023-03-04 6619
## 64 2023-03-05 6679
## 65 2023-03-06 6231
## 66 2023-03-07 6465
## 67 2023-03-08 7095
## 68 2023-03-09 6874
## 69 2023-03-10 7455
## 70 2023-03-11 7263
## 71 2023-03-12 7144
## 72 2023-03-13 7138
## 73 2023-03-14 7062
## 74 2023-03-15 7859
## 75 2023-03-16 7575
## 76 2023-03-17 7967
## 77 2023-03-18 7228
## 78 2023-03-19 6406
## 79 2023-03-20 6359
## 80 2023-03-21 6758
## 81 2023-03-22 6404
## 82 2023-03-23 4694
## 83 2023-03-24 4133
## 84 2023-03-25 4439
## 85 2023-03-26 5278
## 86 2023-03-27 5034
## 87 2023-03-28 4731
## 88 2023-03-29 5134
## 89 2023-03-30 5500
## 90 2023-03-31 5180
## 91 2023-04-01 4917
## 92 2023-04-02 4189
## 93 2023-04-03 4151
## 94 2023-04-04 4738
## 95 2023-04-05 5515
## 96 2023-04-06 6257
## 97 2023-04-07 5134
## 98 2023-04-08 4956
## 99 2023-04-09 5453
## 100 2023-04-10 5851
## 101 2023-04-11 5516
## 102 2023-04-12 6565
## 103 2023-04-13 7383
## 104 2023-04-14 9547
## 105 2023-04-15 10906
## 106 2023-04-16 10741
## 107 2023-04-17 11050
## 108 2023-04-18 12021
## 109 2023-04-19 12388
## 110 2023-04-20 11618
## 111 2023-04-21 10021
## 112 2023-04-22 5159
## 113 2023-04-23 5808
## 114 2023-04-24 7209
## 115 2023-04-25 7411
data_ts <- ts(data$Penumpang.Berangkat)
summary(data_ts)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4133 5645 6355 6567 7166 12388
ts.plot(data_ts, xlab="Time Period ", ylab="Penumpang Berangkat",
main = "Time Series Plot")
points(data_ts)
## Membagi Data Train dan Data Test
training_ma <- data[1:92,]
testing_ma <- data[93:115,]
train_ma.ts <- ts(training_ma$Penumpang.Berangkat)
test_ma.ts <- ts(testing_ma$Penumpang.Berangkat)
plot(data_ts, col="red",main="Plot semua data")
points(data_ts)
plot(train_ma.ts, col="blue",main="Plot data latih")
points(train_ma.ts)
plot(test_ma.ts, col="blue",main="Plot data uji")
points(test_ma.ts)
library(ggplot2)
ggplot() +
geom_line(data = training_ma, aes(x = Tanggal, y = Penumpang.Berangkat, col = "Data Latih")) +
geom_line(data = testing_ma, aes(x = Tanggal, y = Penumpang.Berangkat, col = "Data Uji")) +
labs(x = "Periode Waktu", y = "Sales", color = "Legend") +
scale_colour_manual(name="Keterangan:", breaks = c("Data Latih", "Data Uji"),
values = c("blue", "red")) +
theme_bw() + theme(legend.position = "bottom",
plot.caption = element_text(hjust=0.5, size=12))
# Smooting ## Single Moving Average (SMA)
data.sma4<-SMA(train_ma.ts, n=4)
library(ggplot2)
ggplot()+
geom_line(data = training_ma, aes(x = Tanggal, y = Penumpang.Berangkat, col = "train_dt"))+
geom_line(data = data[1:92,], aes(x = Tanggal, y = data.sma4, col = "SMA n=4"))+
labs(x = "Periode Waktu", y = "Penumpang Berangkat", color = "Legend")+
scale_colour_manual(name="Keterangan:", breaks = c("train_dt", "SMA n=4","SMA n=6"),
values = c("blue", "green"))+
theme_bw() + theme(legend.position = "bottom",
plot.caption = element_text(hjust=0.5, size=12))
## Warning: Removed 3 rows containing missing values or values outside the scale range
## (`geom_line()`).
data_ramal <- c(NA,data.sma4)
data.gab<-cbind(aktual=c(train_ma.ts,rep(NA,20)),pemulusan=c(data.sma4,rep(NA,20)),ramalan=c(data_ramal,rep(data_ramal[length(data_ramal)],19)))
data.gab
## aktual pemulusan ramalan
## [1,] 4521 NA NA
## [2,] 5283 NA NA
## [3,] 5352 NA NA
## [4,] 5989 5286.25 NA
## [5,] 5884 5627.00 5286.25
## [6,] 6299 5881.00 5627.00
## [7,] 6002 6043.50 5881.00
## [8,] 6354 6134.75 6043.50
## [9,] 5380 6008.75 6134.75
## [10,] 5660 5849.00 6008.75
## [11,] 5878 5818.00 5849.00
## [12,] 5630 5637.00 5818.00
## [13,] 6313 5870.25 5637.00
## [14,] 6148 5992.25 5870.25
## [15,] 6292 6095.75 5992.25
## [16,] 5512 6066.25 6095.75
## [17,] 5188 5785.00 6066.25
## [18,] 5894 5721.50 5785.00
## [19,] 6453 5761.75 5721.50
## [20,] 7702 6309.25 5761.75
## [21,] 6865 6728.50 6309.25
## [22,] 5755 6693.75 6728.50
## [23,] 5831 6538.25 6693.75
## [24,] 5437 5972.00 6538.25
## [25,] 6355 5844.50 5972.00
## [26,] 6175 5949.50 5844.50
## [27,] 6493 6115.00 5949.50
## [28,] 6374 6349.25 6115.00
## [29,] 5764 6201.50 6349.25
## [30,] 5300 5982.75 6201.50
## [31,] 5790 5807.00 5982.75
## [32,] 6126 5745.00 5807.00
## [33,] 6204 5855.00 5745.00
## [34,] 6403 6130.75 5855.00
## [35,] 6010 6185.75 6130.75
## [36,] 6303 6230.00 6185.75
## [37,] 5823 6134.75 6230.00
## [38,] 4358 5623.50 6134.75
## [39,] 6570 5763.50 5623.50
## [40,] 6790 5885.25 5763.50
## [41,] 7166 6221.00 5885.25
## [42,] 7166 6923.00 6221.00
## [43,] 6792 6978.50 6923.00
## [44,] 6057 6795.25 6978.50
## [45,] 5962 6494.25 6795.25
## [46,] 7170 6495.25 6494.25
## [47,] 7140 6582.25 6495.25
## [48,] 7705 6994.25 6582.25
## [49,] 7315 7332.50 6994.25
## [50,] 6951 7277.75 7332.50
## [51,] 6230 7050.25 7277.75
## [52,] 6725 6805.25 7050.25
## [53,] 7459 6841.25 6805.25
## [54,] 7299 6928.25 6841.25
## [55,] 7718 7300.25 6928.25
## [56,] 8149 7656.25 7300.25
## [57,] 7459 7656.25 7656.25
## [58,] 7220 7636.50 7656.25
## [59,] 7080 7477.00 7636.50
## [60,] 7000 7189.75 7477.00
## [61,] 6561 6965.25 7189.75
## [62,] 7210 6962.75 6965.25
## [63,] 6619 6847.50 6962.75
## [64,] 6679 6767.25 6847.50
## [65,] 6231 6684.75 6767.25
## [66,] 6465 6498.50 6684.75
## [67,] 7095 6617.50 6498.50
## [68,] 6874 6666.25 6617.50
## [69,] 7455 6972.25 6666.25
## [70,] 7263 7171.75 6972.25
## [71,] 7144 7184.00 7171.75
## [72,] 7138 7250.00 7184.00
## [73,] 7062 7151.75 7250.00
## [74,] 7859 7300.75 7151.75
## [75,] 7575 7408.50 7300.75
## [76,] 7967 7615.75 7408.50
## [77,] 7228 7657.25 7615.75
## [78,] 6406 7294.00 7657.25
## [79,] 6359 6990.00 7294.00
## [80,] 6758 6687.75 6990.00
## [81,] 6404 6481.75 6687.75
## [82,] 4694 6053.75 6481.75
## [83,] 4133 5497.25 6053.75
## [84,] 4439 4917.50 5497.25
## [85,] 5278 4636.00 4917.50
## [86,] 5034 4721.00 4636.00
## [87,] 4731 4870.50 4721.00
## [88,] 5134 5044.25 4870.50
## [89,] 5500 5099.75 5044.25
## [90,] 5180 5136.25 5099.75
## [91,] 4917 5182.75 5136.25
## [92,] 4189 4946.50 5182.75
## [93,] NA NA 4946.50
## [94,] NA NA 4946.50
## [95,] NA NA 4946.50
## [96,] NA NA 4946.50
## [97,] NA NA 4946.50
## [98,] NA NA 4946.50
## [99,] NA NA 4946.50
## [100,] NA NA 4946.50
## [101,] NA NA 4946.50
## [102,] NA NA 4946.50
## [103,] NA NA 4946.50
## [104,] NA NA 4946.50
## [105,] NA NA 4946.50
## [106,] NA NA 4946.50
## [107,] NA NA 4946.50
## [108,] NA NA 4946.50
## [109,] NA NA 4946.50
## [110,] NA NA 4946.50
## [111,] NA NA 4946.50
## [112,] NA NA 4946.50
ts.plot(data_ts, xlab="Time Period ", ylab="Penumpang Berangkat",
main = "Time Series Plot")
points(data_ts)
lines(data.gab[,2],col="green",lwd=2)
lines(data.gab[,3],col="red",lwd=2)
legend("topleft",c("data aktual","data pemulusan","data peramalan"), lty=8, col=c("black","green","red"), cex=0.5)
## Evaluasi Model ### Data Training
error_train.sma = train_ma.ts-data_ramal[1:length(train_ma.ts)]
SSE_train.sma = sum(error_train.sma[5:length(train_ma.ts)]^2)
MSE_train.sma = mean(error_train.sma[5:length(train_ma.ts)]^2)
MAPE_train.sma = mean(abs((error_train.sma[5:length(train_ma.ts)]/train_ma.ts[5:length(train_ma.ts)])*100))
akurasi_train.sma <- matrix(c(SSE_train.sma, MSE_train.sma, MAPE_train.sma))
row.names(akurasi_train.sma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_train.sma) <- c("Akurasi m = 4")
akurasi_train.sma
## Akurasi m = 4
## SSE 4.438776e+07
## MSE 5.044063e+05
## MAPE 9.509175e+00
error_test.sma = test_ma.ts-data.gab[93:112,3]
## Warning in `-.default`(test_ma.ts, data.gab[93:112, 3]): longer object length
## is not a multiple of shorter object length
SSE_test.sma = sum(error_test.sma^2)
MSE_test.sma = mean(error_test.sma^2)
MAPE_test.sma = mean(abs((error_test.sma/test_ma.ts*100)))
akurasi_test.sma <- matrix(c(SSE_test.sma, MSE_test.sma, MAPE_test.sma))
row.names(akurasi_test.sma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_test.sma) <- c("Akurasi m = 4")
akurasi_test.sma
## Akurasi m = 4
## SSE 3.278803e+08
## MSE 1.425567e+07
## MAPE 2.930339e+01
dma <- SMA(data.sma4, n = 4)
At <- 2*data.sma4 - dma
Bt <- 2/(4-1)*(data.sma4 - dma)
data.dma<- At+Bt
data.ramal2<- c(NA, data.dma)
t = 1:20
f = c()
for (i in t) {
f[i] = At[length(At)] + Bt[length(Bt)]*(i)
}
data.gab2 <- cbind(aktual = c(train_ma.ts,rep(NA,20)), pemulusan1 = c(data.sma4,rep(NA,20)),pemulusan = c(data.dma, rep(NA,20)),At = c(At, rep(NA,20)), Bt = c(Bt,rep(NA,20)),ramalan = c(data_ramal, f[-1]))
data.gab2
## aktual pemulusan1 pemulusan At Bt ramalan
## [1,] 4521 NA NA NA NA NA
## [2,] 5283 NA NA NA NA NA
## [3,] 5352 NA NA NA NA NA
## [4,] 5989 5286.25 NA NA NA NA
## [5,] 5884 5627.00 NA NA NA 5286.250
## [6,] 6299 5881.00 NA NA NA 5627.000
## [7,] 6002 6043.50 6600.271 6377.562 222.708333 5881.000
## [8,] 6354 6134.75 6490.062 6347.938 142.125000 6043.500
## [9,] 5380 6008.75 5995.000 6000.500 -5.500000 6134.750
## [10,] 5660 5849.00 5582.333 5689.000 -106.666667 6008.750
## [11,] 5878 5818.00 5593.625 5683.375 -89.750000 5849.000
## [12,] 5630 5637.00 5318.354 5445.812 -127.458333 5818.000
## [13,] 6313 5870.25 5998.062 5946.938 51.125000 5637.000
## [14,] 6148 5992.25 6263.708 6155.125 108.583333 5870.250
## [15,] 6292 6095.75 6423.979 6292.688 131.291667 5992.250
## [16,] 5512 6066.25 6166.458 6126.375 40.083333 6095.750
## [17,] 5188 5785.00 5451.979 5585.188 -133.208333 6066.250
## [18,] 5894 5721.50 5395.458 5525.875 -130.416667 5785.000
## [19,] 6453 5761.75 5641.958 5689.875 -47.916667 5721.500
## [20,] 7702 6309.25 7000.708 6724.125 276.583333 5761.750
## [21,] 6865 6728.50 7725.583 7326.750 398.833333 6309.250
## [22,] 5755 6693.75 7227.812 7014.188 213.625000 6728.500
## [23,] 5831 6538.25 6489.604 6509.062 -19.458333 6693.750
## [24,] 5437 5972.00 5120.125 5460.875 -340.750000 6538.250
## [25,] 6355 5844.50 5148.458 5426.875 -278.416667 5972.000
## [26,] 6175 5949.50 5738.562 5822.938 -84.375000 5844.500
## [27,] 6493 6115.00 6356.250 6259.750 96.500000 5949.500
## [28,] 6374 6349.25 6823.729 6633.938 189.791667 6115.000
## [29,] 5764 6201.50 6280.979 6249.188 31.791667 6349.250
## [30,] 5300 5982.75 5683.792 5803.375 -119.583333 6201.500
## [31,] 5790 5807.00 5343.458 5528.875 -185.416667 5982.750
## [32,] 6126 5745.00 5429.896 5555.938 -126.041667 5807.000
## [33,] 6204 5855.00 5867.604 5862.562 5.041667 5745.000
## [34,] 6403 6130.75 6541.271 6377.062 164.208333 5855.000
## [35,] 6010 6185.75 6530.125 6392.375 137.750000 6130.750
## [36,] 6303 6230.00 6446.042 6359.625 86.416667 6185.750
## [37,] 5823 6134.75 6075.479 6099.188 -23.708333 6230.000
## [38,] 4358 5623.50 4923.500 5203.500 -280.000000 6134.750
## [39,] 6570 5763.50 5472.771 5589.062 -116.291667 5623.500
## [40,] 6790 5885.25 5941.083 5918.750 22.333333 5763.500
## [41,] 7166 6221.00 6800.479 6568.688 231.791667 5885.250
## [42,] 7166 6923.00 8131.021 7647.812 483.208333 6221.000
## [43,] 6792 6978.50 7772.771 7455.062 317.708333 6923.000
## [44,] 6057 6795.25 6904.938 6861.062 43.875000 6978.500
## [45,] 5962 6494.25 5988.417 6190.750 -202.333333 6795.250
## [46,] 7170 6495.25 6169.312 6299.688 -130.375000 6494.250
## [47,] 7140 6582.25 6566.417 6572.750 -6.333333 6495.250
## [48,] 7705 6994.25 7582.167 7347.000 235.166667 6582.250
## [49,] 7315 7332.50 8134.896 7813.938 320.958333 6994.250
## [50,] 6951 7277.75 7662.854 7508.812 154.041667 7332.500
## [51,] 6230 7050.25 6861.188 6936.812 -75.625000 7277.750
## [52,] 6725 6805.25 6286.604 6494.062 -207.458333 7050.250
## [53,] 7459 6841.25 6587.292 6688.875 -101.583333 6805.250
## [54,] 7299 6928.25 6964.917 6950.250 14.666667 6841.250
## [55,] 7718 7300.25 7852.750 7631.750 221.000000 6928.250
## [56,] 8149 7656.25 8447.500 8131.000 316.500000 7300.250
## [57,] 7459 7656.25 8107.917 7927.250 180.666667 7656.250
## [58,] 7220 7636.50 7760.146 7710.688 49.458333 7656.250
## [59,] 7080 7477.00 7261.167 7347.500 -86.333333 7636.500
## [60,] 7000 7189.75 6689.542 6889.625 -200.083333 7477.000
## [61,] 6561 6965.25 6378.792 6613.375 -234.583333 7189.750
## [62,] 7210 6962.75 6652.854 6776.812 -123.958333 6965.250
## [63,] 6619 6847.50 6607.812 6703.688 -95.875000 6962.750
## [64,] 6679 6767.25 6569.854 6648.812 -78.958333 6847.500
## [65,] 6231 6684.75 6466.729 6553.938 -87.208333 6767.250
## [66,] 6465 6498.50 6163.500 6297.500 -134.000000 6684.750
## [67,] 7095 6617.50 6576.667 6593.000 -16.333333 6498.500
## [68,] 6874 6666.25 6748.750 6715.750 33.000000 6617.500
## [69,] 7455 6972.25 7444.958 7255.875 189.083333 6666.250
## [70,] 7263 7171.75 7696.438 7486.562 209.875000 6972.250
## [71,] 7144 7184.00 7493.062 7369.438 123.625000 7171.750
## [72,] 7138 7250.00 7425.833 7355.500 70.333333 7184.000
## [73,] 7062 7151.75 7089.042 7114.125 -25.083333 7250.000
## [74,] 7859 7300.75 7432.625 7379.875 52.750000 7151.750
## [75,] 7575 7408.50 7626.417 7539.250 87.166667 7300.750
## [76,] 7967 7615.75 8026.688 7862.312 164.375000 7408.500
## [77,] 7228 7657.25 7926.729 7818.938 107.791667 7615.750
## [78,] 6406 7294.00 6960.875 7094.125 -133.250000 7657.250
## [79,] 6359 6990.00 6324.583 6590.750 -266.166667 7294.000
## [80,] 6758 6687.75 5905.250 6218.250 -313.000000 6990.000
## [81,] 6404 6481.75 5845.708 6100.125 -254.416667 6687.750
## [82,] 4694 6053.75 5221.146 5554.188 -333.041667 6481.750
## [83,] 4133 5497.25 4359.125 4814.375 -455.250000 6053.750
## [84,] 4439 4917.50 3550.729 4097.438 -546.708333 5497.250
## [85,] 5278 4636.00 3569.125 3995.875 -426.750000 4917.500
## [86,] 5034 4721.00 4351.104 4499.062 -147.958333 4636.000
## [87,] 4731 4870.50 5010.917 4954.750 56.166667 4721.000
## [88,] 5134 5044.25 5421.438 5270.562 150.875000 4870.500
## [89,] 5500 5099.75 5376.208 5265.625 110.583333 5044.250
## [90,] 5180 5136.25 5300.521 5234.812 65.708333 5099.750
## [91,] 4917 5182.75 5294.417 5249.750 44.666667 5136.250
## [92,] 4189 4946.50 4705.146 4801.688 -96.541667 5182.750
## [93,] NA NA NA NA NA 4946.500
## [94,] NA NA NA NA NA 4608.604
## [95,] NA NA NA NA NA 4512.062
## [96,] NA NA NA NA NA 4415.521
## [97,] NA NA NA NA NA 4318.979
## [98,] NA NA NA NA NA 4222.438
## [99,] NA NA NA NA NA 4125.896
## [100,] NA NA NA NA NA 4029.354
## [101,] NA NA NA NA NA 3932.812
## [102,] NA NA NA NA NA 3836.271
## [103,] NA NA NA NA NA 3739.729
## [104,] NA NA NA NA NA 3643.188
## [105,] NA NA NA NA NA 3546.646
## [106,] NA NA NA NA NA 3450.104
## [107,] NA NA NA NA NA 3353.562
## [108,] NA NA NA NA NA 3257.021
## [109,] NA NA NA NA NA 3160.479
## [110,] NA NA NA NA NA 3063.938
## [111,] NA NA NA NA NA 2967.396
## [112,] NA NA NA NA NA 2870.854
ts.plot(data_ts, xlab="Time Period ", ylab="Penumpang Berangkat", main= "DMA N=4 Data Sales")
points(data_ts)
lines(data.gab2[,3],col="green",lwd=2)
lines(data.gab2[,6],col="red",lwd=2)
legend("topleft",c("data aktual","data pemulusan","data peramalan"), lty=8, col=c("black","green","red"), cex=0.8)
## Evaluasi Model ### Data Training
error_train.dma = train_ma.ts-data.ramal2[1:length(train_ma.ts)]
SSE_train.dma = sum(error_train.dma[8:length(train_ma.ts)]^2)
MSE_train.dma = mean(error_train.dma[8:length(train_ma.ts)]^2)
MAPE_train.dma = mean(abs((error_train.dma[8:length(train_ma.ts)]/train_ma.ts[8:length(train_ma.ts)])*100))
akurasi_train.dma <- matrix(c(SSE_train.dma, MSE_train.dma, MAPE_train.dma))
row.names(akurasi_train.dma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_train.dma) <- c("Akurasi m = 4")
akurasi_train.dma
## Akurasi m = 4
## SSE 6.752423e+07
## MSE 7.944027e+05
## MAPE 1.186519e+01
error_test.dma = test_ma.ts-data.gab2[93:112,6]
## Warning in `-.default`(test_ma.ts, data.gab2[93:112, 6]): longer object length
## is not a multiple of shorter object length
SSE_test.dma = sum(error_test.dma^2)
MSE_test.dma = mean(error_test.dma^2)
MAPE_test.dma = mean(abs((error_test.dma/test_ma.ts*100)))
akurasi_test.dma <- matrix(c(SSE_test.dma, MSE_test.dma, MAPE_test.dma))
row.names(akurasi_test.dma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_test.dma) <- c("Akurasi m = 4")
akurasi_test.dma
## Akurasi m = 4
## SSE 5.419852e+08
## MSE 2.356457e+07
## MAPE 4.208280e+01
ses <- ses(train_ma.ts, beta = FALSE, gamma = FALSE,alpha = NULL)
autoplot(ses) +
autolayer(fitted(ses), series="Fitted") +
ylab("Penumpang Berangkat") + xlab("Periode")
## Evaluasi Model ### Data Training
ses_train_error <- train_ma.ts - ses$fitted
RMSE_train_ses <- sqrt(mean(ses_train_error^2, na.rm = T))
MAPE_train_ses <- mean(abs(ses_train_error/train_ma.ts)*100, na.rm = T)
RMSE_train_ses
## [1] 592.6191
MAPE_train_ses
## [1] 7.62407
ses_prediction <- forecast(ses, h = 10)
ses_test_error <- test_ma.ts - ses_prediction$mean[1]
RMSE_test_ses <- sqrt(mean(ses_test_error^2, na.rm = T))
MAPE_test_ses <- mean(abs(ses_test_error/test_ma.ts)*100, na.rm = T)
RMSE_test_ses
## [1] 4287.126
MAPE_test_ses
## [1] 37.52905
des <- HoltWinters(train_ma.ts, beta = NULL, gamma = FALSE,alpha = NULL)
plot(des)
## Presiksi 20 Periode ke Depan
des_predict <- forecast(des, h = 20)
des_train_error <- train_ma.ts - des$fitted
RMSE_train_des <- sqrt(mean(des_train_error^2, na.rm = T))
MAPE_train_des <- mean(abs(des_train_error/train_ma.ts)*100, na.rm = T)
RMSE_train_des
## [1] 3678.799
MAPE_train_des
## [1] 38.1703
des_test_error <- test_ma.ts - des_predict$mean[1:20]
## Warning in `-.default`(test_ma.ts, des_predict$mean[1:20]): longer object
## length is not a multiple of shorter object length
RMSE_test_des <- sqrt(mean(des_test_error^2, na.rm = T))
MAPE_test_des <- mean(abs(des_test_error/test_ma.ts)*100, na.rm = T)
RMSE_test_des
## [1] 5861.571
MAPE_test_des
## [1] 55.65319
train.winter <- ts(training_ma$Penumpang.Berangkat, frequency = 7)
hw <- HoltWinters(train.winter, beta = NULL, gamma = NULL,alpha = NULL,seasonal = "additive")
plot(hw)
## Prediksi 20 Periode ke Depan
hw_predict <- forecast(hw, h = 20)
hw_train_error <- train.winter - hw$fitted
RMSE_train_hw <- sqrt(mean(hw_train_error^2, na.rm = T))
MAPE_train_hw <- mean(abs(hw_train_error/train.winter)*100, na.rm = T)
RMSE_train_hw
## [1] 4550.041
MAPE_train_hw
## [1] 53.44805
hw_test_error <- test_ma.ts - hw_predict$mean[1:20]
## Warning in `-.default`(test_ma.ts, hw_predict$mean[1:20]): longer object length
## is not a multiple of shorter object length
RMSE_test_hw <- sqrt(mean(hw_test_error^2, na.rm = T))
MAPE_test_hw <- mean(abs(hw_test_error/test_ma.ts)*100, na.rm = T)
RMSE_test_hw
## [1] 4124.856
MAPE_test_hw
## [1] 36.31245
hw
## Holt-Winters exponential smoothing with trend and additive seasonal component.
##
## Call:
## HoltWinters(x = train.winter, alpha = NULL, beta = NULL, gamma = NULL, seasonal = "additive")
##
## Smoothing parameters:
## alpha: 0.8771627
## beta : 0
## gamma: 0.8810553
##
## Coefficients:
## [,1]
## a 4237.39235
## b 24.18197
## s1 -375.88151
## s2 -454.90911
## s3 95.32825
## s4 -73.71025
## s5 274.43412
## s6 132.30186
## s7 -38.83046