Data

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")

1. Buat objek ts dan plot data di atas. Apakah data menunjukkan tren yang cukup jelas?

y <- ts(pengunjung, start = c(2023, 1), frequency = 12)
y
##      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2023 210 195 220 205 230 215 240 225 250 235 245 260
## 2024 255 265 270 280 275 290
plot(y, type = "o", pch = 16, col = "black", lwd = 2, xaxt = "n",
     xlab = "Waktu", ylab = "Jumlah pengunjung (orang)",
     main = "Pengunjung Perpustakaan Daerah Kab. Serang")
axis(1, at = time(y)[seq(1, 18, by = 3)], labels = bulan[seq(1, 18, by = 3)])
grid()

Untuk mendukung penilaian secara visual, berikut garis tren linear sederhana (regresi terhadap waktu):

t_idx <- 1:length(y)
fit   <- lm(as.numeric(y) ~ t_idx)
kenaikan_per_bulan <- unname(coef(fit)[2])
korelasi <- cor(t_idx, as.numeric(y))

plot(y, type = "o", pch = 16, col = "black", lwd = 2, xaxt = "n",
     xlab = "Waktu", ylab = "Jumlah pengunjung (orang)",
     main = "Data Asli dan Garis Tren Linear")
axis(1, at = time(y)[seq(1, 18, by = 3)], labels = bulan[seq(1, 18, by = 3)])
lines(ts(fitted(fit), start = c(2023, 1), frequency = 12), col = "red", lwd = 2, lty = 2)
legend("topleft", c("Data asli", "Garis tren linear"),
       col = c("black", "red"), lty = c(1, 2), pch = c(16, NA), bty = "n")
grid()

Interpretasi:

Ya, data menunjukkan tren naik yang cukup jelas. Jumlah pengunjung naik dari 210 orang (Jan 2023) menjadi 290 orang (Jun 2024), atau bertambah 80 orang dalam 17 bulan. Garis tren linear menunjukkan kenaikan rata-rata sekitar 5 orang per bulan, dan korelasi terhadap waktu sangat kuat (sekitar 0,95).

Ada fluktuasi kecil naik-turun dari bulan ke bulan (turun pada Feb, Apr, Jun, Agu, dan Okt 2023, serta Jan dan Mei 2024). Namun fluktuasi itu hanya “riak kecil” di sekitar arah naik yang konsisten, dan data tidak berfluktuasi di sekitar level yang tetap.

Jadi trennya linear dan konsisten, sehingga DMA lebih tepat daripada SMA.

2. Hitung dan plot SMA(3). Bandingkan dengan data asli pada 6 bulan terakhir, apakah SMA terlihat tertinggal?

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:

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:

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:

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.


3. Hitung Double Moving Average dengan m = 3 (hitung M’t, M’’t, at, dan bt).

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:

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:

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.

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.

4a. Ramalan DMA (1 dan 2 bulan setelah Juni 2024)

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₁₈.

4b. Ramalan SMA(3) biasa

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.

4c. Perbandingan

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.