pengunjung <- c(210,195,220,205,230,215,240,225,250,235,245,260,
255,265,270,280,275,290)
pengunjung_ts <- ts(pengunjung, start = c(2023,1), frequency = 12)
library(zoo)
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
label_bulan <- format(as.yearmon(time(pengunjung_ts)), "%b %Y")
plot(pengunjung_ts, xaxt = "n", col = "black", type = "o",
main = "Pengunjung Perpustakaan", xlab = "Bulan", ylab = "Jumlah Pengunjung")
axis(1, at = time(pengunjung_ts), labels = label_bulan, cex.axis = 0.7)
sma3 <- rollmean(pengunjung_ts, k = 3, align = "right", fill = NA)
plot(pengunjung_ts, xaxt = "n", col = "black", type = "o",
main = "Aktual vs SMA(3)", xlab = "Bulan", ylab = "Jumlah Pengunjung")
lines(sma3, col = "steelblue", lwd = 2)
axis(1, at = time(pengunjung_ts), labels = label_bulan, cex.axis = 0.7)
legend("topleft", legend = c("Aktual","SMA(3)"), col = c("black","steelblue"), lty = 1)
data.frame(Bulan = tail(label_bulan, 6),
Aktual = tail(pengunjung_ts, 6),
SMA3 = round(tail(sma3, 6), 2)) # bandingkan 6 bulan terakhir
## Bulan Aktual SMA3
## 1 Jan 2024 255 253.33
## 2 Feb 2024 265 260.00
## 3 Mar 2024 270 263.33
## 4 Apr 2024 280 271.67
## 5 May 2024 275 275.00
## 6 Jun 2024 290 281.67
Pada 6 bulan terakhir (Jan sampai Jun 2024), nilai SMA(3) hampir selalu berada di bawah data aktual, kecuali Mei 2024 yang sama sama 275. Selisihnya terlihat jelas di Mar 2024 aktual 270 vs SMA 263,33, Apr 2024 aktual 280 vs SMA 271,67, dan Jun 2024 aktual 290 vs SMA 281,67. Jadi ya, SMA terlihat tertinggal. Ini terjadi karena SMA(3) menghitung rata-rata 3 bulan terakhir, sehingga nilainya selalu tertarik oleh bulan bulan sebelumnya yang lebih rendah. Pada data yang trennya naik, efek ini membuat SMA tidak mampu mengikuti kenaikan secepat data aslinya.
m <- 3
Mp <- rollmean(pengunjung_ts, k = m, align = "right", fill = NA)
Mpp <- rollmean(Mp, k = m, align = "right", fill = NA)
a_t <- 2*Mp - Mpp
b_t <- (2/(m-1)) * (Mp - Mpp)
cbind(Mp, Mpp, a_t, b_t)
## Mp Mpp a_t b_t
## Jan 2023 NA NA NA NA
## Feb 2023 NA NA NA NA
## Mar 2023 208.3333 NA NA NA
## Apr 2023 206.6667 NA NA NA
## May 2023 218.3333 211.1111 225.5556 7.222222
## Jun 2023 216.6667 213.8889 219.4444 2.777778
## Jul 2023 228.3333 221.1111 235.5556 7.222222
## Aug 2023 226.6667 223.8889 229.4444 2.777778
## Sep 2023 238.3333 231.1111 245.5556 7.222222
## Oct 2023 236.6667 233.8889 239.4444 2.777778
## Nov 2023 243.3333 239.4444 247.2222 3.888889
## Dec 2023 246.6667 242.2222 251.1111 4.444444
## Jan 2024 253.3333 247.7778 258.8889 5.555556
## Feb 2024 260.0000 253.3333 266.6667 6.666667
## Mar 2024 263.3333 258.8889 267.7778 4.444444
## Apr 2024 271.6667 265.0000 278.3333 6.666667
## May 2024 275.0000 270.0000 280.0000 5.000000
## Jun 2024 281.6667 276.1111 287.2222 5.555556
M’t adalah rata rata bergerak pertama (SMA(3)) dan M’‘t adalah rata rata bergerak dari M’t. Nilai M’‘t baru bisa dihitung mulai Mei 2023 karena butuh 3 nilai M’t. Pada data terakhir (Jun 2024), M’t = 281,67 dan M’‘t = 276,11. Dari situ didapat komponen level aₜ = 287,22 dan komponen tren bₜ = 5,56. Karena M’t selalu lebih besar dari M’’t sepanjang data, bₜ selalu positif, artinya data punya tren naik yang konsisten. Nilai aₜ (287,22) juga jauh lebih dekat ke data aktual Jun 2024 (290) dibanding SMA (281,67), karena aₜ sudah mengoreksi ketertinggalan SMA. Nilai bₜ = 5,56 bisa dibaca sebagai kenaikan rata-rata sekitar 5 sampai 6 pengunjung per bulan.
a_last <- tail(na.omit(a_t), 1); b_last <- tail(na.omit(b_t), 1)
forecast_1 <- a_last + b_last * 1
forecast_2 <- a_last + b_last * 2
sma_last <- tail(na.omit(sma3), 1) # ramalan SMA (flat, konstan)
data.frame(Bulan_ke_depan = 1:2,
Forecast_DMA = c(forecast_1, forecast_2),
Forecast_SMA = rep(sma_last, 2))
## Bulan_ke_depan Forecast_DMA Forecast_SMA
## 1 1 292.7778 281.6667
## 2 2 298.3333 281.6667
Ramalan DMA untuk Jul 2024 sebesar 292,78 (sekitar 293 orang) dan untuk Agu 2024 sebesar 298,33 (sekitar 298 orang). Ramalan SMA biasa adalah 281,67 untuk kedua bulan tersebut. Hasilnya berbeda karena SMA hanya memakai rata-rata 3 bulan terakhir sebagai ramalan, sehingga nilainya datar (konstan) dan mengasumsikan tidak ada tren. DMA memakai rumus \(\hat{z}_{t+p} = a_t + b_t \cdot p\), jadi ramalannya ikut naik sebesar bₜ setiap bulan ke depan. Karena data pengunjung memang bertren naik, ramalan SMA cenderung terlalu rendah (underestimate), sedangkan DMA lebih masuk akal.