# timbulan
d1 <- data.frame(
  Tahun = c(2024,2023,2022,2021,2020,2019),
  Provinsi = "Jawa Tengah",
  Kota = "Kota Semarang",
  timbulan_harian = c(1189.71,1182.29,1181.06,1180.14,1276.74,1251.71),
  timbulan_tahunan = c(434243.97,431534.65,431085.22,430749.75,466010.79,456873.35)
)

d1 <- d1[order(d1$Tahun), ]
d1
##   Tahun    Provinsi          Kota timbulan_harian timbulan_tahunan
## 6  2019 Jawa Tengah Kota Semarang         1251.71         456873.3
## 5  2020 Jawa Tengah Kota Semarang         1276.74         466010.8
## 4  2021 Jawa Tengah Kota Semarang         1180.14         430749.8
## 3  2022 Jawa Tengah Kota Semarang         1181.06         431085.2
## 2  2023 Jawa Tengah Kota Semarang         1182.29         431534.7
## 1  2024 Jawa Tengah Kota Semarang         1189.71         434244.0

Pengurangan, Penanganan, Daur Ulang

d2 <- data.frame(
  Tahun = c(2024,2023,2022,2021,2020,2019),
  pengurangan = c(94157.14,116591.38,112850.45,101951.98,99632.92,78081.33),
  penanganan = c(25111.55,310739.85,314187.98,319718.10,350027.70,356782.59),
  daur_ulang = c(94133.14,108332.04,60774.61,25459.75,18364.44,23322.45),
  bahan_baku = c(25111.55,317.55,297.48,343.10,876.00,15069.59)
)
d2 <- d2[order(d2$Tahun), ]
d2
##   Tahun pengurangan penanganan daur_ulang bahan_baku
## 6  2019    78081.33  356782.59   23322.45   15069.59
## 5  2020    99632.92  350027.70   18364.44     876.00
## 4  2021   101951.98  319718.10   25459.75     343.10
## 3  2022   112850.45  314187.98   60774.61     297.48
## 2  2023   116591.38  310739.85  108332.04     317.55
## 1  2024    94157.14   25111.55   94133.14   25111.55

Komposisi Sampah

d3 <- data.frame(
  Tahun = c(2024,2023,2022,2021,2020,2019),
  sisa_makanan = c(60.80,60.80,60.79,60.79,60.79,60.79),
  kertas = c(10.20,10.20,10.18,10.18,10.18,10.18),
  plastik = c(17.20,17.20,17.20,17.20,17.20,17.20),
  logam = c(1.20,1.20,1.22,1.22,1.22,1.22),
  kain = c(4.90,4.90,4.94,4.94,4.94,4.94),
  karet_kulit = c(1.00,1.00,1.00,1.00,1.00,1.00),
  kaca = c(1.80,1.80,1.79,1.79,1.79,1.79),
  lainnya = c(2.90,2.90,2.88,2.88,2.88,2.88)
)
d3 <- d3[order(d3$Tahun), ]
d3
##   Tahun sisa_makanan kertas plastik logam kain karet_kulit kaca lainnya
## 6  2019        60.79  10.18    17.2  1.22 4.94           1 1.79    2.88
## 5  2020        60.79  10.18    17.2  1.22 4.94           1 1.79    2.88
## 4  2021        60.79  10.18    17.2  1.22 4.94           1 1.79    2.88
## 3  2022        60.79  10.18    17.2  1.22 4.94           1 1.79    2.88
## 2  2023        60.80  10.20    17.2  1.20 4.90           1 1.80    2.90
## 1  2024        60.80  10.20    17.2  1.20 4.90           1 1.80    2.90

Sumber Sampah (ton)

d4 <- data.frame(
  Tahun = c(2024,2023,2022,2021,2020,2019),
  rumah_tangga = c(72.00,72.00,872.47,432.28,362.00,361.96),
  perkantoran = c(0.50,0.50,5.84,35.85,7.50,7.50),
  pasar = c(2.60,2.60,31.30,51.95,321.80,321.78),
  perniagaan = c(8.00,8.00,97.25,16.17,15.60,15.60),
  fasilitas_publik = c(9.00,9.00,109.57,30.46,66.00,66.03),
  kawasan = c(6.60,6.60,80.35,84.28,84.30,84.28),
  lain = c(1.30,1.30,15.12,530.00,388.80,332.84)
)
d4 <- d4[order(d4$Tahun), ]
d4
##   Tahun rumah_tangga perkantoran  pasar perniagaan fasilitas_publik kawasan
## 6  2019       361.96        7.50 321.78      15.60            66.03   84.28
## 5  2020       362.00        7.50 321.80      15.60            66.00   84.30
## 4  2021       432.28       35.85  51.95      16.17            30.46   84.28
## 3  2022       872.47        5.84  31.30      97.25           109.57   80.35
## 2  2023        72.00        0.50   2.60       8.00             9.00    6.60
## 1  2024        72.00        0.50   2.60       8.00             9.00    6.60
##     lain
## 6 332.84
## 5 388.80
## 4 530.00
## 3  15.12
## 2   1.30
## 1   1.30
data_full <- merge(d1, d2, by="Tahun")
data_full <- merge(data_full, d3, by="Tahun")
data_full <- merge(data_full, d4, by="Tahun")
View(data_full)
str(data_full)
## 'data.frame':    6 obs. of  24 variables:
##  $ Tahun           : num  2019 2020 2021 2022 2023 ...
##  $ Provinsi        : chr  "Jawa Tengah" "Jawa Tengah" "Jawa Tengah" "Jawa Tengah" ...
##  $ Kota            : chr  "Kota Semarang" "Kota Semarang" "Kota Semarang" "Kota Semarang" ...
##  $ timbulan_harian : num  1252 1277 1180 1181 1182 ...
##  $ timbulan_tahunan: num  456873 466011 430750 431085 431535 ...
##  $ pengurangan     : num  78081 99633 101952 112850 116591 ...
##  $ penanganan      : num  356783 350028 319718 314188 310740 ...
##  $ daur_ulang      : num  23322 18364 25460 60775 108332 ...
##  $ bahan_baku      : num  15070 876 343 297 318 ...
##  $ sisa_makanan    : num  60.8 60.8 60.8 60.8 60.8 ...
##  $ kertas          : num  10.2 10.2 10.2 10.2 10.2 ...
##  $ plastik         : num  17.2 17.2 17.2 17.2 17.2 17.2
##  $ logam           : num  1.22 1.22 1.22 1.22 1.2 1.2
##  $ kain            : num  4.94 4.94 4.94 4.94 4.9 4.9
##  $ karet_kulit     : num  1 1 1 1 1 1
##  $ kaca            : num  1.79 1.79 1.79 1.79 1.8 1.8
##  $ lainnya         : num  2.88 2.88 2.88 2.88 2.9 2.9
##  $ rumah_tangga    : num  362 362 432 872 72 ...
##  $ perkantoran     : num  7.5 7.5 35.85 5.84 0.5 ...
##  $ pasar           : num  321.8 321.8 52 31.3 2.6 ...
##  $ perniagaan      : num  15.6 15.6 16.2 97.2 8 ...
##  $ fasilitas_publik: num  66 66 30.5 109.6 9 ...
##  $ kawasan         : num  84.3 84.3 84.3 80.3 6.6 ...
##  $ lain            : num  332.8 388.8 530 15.1 1.3 ...
data_full$collection_rate <- data_full$penanganan / data_full$timbulan_tahunan
data_full$recycling_rate  <- (data_full$daur_ulang + data_full$bahan_baku) / data_full$timbulan_tahunan
data_full$gap             <- data_full$timbulan_tahunan - (data_full$pengurangan + data_full$penanganan)
data_full$ELI             <- data_full$gap / data_full$timbulan_tahunan

Tren Timbunan Harian Sampah Kota Semarang

plot(data_full$Tahun, data_full$timbulan_harian,
     type="o", lwd=2,
     xlab="Tahun", ylab="Timbulan Harian (ton/hari)",
     main="Tren Timbulan Harian Sampah Kota Semarang")

Tren Timbunan Tahunan Sampah Kota Semarang

plot(data_full$Tahun, data_full$timbulan_tahunan,
     type="o", lwd=2, col="blue",
     xlab="Tahun", ylab="Timbulan Tahunan (ton/tahun)",
     main="Timbulan Tahunan Sampah Kota Semarang")

Interpretasi : Timbulan sampah cenderung meningkat kembali pada 2024 setelah sempat menurun pada 2021–2022 baik secara harian maupun tahunan. Hal ini menunjukkan bahwa tekanan sampah di Kota Semarang kembali naik, sehingga kapasitas pengelolaan harus semakin ditingkatkan.

Plot Tren Pengurangan – Penanganan – Daur Ulang

Tujuan : Melihat apakah pengurangan, penanganan, dan daur ulang meningkat atau menurun dari waktu ke waktu.

# Pastikan data urut
data_full <- data_full[order(data_full$Tahun), ]

# Plot Pengurangan
plot(data_full$Tahun, data_full$pengurangan,
     type="o", lwd=2, col="darkgreen",
     xlab="Tahun", ylab="Pengurangan (ton/tahun)",
     main="Tren Pengurangan Sampah Kota Semarang")

# Plot Penanganan
plot(data_full$Tahun, data_full$penanganan,
     type="o", lwd=2, col="purple",
     xlab="Tahun", ylab="Penanganan (ton/tahun)",
     main="Tren Penanganan Sampah Kota Semarang")

# Plot Daur Ulang
plot(data_full$Tahun, data_full$daur_ulang,
     type="o", lwd=2, col="orange",
     xlab="Tahun", ylab="Daur Ulang (ton/tahun)",
     main="Tren Daur Ulang Sampah Kota Semarang")

Interpretasi : 1. Pengurangan : berfluktuasi, tetapi 2023 adalah tahun terbaik sekitar (116 ribu ton).

GAP dan ELI

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
data_full <- data_full %>%
  mutate(
    gap = timbulan_tahunan - (pengurangan + penanganan),
    ELI = gap / timbulan_tahunan
  )

Plot GAP (Timbulan – Penanganan – Daur Ulang)

Tujuan : Mengukur jumlah sampah yang tidak tertangani → indikator tekanan lingkungan.

library(ggplot2)
library(scales)

ggplot(data_full, aes(x = Tahun, y = gap)) +
  geom_col(fill = "#4A90E2") +
  scale_y_continuous(labels = comma) +
  labs(title = "GAP Sampah Tidak Tertangani",
       x = "Tahun", y = "GAP (ton/tahun)") +
  theme_minimal()

Plot ELI (Environmental Load Index)

ggplot(data_full, aes(x = Tahun, y = ELI)) +
  geom_col(fill = "#FF8C42") +
  scale_y_continuous(labels = number_format(accuracy = 0.01)) +
  labs(title = "Environmental Load Index (ELI)",
       x = "Tahun", y = "ELI") +
  theme_minimal()

Plot Collection Rate – Processing Rate – Recycling Rate

Tujuan : Melihat efektivitas sistem pengelolaan sampah kota.

plot(data_full$Tahun, data_full$collection_rate,
     type="o", lwd=2, col="blue",
     xlab="Tahun", ylab="Collection Rate",
     main="Collection Rate Kota Semarang")

plot(data_full$Tahun, data_full$recycling_rate,
     type="o", lwd=2, col="darkorange",
     xlab="Tahun", ylab="Recycling Rate",
     main="Recycling Rate Kota Semarang")

# Komposisi Total Jenis Sampah

library(dplyr)
library(ggplot2)
library(scales)  

# Pilih variabel komposisi
komposisi <- data_full %>%
  select(sisa_makanan, kertas, plastik, logam, kain,
         karet_kulit, kaca, lainnya)

# Hitung total per jenis
komposisi_total <- colSums(komposisi, na.rm = TRUE)

# Ubah jadi data frame
komposisi_df <- data.frame(
  jenis = names(komposisi_total),
  total = komposisi_total
)

# Plot Bar
ggplot(komposisi_df, aes(x = reorder(jenis, total), y = total, fill = jenis)) +
  geom_col(width = 0.7, show.legend = FALSE) +
  geom_text(aes(label = comma(round(total, 0))),
            vjust = -0.3, size = 4) +
  labs(title = "Komposisi Total Jenis Sampah Kota Semarang",
       subtitle = "Akumulasi total dari seluruh tahun (2019–2024)",
       x = "Jenis Sampah",
       y = "Total (ton)") +
  theme_minimal(base_size = 13) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_y_continuous(labels = comma)

Mann-Kendall Test (Uji Tren Statistik)

Mengkonfirmasi secara statistik apakah tren naik / turun signifikan.

library(Kendall)
## Warning: package 'Kendall' was built under R version 4.5.2
MannKendall(data_full$timbulan_tahunan)
## tau = -0.0667, 2-sided pvalue =1
MannKendall(data_full$pengurangan)
## tau = 0.467, 2-sided pvalue =0.25966
MannKendall(data_full$penanganan)
## tau = -1, 2-sided pvalue =0.0085349
MannKendall(data_full$daur_ulang)
## tau = 0.733, 2-sided pvalue =0.060289
MannKendall(data_full$ELI)
## tau = -0.2, 2-sided pvalue =0.70711

Interpretasi : 1. Tidak ada tren signifikan dalam pengurangan sampah tahunan di Kota Semarang. Nilai p = 1 menunjukkan tidak ada kecenderungan naik atau turun, perubahan tahun ke tahun bersifat acak.

  1. Ada indikasi (tidak signifikan) bahwa penanganan sampah cenderung meningkat, tetapi bukti statistik tidak cukup karena p > 0.05. Kesimpulan: Belum ada tren signifikan, meskipun arah perubahan positif.

  2. Terdapat tren menurun yang sangat kuat dan signifikan dalam daur ulang sampah. Nilai τ = –1 menunjukkan penurunan sempurna secara monoton dari tahun ke tahun. p < 0.01 → penurunan ini sangat signifikan secara statistik.

Ini merupakan temuan penting: recycling rate memburuk drastis.

  1. Ada tren meningkat yang cukup kuat, tetapi tidak signifikan pada α = 0.05. Namun pada α = 0.10, tren ini mendekati signifikan.

Jadi, material recovery mulai menunjukkan peningkatan, tapi bukti statistik belum kuat.

  1. Tidak ada tren signifikan dalam volume sampah yang tidak tertangani. Tau (τ) sedikit negatif → arah penurunan lemah, tetapi tidak signifikan.