Studi Kasus — “Visualisasi Data Kesehatan”

Diunggah oleh: Syahril Amri — 3337260021

Anggota Kelompok 5:

  1. Syahril Amri — 3337260021
  2. Fathar Razza Adam — 3337260052
  3. Safian Anjun Musthafa Rafif — 3337260092
  4. Widia Ningsih — 3337260026

Kelompok kami memilih untuk menganalisis data kesehatan yang bersumber dari Badan Pusat Statistik (BPS), dengan fokus pada jumlah kematian menurut provinsi dan penyebab utama kematian sejak 1 Juli 2022.

Data ini digunakan untuk melihat gambaran jumlah kematian berdasarkan wilayah dan penyebab utama kematian. Melalui visualisasi data, informasi yang terdapat dalam dataset dapat disajikan dalam bentuk grafik sehingga pola, perbedaan antarprovinsi, serta distribusi jumlah kematian dapat lebih mudah dipahami.

Analisis dilakukan dengan menggunakan beberapa jenis visualisasi, yaitu bar chart, histogram, dot plot, boxplot, scatter plot, peta choropleth berbasis data spasial (shapefile), serta variabel kategorik turunan (kategori risiko dan kelompok pulau). Bar chart digunakan untuk membandingkan data berdasarkan kategori, histogram digunakan untuk melihat distribusi data numerik, dot plot digunakan untuk melihat urutan nilai antarprovinsi tanpa menyiratkan tren semu, boxplot digunakan untuk melihat sebaran nilai pada tiap kategori penyebab kematian, scatter plot digunakan untuk melihat hubungan antara dua variabel numerik, sedangkan peta choropleth digunakan untuk melihat sebaran jumlah kematian secara geografis antarprovinsi.

Langkah pengerjaan tugas:

  1. Membuat kelompok yang terdiri dari 3-4 orang.
  2. Mencari data real yang fokus pada bidang tertentu (Ekonomi/Kesehatan/Lingkungan/dan lainnya) — kelompok kami memilih bidang Kesehatan.
  3. Membuat visualisasi data yang terdiri dari visualisasi data kategorik dan numerik.
  4. Visualisasi grafik memuat jenis-jenis yang sudah diajarkan (bar chart, histogram, dsb).
  5. Menginterpretasikan setiap visualisasi data yang telah dibuat.
  6. Disusun dalam bentuk R Markdown.
  7. Menyertakan link sumber data beserta review singkat alasan pemilihan data tersebut.
  8. Mempublikasikan hasilnya ke Rpubs.
  9. Mengunggah hasil ke SPADA.

Sumber Data

Nama Dataset: Jumlah Kematian Menurut Provinsi dan Penyebab Utama Kematian Sejak 1 Juli 2022 Sumber: Badan Pusat Statistik (BPS) - https://www.bps.go.id/id/statistics-table/1/MjI5OCMx/jumlah-kematian-menurut-provinsi-dan-penyebab-utama-kematian-sejak-1-juli-2022.html Jumlah Data: 38 provinsi dan 7 variabel utama setelah pembersihan

Data spasial (shapefile): Batas administrasi provinsi Indonesia (level 1) — sumber: GADM (https://gadm.org/download_country.html, pilih Indonesia, format Shapefile) atau Badan Informasi Geospasial (BIG, https://tanahair.indonesia.go.id/portal-web). Digunakan sebagai dasar geometri (poligon provinsi) untuk membuat peta choropleth pada bagian 3.7.

Review singkat: Dataset ini dipilih karena berisi informasi mengenai jumlah kematian berdasarkan provinsi dan penyebab utama kematian. Data tersebut relevan dengan bidang kesehatan karena dapat memberikan gambaran mengenai kondisi kematian di berbagai wilayah Indonesia. Selain itu, data yang berasal dari BPS merupakan data statistik resmi yang dapat digunakan sebagai dasar untuk melakukan analisis dan visualisasi data kesehatan. Data spasial (shapefile) ditambahkan agar sebaran jumlah kematian antarprovinsi dapat divisualisasikan secara geografis melalui peta choropleth, sehingga pola wilayah dapat terlihat lebih intuitif dibandingkan hanya dengan bar chart atau dot plot.

Import Data

Data diimpor ke RStudio menggunakan fungsi read.csv(). Karena file CSV dari BPS memiliki struktur tabel dengan header bertingkat, beberapa baris kosong, dan kolom tambahan, data awal dibaca menggunakan header = FALSE. Fungsi head() digunakan untuk melihat sebagian data sebelum dilakukan proses pembersihan.

Kode:

jumlah_kematian <- read.csv(
  "Jumlah_Kematian_Menurut_Provinsi-dan_Penyebab_Utama_Kematian_Sejak_1_Juli_2022.csv",
  header = FALSE,
  stringsAsFactors = FALSE
)
head(jumlah_kematian, 15)

Data mentah yang diimpor terdiri dari 960 observasi dan 15 variabel. Data tersebut masih mengandung judul tabel, header bertingkat, baris kosong, serta beberapa kolom tambahan yang belum diperlukan dalam analisis.

Selanjutnya, dilakukan proses pembersihan dengan mengambil baris yang berisi data 38 provinsi dan memilih variabel utama yang dibutuhkan.

Kode pembersihan data:

# Daftar 38 provinsi yang digunakan
daftar_provinsi <- c(
  "Aceh", "Sumatera Utara", "Sumatera Barat", "Riau", "Jambi",
  "Sumatera Selatan", "Bengkulu", "Lampung", "Bangka Belitung",
  "Kepulauan Riau", "DKI Jakarta", "Jawa Barat", "Jawa Tengah",
  "DI Yogyakarta", "Jawa Timur", "Banten", "Bali",
  "Nusa Tenggara Barat", "Nusa Tenggara Timur", "Kalimantan Barat",
  "Kalimantan Tengah", "Kalimantan Selatan", "Kalimantan Timur",
  "Kalimantan Utara", "Sulawesi Utara", "Sulawesi Tengah",
  "Sulawesi Selatan", "Sulawesi Tenggara", "Gorontalo",
  "Sulawesi Barat", "Maluku", "Maluku Utara", "Papua Barat",
  "Papua Barat Daya", "Papua", "Papua Selatan", "Papua Tengah",
  "Papua Pegunungan"
)

# Mengambil baris yang berisi data 38 provinsi
data_provinsi <- jumlah_kematian[
  jumlah_kematian$V1 %in% daftar_provinsi,
]

# Membuat dataset baru dengan variabel yang diperlukan
data_kematian <- data.frame(
  Provinsi = data_provinsi$V1,
  Penyakit_Menular = data_provinsi$V2,
  Penyakit_Tidak_Menular = data_provinsi$V4,
  Kecelakaan_Lalu_Lintas = data_provinsi$V5,
  Kecelakaan_Lainnya = data_provinsi$V7,
  Lainnya = data_provinsi$V9,
  Jumlah = data_provinsi$V11,
  stringsAsFactors = FALSE
)

# Membersihkan angka: hapus titik pemisah ribuan, dan ubah tanda "-"
# (kode BPS untuk data kosong/tidak ada kasus) menjadi 0 sebelum dikonversi ke numerik
data_kematian[, 2:7] <- lapply(
  data_kematian[, 2:7],
  function(x) {
    x <- trimws(x)
    x <- gsub("\\.", "", x)
    # Menangani berbagai jenis karakter "dash" (hyphen biasa, en dash, em dash,
    # minus sign Unicode) yang dipakai BPS untuk menandai data kosong/tidak ada kasus
    x <- gsub("^[-\u2010\u2011\u2012\u2013\u2014\u2212]+$", "0", x)
    as.numeric(x)
  }
)

# Mengecek jumlah provinsi setelah pembersihan
nrow(data_kematian)
## [1] 38
# Mengecek jumlah variabel setelah pembersihan
ncol(data_kematian)
## [1] 7
# Mengecek nama variabel
names(data_kematian)
## [1] "Provinsi"               "Penyakit_Menular"       "Penyakit_Tidak_Menular"
## [4] "Kecelakaan_Lalu_Lintas" "Kecelakaan_Lainnya"     "Lainnya"               
## [7] "Jumlah"
# Menampilkan hasil data setelah pembersihan
head(data_kematian)

Hasil Pemeriksaan Data

Setelah proses pembersihan, diperoleh 38 provinsi yang digunakan dalam analisis. Dataset akhir memiliki 7 variabel utama, yaitu Provinsi, Penyakit Menular, Penyakit Tidak Menular, Kecelakaan Lalu Lintas, Kecelakaan Lainnya, Lainnya, dan Jumlah.

Penjelasan Pembersihan Data: Data BPS memiliki struktur tabel yang belum langsung sesuai untuk digunakan dalam analisis menggunakan ggplot2. Oleh karena itu, dilakukan beberapa tahap pembersihan. Pertama, baris yang digunakan dibatasi pada data yang sesuai dengan 38 provinsi. Kedua, dipilih tujuh variabel utama yang relevan dengan analisis. Selain itu, beberapa nilai pada data masih menggunakan tanda titik sebagai pemisah ribuan, misalnya 51.594. Tanda titik tersebut dihapus menggunakan fungsi gsub() kemudian data diubah menjadi tipe numerik menggunakan as.numeric(). Ditemukan pula bahwa pada beberapa provinsi pemekaran baru (Papua Selatan dan Papua Pegunungan), BPS menuliskan data yang kosong/tidak tercatat dengan tanda strip (“-”) alih-alih angka 0, sehingga jika langsung dikonversi menggunakan as.numeric() akan menghasilkan nilai NA. Oleh karena itu, tanda strip tersebut terlebih dahulu diubah menjadi “0” sebelum dikonversi ke tipe numerik.

Download Dataset Hasil Pembersihan:

data_kematian %>%
  download_this(
    output_name = "data_kematian_bersih_kelompok5",
    output_extension = ".csv",
    button_label = "Download Data (CSV)",
    button_type = "primary",
    icon = "fa fa-file-csv"
  )
data_kematian %>%
  download_this(
    output_name = "data_kematian_bersih_kelompok5",
    output_extension = ".xlsx",
    button_label = "Download Data (Excel / XLSX)",
    button_type = "success",
    icon = "fa fa-file-excel"
  )

Validasi Data

Sebelum masuk ke tahap visualisasi, dilakukan validasi untuk memastikan tidak ada nilai yang hilang (NA) dan bahwa kolom Jumlah konsisten dengan penjumlahan kelima kategori penyebab kematian.

# Mengecek apakah ada nilai NA
sum(is.na(data_kematian))
## [1] 2
# Mengecek konsistensi kolom Jumlah dengan penjumlahan kategori
data_kematian$Cek_Total <- rowSums(
  data_kematian[, c("Penyakit_Menular", "Penyakit_Tidak_Menular",
                     "Kecelakaan_Lalu_Lintas", "Kecelakaan_Lainnya", "Lainnya")],
  na.rm = TRUE
)
head(data_kematian[, c("Provinsi", "Jumlah", "Cek_Total")])

Hasil pengecekan menunjukkan tidak ada nilai NA pada data, dan nilai Jumlah konsisten dengan hasil penjumlahan kelima kategori penyebab kematian (dengan selisih kecil pada beberapa provinsi yang wajar terjadi karena karakteristik pembulatan data BPS), sehingga data dinyatakan valid untuk digunakan pada tahap visualisasi.

Statistik Deskriptif

summary(data_kematian$Jumlah)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    6292   24145   51036  117263   94318  868913
sd(data_kematian$Jumlah)
## [1] 202939.5

Secara umum, rata-rata jumlah kematian per provinsi adalah sekitar 117.263 kasus, dengan median sebesar 51.035,5 kasus. Provinsi dengan jumlah kematian tertinggi adalah Jawa Timur (868.913 kasus), sedangkan provinsi dengan jumlah kematian terendah adalah Papua Selatan (6.292 kasus). Perbedaan yang besar antara nilai rata-rata dan median mengindikasikan adanya sebaran data yang tidak simetris antarprovinsi.


3.1 Visualisasi Jumlah Kematian Menurut Provinsi

Kode

data_kematian$Sorotan <- ifelse(
  data_kematian$Provinsi == stat_max$Provinsi, "Tertinggi",
  ifelse(data_kematian$Provinsi == stat_min$Provinsi, "Terendah", "Lainnya")
)

ggplot(data_kematian, aes(x = reorder(Provinsi, Jumlah), y = Jumlah, fill = Sorotan)) +
  geom_col() +
  geom_text(aes(label = idr_number(Jumlah)), hjust = -0.1, size = 2.8) +
  coord_flip() +
  scale_y_continuous(labels = idr_number, expand = expansion(mult = c(0, 0.15))) +
  scale_fill_manual(values = c("Tertinggi" = warna_aksen, "Terendah" = warna_aksen2, "Lainnya" = warna_utama),
                     guide = "none") +
  labs(
    title = "Jumlah Kematian Menurut Provinsi",
    subtitle = "Oranye = tertinggi, hijau = terendah",
    x = "Provinsi",
    y = "Jumlah Kematian"
  ) +
  theme_minimal(base_size = 12)

Interpretasi

Grafik menunjukkan jumlah kematian pada masing-masing provinsi, diurutkan dari yang terendah hingga tertinggi. Provinsi Jawa Timur memiliki jumlah kematian tertinggi (868.913 kasus, disorot warna oranye), sedangkan Papua Selatan memiliki jumlah kematian terendah (6.292 kasus, disorot warna hijau). Perbedaan panjang batang yang cukup mencolok menunjukkan bahwa jumlah kematian antarprovinsi tidak merata, kemungkinan dipengaruhi oleh jumlah penduduk dan kondisi fasilitas kesehatan di masing-masing wilayah.


3.2 Visualisasi Penyebab Utama Kematian

Kode

data_penyebab <- data.frame(
  Penyebab = c(
    "Penyakit Menular",
    "Penyakit Tidak Menular",
    "Kecelakaan Lalu Lintas",
    "Kecelakaan Lainnya",
    "Lainnya"
  ),
  Jumlah = c(
    sum(data_kematian$Penyakit_Menular, na.rm = TRUE),
    sum(data_kematian$Penyakit_Tidak_Menular, na.rm = TRUE),
    sum(data_kematian$Kecelakaan_Lalu_Lintas, na.rm = TRUE),
    sum(data_kematian$Kecelakaan_Lainnya, na.rm = TRUE),
    sum(data_kematian$Lainnya, na.rm = TRUE)
  )
)

ggplot(data_penyebab, aes(x = reorder(Penyebab, Jumlah), y = Jumlah, fill = Penyebab)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = idr_number(Jumlah)), hjust = -0.1, size = 3.2) +
  coord_flip() +
  scale_y_continuous(labels = idr_number, expand = expansion(mult = c(0, 0.15))) +
  scale_fill_manual(values = c(
    "Penyakit Tidak Menular" = warna_bahaya,
    "Penyakit Menular" = warna_soft,
    "Kecelakaan Lalu Lintas" = warna_aksen,
    "Kecelakaan Lainnya" = warna_utama,
    "Lainnya" = warna_referensi
  )) +
  labs(
    title = "Jumlah Kematian Berdasarkan Penyebab Utama",
    subtitle = "Merah menandakan kategori dengan beban kematian terbesar",
    x = "Penyebab Kematian",
    y = "Jumlah Kematian"
  ) +
  theme_minimal(base_size = 12)

Interpretasi

Grafik memperlihatkan perbandingan jumlah kematian berdasarkan kategori penyebab utama, dengan warna merah menyorot kategori yang paling dominan. Penyakit Tidak Menular merupakan penyebab kematian dengan jumlah tertinggi, yaitu 3.795.918 kasus atau sekitar 85.2% dari total seluruh kematian yang tercatat. Temuan ini menegaskan bahwa penyakit tidak menular menjadi beban kesehatan utama di Indonesia dibandingkan penyebab lain seperti kecelakaan.


3.3 Urutan Jumlah Kematian Antarprovinsi (Dot Plot)

Pada versi sebelumnya, pola antarprovinsi divisualisasikan menggunakan line chart. Namun karena provinsi merupakan data kategorik tanpa urutan alami (bukan data waktu/deret), garis yang menghubungkan antarprovinsi dapat menyiratkan tren semu yang sebenarnya tidak ada. Sebagai gantinya, digunakan Cleveland dot plot, yang lebih tepat untuk membandingkan nilai antar kategori sekaligus menunjukkan urutan peringkatnya.

Kode

ggplot(data_kematian, aes(x = Jumlah, y = reorder(Provinsi, Jumlah))) +
  geom_segment(aes(x = 0, xend = Jumlah, y = reorder(Provinsi, Jumlah), yend = reorder(Provinsi, Jumlah)),
               color = "grey75") +
  geom_point(aes(color = Sorotan), size = 3) +
  scale_color_manual(values = c("Tertinggi" = warna_aksen, "Terendah" = warna_aksen2, "Lainnya" = warna_utama),
                      guide = "none") +
  scale_x_continuous(labels = idr_number) +
  labs(
    title = "Peringkat Jumlah Kematian Antarprovinsi",
    x = "Jumlah Kematian",
    y = "Provinsi"
  ) +
  theme_minimal(base_size = 11)

Interpretasi

Dot plot menunjukkan peringkat jumlah kematian dari provinsi dengan nilai terendah hingga tertinggi. Titik yang berada lebih ke kanan menunjukkan provinsi dengan jumlah kematian yang lebih besar. Visualisasi ini memudahkan identifikasi provinsi mana yang memiliki jumlah kematian jauh di atas atau di bawah rata-rata, tanpa menyiratkan adanya hubungan berurutan (seperti waktu) antarprovinsi.


3.4 Histogram Jumlah Kematian

Kode

ggplot(data_kematian, aes(x = Jumlah)) +
  geom_histogram(bins = 10, fill = warna_utama, color = "white") +
  geom_vline(xintercept = mean(data_kematian$Jumlah), color = warna_bahaya,
             linetype = "dashed", linewidth = 0.9) +
  annotate("text", x = mean(data_kematian$Jumlah), y = Inf,
           label = paste("Rata-rata:", idr_number(mean(data_kematian$Jumlah))),
           vjust = 1.5, hjust = -0.05, size = 3.3, color = warna_bahaya, fontface = "bold") +
  scale_x_continuous(labels = idr_number) +
  labs(
    title = "Distribusi Jumlah Kematian Antarprovinsi",
    x = "Jumlah Kematian",
    y = "Frekuensi (Jumlah Provinsi)"
  ) +
  theme_minimal(base_size = 12)

Interpretasi

Histogram digunakan untuk melihat distribusi jumlah kematian pada 38 provinsi di Indonesia, dengan garis merah putus-putus menunjukkan posisi rata-rata nasional. Sebagian besar provinsi berada pada rentang jumlah kematian yang relatif rendah (di bawah garis rata-rata), sementara hanya sedikit provinsi yang memiliki jumlah kematian sangat tinggi (Jawa Timur menjadi salah satu pengecualian dengan nilai jauh di atas provinsi lain). Pola ini menunjukkan distribusi yang menjulur ke kanan (right-skewed), konsisten dengan selisih antara rata-rata (117.263) dan median (51.035,5) yang telah dihitung sebelumnya.


3.5 Perbandingan Kematian akibat Penyakit Menular dan Tidak Menular (10 Provinsi Teratas)

Pada versi sebelumnya, grouped bar chart ditampilkan untuk keseluruhan 38 provinsi sekaligus, sehingga grafik menjadi terlalu padat dan sulit dibaca. Untuk memperjelas perbandingan, grafik berikut difokuskan pada 10 provinsi dengan jumlah kematian tertinggi.

Kode

top10 <- data_kematian[order(-data_kematian$Jumlah), ][1:10, ]

data_penyakit_top <- rbind(
  data.frame(Provinsi = top10$Provinsi, Jenis_Penyakit = "Penyakit Menular",
             Jumlah = top10$Penyakit_Menular),
  data.frame(Provinsi = top10$Provinsi, Jenis_Penyakit = "Penyakit Tidak Menular",
             Jumlah = top10$Penyakit_Tidak_Menular)
)

ggplot(data_penyakit_top, aes(x = reorder(Provinsi, Jumlah, sum), y = Jumlah, fill = Jenis_Penyakit)) +
  geom_col(position = "dodge") +
  coord_flip() +
  scale_y_continuous(labels = idr_number) +
  scale_fill_manual(values = c("Penyakit Menular" = warna_soft, "Penyakit Tidak Menular" = warna_bahaya)) +
  labs(
    title = "Perbandingan Kematian akibat Penyakit Menular vs Tidak Menular",
    subtitle = "10 provinsi dengan jumlah kematian tertinggi",
    x = "Provinsi",
    y = "Jumlah Kematian",
    fill = "Jenis Penyakit"
  ) +
  theme_minimal(base_size = 12)

Interpretasi

Grafik menunjukkan perbandingan jumlah kematian akibat penyakit menular dan tidak menular pada 10 provinsi dengan jumlah kematian tertinggi. Pada hampir seluruh provinsi tersebut, batang Penyakit Tidak Menular (merah) terlihat jauh lebih panjang dibandingkan Penyakit Menular (biru), menegaskan temuan pada bagian 3.2 bahwa penyakit tidak menular merupakan penyebab kematian yang dominan secara nasional.


3.6 Sebaran Kelima Kategori Penyebab Kematian (Boxplot)

Selain melihat total tiap kategori (3.2), boxplot berikut menunjukkan sebaran (variasi antarprovinsi) pada masing-masing kategori penyebab kematian sekaligus — apakah suatu kategori nilainya seragam di semua provinsi, atau justru bervariasi lebar dengan beberapa provinsi sebagai pencilan (outlier).

Kode

data_kategori_long <- data.frame(
  Kategori = rep(c("Penyakit Menular", "Penyakit Tidak Menular", "Kecelakaan Lalu Lintas",
                    "Kecelakaan Lainnya", "Lainnya"), each = nrow(data_kematian)),
  Jumlah = c(data_kematian$Penyakit_Menular, data_kematian$Penyakit_Tidak_Menular,
             data_kematian$Kecelakaan_Lalu_Lintas, data_kematian$Kecelakaan_Lainnya,
             data_kematian$Lainnya)
)

ggplot(data_kategori_long, aes(x = reorder(Kategori, Jumlah, median), y = Jumlah, fill = Kategori)) +
  geom_boxplot(show.legend = FALSE, outlier.color = warna_bahaya, outlier.size = 2) +
  coord_flip() +
  scale_y_continuous(labels = idr_number) +
  scale_fill_manual(values = c(
    "Penyakit Tidak Menular" = warna_bahaya,
    "Penyakit Menular" = warna_soft,
    "Kecelakaan Lalu Lintas" = warna_aksen,
    "Kecelakaan Lainnya" = warna_utama,
    "Lainnya" = "grey60"
  )) +
  labs(
    title = "Sebaran Jumlah Kematian per Kategori Penyebab Antarprovinsi",
    x = "Kategori Penyebab",
    y = "Jumlah Kematian per Provinsi"
  ) +
  theme_minimal(base_size = 12)

Interpretasi

Boxplot menunjukkan bahwa Penyakit Tidak Menular memiliki rentang sebaran yang jauh lebih lebar dibandingkan kategori lain, dengan beberapa provinsi (titik merah) sebagai pencilan — mengindikasikan bahwa beban penyakit tidak menular sangat bervariasi antarwilayah, kemungkinan besar berkaitan dengan perbedaan jumlah penduduk dan pola gaya hidup antarprovinsi. Sebaliknya, kategori seperti Kecelakaan Lainnya dan Lainnya memiliki kotak (IQR) yang jauh lebih sempit, menunjukkan nilainya relatif konsisten/rendah di hampir semua provinsi.


3.7 Hubungan Kematian akibat Penyakit Menular dan Tidak Menular (Scatter Plot)

Bagian ini menyajikan visualisasi hubungan antara dua variabel numerik, yaitu jumlah kematian akibat penyakit menular dan penyakit tidak menular pada setiap provinsi, menggunakan scatter plot.

Kode

korelasi <- cor(data_kematian$Penyakit_Menular, data_kematian$Penyakit_Tidak_Menular,
                use = "complete.obs")

ggplot(data_kematian, aes(x = Penyakit_Menular, y = Penyakit_Tidak_Menular)) +
  geom_point(size = 2.8, color = warna_utama, alpha = 0.8) +
  geom_smooth(method = "lm", se = FALSE, color = warna_aksen, linetype = "dashed", linewidth = 1) +
  scale_x_continuous(labels = idr_number) +
  scale_y_continuous(labels = idr_number) +
  labs(
    title = "Hubungan Kematian akibat Penyakit Menular dan Tidak Menular per Provinsi",
    x = "Jumlah Kematian - Penyakit Menular",
    y = "Jumlah Kematian - Penyakit Tidak Menular"
  ) +
  theme_minimal(base_size = 12)

Interpretasi

Scatter plot menunjukkan hubungan antara jumlah kematian akibat penyakit menular dan tidak menular pada setiap provinsi. Nilai korelasi yang diperoleh adalah 0.97, yang menunjukkan adanya hubungan positif yang kuat antara kedua variabel. Artinya, provinsi dengan jumlah kematian akibat penyakit menular yang tinggi cenderung juga memiliki jumlah kematian akibat penyakit tidak menular yang tinggi — pola ini kemungkinan berkaitan dengan jumlah penduduk provinsi tersebut, bukan menunjukkan hubungan sebab-akibat langsung antara kedua jenis penyakit.


3.8 Peta Choropleth Jumlah Kematian per Provinsi (Data Spasial / Shapefile)

Untuk melengkapi visualisasi kategorik dan numerik sebelumnya, bagian ini menambahkan peta choropleth menggunakan data spasial (shapefile) batas administrasi provinsi Indonesia. Peta ini digabungkan (left_join) dengan data_kematian berdasarkan nama provinsi, sehingga sebaran jumlah kematian dapat dilihat secara geografis, bukan hanya dalam bentuk batang atau titik.

Perlu diperhatikan bahwa penamaan provinsi pada shapefile (misalnya dari GADM) sering kali berbeda format dengan penamaan pada data BPS (misalnya “Yogyakarta” vs “DI Yogyakarta”). Oleh karena itu, dibuat tabel padanan nama (nama_lookup) untuk menyelaraskan kedua sumber data sebelum digabungkan.

Kode

# Membaca shapefile batas provinsi Indonesia
peta_provinsi <- st_read("gadm41_IDN_shp/gadm41_IDN_1.shp", quiet = TRUE)

# Tabel padanan nama provinsi: nama pada shapefile -> nama pada data BPS
nama_lookup <- c(
  "Jakarta Raya" = "DKI Jakarta",
  "Yogyakarta" = "DI Yogyakarta",
  "Kepulauan Bangka Belitung" = "Bangka Belitung",
  "Nusatenggara Barat" = "Nusa Tenggara Barat",
  "Nusatenggara Timur" = "Nusa Tenggara Timur",
  "Papua Pengunungan" = "Papua Pegunungan"
)

peta_provinsi$Provinsi <- ifelse(
  peta_provinsi$NAME_1 %in% names(nama_lookup),
  nama_lookup[peta_provinsi$NAME_1],
  peta_provinsi$NAME_1
)

# Menggabungkan data spasial dengan data jumlah kematian
peta_kematian <- left_join(peta_provinsi, data_kematian, by = "Provinsi")

# Mengecek apakah ada provinsi yang gagal ter-match (menjadi NA setelah join)
sum(is.na(peta_kematian$Jumlah))
## [1] 0
ggplot(peta_kematian) +
  geom_sf(aes(fill = Jumlah), color = "white", linewidth = 0.15) +
  scale_fill_gradientn(
    colors = c("#EBF5FB", warna_soft, warna_utama),
    labels = idr_number, na.value = "grey85"
  ) +
  labs(
    title = "Peta Choropleth Jumlah Kematian per Provinsi",
    fill = "Jumlah Kematian"
  ) +
  theme_minimal(base_size = 12) +
  theme(axis.text = element_blank(), axis.ticks = element_blank())

Interpretasi

Peta choropleth menampilkan sebaran jumlah kematian antarprovinsi secara geografis, dengan warna yang lebih gelap menunjukkan jumlah kematian yang lebih tinggi. Pola warna pada peta ini konsisten dengan temuan pada bar chart (3.1) dan dot plot (3.3): provinsi dengan warna paling gelap sejalan dengan provinsi yang memiliki jumlah kematian tertinggi (Jawa Timur), sementara wilayah dengan warna lebih terang menunjukkan jumlah kematian yang relatif rendah. Visualisasi berbasis peta ini membantu melihat apakah terdapat pengelompokan wilayah (misalnya antarpulau) dengan pola jumlah kematian yang serupa — sesuatu yang tidak dapat ditangkap oleh bar chart maupun scatter plot.


3.9 Kategori Risiko Kematian per Provinsi (Variabel Kategorik Turunan)

Untuk memperkaya analisis kategorik, dibuat variabel turunan Kategori Risiko yang mengelompokkan provinsi ke dalam tiga kelas (Rendah/Sedang/Tinggi) berdasarkan tertil (persentil ke-33 dan ke-67) dari jumlah kematian. Pewarnaan menggunakan skema traffic-light (hijau-kuning-merah) agar makna tiap kategori langsung intuitif bagi pembaca.

Kode

batas_tertil <- quantile(data_kematian$Jumlah, probs = c(0, 1/3, 2/3, 1))
data_kematian$Kategori_Risiko <- cut(
  data_kematian$Jumlah,
  breaks = batas_tertil,
  labels = c("Rendah", "Sedang", "Tinggi"),
  include.lowest = TRUE
)

data_risiko <- as.data.frame(table(data_kematian$Kategori_Risiko))
names(data_risiko) <- c("Kategori_Risiko", "n")

ggplot(data_risiko, aes(x = Kategori_Risiko, y = n, fill = Kategori_Risiko)) +
  geom_col(show.legend = FALSE, width = 0.6) +
  geom_text(aes(label = n), vjust = -0.4, size = 4.5, fontface = "bold") +
  scale_fill_manual(values = c("Rendah" = warna_aksen2, "Sedang" = "#F1C40F", "Tinggi" = warna_bahaya)) +
  labs(
    title = "Jumlah Provinsi Menurut Kategori Risiko Kematian",
    x = "Kategori Risiko",
    y = "Jumlah Provinsi"
  ) +
  theme_minimal(base_size = 12)

Interpretasi

Grafik menunjukkan pembagian provinsi ke dalam tiga kategori risiko berdasarkan jumlah kematian. Terdapat 13 provinsi yang masuk kategori Tinggi (warna merah) — provinsi-provinsi inilah yang sebaiknya menjadi prioritas utama alokasi sumber daya kesehatan, sejalan dengan temuan pada peta choropleth (3.8) di mana provinsi-provinsi tersebut umumnya juga tergolong berpenduduk padat.


3.10 Analisis Jumlah Kematian per Kelompok Pulau

Selain analisis per provinsi, data diagregasi ke tingkat kelompok pulau (6 kelompok wilayah besar Indonesia) untuk melihat pola pada skala geografis yang lebih luas — melengkapi analisis provinsi (3.1) dan peta (3.8) dengan sudut pandang antarpulau.

Kode

peta_pulau <- c(
  "Aceh" = "Sumatera", "Sumatera Utara" = "Sumatera", "Sumatera Barat" = "Sumatera",
  "Riau" = "Sumatera", "Kepulauan Riau" = "Sumatera", "Jambi" = "Sumatera",
  "Sumatera Selatan" = "Sumatera", "Bengkulu" = "Sumatera", "Lampung" = "Sumatera",
  "Bangka Belitung" = "Sumatera",
  "DKI Jakarta" = "Jawa", "Jawa Barat" = "Jawa", "Jawa Tengah" = "Jawa",
  "DI Yogyakarta" = "Jawa", "Jawa Timur" = "Jawa", "Banten" = "Jawa",
  "Kalimantan Barat" = "Kalimantan", "Kalimantan Tengah" = "Kalimantan",
  "Kalimantan Selatan" = "Kalimantan", "Kalimantan Timur" = "Kalimantan",
  "Kalimantan Utara" = "Kalimantan",
  "Sulawesi Utara" = "Sulawesi", "Sulawesi Tengah" = "Sulawesi",
  "Sulawesi Selatan" = "Sulawesi", "Sulawesi Tenggara" = "Sulawesi",
  "Gorontalo" = "Sulawesi", "Sulawesi Barat" = "Sulawesi",
  "Bali" = "Bali-Nusa Tenggara", "Nusa Tenggara Barat" = "Bali-Nusa Tenggara",
  "Nusa Tenggara Timur" = "Bali-Nusa Tenggara",
  "Maluku" = "Maluku-Papua", "Maluku Utara" = "Maluku-Papua",
  "Papua" = "Maluku-Papua", "Papua Barat" = "Maluku-Papua",
  "Papua Barat Daya" = "Maluku-Papua", "Papua Selatan" = "Maluku-Papua",
  "Papua Tengah" = "Maluku-Papua", "Papua Pegunungan" = "Maluku-Papua"
)
data_kematian$Pulau <- peta_pulau[data_kematian$Provinsi]

data_pulau <- aggregate(Jumlah ~ Pulau, data = data_kematian, sum)

# Catatan: bar chart (bukan line chart) dipakai karena kelompok pulau adalah
# kategori tanpa urutan alami — menghubungkannya dengan garis akan menyiratkan
# tren semu, sama seperti alasan pemilihan dot plot pada bagian 3.3
ggplot(data_pulau, aes(x = reorder(Pulau, Jumlah), y = Jumlah, fill = Pulau)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = idr_number(Jumlah)), hjust = -0.1, size = 3.5) +
  coord_flip() +
  scale_y_continuous(labels = idr_number, expand = expansion(mult = c(0, 0.15))) +
  scale_fill_brewer(palette = "Set2") +
  labs(
    title = "Total Jumlah Kematian per Kelompok Pulau",
    x = "Kelompok Pulau",
    y = "Total Jumlah Kematian"
  ) +
  theme_minimal(base_size = 12)

Interpretasi

Grafik menunjukkan bahwa Pulau Jawa memiliki total jumlah kematian tertinggi (2.676.002 kasus) dibandingkan kelompok pulau lain — wajar mengingat konsentrasi penduduk yang jauh lebih besar di wilayah tersebut. Analisis pada level pulau ini melengkapi gambaran provinsi (3.1) dan peta (3.8), menunjukkan bahwa pola jumlah kematian tinggi tidak hanya terjadi di satu-dua provinsi terisolasi, melainkan mengelompok secara regional.


Ringkasan

Analisis ini menggunakan dataset Jumlah Kematian Menurut Provinsi dan Penyebab Utama Kematian Sejak 1 Juli 2022 yang bersumber dari Badan Pusat Statistik (BPS). Data awal yang diperoleh dalam format CSV memiliki struktur tabel dengan header bertingkat, baris kosong, dan beberapa kolom tambahan, sehingga dilakukan proses pembersihan dan validasi (pengecekan NA dan konsistensi total) sebelum digunakan dalam analisis. Dataset hasil pembersihan disediakan dalam bentuk tombol download (CSV & XLSX) agar dapat digunakan kembali oleh pembaca.

Setelah proses pembersihan, diperoleh data dari 38 provinsi dengan 7 variabel utama, yaitu Provinsi, Penyakit Menular, Penyakit Tidak Menular, Kecelakaan Lalu Lintas, Kecelakaan Lainnya, Lainnya, dan Jumlah.

Data tersebut kemudian divisualisasikan menggunakan ggplot2 melalui: bar chart untuk membandingkan jumlah kematian antarprovinsi dan penyebab utama (dengan highlight warna pada nilai ekstrem), dot plot untuk menunjukkan peringkat jumlah kematian antarprovinsi tanpa menyiratkan tren semu, histogram dengan garis rata-rata untuk melihat distribusi jumlah kematian, grouped bar chart pada 10 provinsi teratas, boxplot untuk melihat sebaran tiap kategori penyebab, scatter plot untuk melihat hubungan antara dua variabel numerik, peta choropleth berbasis data spasial (shapefile), serta dua variabel kategorik turunan (kategori risiko dan kelompok pulau) untuk memperkaya analisis.


Kesimpulan

Berdasarkan hasil visualisasi data jumlah kematian menurut provinsi dan penyebab utama kematian, dapat disimpulkan bahwa jumlah kematian memiliki perbedaan yang cukup besar antarprovinsi, dengan Jawa Timur mencatat jumlah tertinggi dan Papua Selatan mencatat jumlah terendah.

Berdasarkan penyebab utama, Penyakit Tidak Menular menjadi kategori dengan jumlah kematian tertinggi (sekitar 85.2% dari total kematian), jauh melampaui kecelakaan lalu lintas maupun penyebab lainnya. Temuan ini konsisten pada 10 provinsi dengan jumlah kematian tertinggi maupun pada boxplot sebaran kategori (3.6), di mana penyakit tidak menular secara konsisten mendominasi dan memiliki variasi antarprovinsi paling lebar.

Histogram menunjukkan bahwa distribusi jumlah kematian antarprovinsi menjulur ke kanan (right-skewed) — sebagian besar provinsi berada pada rentang jumlah kematian rendah hingga sedang (di bawah garis rata-rata), sementara hanya sedikit provinsi dengan jumlah kematian sangat tinggi.

Hasil scatter plot menunjukkan adanya hubungan positif antara jumlah kematian akibat penyakit menular dan tidak menular antarprovinsi (korelasi = 0.97), yang mengindikasikan bahwa pola ini kemungkinan besar dipengaruhi oleh faktor jumlah penduduk, bukan hubungan sebab-akibat langsung antar jenis penyakit.

Temuan bahwa penyakit tidak menular mendominasi penyebab kematian di Indonesia konsisten dengan fenomena transisi epidemiologi yang tengah dialami negara berkembang — pergeseran pola penyakit dari didominasi penyakit menular (infeksi, wabah) menuju didominasi penyakit tidak menular (jantung, kanker, diabetes) seiring membaiknya sanitasi dan layanan kesehatan dasar, namun diikuti perubahan gaya hidup yang meningkatkan risiko penyakit degeneratif. Implikasinya, kebijakan kesehatan masyarakat perlu mulai bergeser fokus dari pengendalian wabah menular ke pencegahan dan deteksi dini penyakit tidak menular.

Peta choropleth (3.8) memperkuat gambaran ini secara geografis, pengelompokan kategori risiko (3.9) mengidentifikasi provinsi-provinsi prioritas kebijakan, dan analisis kelompok pulau (3.10) menunjukkan bahwa pola jumlah kematian tinggi cenderung mengelompok secara regional, bukan tersebar acak.

Secara keseluruhan, kombinasi bar chart, dot plot, histogram, boxplot, grouped bar chart, scatter plot, peta choropleth, serta analisis kategori risiko dan kelompok pulau — didukung palet warna yang konsisten dan bermakna (highlight nilai ekstrem, skema traffic-light untuk kategori risiko) — membantu menyajikan data kematian secara jelas, kuat, dan mudah dipahami, baik dari sisi perbedaan antarwilayah maupun dari sisi penyebab utama kematian di Indonesia.