Package yang di gunakan :

library(knitr)
library(kableExtra)

Berikut data Produksi Air Minum PDAM Kabupaten Serang, Januari 2022–Desember 2024

Tabel Volume Produksi Air Minum PDAM Kabupaten Serang (ribu m³/bulan)
Tahun Jan Feb Mar Apr Mei Jun Jul Agu Sep Okt Nov Des
2022 410 415 405 420 430 445 455 440 425 420 418 435
2023 440 445 438 452 462 478 488 472 458 452 450 468
2024 470 476 468 483 494 510 521 504 489 483 480 499

Dekomposisi

Melakukan dekomposisi additive menggunakan decompose().

Membuat Objek Time Series

data_pdam <- data.frame(
  Tahun = c(2022, 2023, 2024),
  Jan = c(410, 440, 470),
  Feb = c(415, 445, 476),
  Mar = c(405, 438, 468),
  Apr = c(420, 452, 483),
  Mei = c(430, 462, 494),
  Jun = c(445, 478, 510),
  Jul = c(455, 488, 521),
  Agu = c(440, 472, 504),
  Sep = c(425, 458, 489),
  Okt = c(420, 452, 483),
  Nov = c(418, 450, 480),
  Des = c(435, 468, 499)
)

volume_pdam <- c(
  410, 415, 405, 420, 430, 445, 455, 440, 425, 420, 418, 435,
  440, 445, 438, 452, 462, 478, 488, 472, 458, 452, 450, 468,
  470, 476, 468, 483, 494, 510, 521, 504, 489, 483, 480, 499
)
pdam_ts <- ts(
  volume_pdam,
  start = c(2022, 1),
  frequency = 12
)

pdam_ts
##      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2022 410 415 405 420 430 445 455 440 425 420 418 435
## 2023 440 445 438 452 462 478 488 472 458 452 450 468
## 2024 470 476 468 483 494 510 521 504 489 483 480 499

Dekomposisi additive

dekomposisi_pdam <- decompose(
  pdam_ts,
  type = "additive"
)

dekomposisi_pdam
## $x
##      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2022 410 415 405 420 430 445 455 440 425 420 418 435
## 2023 440 445 438 452 462 478 488 472 458 452 450 468
## 2024 470 476 468 483 494 510 521 504 489 483 480 499
## 
## $seasonal
##               Jan          Feb          Mar          Apr          May
## 2022  -4.53993056  -1.74826389 -11.91493056  -0.06076389   7.83506944
## 2023  -4.53993056  -1.74826389 -11.91493056  -0.06076389   7.83506944
## 2024  -4.53993056  -1.74826389 -11.91493056  -0.06076389   7.83506944
##               Jun          Jul          Aug          Sep          Oct
## 2022  21.21006944  27.75173611   9.73090278  -7.35243056 -15.47743056
## 2023  21.21006944  27.75173611   9.73090278  -7.35243056 -15.47743056
## 2024  21.21006944  27.75173611   9.73090278  -7.35243056 -15.47743056
##               Nov          Dec
## 2022 -20.12326389  -5.31076389
## 2023 -20.12326389  -5.31076389
## 2024 -20.12326389  -5.31076389
## 
## $trend
##           Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
## 2022       NA       NA       NA       NA       NA       NA 427.7500 430.2500
## 2023 443.7083 446.4167 449.1250 451.8333 454.5000 457.2083 459.8333 462.3750
## 2024 475.4583 478.1667 480.7917 483.3750 485.9167 488.4583       NA       NA
##           Sep      Oct      Nov      Dec
## 2022 432.8750 435.5833 438.2500 440.9583
## 2023 464.9167 467.4583 470.0833 472.7500
## 2024       NA       NA       NA       NA
## 
## $random
##              Jan         Feb         Mar         Apr         May         Jun
## 2022          NA          NA          NA          NA          NA          NA
## 2023  0.83159722  0.33159722  0.78993056  0.22743056 -0.33506944 -0.41840278
## 2024 -0.91840278 -0.41840278 -0.87673611 -0.31423611  0.24826389  0.33159722
##              Jul         Aug         Sep         Oct         Nov         Dec
## 2022 -0.50173611  0.01909722 -0.52256944 -0.10590278 -0.12673611 -0.64756944
## 2023  0.41493056 -0.10590278  0.43576389  0.01909722  0.03993056  0.56076389
## 2024          NA          NA          NA          NA          NA          NA
## 
## $figure
##  [1]  -4.53993056  -1.74826389 -11.91493056  -0.06076389   7.83506944
##  [6]  21.21006944  27.75173611   9.73090278  -7.35243056 -15.47743056
## [11] -20.12326389  -5.31076389
## 
## $type
## [1] "additive"
## 
## attr(,"class")
## [1] "decomposed.ts"

Menganalisis Tren Produksi Air Minum

par(
  mfrow = c(4, 1),
  mar = c(2.5, 4.5, 2, 1),
  oma = c(2, 0, 3, 0)
)

plot(
  dekomposisi_pdam$x,
  type = "o",
  pch = 16,
  lwd = 2,
  col = "#2E86AB",
  main = "Data Aktual",
  ylab = "Volume",
  xlab = "",
  las = 1
)
grid(
  col = "gray85",
  lty = 2
)

plot(
  dekomposisi_pdam$trend,
  type = "o",
  pch = 16,
  lwd = 2,
  col = "#E76F51",
  main = "Trend",
  ylab = "Trend",
  xlab = "",
  las = 1
)
grid(
  col = "gray85",
  lty = 2
)

plot(
  dekomposisi_pdam$seasonal,
  type = "o",
  pch = 16,
  lwd = 2,
  col = "#2A9D8F",
  main = "Seasonal",
  ylab = "Musiman",
  xlab = "",
  las = 1
)
abline(
  h = 0,
  lty = 2,
  col = "gray50"
)
grid(
  col = "gray85",
  lty = 2
)

plot(
  dekomposisi_pdam$random,
  type = "o",
  pch = 16,
  lwd = 2,
  col = "#8E6C88",
  main = "Random",
  ylab = "Random",
  xlab = "Tahun",
  las = 1
)
abline(
  h = 0,
  lty = 2,
  col = "gray50"
)
grid(
  col = "gray85",
  lty = 2
)

mtext(
  "Dekomposisi Additive Volume Produksi PDAM Kabupaten Serang",
  outer = TRUE,
  side = 3,
  line = 1,
  font = 2,
  cex = 1.3
)

par(
  mfrow = c(1, 1)
)

Ya, produksi air minum menunjukkan tren naik. Hal ini dapat dilihat dari komponen tren yang secara umum bergerak dari nilai yang lebih rendah pada awal periode menuju nilai yang lebih tinggi pada akhir periode. Dengan demikian terdapat kecenderungan peningkatan volume produksi air minum PDAM dari tahun 2022 hingga 2024.

Menampilkan 12 Indeks musiman

indeks_musiman <- dekomposisi_pdam$figure

bulan <- c(
  "Januari", "Februari", "Maret", "April",
  "Mei", "Juni", "Juli", "Agustus",
  "September", "Oktober", "November", "Desember"
)

tabel_musiman <- data.frame(
  Bulan = bulan,
  `Indeks Musiman` = round(indeks_musiman, 2)
)
knitr::kable(
  tabel_musiman,
  format = "html",
  align = c("l", "c"),
  caption = "Tabel Indeks Musiman Produksi Air Minum PDAM Kabupaten Serang"
)
Tabel Indeks Musiman Produksi Air Minum PDAM Kabupaten Serang
Bulan Indeks.Musiman
Januari -4.54
Februari -1.75
Maret -11.91
April -0.06
Mei 7.84
Juni 21.21
Juli 27.75
Agustus 9.73
September -7.35
Oktober -15.48
November -20.12
Desember -5.31
barplot(
  indeks_musiman,
  names.arg = bulan,
  col = "steelblue",
  border = NA,
  las = 2,
  main = "12 Indeks Musiman Produksi Air Minum PDAM",
  xlab = "Bulan",
  ylab = "Indeks Musiman",
  cex.names = 0.8
)

abline(
  h = 0,
  lty = 2,
  col = "gray50"
)

Menentukan bulan tertinggi dan terendah

bulan_tertinggi <- bulan[which.max(indeks_musiman)]
nilai_tertinggi <- max(indeks_musiman)

bulan_terendah <- bulan[which.min(indeks_musiman)]
nilai_terendah <- min(indeks_musiman)

cat(
  "Indeks musiman tertinggi terjadi pada bulan",
  bulan_tertinggi,
  "sebesar",
  round(nilai_tertinggi, 2),
  "\n"
)
## Indeks musiman tertinggi terjadi pada bulan Juli sebesar 27.75
cat(
  "Indeks musiman terendah terjadi pada bulan",
  bulan_terendah,
  "sebesar",
  round(nilai_terendah, 2)
)
## Indeks musiman terendah terjadi pada bulan November sebesar -20.12

Berdasarkan hasil dekomposisi additive, indeks musiman tertinggi terjadi pada bulan Juli sebesar 27,75, sedangkan indeks musiman terendah terjadi pada bulan November sebesar −20,12. Artinya, produksi air minum pada bulan Juli cenderung berada 27,75 ribu m di atas komponen tren, sedangkan pada November cenderung 20,12 ribu m di bawah komponen tren

Memeriksa Komponen Individu

Analisis Komponen Individu

residu <- dekomposisi_pdam$random

residu_bersih <- na.omit(residu)

summary(residu_bersih)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -0.9184 -0.4184 -0.0434 -0.0434  0.3316  0.8316
sd_residu <- sd(residu_bersih)

cat(
  "Simpangan baku residu =", 
  round(sd_residu, 3)
)
## Simpangan baku residu = 0.486

Ringkasan statistik residu menunjukkan nilai minimum sebesar -0,9184, kuartil pertama -0,4184, median -0,0434, mean -0,0434, kuartil ketiga 0,3316, dan maksimum 0,8316. Simpangan baku residu sebesar 0,486, sehingga penyimpangan residu dari nilai rata-ratanya relatif kecil.

Menampilkan Plot Residu

plot(
  residu_bersih,
  type = "o",
  pch = 16,
  lwd = 2,
  col = "#6A5ACD",
  main = "Komponen Residu Produksi Air Minum PDAM",
  xlab = "Periode",
  ylab = "Residu"
)

abline(
  h = 0,
  col = "red",
  lty = 2,
  lwd = 2
)

grid(
  col = "gray85",
  lty = 2
)

Berdasarkan grafik, komponen residu berfluktuasi di sekitar garis nol dengan nilai negatif dan positif yang bergantian. Tidak terlihat adanya pola tren yang sistematis, meskipun terdapat beberapa periode dengan residu negatif atau positif secara berurutan.

Dekomposisi Model Multiplicative

Membuat Volume Produksi Air Minum PDAM Kabupaten Serang

Berdasarkan plot, volume produksi air minum PDAM menunjukkan pola yang cenderung meningkat dari tahun 2022 hingga 2024. Nilai pada bulan April meningkat dari 452 ribu m pada 2023 menjadi 483 ribu m pada 2024, sedangkan pada bulan Desember meningkat dari 468 ribu m³ menjadi 499 ribu m

Melakukan dekomposisi multiplicative

dekomp_mul <- decompose(
  pdam_ts,
  type = "multiplicative"
)

dekomp_mul
## $x
##      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2022 410 415 405 420 430 445 455 440 425 420 418 435
## 2023 440 445 438 452 462 478 488 472 458 452 450 468
## 2024 470 476 468 483 494 510 521 504 489 483 480 499
## 
## $seasonal
##            Jan       Feb       Mar       Apr       May       Jun       Jul
## 2022 0.9901875 0.9962547 0.9744168 0.9999039 1.0166776 1.0449005 1.0625939
## 2023 0.9901875 0.9962547 0.9744168 0.9999039 1.0166776 1.0449005 1.0625939
## 2024 0.9901875 0.9962547 0.9744168 0.9999039 1.0166776 1.0449005 1.0625939
##            Aug       Sep       Oct       Nov       Dec
## 2022 1.0218486 0.9835709 0.9656814 0.9556379 0.9883262
## 2023 1.0218486 0.9835709 0.9656814 0.9556379 0.9883262
## 2024 1.0218486 0.9835709 0.9656814 0.9556379 0.9883262
## 
## $trend
##           Jan      Feb      Mar      Apr      May      Jun      Jul      Aug
## 2022       NA       NA       NA       NA       NA       NA 427.7500 430.2500
## 2023 443.7083 446.4167 449.1250 451.8333 454.5000 457.2083 459.8333 462.3750
## 2024 475.4583 478.1667 480.7917 483.3750 485.9167 488.4583       NA       NA
##           Sep      Oct      Nov      Dec
## 2022 432.8750 435.5833 438.2500 440.9583
## 2023 464.9167 467.4583 470.0833 472.7500
## 2024       NA       NA       NA       NA
## 
## $random
##            Jan       Feb       Mar       Apr       May       Jun       Jul
## 2022        NA        NA        NA        NA        NA        NA 1.0010461
## 2023 1.0014693 1.0005740 1.0008342 1.0004650 0.9998269 1.0005500 0.9987391
## 2024 0.9983158 0.9992111 0.9989510 0.9993202 0.9999583 0.9992351        NA
##            Aug       Sep       Oct       Nov       Dec
## 2022 1.0007953 0.9982074 0.9984910 0.9980699 0.9981398
## 2023 0.9989899 1.0015778 1.0012941 1.0017152 1.0016454
## 2024        NA        NA        NA        NA        NA
## 
## $figure
##  [1] 0.9901875 0.9962547 0.9744168 0.9999039 1.0166776 1.0449005 1.0625939
##  [8] 1.0218486 0.9835709 0.9656814 0.9556379 0.9883262
## 
## $type
## [1] "multiplicative"
## 
## attr(,"class")
## [1] "decomposed.ts"

Menampilkan 12 Faktor Musiman

faktor_musiman <- round(
  dekomp_mul$seasonal[1:12],
  4
)

bulan <- c(
  "Januari", "Februari", "Maret", "April",
  "Mei", "Juni", "Juli", "Agustus",
  "September", "Oktober", "November", "Desember"
)

tabel_faktor <- data.frame(
  Bulan = bulan,
  `Faktor Musiman` = faktor_musiman
)

knitr::kable(
  tabel_faktor,
  format = "html",
  digits = 4,
  align = "c",
  caption = "12 Faktor Musiman Dekomposisi Multiplicative"
)
12 Faktor Musiman Dekomposisi Multiplicative
Bulan Faktor.Musiman
Januari 0.9902
Februari 0.9963
Maret 0.9744
April 0.9999
Mei 1.0167
Juni 1.0449
Juli 1.0626
Agustus 1.0218
September 0.9836
Oktober 0.9657
November 0.9556
Desember 0.9883
idx_max <- which.max(faktor_musiman)

idx_min <- which.min(faktor_musiman)

cat(
  "Faktor musiman tertinggi:",
  bulan[idx_max],
  "=",
  faktor_musiman[idx_max],
  "\n"
)
## Faktor musiman tertinggi: Juli = 1.0626
cat(
  "Faktor musiman terendah:",
  bulan[idx_min],
  "=",
  faktor_musiman[idx_min]
)
## Faktor musiman terendah: November = 0.9556

Faktor musiman tertinggi terjadi pada bulan Juli sebesar 1,0626. Artinya, pada bulan Juli volume produksi cenderung sekitar 6,26% lebih tinggi dibandingkan nilai trennya. Sementara itu, faktor musiman terendah terjadi pada bulan November sebesar 0,9556, yang menunjukkan bahwa volume produksi pada bulan November cenderung sekitar 4,44% lebih rendah dibandingkan nilai trennya.

Membandingkan sd residu multiplicative dengan sd residu bila model additive dipaksakan

dekomp_add <- decompose(
  pdam_ts,
  type = "additive"
)

dekomp_mul <- decompose(
  pdam_ts,
  type = "multiplicative"
)

sd_add <- sd(
  dekomp_add$random,
  na.rm = TRUE
)

sd_mul <- sd(
  dekomp_mul$random,
  na.rm = TRUE
)

cat(
  "SD residu additive       =", round(sd_add, 4), "\n"
)
## SD residu additive       = 0.4863
cat(
  "SD residu multiplicative =", round(sd_mul, 4)
)
## SD residu multiplicative = 0.0012

Simpangan baku residu model multiplicative sebesar 0,0012, jauh lebih kecil dibandingkan simpangan baku residu model additive sebesar 0,4863. Ini menunjukkan bahwa setelah komponen tren dan musiman dipisahkan, model multiplicative menghasilkan residu yang jauh lebih kecil.

Menyimimpulkan model mana yang lebih sesuai

Model multiplicative lebih sesuai untuk data PDAM karena terdapat kenaikan level data dan sedikit pembesaran pola musiman dari 2023 ke 2024. Faktor musiman tertinggi terjadi pada Juli (1,0626) dan terendah pada November (0,9556). Selain itu, simpangan baku residu multiplicative (0,0012) lebih kecil dibandingkan additive (0,4863), sehingga sisa variasi pada model multiplicative relatif lebih kecil.