Data jumlah pengunjung (orang/bulan) dari Januari 2023 sampai Juni 2024 (18 observasi).
library(zoo)
pengunjung <- c(210, 195, 220, 205, 230, 215, 240, 225, 250, 235, 245, 260, # 2023
255, 265, 270, 280, 275, 290) # 2024 (Jan-Jun)
bulan <- format(seq(as.Date("2023-01-01"), by = "month", length.out = 18), "%b %Y")
sma3 <- rollmean(y, k = 3, align = "right", fill = NA)
tabel_sma <- data.frame(Bulan = bulan,
Data_Asli = as.numeric(y),
SMA3 = round(as.numeric(sma3), 2))
tabel_sma
## Bulan Data_Asli SMA3
## 1 Jan 2023 210 NA
## 2 Feb 2023 195 NA
## 3 Mar 2023 220 208.33
## 4 Apr 2023 205 206.67
## 5 May 2023 230 218.33
## 6 Jun 2023 215 216.67
## 7 Jul 2023 240 228.33
## 8 Aug 2023 225 226.67
## 9 Sep 2023 250 238.33
## 10 Oct 2023 235 236.67
## 11 Nov 2023 245 243.33
## 12 Dec 2023 260 246.67
## 13 Jan 2024 255 253.33
## 14 Feb 2024 265 260.00
## 15 Mar 2024 270 263.33
## 16 Apr 2024 280 271.67
## 17 May 2024 275 275.00
## 18 Jun 2024 290 281.67
interpretasi:
SMA(3) baru ada mulai Mar 2023 (butuh 3 data).
Nilainya naik dari 208,33 ke 281,67.
Lebih mulus daripada data asli.
ts.plot(y, sma3, col = c("black", "steelblue"), lwd = 2, lty = c(1, 1),
xlab = "Waktu", ylab = "Jumlah pengunjung (orang)",
main = "Data Asli vs SMA(3)")
legend("topleft", c("Data asli", "SMA(3)"),
col = c("black", "steelblue"), lwd = 2, bty = "n")
grid()
interpretasi:
Garis SMA(3) lebih mulus dan mengikuti arah naik.
Garis SMA berada di bawah data asli, terutama di akhir periode.
Perbandingan pada 6 bulan terakhir (Jan–Jun 2024):
enam <- tail(tabel_sma, 6)
enam$Selisih <- enam$Data_Asli - enam$SMA3 # positif = SMA di bawah data asli
enam$Posisi_SMA <- ifelse(enam$Selisih > 0, "di bawah data asli",
ifelse(enam$Selisih < 0, "di atas data asli", "sama"))
enam$Selisih <- round(enam$Selisih, 2)
enam
## Bulan Data_Asli SMA3 Selisih Posisi_SMA
## 13 Jan 2024 255 253.33 1.67 di bawah data asli
## 14 Feb 2024 265 260.00 5.00 di bawah data asli
## 15 Mar 2024 270 263.33 6.67 di bawah data asli
## 16 Apr 2024 280 271.67 8.33 di bawah data asli
## 17 May 2024 275 275.00 0.00 sama
## 18 Jun 2024 290 281.67 8.33 di bawah data asli
jumlah_di_bawah <- sum(enam$Selisih > 0)
rata_selisih <- mean(enam$Selisih)
maks_selisih <- max(enam$Selisih)
Interpretasi:
SMA(3) lebih rendah dari data asli pada 5 dari 6 bulan.
Rata-rata selisih sekitar 5 orang.
Selisih terbesar 8,33 orang (Apr dan Jun 2024).
Mei 2024 selisihnya 0 karena data sempat turun (280 → 275).
Kesimpulan:
Ya, SMA(3) terlihat tertinggal (lag) dari data asli. Sesuai slide Kelemahan SMA, saat tren naik SMA cenderung underestimate terhadap level sebenarnya. Lag SMA(3) secara teori sekitar (m − 1)/2 = 1 bulan, dan dengan kenaikan sekitar 5 orang per bulan, keterlambatannya kira-kira 5 orang, sama dengan rata-rata selisih di atas.
m <- 3
Mp <- rollmean(y, k = m, align = "right", fill = NA) # M't
Mpp <- rollmean(Mp, k = m, align = "right", fill = NA) # M''t
a_t <- 2 * Mp - Mpp
b_t <- (2 / (m - 1)) * (Mp - Mpp)
tabel_dma <- data.frame(t = 1:18,
Bulan = bulan,
Z_t = as.numeric(y),
M_prime = round(as.numeric(Mp), 2),
M_dprime = round(as.numeric(Mpp), 2),
a_t = round(as.numeric(a_t), 2),
b_t = round(as.numeric(b_t), 2))
tabel_dma
## t Bulan Z_t M_prime M_dprime a_t b_t
## 1 1 Jan 2023 210 NA NA NA NA
## 2 2 Feb 2023 195 NA NA NA NA
## 3 3 Mar 2023 220 208.33 NA NA NA
## 4 4 Apr 2023 205 206.67 NA NA NA
## 5 5 May 2023 230 218.33 211.11 225.56 7.22
## 6 6 Jun 2023 215 216.67 213.89 219.44 2.78
## 7 7 Jul 2023 240 228.33 221.11 235.56 7.22
## 8 8 Aug 2023 225 226.67 223.89 229.44 2.78
## 9 9 Sep 2023 250 238.33 231.11 245.56 7.22
## 10 10 Oct 2023 235 236.67 233.89 239.44 2.78
## 11 11 Nov 2023 245 243.33 239.44 247.22 3.89
## 12 12 Dec 2023 260 246.67 242.22 251.11 4.44
## 13 13 Jan 2024 255 253.33 247.78 258.89 5.56
## 14 14 Feb 2024 265 260.00 253.33 266.67 6.67
## 15 15 Mar 2024 270 263.33 258.89 267.78 4.44
## 16 16 Apr 2024 280 271.67 265.00 278.33 6.67
## 17 17 May 2024 275 275.00 270.00 280.00 5.00
## 18 18 Jun 2024 290 281.67 276.11 287.22 5.56
Interpretasi:
M’t baru muncul di Maret 2023, sedangkan M’’t, a_t, dan b_t baru muncul di Mei 2023. Wajar, karena tiap tahap butuh 3 nilai.
M’’t selalu lebih kecil dari M’t. Artinya rata-rata dari rata-rata ini tertinggal lebih jauh dari data asli, dan selisih keduanya itulah yang dipakai untuk menghitung tren.
Nilai b_t selalu positif (antara 2,78 dan 7,22), jadi arah kenaikannya konsisten.
Di 2023, b_t bergantian antara 7,22 dan 2,78. Ini karena data 2023 naik-turun bergantian, sedangkan di 2024 b_t lebih stabil (4,44 sampai 6,67).
Nilai pada titik terakhir (Juni 2024, t = 18):
a_last <- tail(na.omit(a_t), 1)
b_last <- tail(na.omit(b_t), 1)
Mp_last <- tail(na.omit(Mp), 1)
Mpp_last <- tail(na.omit(Mpp), 1)
cat("M'_18 =", round(Mp_last, 2), "\n")
## M'_18 = 281.67
cat("M''_18 =", round(Mpp_last, 2), "\n")
## M''_18 = 276.11
cat("a_18 = 2(", round(Mp_last, 2), ") -", round(Mpp_last, 2), "=", round(a_last, 2), "\n")
## a_18 = 2( 281.67 ) - 276.11 = 287.22
cat("b_18 =", round(Mp_last, 2), "-", round(Mpp_last, 2), "=", round(b_last, 2), "\n")
## b_18 = 281.67 - 276.11 = 5.56
Interpretasi:
Level a₁₈ = 287,22. Ini perkiraan jumlah pengunjung saat ini setelah lag-nya dikoreksi, lebih dekat ke data asli (290) daripada SMA(3) yang hanya 281,67.
Tren b₁₈ = 5,56. Jumlah pengunjung diperkirakan naik sekitar 5,56 orang per bulan, cocok dengan kemiringan garis tren di Soal 1 (sekitar 5 orang/bulan).
Kesimpulan: DMA berhasil memperbaiki keterlambatan SMA karena menambahkan komponen tren. Levelnya lebih akurat, dan besar kenaikannya per bulan sudah bisa dihitung untuk dipakai meramal di Soal 4.
forecast_1 <- a_last + b_last * 1 # Juli 2024
forecast_2 <- a_last + b_last * 2 # Agustus 2024
cat("Ramalan DMA Juli 2024 (p = 1) :", round(forecast_1, 2), "orang\n")
## Ramalan DMA Juli 2024 (p = 1) : 292.78 orang
cat("Ramalan DMA Agustus 2024 (p = 2) :", round(forecast_2, 2), "orang\n")
## Ramalan DMA Agustus 2024 (p = 2) : 298.33 orang
Interpretasi:
Juli 2024: sekitar 293 orang (292,78).
Agustus 2024: sekitar 298 orang (298,33).
Naik 5,56 orang tiap bulan, sesuai tren b₁₈.
sma_forecast <- as.numeric(tail(na.omit(sma3), 1)) # = M'_18
cat("Ramalan SMA(3) Juli 2024 :", round(sma_forecast, 2), "orang\n")
## Ramalan SMA(3) Juli 2024 : 281.67 orang
cat("Ramalan SMA(3) Agustus 2024 :", round(sma_forecast, 2), "orang (datar)\n")
## Ramalan SMA(3) Agustus 2024 : 281.67 orang (datar)
Interpretasi 4b (ramalan SMA):
Juli dan Agustus 2024 sama-sama 281,67 (sekitar 282 orang).
Ramalannya datar karena SMA hanya memakai rata-rata 3 bulan terakhir.
perbandingan <- data.frame(
Bulan = c("Juli 2024 (p=1)", "Agustus 2024 (p=2)"),
Ramalan_DMA = round(c(forecast_1, forecast_2), 2),
Ramalan_SMA3 = round(rep(sma_forecast, 2), 2)
)
perbandingan$Selisih <- perbandingan$Ramalan_DMA - perbandingan$Ramalan_SMA3
perbandingan
## Bulan Ramalan_DMA Ramalan_SMA3 Selisih
## 1 Juli 2024 (p=1) 292.78 281.67 11.11
## 2 Agustus 2024 (p=2) 298.33 281.67 16.66
fc_dma <- ts(c(forecast_1, forecast_2), start = c(2024, 7), frequency = 12)
fc_sma <- ts(rep(sma_forecast, 2), start = c(2024, 7), frequency = 12)
# sambungkan ramalan dengan data terakhir supaya garis tidak terputus
fc_dma_plot <- ts(c(as.numeric(tail(y, 1)), forecast_1, forecast_2),
start = c(2024, 6), frequency = 12)
fc_sma_plot <- ts(c(as.numeric(tail(y, 1)), rep(sma_forecast, 2)),
start = c(2024, 6), frequency = 12)
ts.plot(y, fc_dma_plot, fc_sma_plot,
col = c("black", "red", "steelblue"), lwd = 2, lty = c(1, 2, 2),
gpars = list(xlab = "Waktu", ylab = "Jumlah pengunjung (orang)",
main = "Ramalan Juli-Agustus 2024: DMA vs SMA(3)"))
points(fc_dma, col = "red", pch = 16)
points(fc_sma, col = "steelblue", pch = 16)
legend("topleft", c("Data asli", "Ramalan DMA", "Ramalan SMA(3)"),
col = c("black", "red", "steelblue"), lty = c(1, 2, 2), lwd = 2, bty = "n")
grid()
Interpretasi:
Selisih DMA dan SMA: 11,11 di Juli dan 16,66 di Agustus.
Selisihnya makin besar karena DMA terus naik, sedangkan SMA tetap.
Di plot, garis merah (DMA) lanjut naik mengikuti data, sedangkan garis biru (SMA) turun ke 281,67 lalu datar. Padahal data terakhir sudah 290.
Kesimpulan:
SMA hanya menghitung rata-rata 3 bulan terakhir tanpa memperhitungkan tren, sehingga ramalannya datar di 281,67.
Rata-rata itu mewakili kondisi sekitar 1 bulan sebelumnya, jadi ramalannya tertinggal (lag), padahal data terakhir sudah 290.
DMA memperbaiki lag lewat level a₁₈ = 287,22, yang lebih dekat ke data asli.
DMA lalu menambahkan tren 5,56 orang per bulan, sehingga ramalannya naik menjadi sekitar 293 orang (Juli) dan 298 orang (Agustus).
Karena data jelas bertren naik dan SMA terbukti tertinggal, ramalan DMA lebih masuk akal dipakai.
Nilai tren dengan m = 3 cukup bervariasi (2,78 sampai 7,22), jadi ramalan lebih tepat dibaca sebagai perkiraan, bukan angka pasti.