INPUT DATA & INSIALISASI TS

# 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

NOMOR 1:

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.

NOMOR 2:

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.

NOMOR 3:

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.

NOMOR 4:

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
  • Ramalan DMA terus NAIK untuk periode mendatang (Juli = 296.67, Agustus = 305) karena memasukkan variabel kemiringan tren (bt * p).
  • Ramalan SMA bernilai DATAR/KONSTAN (Juli & Agustus = 281.67) karena mengasumsikan data stasioner tanpa tren.
  • Mengapa berbeda? DMA dirancang khusus untuk mengatasi lag pada data berpola tren, sedangkan SMA hanya mengambil rata-rata periode terakhir sehingga tidak bisa menangkap laju tren.