Descriptive Analysis of Diarrhea Epidemiology in Bojonegoro Regency in 2024

library(readxl)
library(dplyr)
library(ggplot2)
library(openxlsx)
library(tidyverse)
library(tidyr)
library(scales)

STEP 1 IDENTIFIKASI DATA

Data yang digunakan dalam penelitian ini merupakan data sekunder yang diperoleh dari publikasi resmi Dinas Kesehatan Kabupaten Bojonegoro pada tahun 2024 [1]. Data tersebut disajikan pada tingkat kecamatan, dengan total sebanyak 28 kecamatan.

Variabel yang digunakan dalam penelitian ini meliputi:

  1. Jumlah penduduk

  2. Jumlah kasus diare

  3. Jumlah kasus diare yang mendapatkan pelayanan kesehatan

Variabel pelayanan kesehatan selanjutnya diklasifikasikan berdasarkan kelompok umur, yaitu semua umur dan Balita (anak usia di bawah lima tahun)[2]. Data ini digunakan untuk menggambarkan kondisi epidemiologi diare di Kabupaten Bojonegoro.

Input Data

# 1. Import Data
datadiare<- read_excel("C:/Users/asus/Downloads/data_rapih(2).xlsx", sheet = 1)
datadiare
## # A tibble: 28 × 8
##    Tahun Kecamatan  JumlahPenduduk Diseases JUMLAH TARGET PENEMUAN (SEMUA UMUR…¹
##    <dbl> <chr>               <dbl>    <dbl>                                <dbl>
##  1  2024 Balen               66973      301                                  509
##  2  2024 Baureno             82214      706                                  625
##  3  2024 Bojonegoro          86000      668                                  653
##  4  2024 Bubulan             15265      171                                  116
##  5  2024 Dander              84966      209                                  646
##  6  2024 Gayam               33425       92                                  254
##  7  2024 Gondang             25834      407                                  196
##  8  2024 Kalitidu            50748      467                                  385
##  9  2024 Kanor               60849      423                                  462
## 10  2024 Kapas               56149      562                                  427
## # ℹ 18 more rows
## # ℹ abbreviated name: ¹​`JUMLAH TARGET PENEMUAN (SEMUA UMUR)`
## # ℹ 3 more variables: `JUMLAH TARGET PENEMUAN (BALITA)` <dbl>,
## #   `DILAYANI SEMUA UMUR (JUMLAH)` <dbl>, `DILAYANI BALITA (JUMLAH)` <dbl>
# 2. Cek Struktur Data 
str(datadiare)
## tibble [28 × 8] (S3: tbl_df/tbl/data.frame)
##  $ Tahun                              : num [1:28] 2024 2024 2024 2024 2024 ...
##  $ Kecamatan                          : chr [1:28] "Balen" "Baureno" "Bojonegoro" "Bubulan" ...
##  $ JumlahPenduduk                     : num [1:28] 66973 82214 86000 15265 84966 ...
##  $ Diseases                           : num [1:28] 301 706 668 171 209 92 407 467 423 562 ...
##  $ JUMLAH TARGET PENEMUAN (SEMUA UMUR): num [1:28] 509 625 653 116 646 254 196 385 462 427 ...
##  $ JUMLAH TARGET PENEMUAN (BALITA)    : num [1:28] 78 96 100 18 100 39 30 59 71 65 ...
##  $ DILAYANI SEMUA UMUR (JUMLAH)       : num [1:28] 1794 2013 1702 883 2130 ...
##  $ DILAYANI BALITA (JUMLAH)           : num [1:28] 641 687 507 165 589 255 143 305 460 537 ...
names(datadiare)
## [1] "Tahun"                               "Kecamatan"                          
## [3] "JumlahPenduduk"                      "Diseases"                           
## [5] "JUMLAH TARGET PENEMUAN (SEMUA UMUR)" "JUMLAH TARGET PENEMUAN (BALITA)"    
## [7] "DILAYANI SEMUA UMUR (JUMLAH)"        "DILAYANI BALITA (JUMLAH)"
# 3. Rename Kolom Pada Data
datadiare <- datadiare %>%
  rename(
    Kecamatan = Kecamatan,
    Penduduk = JumlahPenduduk,
    Diseases = Diseases,
    Target_Semua = `JUMLAH TARGET PENEMUAN (SEMUA UMUR)`,
    Target_Balita = `JUMLAH TARGET PENEMUAN (BALITA)`,
    Dilayani_Semua = `DILAYANI SEMUA UMUR (JUMLAH)`,
    Dilayani_Balita = `DILAYANI BALITA (JUMLAH)`
  )
# 4. Statistik Deskriptif 
summary(datadiare$Diseases)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    71.0   351.2   466.0   466.7   603.5   877.0
sd(datadiare$Diseases)
## [1] 213.5941

Interpretasi :

Berdasarkan hasil analisis deskriptif, jumlah kasus diare memiliki nilai rata-rata sebesar 466,7 kasus per kecamatan, dengan nilai minimum 71 kasus dan maksimum 877 kasus. Nilai median (466) yang hampir sama dengan mean menunjukkan bahwa distribusi data relatif simetris, meskipun masih terdapat variasi yang cukup besar antar wilayah.Hal ini diperkuat oleh nilai standar deviasi sebesar 213,59 yang menunjukkan bahwa penyebaran kasus diare antar kecamatan cukup tinggi, sehingga terdapat perbedaan beban penyakit yang signifikan di setiap wilayah.

ANALISIS EPIDEMIOLOGI

# 5. Perhitungan Kasus Penyakit
## Menghitung rate dan proporsi
datadiare <- datadiare %>%
  mutate(
    # Angka kesakitan per 1000 penduduk
    rate = (Diseases / Penduduk) * 1000,
    
    # Proporsi balita
    prop_balita = (Dilayani_Balita / Dilayani_Semua) * 100
  )


## Menghitung period prevalence
datadiare <- datadiare %>%
  mutate(
    
    # Period Prevalence
    period_prevalence = (Diseases / Penduduk) 
  )

hasil_epi <- datadiare %>%
  select(
    Kecamatan,
    Diseases,
    Penduduk,
    rate,
    prop_balita,
    period_prevalence
  )
print(hasil_epi, n = 28)
## # A tibble: 28 × 6
##    Kecamatan  Diseases Penduduk  rate prop_balita period_prevalence
##    <chr>         <dbl>    <dbl> <dbl>       <dbl>             <dbl>
##  1 Balen           301    66973  4.49        35.7           0.00449
##  2 Baureno         706    82214  8.59        34.1           0.00859
##  3 Bojonegoro      668    86000  7.77        29.8           0.00777
##  4 Bubulan         171    15265 11.2         18.7           0.0112 
##  5 Dander          209    84966  2.46        27.7           0.00246
##  6 Gayam            92    33425  2.75        27.9           0.00275
##  7 Gondang         407    25834 15.8         19.8           0.0158 
##  8 Kalitidu        467    50748  9.20        19.2           0.00920
##  9 Kanor           423    60849  6.95        25.3           0.00695
## 10 Kapas           562    56149 10.0         27.1           0.0100 
## 11 Kasiman         515    31495 16.4         16.6           0.0164 
## 12 Kedewan         667    13366 49.9         31.9           0.0499 
## 13 Kedungadem      877    82927 10.6         32.8           0.0106 
## 14 Kepohbaru       465    66183  7.03        28.6           0.00703
## 15 Malo            873    31640 27.6         15.3           0.0276 
## 16 Margomulyo      662    22755 29.1         28.0           0.0291 
## 17 Ngambon         531    11613 45.7         11.9           0.0457 
## 18 Ngasem          751    61081 12.3         36.2           0.0123 
## 19 Ngraho          368    47023  7.83        32.7           0.00783
## 20 Padangan        584    44245 13.2         27.3           0.0132 
## 21 Purwosari       508    30170 16.8         29.4           0.0168 
## 22 Sekar           432    28046 15.4         18.8           0.0154 
## 23 Sugihwaras      301    46474  6.48        35.4           0.00648
## 24 Sukosewu        408    43344  9.41        38.1           0.00941
## 25 Sumberejo       389    71631  5.43        40.1           0.00543
## 26 Tambakrejo      474    55015  8.62        29.5           0.00862
## 27 Temayang         71    36848  1.93        29.0           0.00193
## 28 Trucuk          186    39020  4.77        38.3           0.00477

Interpretasi :

Berdasarkan hasil_epi bisa dilihat bahwa beberapa kecamatan seperti Kedewan, Ngambon, dan Margomulyo memiliki nilai rate dan period prevalence yang tinggi, meskipun jumlah penduduknya relatif lebih kecil. Sebaliknya, kecamatan dengan jumlah penduduk besar tidak selalu memiliki tingkat kejadian tertinggi. Hal ini menunjukkan bahwa risiko diare tidak hanya dipengaruhi oleh ukuran populasi. Selain itu, terdapat kecamatan seperti Temayang yang memiliki nilai prevalensi sangat rendah, mengindikasikan adanya perbedaan kondisi lingkungan atau akses layanan kesehatan yang signifikan antar wilayah. Variabel proporsi balita (prop_balita) juga menunjukkan variasi, yang dapat menjadi indikator penting mengingat kelompok balita, dikarenakan balita adalah populasi yang lebih rentan terhadap penyakit diare. Secara keseluruhan, pola ini mengindikasikan bahwa kejadian diare dipengaruhi oleh faktor yang kompleks (multifaktorial), seperti sanitasi, akses air bersih, dan perilaku hidup bersih dan sehat, sehingga diperlukan pendekatan berbasis wilayah (spatial-based approach) dalam analisis dan intervensi.

VISUALISASI DATA

## DIAGRAM BATANG
ggplot(datadiare, aes(x = reorder(Kecamatan, Diseases), 
                       y = Diseases, 
                       fill = Diseases)) +
  geom_col() +
  geom_text(aes(label = Diseases), 
            hjust = -0.1, size = 3) +
  coord_flip() +
  
  # warna dari rendah ke tinggi
  scale_fill_gradient(
    low = "#85C1E9",   # biru muda (rendah)
    high = "#1B4F72"   # biru tua (tinggi)
  ) +
  
  labs(title = "Number of Diarrhea Cases per Subdistrict",
       x = "Subdistrict",
       y = "Number of Cases") +
  
  theme_minimal() +
  theme(
    legend.position = "none",
    plot.title = element_text(face = "bold", size = 14),
    axis.text.y = element_text(size = 8)
  ) +
  
  # biar angka ga kepotong
  expand_limits(y = max(datadiare$Diseases) * 1.1)

Interpretasi :

Visualisasi diatas menunjukkan bahwa secara umum terlihat adanya ketimpangann antar kecamatan. Kecamatan Kedungadem mencatat jumlah kasus tertinggi yaitu 877 kasus, diikuti oleh Malo (873 kasus) dan Ngasem (751 kasus). Tingginya jumlah kasus di wilayah-wilayah ini menunjukkan bahwa kecamatan tersebut memiliki beban epidemiologis yang lebih besar, sehingga berpotensi membutuhkan perhatian dan intervensi kesehatan yang lebih intensif. Sebaliknya, jumlah kasus terendah tercatat di kecamatan Bubulan (171 kasus). Rendahnya jumlah kasus di wilayah ini dapat disebabkan oleh beberapa faktor, seperti kondisi lingkungan yang lebih baik, jumlah penduduk yang lebih sedikit, atau kemungkinan perbedaan dalam pelaporan kasus. Perbedaan jumlah kasus ini menunjukkan bahwa distribusi penyakit diare tidak bersifat homogen, melainkan terkonsentrasi pada wilayah-wilayah tertentu.

## PIE CHART
pie_data <- datadiare %>%
  summarise(
    "All Ages" = sum(Dilayani_Semua),
    "Children Under Five" = sum(Dilayani_Balita)
  ) %>%
  pivot_longer(cols = everything(),
               names_to = "Category",
               values_to = "Jumlah") %>%
  mutate(
    prop = Jumlah / sum(Jumlah),
    label = paste0(Category, "\n", percent(prop, accuracy = 0.1))
  )
# pie chart
ggplot(pie_data, aes(x = "", y = Jumlah, fill = Category)) +
  geom_col(width = 1, color = "black", size = 0.7) +
  coord_polar(theta = "y") +
  
  # label di tengah
  geom_text(aes(label = label),
            position = position_stack(vjust = 0.7),
            size = 4, color = "black") +
  
  # warna jurnal (clean & profesional)
  scale_fill_manual(values = c(
    "All Ages" = "yellowgreen",              
    "Children Under Five" = "lightpink"   
  )) +
  
  labs(
    title = "Proportion of Diarrhea Health Services by Age Group",
    fill = "Age Group"
  ) +
  
  theme_void() +
  theme(
    plot.title = element_text(face = "bold", size = 14, hjust = 0.7),
    legend.position = "right",
    legend.title = element_text(size = 10),
    legend.text = element_text(size = 9)
  )
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Interpretasi :

Gambar dari hasil visualisasi diatas menunjukkan bahwa pelayanan kesehatan pada kelompok semua umur mendominasi dengan proporsi sebesar 77,4%, sedangkan pelayanan pada kelompok balita sebesar 22,6%. Hal ini menunjukkan bahwa program kesehatan lebih banyak menjangkau populasi umum. Namun demikian, kelompok balita tetap merupakan kelompok yang rentan terhadap diare akibat sistem kekebalan tubuh yang belum berkembang secara optimal. Oleh karena itu, meskipun proporsi pelayanannya lebih kecil, intervensi pada kelompok balita tetap memiliki peran yang sangat penting dalam menurunkan angka kesakitan serta mencegah komplikasi yang lebih serius.

Kesimpulan

Hasil penelitian menunjukkan kejadian diare di Kabupaten Bojonegoro tahun 2024 masih tergolong tinggi dengan total 13.068 kasus dari populasi 1,36 juta jiwa. Distribusi kasus menunjukkan variasi yang signifikan antar kecamatan, yang mencerminkan perbedaan tingkat risiko dan beban penyakit. Analisis prevalensi menunjukkan bahwa wilayah seperti Kedewan dan Ngambon memiliki tingkat risiko tertinggi, sedangkan Temayang terendah. Hal ini menegaskan bahwa jumlah kasus absolut saja tidak cukup, sehingga prevalensi menjadi ukuran yang lebih representatif dalam menggambarkan risiko penyakit. Secara keseluruhan, diare masih menjadi masalah kesehatan masyarakat yang signifikan, sehingga diperlukan pendekatan berbasis data untuk mendukung intervensi yang lebih tepat sasaran.

References

[1] https://data.bojonegorokab.go.id/dinas-kesehatan.html@detail=morbiditas

[2] https://dinkes.bojonegorokab.go.id/menu/detail/21/ProfilKesehatan