# Data pengunjung Perpustakaan Daerah Kabupaten Serang (Jan 2023 - Jun 2024)
perpustakaan <- c(210, 195, 220, 205, 230, 215, 240, 225, 250, 235, 245, 260,
255, 265, 270, 280, 275, 290)
# Mengubah data ke bentuk objek time series (ts)
perpustakaan_ts <- ts(perpustakaan, start = c(2023, 1), frequency = 12)
library(zoo)
## Warning: package 'zoo' was built under R version 4.4.3
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
Buat objek ts dan plot data di atas. Apakah data menunjukkan tren yang cukup jelas?
plot(perpustakaan_ts, type = "o", col = "black", lwd = 2,
main = "Jumlah Pengunjung Perpustakaan Daerah Kab. Serang",
xlab = "Waktu", ylab = "Pengunjung (orang/bulan)")
grid()
Data menunjukkan TREN NAIK (upward trend) yang cukup jelas dari periode
Jan 2023 hingga Jun 2024, meskipun terdapat fluktuasi/pola zigzag minor
antar bulan.
Hitung dan plot SMA(3). Bandingkan dengan data asli pada 6 bulan terakhir — apakah SMA terlihat tertinggal?
# Hitung Single Moving Average orde 3 (SMA 3)
sma3 <- rollmean(perpustakaan_ts, k = 3, align = "right", fill = NA)
# Plot perbandingan data asli vs SMA(3)
ts.plot(perpustakaan_ts, sma3, col = c("black", "steelblue"), lwd = c(2, 2),
main = "Perbandingan Data Asli vs SMA(3)")
legend("topleft", legend = c("Data Asli", "SMA(3)"),
col = c("black", "steelblue"), lty = 1, lwd = 2)
# Evaluasi 6 bulan terakhir (Jan - Jun 2024)
tail(cbind(Data_Asli = perpustakaan_ts, SMA_3 = sma3), 6)
## Data_Asli SMA_3
## [13,] 255 253.3333
## [14,] 265 260.0000
## [15,] 270 263.3333
## [16,] 280 271.6667
## [17,] 275 275.0000
## [18,] 290 281.6667
Pada 6 bulan terakhir, garis SMA(3) TERLIHAT TERTINGGAL (lagging) di bawah garis data asli.Hal ini terjadi karena sifat dasar SMA yang hanya merata-ratakan nilai historis tanpa memperhitungkan laju pertumbuhan tren linear pada data.
Hitung Double Moving Average dengan m = 3 (hitung M’t, M’’t, at, dan bt).
m <- 3
# Hitung M't (Mp): Single Moving Average Pertama[cite: 1, 2]
Mp <- rollmean(perpustakaan_ts, k = m, align = "right", fill = NA)
# Hitung M''t (Mpp): Moving Average Kedua dari hasil M't[cite: 1, 2]
Mpp <- rollmean(Mp, k = m, align = "right", fill = NA)
# Hitung komponen at (a_t): Parameter penyesuaian level data[cite: 1, 2]
a_t <- 2 * Mp - Mpp
# Hitung komponen bt (b_t): Parameter estimasi kemiringan/tren[cite: 1, 2]
b_t <- (2 / (m - 1)) * (Mp - Mpp)
# Menampilkan tabel hasil perhitungan M't, M''t, at, dan bt
tabel_dma <- data.frame(
Bulan = time(perpustakaan_ts),
Data_Asli = as.vector(perpustakaan_ts),
M_aksen = as.vector(Mp),
M_dua_aksen = as.vector(Mpp),
at = as.vector(a_t),
bt = as.vector(b_t)
)
print(tabel_dma)
## Bulan Data_Asli M_aksen M_dua_aksen at bt
## 1 2023.000 210 NA NA NA NA
## 2 2023.083 195 NA NA NA NA
## 3 2023.167 220 208.3333 NA NA NA
## 4 2023.250 205 206.6667 NA NA NA
## 5 2023.333 230 218.3333 211.1111 225.5556 7.222222
## 6 2023.417 215 216.6667 213.8889 219.4444 2.777778
## 7 2023.500 240 228.3333 221.1111 235.5556 7.222222
## 8 2023.583 225 226.6667 223.8889 229.4444 2.777778
## 9 2023.667 250 238.3333 231.1111 245.5556 7.222222
## 10 2023.750 235 236.6667 233.8889 239.4444 2.777778
## 11 2023.833 245 243.3333 239.4444 247.2222 3.888889
## 12 2023.917 260 246.6667 242.2222 251.1111 4.444444
## 13 2024.000 255 253.3333 247.7778 258.8889 5.555556
## 14 2024.083 265 260.0000 253.3333 266.6667 6.666667
## 15 2024.167 270 263.3333 258.8889 267.7778 4.444444
## 16 2024.250 280 271.6667 265.0000 278.3333 6.666667
## 17 2024.333 275 275.0000 270.0000 280.0000 5.000000
## 18 2024.417 290 281.6667 276.1111 287.2222 5.555556
M’t (Mp) dan M’’t (Mpp) digunakan untuk mengisolasi efek keterlambatan (lag).Komponen at berguna untuk mengoreksi nilai rata-rata agar sejajar dengan posisi tren,sedangkan komponen bt merepresentasikan besarnya perubahan/kemiringan tren tiap periode.
Gunakan hasil DMA untuk meramalkan jumlah pengunjung 1 dan 2 bulan setelah data terakhir. Bandingkan dengan ramalan SMA biasa, lalu jelaskan mengapa hasilnya berbeda.
# Mengambil nilai at dan bt periode terakhir (Juni 2024)
a_last <- tail(na.omit(a_t), 1)
b_last <- tail(na.omit(b_t), 1)
# Ramalan DMA 1 bulan ke depan (Juli 2024) dan 2 bulan ke depan (Agustus 2024)
forecast_dma_1 <- a_last + b_last * 1 # Juli 2024
forecast_dma_2 <- a_last + b_last * 2 # Agustus 2024
# Ramalan SMA biasa (berdasarkan nilai SMA3 periode terakhir)
forecast_sma <- tail(na.omit(sma3), 1)
# Tampilkan Hasil Ramalan
cat("Hasil Ramalan DMA Juli 2024 :", forecast_dma_1, "\n")
## Hasil Ramalan DMA Juli 2024 : 292.7778
cat("Hasil Ramalan DMA Agustus 2024 :", forecast_dma_2, "\n")
## Hasil Ramalan DMA Agustus 2024 : 298.3333
cat("Hasil Ramalan SMA biasa :", forecast_sma, "\n")
## Hasil Ramalan SMA biasa : 281.6667