1. Pendahuluan

1.1 Latar Belakang

AIDS (Acquired Immunodeficiency Syndrome) merupakan tahap lanjutan dari infeksi Human Immunodeficiency Virus (HIV) yang dapat menyerang siapa saja tanpa memandang usia, jenis kelamin, maupun latar belakang sosial. Berdasarkan data nasional, HIV/AIDS masih termasuk dalam kelompok penyakit menular yang memberikan kontribusi signifikan terhadap beban kesehatan masyarakat di Indonesia. Provinsi Bali tercatat sebagai salah satu provinsi dengan jumlah kasus HIV/AIDS yang relatif tinggi dibandingkan provinsi lain. Tingginya mobilitas penduduk, aktivitas pariwisata, serta interaksi sosial yang intens menjadikan Bali sebagai wilayah yang rentan terhadap penularan HIV yang dapat berkembang menjadi AIDS apabila tidak terdeteksi dan diobati secara dini.

Penularan HIV terjadi melalui kontak dengan cairan tubuh yang terinfeksi, seperti hubungan seksual tidak aman, penggunaan jarum suntik tidak steril, transfusi darah yang terkontaminasi, serta penularan dari ibu ke anak. Faktor risiko AIDS dipengaruhi oleh interaksi antara faktor host (usia, jenis kelamin, perilaku berisiko), agent (virus HIV), dan environment (lingkungan sosial, ekonomi, budaya, serta akses layanan kesehatan).

Apabila tidak ditangani dengan tepat, AIDS dapat menyebabkan berbagai komplikasi serius, seperti infeksi oportunistik berat, kanker, gangguan neurologis, hingga kematian. Selain dampak kesehatan, AIDS juga menimbulkan dampak sosial berupa stigma dan diskriminasi yang dapat menghambat upaya pencegahan, deteksi dini, dan pengobatan.

Menanggapi permasalahan tersebut, pemerintah dan tenaga kesehatan telah melakukan berbagai upaya pengendalian HIV/AIDS, antara lain melalui program edukasi kesehatan reproduksi, promosi perilaku seksual aman, pemeriksaan HIV secara sukarela, serta penyediaan terapi antiretroviral (ARV). Meskipun demikian, keberhasilan pengendalian AIDS sangat bergantung pada kesadaran masyarakat, dukungan kebijakan yang kuat, serta pendekatan berbasis wilayah yang sesuai dengan karakteristik lokal.

Dengan demikian, penelitian ini dilakukan untuk menelaah kasus AIDS dari sudut pandang epidemiologis, dengan fokus pada Provinsi Bali. Pendekatan ini diharapkan dapat memberikan gambaran pola distribusi penyakit serta menjadi dasar dalam merumuskan strategi pengendalian AIDS yang lebih efektif dan kontekstual.

1.2 Rumusan Masalah

Adapun rumusan masalah yang akan diteliti adalah :

  1. Apa saja faktor agent-host-environment kasus AIDS dan bagaimana hubungan faktor risiko terhadap penyakit tersebut?

  2. Bagaimana sebaran kasus AIDS di setiap kabupaten/kota di Provinsi Bali tahun 2024 berdasarkan analisis epidemiologis?

  3. Bagaimana simulasi desain studi epidemiologi yang sesuai untuk mengkaji kasus AIDS di Provinsi Bali?

  4. Apa implikasi hasil penelitian terhadap kebijakan pengendalian AIDS yang berfokus pada sisi epidemiologis berbasis wilayah di Bali?

1.3 Tujuan

Guna menjawab rumusan masalah yang ada, penelitian ini bertujuan untuk:

  1. Mengidentifikasi faktor agent-host-environment yang relevan terhadap kasus AIDS serta menggambarkan hubungan faktor risiko terhadap penyakit tersebut.

  2. Menganalisis incidence rate dan pola sebaran kasus AIDS di Provinsi Bali tahun 2020-2024 menggunakan pendekatan epidemiologis.

  3. Merancang desain simulatif studi epidemiologi untuk kasus AIDS di Provinsi Bali.

  4. Memberikan rekomendasi kebijakan pengendalian AIDS di Provinsi Bali berdasarkan hasil analisis epidemiologis.

1.4 Batasan Penelitian

  1. Ruang lingkup wilayah penelitian dibatasi pada seluruh kabupaten dan kota di Provinsi Bali, sehingga hasil penelitian tidak dapat digeneralisasikan untuk wilayah lain di Indonesia.

  2. Analisis yang dilakukan hanya mencakup pendekatan epidemiologis deskriptif, meliputi:

  • Analisis deskriptif untuk menggambarkan karakteristik dan distribusi kasus AIDS,
  • Analisis Insidensi untuk melihat tingkat sebaran kasus AIDS di setiap kabupaten/kota, sehingga penelitian ini tidak bertujuan untuk menilai hubungan sebab-akibat (kausalitas).
  1. Penelitian ini tidak membahas aspek klinis, perilaku individu secara mendalam, maupun efektivitas terapi medis, melainkan berfokus pada analisis statistik berdasarkan data agregat wilayah.

2. Tinjauan Pustaka

2.1 AIDS

AIDS (Acquired Immunodeficiency Syndrome) adalah kondisi kesehatan yang disebabkan oleh infeksi virus HIV (Human Immunodeficiency Virus), yang menyerang dan merusak sistem kekebalan tubuh manusia, khususnya sel CD4. AIDS meruapakan tahap akhir dari perkembangan HIV. Jika tidak diobati, virus ini dapat berkembang menjadi AIDS dalam kurun waktu sekitar 10 tahun, hal ini ditandai dengan sistem kekebalan tubuh sangat melemah sehingga tubuh menjadi rentan terhadap infeksi dan berbagai penyakit serius. AIDS merupakan tahap akhir dari infeksi HIV dan menandai kerusakan sistem imun yang parah sehingga tidak mampu melawan infeksi menyebabkan banyak komplikasi lain.

2.2 Triad Epidemiologi

Model ini digunakan untuk memahami faktor-faktor yang berkontribusi terhadap terjadinya AIDS sebagai penyakit menular dengan menggambarkan bagaimana interaksi antara penyebab, individu, dan lingkungan berperan dalam penyebaran AIDS.

Agent : Agent dalam kasus AIDS adalah virus HIV, yang menular melalui kontak dengan cairan tubuh seperti darah, air mani, dan cairan vagina dari orang yang terinfeksi. Faktor lain yang meningkatkan penularan termasuk infeksi menular seksual lain (seperti herpes simpleks dan sifilis) yang dapat mempercepat masuknya HIV ke dalam tubuh.

Host : Host adalah inang atau individu dengan faktor predisposisi seperti perilaku seks berisiko (hubungan seks tanpa kondom, berganti pasangan), penggunaan narkoba suntik, status sosial ekonomi rendah, dan kurangnya pengetahuan tentang pencegahan HIV/AIDS. Remaja dan orang dewasa muda merupakan kelompok rentan karena tingginya aktivitas seksual, rendahnya penggunaan kondom, serta keterbatasan akses layanan kesehatan reproduksi.

Environment : Environment adalah lingkungan yang mendukung penyebaran tersebut. Dalam hal ini mencakup lingkungan sosial, ekonomi, dan budaya yang mendukung penyebaran AIDS di Bali. Faktor lingkungan meliputi gaya hidup bebas, pariwisata yang tinggi (terkait pekerja seks dan pelaku pariwisata), kemiskinan, budaya yang kurang mendukung edukasi seks, serta keterbatasan layanan kesehatan dalam pencegahan dan deteksi dini HIV/AIDS. Selain itu, stigma sosial terhadap pengidap HIV/AIDS sering kali menghambat upaya pengobatan dan pencegahan.

2.3 Ukuran Epidemiologi

Insidensi

Insidensi rate (incidence rate) adalah ukuran epidemiologi yang menunjukkan jumlah kasus baru suatu penyakit atau kejadian tertentu dalam suatu populasi pada periode waktu tertentu, dibandingkan dengan jumlah penduduk yang berisiko mengalami kejadian tersebut pada waktu yang sama.Digunakan untuk menggambarkan seberapa cepat penyakit atau kejadian baru muncul dalam populasi, biasanya dinyatakan per 1.000 atau per 100.000 penduduk per tahun.

\[ \text {Incidence Rate} = \frac{\text{Jumlah kasus baru}}{\text{Total populasi}} \times 100\% \]

2.4 Spatial Dependence

Ketergantungan spasial (spatial dependence) adalah kondisi di mana nilai suatu variabel di suatu lokasi memiliki hubungan atau pengaruh terhadap nilai variabel di lokasi lain yang berdekatan. Dalam konteks epidemiologi AIDS, artinya wilayah dengan angka kasus AIDS tinggi dapat memengaruhi wilayah sekitarnya, yang memungkinkan terjadi karena mobilitas masyarakat, pola perilaku, atau kesamaan karakteristik lingkungan sosial dan budaya.

Pengujiannya dapat dilakukan dengan Moran’s I, Geary’s C, atau Local Indicators of Spatial Association (LISA). Jika hasil pengujian menunjukkan adanya autokorelasi spasial positif, maka kasus AIDS cenderung mengelompok (clustered) di wilayah tertentu, bukan tersebar random. Informasi ini dapat digunakan untuk merancang pengendalian AIDS melalui penanganan berbasis wilayah (spatial targeting) sehingga upaya pencegahan dan penanganan dapat lebih fokus dan efektif.

2.4.1 Pengujian Ketergantungan Spasial

Ketergantungan spasial dapat diuji melalui beberapa metode statistik (Anselin, 1995):

A. Moran’s I

Mengukur autokorelasi spasial secara keseluruhan dengan

  • Nilai: -1 (dispersi sempurna) hingga +1 (klaster sempurna)
  • I > 0: autokorelasi positif (pengelompokan)
  • I < 0: autokorelasi negatif (dispersi)
  • I ≈ 0: randomly ditributed

B. Local Indicators of Spatial Association (LISA)

  • Mengidentifikasi klaster lokal
  • Mendeteksi hotspot (High-High) dan coldspot (Low-Low)

2.5 Matriks Bobot Spasial

Matriks bobot spasial (spatial weights matrix, W) digunakan untuk menggambarkan hubungan kedekatan antar wilayah dengan mengkuantifikasi seberapa kuat pengaruh suatu wilayah terhadap wilayah lainnya.

2.5.1 Jenis Matriks Bobot Spasial

A. Contiguity-based Weights (Berdasarkan Batas Wilayah) - Rook contiguity: Wilayah dianggap tetangga jika berbagi sisi batas - Queen contiguity: Wilayah dianggap tetangga jika berbagi sisi atau titik sudut - Bishop contiguity: Wilayah dianggap tetangga jika berbagi titik sudut saja

B. Distance-based Weights (Berdasarkan Jarak) - Menggunakan jarak Euclidean antar centroid wilayah - Bobot menurun seiring jarak meningkat - Formula umum:

\(w_{ij} = \frac{1}{d_{ij}^{\alpha}}\)

(α biasanya = 2)

C. K-Nearest Neighbors (KNN) - Setiap wilayah memiliki k tetangga terdekat - Mengatasi masalah wilayah terpencil tanpa tetangga


2.6 Diagram Faktor Risiko

2.7 Desain Studi Epidemiologi

Studi simulatif dapat dilakukan menggunakan desain cross-sectional, yaitu desain penelitian yang mengukur paparan dan hasil (outcome) secara bersamaan pada satu waktu tertentu. Desain ini berguna untuk menggambarkan Insidensi suatu kondisi dalam populasi dan mengidentifikasi faktor-faktor yang berkaitan secara jelas. Namun, desain cross-sectional memiliki keterbatasan dalam menentukan hubungan kausal temporal karena tidak dapat menunjukkan urutan kejadian antara paparan dan outcome, mengingat pengukuran hanya dilakukan pada satu waktu.


3. Metodologi Penelitian

3.1 Desain Penelitian

Penelitian ini menggunakan desain studi dengan pendekatan deskriptif kuantitatif. Data yang digunakan bersifat agregat, yaitu data per kabupaten/kota di Provinsi Bali selama periode 2020-2024. Penelitian ini ditujukan untuk melihat secara garis besar ringkasan deskriptif, insidensi, dan pola sebaran kasus AIDS baru setiap tahunnya. Variabel yang digunakan adalah tahun, nama kota/kabupaten, kasus baru di tahun tersebut, dan kepadatan penduduk.

3.2 Jenis dan Sumber Data

Penelitian ini menggunakan data sekunder yang diperoleh dari situs Badan Pusat Statistik Provinsi Bali.

Variabel yang digunakan:

Variabel Jenis Data
Tahun Kuantitatif
Nama Kabupaten/Kota Kualitatif
Jumlah Penduduk Kuantitatif
Jumlah Kasus Baru AIDS Kuantitatif
Kepadatan Penduduk (Jiwa/Km^2) Kuantitatif

3.3 Ukuran Epidemiologi

Dalam penelitian ini digunakan satu jenis ukuran epidemiologi, yaitu ukuran frekuensi , dengan rumus sebagai berikut:

3.3.1 Ukuran Frekuensi

Insidensi

Menggambarkan seberapa cepat penyakit atau kejadian baru muncul dalam populasi.

Rumus: \[ \text{Insidensi} = \frac{\text{Jumlah Kasus Baru}}{\text{Jumlah Penduduk}} \times 100\% \]


4. Hasil dan Pembahasan

# Paket
library(readxl)
library(dplyr)
library(ggplot2)
library(sf)
library(tmap)
library(spdep)
library(knitr)

4.1 Statistik Deskriptif

Ringkasan data untuk melihat ciri atau karakteristik dari jumlah penduduk, jumlah kasus baru AIDS, dan kepadatan penduduk di kabupaten/kota di Bali pada tahun 2020-2024.

Head Data
tahun kab_kota jumlah_kasus_baru jumlah_penduduk kepadatan_penduduk
2020 Jembrana 35 317100 377
2020 Tabanan 43 461600 45
2020 Badung 326 548200 1310
2020 Gianyar 16 515300 1400
2020 Klungkung 23 206900 657
2020 Bangli 14 258700 527
Eksplorasi Data Kasus AIDS per Kabupaten/Kota dan Tahun
tahun kab_kota penduduk kasus
2020 Badung 548200 326
2020 Bangli 258700 14
2020 Buleleng 791800 40
2020 Denpasar 725300 315
2020 Gianyar 515300 16
2020 Jembrana 317100 35
Mean, Median, dan Standar Deviasi Jumlah kasus AIDS Tahun per Tahun
tahun mean_kasus median_kasus sd_kasus
2020 95.89 40 127.97
2021 54.22 32 76.17
2022 65.44 22 85.10
2023 221.33 100 278.59
2024 85.22 61 96.31
10 Kabupaten/Kota dengan Jumlah Kasus Baru AIDS Tertinggi (Akumulasi 2020–2024)
kab_kota total_kasus
Denpasar 2049
Badung 994
Buleleng 533
Gianyar 327
Tabanan 260
Jembrana 190
Karangasem 164
Klungkung 138
Bangli 44
10 Kabupaten/Kota dengan Kepadatan Penduduk Tertinggi (Akumulasi 2020–2024)
kab_kota kepadatan
Denpasar 28999
Gianyar 19821
Badung 6774
Klungkung 3335
Buleleng 3004
Karangasem 2988
Bangli 2600
Tabanan 2067
Jembrana 1912

4.2 Grafik Tren AIDS Tahun 2020-2024

4.3 Insidensi

Angka Insidensi AIDS per Kabupaten/Kota dan Tahun (%)
tahun kab_kota penduduk kasus insidensi_rate
2020 Badung 548200 326 0.06
2020 Bangli 258700 14 0.01
2020 Buleleng 791800 40 0.01
2020 Denpasar 725300 315 0.04
2020 Gianyar 515300 16 0.00
2020 Jembrana 317100 35 0.01
2020 Karangasem 492400 51 0.01
2020 Klungkung 206900 23 0.01
2020 Tabanan 461600 43 0.01
2021 Badung 549300 57 0.01
2021 Bangli 262500 0 0.00
2021 Buleleng 806600 25 0.00
2021 Denpasar 726600 253 0.03
2021 Gianyar 519500 32 0.01
2021 Jembrana 321900 19 0.01
2021 Karangasem 500800 32 0.01
2021 Klungkung 210100 27 0.01
2021 Tabanan 465300 43 0.01
2022 Badung 549500 111 0.02
2022 Bangli 267000 0 0.00
2022 Buleleng 825100 102 0.01
2022 Denpasar 726800 266 0.04
2022 Gianyar 524000 41 0.01
2022 Jembrana 327900 22 0.01
2022 Karangasem 511300 17 0.00
2022 Klungkung 214000 22 0.01
2022 Tabanan 469300 8 0.00
2023 Badung 563300 368 0.07
2023 Bangli 261400 25 0.01
2023 Buleleng 808900 259 0.03
2023 Denpasar 748400 898 0.12
2023 Gianyar 524000 177 0.03
2023 Jembrana 323500 90 0.03
2023 Karangasem 500000 39 0.01
2023 Klungkung 208700 36 0.02
2023 Tabanan 466100 100 0.02
2024 Badung 568500 132 0.02
2024 Bangli 262300 5 0.00
2024 Buleleng 814800 107 0.01
2024 Denpasar 755600 317 0.04
2024 Gianyar 527100 61 0.01
2024 Jembrana 325600 24 0.01
2024 Karangasem 502300 25 0.00
2024 Klungkung 209300 30 0.01
2024 Tabanan 467700 66 0.01
Angka Insidensi AIDS Provinsi Bali per Tahun (%)
tahun total_penduduk total_kasus_baru insidensi_rate
2020 4317300 863 0.02
2021 4362600 488 0.01
2022 4414900 589 0.01
2023 4404300 1992 0.05
2024 4433200 767 0.02

10 Kabupaten/Kota dengan Angka Insidensi AIDS Tertinggi di Bali Tahun 2024
kab_kota jumlah_penduduk jumlah_kasus_baru insidensi_rate
Denpasar 755600 317 0.04
Badung 568500 132 0.02
Klungkung 209300 30 0.01
Tabanan 467700 66 0.01
Buleleng 814800 107 0.01
Gianyar 527100 61 0.01
Jembrana 325600 24 0.01
Karangasem 502300 25 0.00
Bangli 262300 5 0.00

4.4 Pembahasan

Analisis deskriptif menunjukkan bahwa jumlah kasus baru AIDS di Provinsi Bali selama periode 2020–2024 mengalami fluktuasi yang cukup besar. Rata-rata kasus baru per kabupaten/kota menurun dari 95,89 kasus pada 2020 menjadi 54,22 kasus pada 2021, kemudian meningkat kembali pada 2022. Lonjakan yang sangat signifikan terjadi pada 2023, dengan rata-rata mencapai 221,33 kasus, sebelum kembali menurun pada 2024 menjadi 85,22 kasus.

Nilai median yang relatif rendah pada periode 2020–2022 dan meningkat tajam pada 2023 menunjukkan bahwa lonjakan kasus tidak hanya terjadi pada satu wilayah tertentu, tetapi dialami oleh sebagian besar kabupaten/kota. Standar deviasi yang tinggi, terutama pada 2023, mengindikasikan adanya ketimpangan distribusi kasus antarwilayah, dengan beban penyakit yang terkonsentrasi pada daerah tertentu.

Secara akumulatif, Kota Denpasar mencatat jumlah kasus baru AIDS tertinggi selama lima tahun, diikuti oleh Kabupaten Badung dan Kabupaten Buleleng. Wilayah-wilayah ini merupakan pusat aktivitas ekonomi dan pariwisata, sehingga tingginya mobilitas penduduk diduga berperan dalam tingginya jumlah kasus yang tercatat.

Selanjutnya, melaui analisis temporal dan spasial yang dibantu dengan visualisasi, diperoleh angka insidensi AIDS di Provinsi Bali cenderung mengalami fluktuasi. Insidensi menurun pada periode 2020–2022, kemudian meningkat tajam pada 2023 hingga mencapai 0,05%, sebelum kembali menurun pada 2024. Peningkatan pada 2023 kemungkinan dipengaruhi oleh faktor administratif, seperti peningkatan skrining HIV dan perbaikan sistem pelaporan, sehingga perlu ditafsirkan secara hati-hati.

Secara spasial, pada tahun 2024 wilayah dengan angka insidensi tertinggi adalah Kota Denpasar dan Kabupaten Badung, sementara beberapa wilayah lain menunjukkan angka yang lebih rendah. Pemetaan spasial tidak menunjukkan pola pengelompokan geografis yang jelas, sehingga distribusi kasus AIDS di Bali cenderung tersebar dan tidak membentuk klaster wilayah tertentu.

Dengan demikian, jika ingin melakukan penelitian lanjutan dapat dilakukan desain studi potong lintang (cross-sectional) pada tingkat kabupaten/kota di Provinsi Bali. Variabel dependen adalah angka insidensi AIDS, variabel independennya adalah kepadatan penduduk, mobilitas penduduk, aktivitas pariwisata, serta cakupan layanan tes HIV dan terapi antiretroviral.

Penelitian menggunakan total sampling wilayah dengan memanfaatkan data sekunder resmi. Potensi bias yang mungkin muncul adalah information bias akibat perbedaan cakupan dan kualitas pelaporan kasus antarwilayah dan antarwaktu, serta surveillance bias, di mana wilayah dengan intensitas skrining yang lebih tinggi cenderung melaporkan lebih banyak kasus. Selain itu, keterbatasan desain cross-sectional menyebabkan hubungan kausal tidak dapat ditentukan secara temporal.


5. Kesimpulan dan Rekomendasi

5.1 Kesimpulan

Berdasarkan analisis epidemiologis kasus AIDS di Provinsi Bali periode 2020–2024, diperoleh beberapa kesimpulan sebagai berikut:

5.1.1 Faktor Agent-Host-Environment

Agent : AIDS disebabkan oleh virus Human Immunodeficiency Virus.

Host (Inang): Peran faktor host seperti perilaku seksual yang berisiko, mobilitas penduduk, serta keterlambatan deteksi dan pengobatan HIV.

Environment (Lingkungan): Lingkungan dengan aktivitas ekonomi dan pariwisata yang tinggi berkontribusi terhadap dinamika penularan HIV/AIDS melalui peningkatan mobilitas penduduk dan interaksi sosial. Akses layanan kesehatan dan intensitas skrining HIV yang berbeda antarwilayah turut memengaruhi jumlah kasus AIDS yang terlaporkan.

5.1.2 Pola Sebaran Kasus Hipertensi di Bali

  1. Pola Temporal

Jumlah dan insidensi kasus AIDS di Provinsi Bali menunjukkan fluktuasi selama periode 2020–2024. Penurunan kasus pada 2020–2022 diikuti peningkatan tajam pada 2023, kemudian kembali menurun pada 2024. Lonjakan kasus pada 2023 yang dapat dipengaruhi oleh peningkatan skrining HIV dan perbaikan sistem pelaporan, sehingga mencerminkan peningkatan deteksi, bukan semata peningkatan transmisi.

  1. Wilayah dengan Insidensi Tertinggi (2024)

Wilayah dengan insidensi AIDS tertinggi pada tahun 2024 adalah:

  • Kota Denpasar
  • Kabupaten Badung
  • Kabupaten Buleleng
  1. Karakteristik Wilayah Beban Tinggi
  • Wilayah perkotaan dan pusat pariwisata
  • Mobilitas penduduk tinggi
  • Aktivitas ekonomi dan interaksi sosial terus menerus

5.1.3 Implikasi untuk Kebijakan

  1. Wilayah Beban Tinggi sebagai Prioritas Denpasar dan Badung memerlukan perhatian khusus dalam pengendalian HIV/AIDS.

  2. Penguatan Sistem Deteksi dan Pelaporan Peningkatan kasus menunjukkan perlunya konsistensi skrining dan pencatatan kasus.

  3. Pendekatan Berbasis Mobilitas dan Aktivitas Sosial Wilayah dengan aktivitas pariwisata tinggi memerlukan strategi pengendalian yang sesuai kondisi nyata dan adaptif.

5.2 Rekomendasi

5.2.1 Rekomendasi Kebijakan Kesehatan

Prioritas Wilayah

  1. Zona Insidensi Tinggi

Kota Denpasar, Kabupaten Badung

Rekomendasi: Peningkatan skrining HIV rutin, penguatan layanan terapi antiretroviral (ARV)

  1. Zona Insidensi Menengah

Kabupaten Buleleng dan sekitarnya

Rekomendasi: edukasi pencegahan HIV dan penguatan rujukan serta tindak lanjut dari pasien HIV

  1. Zona Insidensi Rendah

Rekomendasi: kampanye pencegahan dan peningkatan kesadaran, skrining selektif pada kelompok berisiko

5.2.2 Rekomendasi Penelitian Lanjutan

  • Menekankan penelitian terhadap individu
  • Menambahkan faktor perilaku dan sosial ekonomi
  • Analisis spasial tingkat lebih spesifik
  • Studi cohort dapat dilakukan untuk memperoleh insight lebih dalam

5.3 Penutup

AIDS perlu perhatian khusus di Provinsi Bali, terutama di wilayah dengan mobilitas penduduk dan aktivitas ekonomi tinggi. Pola temporal dan spasial menunjukkan perlunya pengendalian HIV/AIDS yang berkelanjutan, terintegrasi, dan memerhatikan ciri atau kondisi wilayah.

Dengan strategi yang tepat dan berkelanjutan, beban AIDS di Provinsi Bali dapat ditekan dan kualitas kesehatan masyarakat dapat ditingkatkan.


Lampiran

Dashboard dibuat menggunakan bahasa pemrograman python dengan library utama berupa streamlit. Berikut script python dalam pembuatan dashboard:

import streamlit as st
import pandas as pd
import geopandas as gpd
import plotly.express as px
import math
from esda.moran import Moran, Moran_Local
from libpysal.weights import Queen
from utils.LISA import lisa_map_px, lisa_map_cluster_px

st.set_page_config(layout='wide')

st.title('Dashboard Penyakit dan Analisis Kasus AIDS di Bali Tahun 2020-2024')

def format_number(x):
    return f'{x:,.2f}'

def load_css(file_name):
    with open(file_name) as f:
        st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)

load_css("assets/styles.css")

def calculate_morans_i(gdf_merged, col):
    try:
        import numpy as np
        np.random.seed(42)

        gdf_merged = gdf_merged.sort_index().reset_index(drop=True)

        w = Queen.from_dataframe(gdf_merged)
        w.transform = 'r'

        y = gdf_merged[col].values

        if y.sum() == 0:
            st.warning("⚠️ Semua nilai kasus adalah 0, Moran's I tidak dapat dihitung")
            return None, None

        moran = Moran(y, w, permutations=999)

        return moran, w

    except Exception as e:
        st.error(f"Error calculating Moran's I: {str(e)}")
        return None, None


data = pd.read_csv('data/Data-Bali.csv')
data['JumlahPenduduk'] = data['JumlahPenduduk'].apply(lambda x: math.ceil(x))
data['JumlahPenduduk'] = data['JumlahPenduduk'] * 1000
data['Insidensi'] = (data['AIDS'] / data['JumlahPenduduk']) * 100000

gdf = gpd.read_file('data/gadm41_IDN_2.json')
gdf = gdf[gdf['NAME_1'] == 'Bali'].reset_index(drop=True)

merged = gdf.merge(data, right_on='Kabupaten/Kota', left_on='NAME_2').set_index('NAME_2')

t1, _ = st.columns([1, 5])
with t1:
    tahun = st.selectbox('Pilih Tahun', options=sorted(data['Tahun'].unique()), index=4)

merged_tahun = merged[merged['Tahun'] == tahun]

tabs1, tabs2, tabs3, tabs4 = st.tabs(['Peta Persebaran', 'Temporal', 'Analisis Epidemiologis', 'Analisis Spasial'])

with tabs1:
    c1, c2 = st.columns(2)

    merged_prev = merged[merged['Tahun'] == (tahun-1)]
    merged_prevKasus = merged_prev['AIDS'].sum()
    merged_prevPenduduk = merged_prev['JumlahPenduduk'].sum()

    perubahan_kasus = ((merged_tahun['AIDS'].sum() - merged_prevKasus) / merged_prevKasus) * 100
    perubahan_penduduk = (merged_tahun['JumlahPenduduk'].sum() - merged_prevPenduduk)

    min_aids = merged['AIDS'].min()
    max_aids = merged['AIDS'].max()

    min_penduduk = merged['JumlahPenduduk'].min()
    max_penduduk = merged['JumlahPenduduk'].max()

    with c1:
        if tahun == 2020:
            st.metric(f'Total Kasus Baru AIDS Tahun {tahun}', merged_tahun['AIDS'].sum(), border=True)
        else:
            st.metric(f'Total Kasus Baru AIDS Tahun {tahun}', merged_tahun['AIDS'].sum(), border=True, delta=f'{perubahan_kasus:.2f} %',  delta_color="inverse")
    with c2:
        if tahun == 2020:
            st.metric(f'Total Penduduk {tahun}', f'{merged_tahun['JumlahPenduduk'].sum():,}', border=True)
        else:
            st.metric(f'Total Penduduk {tahun}', f'{merged_tahun['JumlahPenduduk'].sum():,}', border=True, delta=f'{perubahan_penduduk:,}')

    fig = px.choropleth(
        merged_tahun,
        geojson = merged_tahun,
        locations = merged_tahun.index,
        color = 'AIDS',
        labels={
            'AIDS': 
            'Jumlah'
        },
        color_continuous_scale='Reds',
        title=f'Peta Sebaran Kasus Baru AIDS Provinsi Bali Tahun {tahun}',
        range_color=[min_aids, max_aids]
    )

    fig.update_geos(fitbounds="locations", visible=False)
    fig.update_layout(
        plot_bgcolor="white",
        margin=dict(l=0, r=0, t=30, b=0)
    )

    fig2 = px.choropleth(
        merged_tahun,
        geojson = merged_tahun,
        locations = merged_tahun.index,
        color = 'JumlahPenduduk',
        labels={
            'JumlahPenduduk': 
            'Jumlah'
        },
        color_continuous_scale='Reds',
        title=f'Peta Sebaran Jumlah Penduduk Provinsi Bali Tahun {tahun}',
        range_color=[min_penduduk, max_penduduk]
    )

    fig2.update_geos(fitbounds="locations", visible=False)
    fig2.update_layout(
        plot_bgcolor= 'rgba(0,0,0,0)',
        margin=dict(l=0, r=0, t=30, b=0),
    )

    c1, c2 = st.columns(2)
    with c1:
        with st.container(border=True):
            st.plotly_chart(fig, 
                            config={
                                'scrollZoom': False}
                            )
    with c2:
        with st.container(border=True):
            st.plotly_chart(fig2,
                            config={
                                'scrollZoom': False}
                            )
            
with tabs2:
    jumlah = {}
    for i in data['Tahun'].unique():
        jum = data[data['Tahun'] == i]['AIDS']
        jum = jum.sum()
        jumlah[f'{i}'] = jum

    jumlah_df = pd.DataFrame({'Jumlah Kasus Baru': jumlah})

    fig_line = px.line(jumlah_df, x=jumlah_df.index, y='Jumlah Kasus Baru', markers=True, title='Tren Total Kasus Baru AIDS Provinsi Bali (2020-2024)')
    fig_line.update_layout(height=350)
    fig_line.update_xaxes(
        dtick=1,
        tickformat='d',
        title_text='Tahun'
    )

    fig_scatter = px.scatter(data, x='Tahun', y='AIDS', color='Kabupaten/Kota', title='Tren Kasus Baru AIDS Provinsi Bali (2020-2024)')
    fig_scatter.update_layout(height=350)
    fig_scatter.update_traces(
        mode='lines+markers',
        line=dict(width=2),
        marker=dict(
            size=8, 
            opacity=0.7, 
            line=dict(width=1, color='black')
        )
    )
    fig_scatter.update_xaxes(
        dtick=1,
        tickformat='d'
    )
    with st.container(border=True):
        st.plotly_chart(fig_line)
    with st.container(border=True):
        st.plotly_chart(fig_scatter)

with tabs3:
    with st.container(border=True):
        c1, _, c2, _ = st.columns([2, 0.1, 1, 0.1])

    with c1:
        st.markdown('### Insidensi')
        st.markdown(
            """
            <div style="text-align: justify; padding-bottom:1rem;">
            Insidensi rate (incidence rate) adalah ukuran epidemiologi yang menunjukkan jumlah kasus baru suatu penyakit atau kejadian tertentu 
            dalam suatu populasi pada periode waktu tertentu, dibandingkan dengan jumlah penduduk yang berisiko mengalami kejadian tersebut pada waktu yang sama. 
            Digunakan untuk menggambarkan seberapa cepat penyakit atau kejadian baru muncul dalam populasi, biasanya dinyatakan per 1.000 atau per 100.000 penduduk per tahun.

            </div>
            """,
            unsafe_allow_html=True
            )
    with c2:
        with st.container(border=False, vertical_alignment='center', height='stretch'):
            with st.container(border=True):
                st.markdown('### Rumus')
                st.markdown(r'$\text {Incidence Rate} = \frac{\text{Jumlah kasus baru}}{\text{Total populasi}} \times 100.000$')

    min_ins = data['Insidensi'].min()
    max_ins = data['Insidensi'].max()

    fig3 = px.choropleth(
        merged_tahun,
        geojson = merged_tahun,
        locations = merged_tahun.index,
        color = 'Insidensi',
        color_continuous_scale='Reds',
        title=f'Peta Insidensi Kasus AIDS Provinsi Bali Tahun {tahun} per 100.000 Penduduk',
        range_color=[min_ins, max_ins]
    )

    fig3.update_geos(fitbounds="locations", visible=False)
    fig3.update_layout(
        plot_bgcolor= 'rgba(0,0,0,0)',
        margin=dict(l=0, r=0, t=30, b=0),
    )

    fig_scatter2 = px.scatter(data, x='Tahun', y='Insidensi', color='Kabupaten/Kota', title='Tren Insidensi Kasus AIDS Provinsi Bali (2020-2024)')
    fig_scatter2.update_layout(height=350)
    fig_scatter2.update_traces(
        mode='lines+markers',
        line=dict(width=2),
        marker=dict(
            size=8, 
            opacity=0.7, 
            line=dict(width=1, color='black')
        )
    )
    fig_scatter2.update_xaxes(
        dtick=1,
        tickformat='d'
    )

    with st.container(border=True):
        st.plotly_chart(fig3)
        with st.expander('Interpretasi'):
            st.write('Misal akan dilihat insidensi kasus baru AIDS di Denpasar pada tahun 2024. Maka interpretasinya adalah,')
            st.write(r'**Pada tahun 2024 di Denpasar, terdapat sekitar 42 kasus baru AIDS pada setiap 100.000 penduduknya.**')
    with st.container(border=True):
        st.plotly_chart(fig_scatter2)


with tabs4:
    def show_morans(t):
        with st.container(border=True):
            st.subheader(f'Tahun {str(t)}')
            mt = merged[merged['Tahun'] == t]
            moran, w = calculate_morans_i(mt, 'AIDS')
            if moran:
                c1, c2, c3 = st.columns(3)

                is_significant = moran.p_sim < 0.05

                with c1:                
                    st.metric("Moran's I", f'{moran.I:.4f}', border=True)
                with c2:
                    st.metric('P-Value', f'{moran.p_sim:.4f}', border=True)
                with c3:
                    st.metric('Z-score', f'{moran.z_sim:.4f}', border=True)
                
                if is_significant:
                    st.success("✅ Autokorelasi spasial signifikan")
                else:
                    st.info("ℹ️ Tidak ada autokorelasi signifikan")

    st.markdown(r"## $\cdot$ Moran's I")

    m1, m2 = st.columns(2)
    m3, m4 = st.columns(2)

    with m1:
        show_morans(2020)
    with m2:
        show_morans(2021)
    with m3:
        show_morans(2022)
    with m4:
        show_morans(2023)
    show_morans(2024)

    st.markdown(r"## $\cdot$ LISA")
    l1, l2 = st.columns(2)
    with l1:
        with st.container(border=True):
            lisa_map_px(merged_tahun, 'AIDS')
    with l2:
        with st.container(border=True):
            lisa_map_cluster_px(merged_tahun, 'AIDS')

pada folder yang sama, buat folder dan file baru berupa ‘utils/LISA.py’ dengan script:

def lisa_map_px(data, col):
    import streamlit as st
    import numpy as np
    import plotly.express as px
    from libpysal.weights import Queen
    from esda import Moran_Local

    merged = data.copy()

    y = merged[col].values

    w = Queen.from_dataframe(merged)
    w.transform = 'r'

    moran_loc = Moran_Local(y, w)

    merged["LISA"] = moran_loc.Is

    # normalisasi 0–1
    a, b = 0, 1
    merged["LISA_norm"] = a + (
        (merged["LISA"] - merged["LISA"].min()) /
        (merged["LISA"].max() - merged["LISA"].min())
    )

    fig = px.choropleth(
        merged,
        geojson=merged.geometry,
        locations=merged.index,
        color="LISA_norm",
        color_continuous_scale="RdBu",
        range_color=(a, b),
        hover_data={col: True, "LISA": True},
        title="LISA Intensity Map"
    )

    fig.update_geos(fitbounds="locations", visible=False)
    fig.update_layout(margin=dict(l=0, r=0, t=40, b=0))

    st.plotly_chart(fig, use_container_width=True)

def lisa_map_cluster_px(data, col):
    import streamlit as st
    import numpy as np
    import plotly.express as px
    from libpysal.weights import Queen
    from esda import Moran_Local

    merged = data.copy()

    y = merged[col].values

    w = Queen.from_dataframe(merged)
    w.transform = 'r'

    moran_loc = Moran_Local(y, w)

    merged["LISA_clus"] = moran_loc.q

    cluster_labels = {
        1: "High-High",
        2: "Low-High",
        3: "Low-Low",
        4: "High-Low"
    }
    merged['LISA_clus'] = merged['LISA_clus'].map(cluster_labels)

    fig = px.choropleth(
        merged,
        geojson=merged.geometry,
        locations=merged.index,
        color="LISA_clus",
        category_orders={"LISA_show": [1, 4, 2, 3]},
        color_discrete_map={
            "High-High": "red",
            "Low-High": "lightblue",
            "Low-Low": "blue",
            "High-Low": "orange"
        },
        title="LISA Cluster Map"
    )

    fig.update_geos(fitbounds="locations", visible=False)
    fig.update_layout(margin=dict(l=0, r=0, t=40, b=0))

    st.plotly_chart(fig, use_container_width=True)