Package yang di gunakan :
library(knitr)
library(kableExtra)
Berikut data Produksi Air Minum PDAM Kabupaten Serang, Januari 2022–Desember 2024
| 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 |
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_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"
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.
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"
)
| 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"
)
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
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.
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.
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
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"
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"
)
| 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.
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.
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.