Analisis Tren Prevalensi HIV di Provinsi Aceh Tahun 2018–2023 Menggunakan Model Quasi-Poisson

Laporan ini disusun untuk memenuhi Ujian Akhir Semester Mata Kuliah Epidemiologi

Dosen Pengampu:
Dr. I Gede Nyoman Mindra Jaya, M.Si

Muhammad Aidan Faiz (140610230070)
Kelas A
Program Studi Statistika
Fakultas Matematika dan Ilmu Pengetahuan Alam
Universitas Padjadjaran
2025


ABSTRAK

HIV merupakan salah satu masalah kesehatan masyarakat yang memerlukan pemantauan berkelanjutan karena dipengaruhi oleh faktor biologis, perilaku, sosial, serta kualitas sistem layanan kesehatan dan surveilans. Penelitian ini bertujuan untuk menganalisis gambaran epidemiologi HIV di Provinsi Aceh selama periode tahun 2018–2023 berdasarkan distribusi kasus menurut kelompok umur, prevalensi tahunan, tren temporal, visualisasi spasial tingkat provinsi, serta pemodelan statistik. Penelitian menggunakan desain cross-sectional berulang dengan data sekunder jumlah kasus HIV menurut kelompok umur yang diperoleh dari Portal Data Aceh, serta data jumlah penduduk tahunan dari Badan Pusat Statistik (BPS). Analisis meliputi analisis deskriptif, perhitungan prevalensi HIV per 100.000 penduduk, visualisasi tren, dan pemodelan tren menggunakan regresi Quasi-Poisson dengan offset log(jumlah penduduk) untuk mengakomodasi data hitungan dan overdispersi. Hasil analisis menunjukkan bahwa kasus HIV di Provinsi Aceh didominasi oleh kelompok usia produktif, serta terdapat peningkatan prevalensi yang tajam pada periode 2022–2023. Pemodelan Quasi-Poisson menunjukkan adanya tren peningkatan laju kasus HIV yang signifikan secara statistik selama periode pengamatan. Temuan ini mengindikasikan adanya peningkatan beban HIV yang tercatat dalam sistem surveilans, yang perlu diinterpretasikan dengan mempertimbangkan dinamika pemeriksaan, pelaporan, dan konteks layanan kesehatan. Hasil penelitian ini diharapkan dapat menjadi dasar awal evaluasi dan perencanaan program pengendalian HIV di Provinsi Aceh.

Kata kunci: HIV, epidemiologi deskriptif, prevalensi, Aceh, tren temporal, Quasi-Poisson, surveilans

BAB 1. PENDAHULUAN

1.1 Latar Belakang

Human Immunodeficiency Virus (HIV) masih merupakan salah satu permasalahan kesehatan masyarakat utama di tingkat global maupun nasional. Meskipun terapi antiretroviral (ART) telah menurunkan mortalitas dan meningkatkan harapan hidup orang dengan HIV, penularan HIV masih terus terjadi dan menunjukkan pola yang dinamis antar wilayah dan waktu. Oleh karena itu, pemantauan epidemi HIV secara berkelanjutan menjadi komponen penting dalam evaluasi dan perencanaan program kesehatan masyarakat (UNAIDS, 2023; WHO, 2022).

Di Indonesia, epidemi HIV bersifat terkonsentrasi pada populasi tertentu, namun dalam perkembangannya menunjukkan kecenderungan meluas ke populasi umum. Studi-studi menunjukkan bahwa dinamika epidemi HIV dipengaruhi oleh faktor sosial-budaya, perilaku berisiko, serta akses layanan kesehatan dan pemeriksaan HIV (Januraga et al., 2018; Wardhani et al., 2024). Selain itu, stigma terhadap HIV di masyarakat maupun di kalangan tenaga kesehatan dapat berkontribusi pada rendahnya cakupan pemeriksaan dan keterlambatan pelaporan kasus, sehingga memengaruhi kualitas data surveilans (Mburu et al., 2014; Widayati et al., 2020).

Provinsi Aceh memiliki karakteristik sosial dan budaya yang khas, serta dinamika sistem kesehatan yang berbeda dibandingkan wilayah lain di Indonesia. Kondisi ini berpotensi memengaruhi perilaku pencarian layanan kesehatan, akses pemeriksaan HIV, serta pelaporan kasus. Studi di Aceh Utara menunjukkan adanya peningkatan kasus dan berbagai kendala layanan, termasuk kepatuhan ART dan keterbatasan sumber daya (Sukmawati et al., 2021). Perspektif kualitatif juga menunjukkan bahwa stigma, norma sosial, dan proses navigasi layanan kesehatan berperan dalam keputusan individu untuk melakukan tes HIV dan tercatat dalam sistem layanan (Samuels, 2019). Peningkatan jumlah kasus yang terlaporkan tidak selalu mencerminkan peningkatan risiko penularan yang sebenarnya. Perubahan kebijakan pemeriksaan, peningkatan cakupan testing, dan perbaikan sistem pelaporan dapat menyebabkan lonjakan kasus yang terdeteksi (Buthelezi et al., 2016; Johnson et al., 2020). Oleh karena itu, analisis tren perlu menggunakan pendekatan statistik yang sesuai dengan karakteristik data surveilans.

Salah satu indikator epidemiologi yang penting untuk menggambarkan besarnya beban HIV dalam suatu populasi adalah prevalensi, yaitu proporsi penduduk yang hidup dengan HIV pada suatu periode tertentu. Prevalensi HIV mencerminkan akumulasi kasus lama dan kasus baru yang dipengaruhi oleh tingkat penularan, cakupan deteksi, serta keberhasilan pengobatan. Oleh karena itu, analisis prevalensi HIV tidak hanya menggambarkan situasi epidemi saat ini, tetapi juga menjadi alat evaluasi program pencegahan dan pengendalian HIV (Brookmeyer, 2010; WHO, 2022).

Data surveilans HIV di Provinsi Aceh selama periode 2018–2023 menunjukkan adanya fluktuasi jumlah kasus dan peningkatan prevalensi yang cukup tajam pada beberapa tahun terakhir. Namun, peningkatan jumlah kasus yang terlaporkan tidak selalu mencerminkan peningkatan risiko penularan yang sebenarnya. Perubahan kebijakan pemeriksaan, peningkatan cakupan testing, pemulihan layanan kesehatan pascapandemi COVID-19, serta perbaikan sistem pelaporan dapat menyebabkan lonjakan kasus yang terdeteksi dalam waktu singkat (Johnson et al., 2020; Buthelezi et al., 2016). Oleh karena itu, analisis tren HIV perlu dilakukan secara hati-hati dengan pendekatan statistik yang sesuai dengan karakteristik data surveilans.

Data HIV umumnya berbentuk data hitungan dan sering menunjukkan overdispersi, yaitu variasi data lebih besar dibanding asumsi distribusi Poisson klasik. Overdispersi dapat muncul karena heterogenitas populasi, variasi intensitas pemeriksaan, dan keterlambatan pelaporan (Breslow, 1984; Ver Hoef & Boveng, 2007). Model Quasi-Poisson dapat mengakomodasi overdispersi melalui penyesuaian varians sehingga simpangan baku lebih robust (Cameron & Trivedi, 2013; Dunn & Smyth, 2018). Penerapannya dalam analisis time series juga banyak digunakan untuk data surveilans penyakit infeksi (Ouldali et al., 2023; Wang et al., 2025). Dengan offset log(populasi), koefisien tren dapat diinterpretasikan sebagai Incidence Rate Ratio (IRR) (Hardin & Hilbe, 2018; Zeileis et al., 2008).

Model Quasi-Poisson merupakan pendekatan yang banyak digunakan dalam epidemiologi untuk menganalisis data hitungan dengan overdispersi. Model ini memungkinkan penyesuaian varians tanpa mengubah struktur nilai harapan, sehingga memberikan estimasi parameter yang lebih robust dan interpretasi yang lebih reliabel (Cameron & Trivedi, 2013; Dunn & Smyth, 2018). Penerapan model Quasi-Poisson dalam analisis time series penyakit infeksi telah banyak digunakan dan terbukti efektif dalam menangkap tren temporal pada data surveilans kesehatan masyarakat (Ouldali et al., 2023; Wang et al., 2025).

Dalam konteks epidemi HIV, model Quasi-Poisson dapat dikombinasikan dengan offset log(jumlah penduduk) untuk menganalisis laju kejadian atau prevalensi HIV secara lebih tepat. Pendekatan ini memungkinkan estimasi perubahan relatif rata-rata kasus dari waktu ke waktu, yang dinyatakan dalam bentuk Incidence Rate Ratio (IRR), sehingga memudahkan interpretasi epidemiologis dan perbandingan antar tahun (Zeileis et al., 2008; Hardin & Hilbe, 2018).

Berdasarkan uraian tersebut, analisis tren HIV di Provinsi Aceh selama periode 2018–2023 menggunakan ukuran prevalensi dan model Quasi-Poisson menjadi penting untuk: (1) menggambarkan dinamika beban HIV secara temporal, (2) menguji secara statistik kecenderungan peningkatan atau penurunan prevalensi HIV, serta (3) memberikan dasar kuantitatif bagi evaluasi dan perencanaan program pengendalian HIV di tingkat provinsi. Pendekatan ini diharapkan dapat menghasilkan informasi epidemiologis yang valid, kontekstual, dan relevan bagi pengambilan keputusan kesehatan masyarakat di Provinsi Aceh.

1.2 Rumusan Masalah

Berdasarkan latar belakang yang telah diuraikan, permasalahan utama dalam penelitian ini adalah bagaimana dinamika prevalensi HIV di Provinsi Aceh selama periode tahun 2018–2023 jika dianalisis secara epidemiologis dan statistik dengan pendekatan yang sesuai dengan karakteristik data surveilans. Secara lebih rinci, rumusan masalah dalam penelitian ini adalah sebagai berikut:

  1. Bagaimana perkembangan jumlah kasus HIV di Provinsi Aceh selama periode tahun 2018–2023 berdasarkan data surveilans yang tersedia?

  2. Berapa besar prevalensi HIV per 100.000 penduduk di Provinsi Aceh pada setiap tahun pengamatan?

  3. Bagaimana pola perubahan prevalensi HIV di Provinsi Aceh secara temporal selama periode 2018–2023?

  4. Apakah terdapat kecenderungan (tren) peningkatan atau penurunan prevalensi HIV di Provinsi Aceh dari tahun ke tahun?

  5. Apakah model regresi Quasi-Poisson dengan offset jumlah penduduk mampu menggambarkan tren perubahan kasus HIV di Provinsi Aceh secara statistik?

  6. Bagaimana interpretasi epidemiologis dari hasil estimasi tren HIV di Provinsi Aceh dalam konteks keterbatasan data surveilans dan potensi bias pelaporan?

1.3 Tujuan Penelitian

1.3.1 Tujuan Umum:

Tujuan umum penelitian ini adalah menganalisis tren prevalensi HIV di Provinsi Aceh selama periode tahun 2018–2023 menggunakan pendekatan epidemiologi deskriptif dan pemodelan regresi Quasi-Poisson berbasis data surveilans.

1.3.2 Tujuan Khusus:

Adapun tujuan khusus penelitian ini adalah sebagai berikut:

  1. Mendeskripsikan jumlah kasus HIV di Provinsi Aceh pada setiap tahun pengamatan selama periode 2018–2023.

  2. Menghitung prevalensi HIV per 100.000 penduduk di Provinsi Aceh pada setiap tahun pengamatan.

  3. Menyajikan pola temporal prevalensi HIV di Provinsi Aceh dalam bentuk tabel, grafik deret waktu (time series), dan visualisasi spasial tingkat provinsi.

  4. Mengestimasi tren perubahan kasus HIV di Provinsi Aceh menggunakan model regresi Quasi-Poisson dengan offset log(jumlah penduduk).

  5. Menghitung dan menginterpretasikan Incidence Rate Ratio (IRR) sebagai ukuran perubahan relatif rata-rata kasus HIV per tahun.

  6. Mengevaluasi signifikansi statistik tren HIV di Provinsi Aceh berdasarkan hasil pemodelan regresi.

  7. Memberikan interpretasi epidemiologis terhadap hasil analisis dengan mempertimbangkan potensi bias dan keterbatasan data surveilans HIV di Provinsi Aceh.

BAB 2. TINJAUAN PUSTAKA

2.1 HIV dan Epidemiologi

HIV adalah agen penyebab penyakit yang menyerang sel limfosit CD4 dan secara progresif menurunkan sistem kekebalan tubuh manusia. Infeksi HIV yang tidak ditangani dapat berkembang menjadi kondisi klinis lanjut dengan peningkatan risiko infeksi oportunistik. Penularan HIV terjadi melalui kontak dengan cairan tubuh yang terinfeksi, termasuk darah, cairan semen, cairan vagina, serta melalui transmisi dari ibu ke anak selama kehamilan, persalinan, atau menyusui (WHO, 2022).

Epidemiologi HIV mempelajari distribusi dan determinan infeksi HIV berdasarkan dimensi waktu, tempat, dan orang, serta faktor-faktor yang memengaruhi penularan, deteksi, dan pengendalian penyakit. Dalam konteks surveilans kesehatan masyarakat, epidemiologi HIV sangat bergantung pada data kasus terlaporkan, yang dipengaruhi oleh cakupan pemeriksaan, kualitas sistem pelaporan, dan akses terhadap layanan kesehatan (Buthelezi et al., 2016).

Di Indonesia, epidemi HIV bersifat terkonsentrasi namun menunjukkan kecenderungan meluas. Studi pada populasi kunci seperti laki-laki yang berhubungan seks dengan laki-laki (MSM) dan transgender menunjukkan prevalensi dan insidensi HIV yang sangat tinggi, serta penggunaan model Poisson untuk menganalisis laju kejadian HIV dalam sistem surveilans (Wardhani et al., 2024). Selain itu, cascade of care HIV di Indonesia menunjukkan adanya kehilangan kasus pada tahapan diagnosis, keterhubungan ke layanan, dan retensi pengobatan, yang berdampak langsung pada jumlah kasus yang tercatat dalam data surveilans (Januraga et al., 2018).

Di Provinsi Aceh, dinamika epidemi HIV tidak terlepas dari faktor sosial-budaya dan konteks sistem kesehatan lokal. Studi etnografi menunjukkan bahwa stigma terhadap HIV, norma sosial, dan pengalaman berinteraksi dengan layanan kesehatan berperan penting dalam keputusan individu untuk melakukan tes HIV dan terdaftar dalam sistem layanan (Samuels, 2019). Penelitian di Aceh Utara juga mengidentifikasi berbagai tantangan dalam layanan HIV, termasuk keterbatasan sumber daya dan kepatuhan ART, yang berpotensi memengaruhi kelengkapan dan akurasi pelaporan kasus (Sukmawati et al., 2021). Selain itu, stigma di kalangan tenaga kesehatan dapat menjadi hambatan tambahan dalam proses deteksi dan pelaporan HIV (Widayati et al., 2020).

2.2 Agent–Host–Environment

Pendekatan agent–host–environment digunakan dalam epidemiologi untuk menjelaskan interaksi antara penyebab penyakit, individu yang berisiko, dan lingkungan yang memengaruhi terjadinya penyakit.

Agent

Agen penyebab penyakit dalam penelitian ini adalah Human Immunodeficiency Virus (HIV). Karakteristik virus, seperti kemampuan replikasi dan perjalanan infeksi yang kronis, menyebabkan HIV berkontribusi terhadap prevalensi yang relatif stabil dan akumulatif dalam populasi (Brookmeyer, 2010).

Host

Faktor host meliputi karakteristik individu yang memengaruhi kerentanan terhadap infeksi HIV, seperti usia, jenis kelamin, perilaku seksual berisiko, penggunaan narkoba suntik, serta tingkat pengetahuan dan sikap terhadap HIV. Dalam penelitian ini, faktor host direpresentasikan secara agregat melalui distribusi kasus berdasarkan kelompok umur, sesuai dengan keterbatasan data surveilans yang tersedia (Wardhani et al., 2024).

Environment

Faktor lingkungan mencakup kondisi sosial, budaya, kebijakan, dan sistem pelayanan kesehatan yang memengaruhi penularan dan deteksi HIV. Di Aceh, faktor lingkungan meliputi stigma sosial, norma budaya, akses layanan tes HIV, kebijakan kesehatan daerah, serta kualitas sistem pelaporan kasus. Faktor-faktor ini berpotensi memengaruhi jumlah kasus HIV yang terdeteksi dan dilaporkan dalam sistem surveilans (Samuels, 2019; Sukmawati et al., 2021; WHO, 2022).

2.3 Ukuran Frekuensi Penyakit

2.3.1 Jumlah Kasus

Jumlah kasus HIV merupakan indikator dasar dalam epidemiologi yang menunjukkan banyaknya individu yang terdiagnosis HIV dalam suatu periode tertentu. Analisis jumlah kasus berguna untuk menggambarkan perubahan beban penyakit dari waktu ke waktu, namun sangat dipengaruhi oleh cakupan pemeriksaan dan sistem pelaporan (Buthelezi et al., 2016; Brookmeyer, 2010).

2.3.2 Prevalensi

Prevalensi adalah proporsi individu dalam suatu populasi yang hidup dengan HIV pada suatu waktu atau periode tertentu. Prevalensi HIV mencerminkan akumulasi kasus lama dan kasus baru, sehingga dipengaruhi oleh tingkat penularan, durasi hidup dengan HIV, serta keberhasilan pengobatan (WHO, 2022).

Dalam penelitian ini, prevalensi HIV dihitung sebagai jumlah kasus HIV dibagi dengan jumlah penduduk Provinsi Aceh pada tahun yang sama, kemudian dinyatakan per 100.000 penduduk. Penggunaan prevalensi memungkinkan perbandingan antar tahun meskipun terjadi perubahan jumlah penduduk (Brookmeyer, 2010).

2.4 Model Quasi-Poisson dalam Analisis Data HIV

Data HIV umumnya berbentuk data hitungan (count data) yang sering menunjukkan overdispersi, yaitu kondisi ketika varians lebih besar daripada nilai rata-rata. Overdispersi dapat disebabkan oleh heterogenitas populasi, variasi intensitas pemeriksaan, keterlambatan pelaporan, dan perubahan kebijakan kesehatan (Breslow, 1984; Ver Hoef & Boveng, 2007).

Model Quasi-Poisson merupakan pengembangan dari model Poisson yang memungkinkan penyesuaian varians melalui parameter dispersi tanpa mengubah struktur nilai harapan. Pendekatan ini menghasilkan estimasi simpangan baku yang lebih robust dibandingkan model Poisson standar pada data yang mengalami overdispersi (Cameron & Trivedi, 2013; Dunn & Smyth, 2018).

Dalam epidemiologi, model Quasi-Poisson banyak digunakan untuk analisis time series penyakit infeksi dan data surveilans kesehatan masyarakat. Studi terbaru menunjukkan bahwa model ini efektif dalam menangkap tren temporal dan memberikan interpretasi yang stabil pada data dengan variabilitas tinggi (Ouldali et al., 2023; Wang et al., 2025).

Penggunaan offset log(jumlah penduduk) dalam model Quasi-Poisson memungkinkan analisis laju kejadian atau prevalensi HIV secara lebih tepat, serta menghasilkan ukuran Incidence Rate Ratio (IRR) sebagai interpretasi perubahan relatif rata-rata kasus per unit waktu (Zeileis et al., 2008; Hardin & Hilbe, 2018).

BAB 3. METODOLOGI PENELITIAN

3.1 Desain Studi

Penelitian ini menggunakan desain cross-sectional berulang (repeated cross-sectional study) pada tingkat provinsi. Desain ini menganalisis data agregat HIV di Provinsi Aceh yang dikumpulkan pada beberapa titik waktu (tahun 2018–2023) tanpa mengikuti individu yang sama secara longitudinal.

Unit analisis dalam penelitian ini adalah tahun pengamatan dan kelompok umur, sedangkan unit observasi adalah jumlah kasus HIV yang tercatat pada setiap kombinasi tahun dan kelompok umur. Pendekatan ini sesuai untuk analisis tren penyakit berbasis data surveilans dan sering digunakan dalam studi epidemiologi populasi (Buthelezi et al., 2016; WHO, 2022).

3.2 Sumber Data

Penelitian ini menggunakan data sekunder yang bersifat agregat, dengan sumber sebagai berikut:

  1. Data Kasus HIV

Data jumlah kasus HIV diperoleh dari Portal Data Aceh, khususnya dataset Jumlah Kasus HIV Menurut Kelompok Umur tahun 2018–2023. Data ini merupakan data surveilans rutin yang dikompilasi oleh Dinas Kesehatan Provinsi Aceh.

  1. Data Jumlah Penduduk

Data jumlah penduduk Provinsi Aceh per tahun diperoleh dari Badan Pusat Statistik (BPS). Data ini digunakan sebagai penyebut (denominator) dalam perhitungan prevalensi dan sebagai offset dalam pemodelan statistik.

3.3 Variabel Penelitian

Variabel yang digunakan dalam penelitian ini meliputi:

  • Tahun pengamatan Variabel waktu diskrit (2018–2023) yang digunakan untuk menganalisis tren temporal.

  • Kelompok umur Variabel kategorik yang menunjukkan kelompok usia kasus HIV.

  • Jumlah kasus HIV Variabel dependen berupa data hitung (count data) yang menunjukkan jumlah kasus HIV yang tercatat pada setiap tahun dan kelompok umur.

  • Jumlah penduduk Provinsi Aceh Variabel penyebut yang digunakan untuk menghitung prevalensi dan sebagai offset dalam model regresi.

  • Prevalensi HIV tahunan Ukuran frekuensi penyakit yang dinyatakan sebagai jumlah kasus per 100.000 penduduk.

3.4 Definisi Operasional Prevalensi

Prevalensi HIV tahunan didefinisikan sebagai proporsi kasus HIV yang tercatat dalam satu tahun terhadap total penduduk Provinsi Aceh pada tahun yang sama.

Secara matematis, prevalensi dirumuskan sebagai berikut:

\[ \text{Prevalensi}_{t} = \frac{\text{Jumlah kasus HIV tercatat pada tahun } t}{\text{Jumlah penduduk pada tahun } t} \times 100.000 \]

dengan :

  • {t} tahun pengamatan (2018–2023).

3.5 Metode Analisis

Analisis data dilakukan secara bertahap sebagai berikut:

  1. Pembersihan dan Pengolahan Data

Data diperiksa untuk memastikan konsistensi format variabel, nilai hilang, dan kesesuaian tahun pengamatan. Selanjutnya dilakukan agregasi jumlah kasus HIV per tahun dengan menjumlahkan kasus dari seluruh kelompok umur.

  1. Analisis deskriptif

Analisis deskriptif dilakukan untuk menggambarkan distribusi kasus HIV menurut kelompok umur dan tahun pengamatan. Hasil analisis disajikan dalam bentuk tabel dan grafik.

  1. Analisis prevalensi

Prevalensi HIV dihitung untuk setiap tahun pengamatan menggunakan rumus pada Subbab 3.4 dan disajikan dalam bentuk tabel serta grafik tren prevalensi tahunan.

  1. Analisis Tren Menggunakan Model Quasi-Poisson

Untuk menganalisis tren jumlah kasus HIV dari waktu ke waktu dengan memperhitungkan perbedaan ukuran populasi, penelitian ini menggunakan model regresi Quasi-Poisson dengan fungsi taut (link function) logaritmik dan offset log jumlah penduduk.

Model ini sesuai untuk data hitung (count data) yang menunjukkan overdispersi, yaitu kondisi ketika varians data lebih besar daripada nilai rataan, sehingga asumsi distribusi Poisson standar tidak terpenuhi.

Secara matematis, model Quasi-Poisson dirumuskan sebagai berikut:

\[ \log \left( E(Kasus_t) \right) = \beta_0 + \beta_1 \, Tahun_t + \log(Penduduk_t) \]

dengan:

  • \(E(Kasus_t)\) : nilai harapan jumlah kasus HIV pada tahun ke-\(t\),
  • \(\beta_0\) : intersep model,
  • \(\beta_1\) : koefisien tren tahunan,
  • \(Tahun_t\) : variabel waktu (tahun pengamatan),
  • \(\log(Penduduk_t)\) : offset untuk mengontrol ukuran populasi.

Penggunaan offset \(\log(Penduduk_t)\) bertujuan untuk memodelkan laju kejadian (rate) HIV, sehingga estimasi tren tidak dipengaruhi oleh perubahan jumlah penduduk dari tahun ke tahun.

  1. Interpretasi Koefisien (Incidence Rate Ratio)

Koefisien regresi \(\beta_1\) dari model Quasi-Poisson diinterpretasikan dalam bentuk Incidence Rate Ratio (IRR) untuk memudahkan interpretasi epidemiologis.

IRR dihitung dengan persamaan sebagai berikut:

\[ IRR = e^{\beta_1} \]

  1. Visualisasi dan Pemetaan

Hasil analisis disajikan dalam bentuk grafik tren kasus dan prevalensi tahunan. Selain itu, dilakukan visualisasi peta tingkat provinsi untuk menggambarkan perubahan prevalensi HIV di Provinsi Aceh pada setiap tahun pengamatan sebagai alat komunikasi epidemiologis pendukung.

BAB 4. HASIL DAN PEMBAHASAN

knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE)

library(readxl)
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
library(tidyr)
library(ggplot2)
library(knitr)

data_path <- "data uas baru.xlsx"
data_raw  <- readxl::read_excel(data_path)

data_hiv <- data_raw %>%
  mutate(
    Tahun = as.integer(Tahun),
    Jumlah_kasus = as.numeric(Jumlah_kasus),
    `Jumlah Penduduk` = as.numeric(`Jumlah Penduduk`),
    Kelompok_Umur = as.character(Kelompok_Umur),
    HIV = as.character(HIV),
    bps_nama_provinsi = as.character(bps_nama_provinsi)
  ) %>%
  filter(
    HIV == "HIV",
    is.finite(Tahun),
    is.finite(Jumlah_kasus),
    is.finite(`Jumlah Penduduk`)
  )

data_prev <- data_hiv %>%
  group_by(Tahun) %>%
  summarise(
    Kasus_HIV   = sum(Jumlah_kasus, na.rm = TRUE),
    Penduduk    = first(`Jumlah Penduduk`),
    Prevalensi  = (Kasus_HIV / Penduduk) * 100000,
    .groups = "drop"
  ) %>%
  arrange(Tahun)

4.1 Gambaran Umum Kasus HIV

Bagian ini menyajikan ringkasan total kasus dan distribusi kasus menurut kelompok umur.

Tabel 4.1 Total Kasus dan Prevalensi Tahunan HIV di Provinsi Aceh

Tahun Kasus HIV Jumlah Penduduk Prevalensi (per 100.000)
2018 69 5.281.300 1,306
2019 43 5.371.500 0,801
2020 63 5.274.900 1,194
2021 77 5.334.900 1,443
2022 210 5.407.900 3,883
2023 439 5.482.500 8,007

Berdasarkan Tabel 4.1, jumlah kasus HIV di Provinsi Aceh selama periode 2018–2023 menunjukkan variasi antar tahun dengan kecenderungan meningkat pada periode akhir pengamatan. Pada tahun 2018 tercatat sebanyak 69 kasus dengan prevalensi sebesar 1,306 per 100.000 penduduk. Jumlah kasus dan prevalensi kemudian menurun pada tahun 2019, yang merupakan titik terendah selama periode pengamatan, dengan 43 kasus dan prevalensi sebesar 0,801 per 100.000 penduduk.

Pada periode 2020–2021, jumlah kasus dan prevalensi HIV kembali meningkat secara bertahap. Prevalensi meningkat dari 1,194 per 100.000 penduduk pada tahun 2020 menjadi 1,443 per 100.000 penduduk pada tahun 2021. Peningkatan ini masih berada pada tingkat relatif rendah namun menunjukkan perubahan dinamika epidemi HIV di Provinsi Aceh.

Lonjakan yang lebih tajam terjadi pada tahun 2022 dan berlanjut pada tahun 2023. Pada tahun 2022 tercatat 210 kasus HIV dengan prevalensi sebesar 3,883 per 100.000 penduduk. Peningkatan paling signifikan terjadi pada tahun 2023, dengan 439 kasus dan prevalensi mencapai 8,007 per 100.000 penduduk. Kenaikan ini menunjukkan peningkatan beban HIV yang nyata pada akhir periode pengamatan.

4.2 Analisis Deskriptif: Kasus menurut Kelompok Umur dan Tahun

df_stack <- data_hiv %>%
group_by(Tahun, Kelompok_Umur) %>%
summarise(Kasus = sum(Jumlah_kasus, na.rm = TRUE), .groups = "drop")

ggplot(df_stack, aes(x = factor(Tahun), y = Kasus, fill = Kelompok_Umur)) +
geom_col() +
theme_minimal() +
labs(x = "Tahun", y = "Jumlah Kasus", fill = "Kelompok Umur")

df_age <- data_hiv %>%
group_by(Kelompok_Umur) %>%
summarise(Total_Kasus = sum(Jumlah_kasus, na.rm = TRUE), .groups = "drop") %>%
arrange(desc(Total_Kasus))

kable(df_age, caption = "Total Kasus HIV per Kelompok Umur (Akumulasi 2018–2023)")
Total Kasus HIV per Kelompok Umur (Akumulasi 2018–2023)
Kelompok_Umur Total_Kasus
25 - 49 Tahun 624
20 - 24 Tahun 189
> 50 Tahun 33
15 - 19 Tahun 30
< 4 Tahun 16
5 - 14 Tahun 9
ggplot(df_age, aes(x = reorder(Kelompok_Umur, -Total_Kasus), y = Total_Kasus)) +
geom_col() +
theme_minimal() +
labs(x = "Kelompok Umur", y = "Total Kasus")

Distribusi kasus HIV di Aceh didominasi oleh kelompok umur 25–49 tahun, dengan peningkatan kasus yang tajam pada tahun 2022–2023. Kelompok usia produktif menjadi kontributor utama beban HIV, sementara kelompok usia anak dan lanjut usia menunjukkan jumlah kasus yang relatif rendah.

4.3 Analisis Prevalensi

tabel_prevalensi <- data_prev %>%
select(Tahun, Kasus_HIV, Penduduk, Prevalensi) %>%
mutate(Prevalensi = round(Prevalensi, 3))

kable(tabel_prevalensi, caption = "Prevalensi Periode Tahunan HIV per 100.000 Penduduk")
Prevalensi Periode Tahunan HIV per 100.000 Penduduk
Tahun Kasus_HIV Penduduk Prevalensi
2018 69 5281300 1.306
2019 43 5371500 0.801
2020 63 5274900 1.194
2021 77 5334900 1.443
2022 210 5407900 3.883
2023 439 5482500 8.007
ggplot(data_prev, aes(x = Tahun, y = Prevalensi)) +
geom_line(linewidth = 1) +
geom_point(size = 2) +
theme_minimal() +
labs(x = "Tahun", y = "Prevalensi per 100.000 penduduk")

ringkas_prev <- data.frame(
Ringkasan = c("Rata-rata prevalensi", "Prevalensi terendah", "Prevalensi tertinggi", "Standar deviasi prevalensi", "Koefisien variasi (%)"),
Nilai = c(
round(mean(data_prev$Prevalensi), 3),
paste0(round(min(data_prev$Prevalensi), 3), " (", data_prev$Tahun[which.min(data_prev$Prevalensi)], ")"),
paste0(round(max(data_prev$Prevalensi), 3), " (", data_prev$Tahun[which.max(data_prev$Prevalensi)], ")"),
round(sd(data_prev$Prevalensi), 3),
round(sd(data_prev$Prevalensi)/mean(data_prev$Prevalensi)*100, 2)
)
)

kable(ringkas_prev, caption = "Ringkasan Statistik Prevalensi HIV Tahunan")
Ringkasan Statistik Prevalensi HIV Tahunan
Ringkasan Nilai
Rata-rata prevalensi 2.773
Prevalensi terendah 0.801 (2019)
Prevalensi tertinggi 8.007 (2023)
Standar deviasi prevalensi 2.79
Koefisien variasi (%) 100.64

Gambar di atas menunjukkan tren prevalensi HIV per 100.000 penduduk di Provinsi Aceh selama periode 2018–2023. Pada awal periode pengamatan, prevalensi berada pada tingkat relatif rendah, yaitu 1,306 per 100.000 penduduk pada tahun 2018, kemudian mengalami penurunan pada tahun 2019 menjadi 0,801 per 100.000 penduduk, yang merupakan nilai terendah selama periode pengamatan. Penurunan ini mengindikasikan berkurangnya jumlah kasus HIV yang tercatat relatif terhadap jumlah penduduk pada tahun tersebut.

Memasuki periode 2020–2021, prevalensi HIV kembali meningkat secara bertahap, masing-masing menjadi 1,194 dan 1,443 per 100.000 penduduk. Peningkatan ini masih berada pada kisaran rendah dan mencerminkan perubahan moderat dalam dinamika epidemi HIV di Provinsi Aceh. Kenaikan bertahap tersebut dapat berkaitan dengan pemulihan sebagian layanan kesehatan dan aktivitas pemeriksaan HIV yang mulai kembali berjalan setelah periode awal pandemi COVID-19.

Perubahan yang paling mencolok terlihat pada tahun 2022 dan 2023, ketika prevalensi HIV meningkat secara tajam. Pada tahun 2022, prevalensi mencapai 3,883 per 100.000 penduduk, hampir tiga kali lipat dibandingkan tahun sebelumnya. Lonjakan ini berlanjut pada tahun 2023, dengan prevalensi mencapai 8,007 per 100.000 penduduk, yang merupakan nilai tertinggi selama periode pengamatan. Pola ini menunjukkan adanya akselerasi peningkatan beban HIV yang tercatat pada akhir periode studi.

4.4 Pemodelan Tren: Quasi-Poisson dengan Offset Populasi

model_qp <- glm(
Kasus_HIV ~ Tahun,
family = quasipoisson(link = "log"),
offset = log(Penduduk),
data = data_prev
)

summary(model_qp)
## 
## Call:
## glm(formula = Kasus_HIV ~ Tahun, family = quasipoisson(link = "log"), 
##     data = data_prev, offset = log(Penduduk))
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)  
## (Intercept) -1045.4171   238.9009  -4.376   0.0119 *
## Tahun           0.5120     0.1182   4.333   0.0123 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for quasipoisson family taken to be 23.6967)
## 
##     Null deviance: 636.188  on 5  degrees of freedom
## Residual deviance:  82.786  on 4  degrees of freedom
## AIC: NA
## 
## Number of Fisher Scoring iterations: 4
IRR <- exp(coef(model_qp)["Tahun"])
IRR
##    Tahun 
## 1.668686
b <- unname(coef(model_qp)["Tahun"])
IRR <- exp(b)

cat("IRR per 1 tahun =", round(IRR, 3), "\n")
## IRR per 1 tahun = 1.669
cat("Perubahan rata-rata per tahun =", round((IRR - 1)*100, 2), "%\n")
## Perubahan rata-rata per tahun = 66.87 %

Berdasarkan hasil estimasi model, koefisien Tahun bernilai positif dan signifikan secara statistik (Estimate = 0,5120; SE = 0,1182; t = 4,333; p = 0,0123). Hal ini menunjukkan adanya tren peningkatan yang signifikan pada laju kasus HIV di Provinsi Aceh selama periode 2018–2023 setelah memperhitungkan ukuran populasi.

Koefisien tren diinterpretasikan melalui Incidence Rate Ratio (IRR):

\[ \text{IRR} = e^{\beta_1} \]

Nilai IRR per 1 tahun adalah:

\[ \text{IRR} = e^{0{,}5120} = 1{,}669 \]

Artinya, setiap kenaikan 1 tahun pengamatan berasosiasi dengan peningkatan laju kasus HIV rata-rata sebesar 66,87% per tahun \(\big((1{,}669 - 1)\times100\%\big)\), dengan asumsi faktor lain konstan.

Model Quasi-Poisson menunjukkan tren peningkatan laju kasus HIV yang signifikan di Provinsi Aceh (IRR = 1,669; p = 0,0123), yang berarti laju kasus meningkat rata-rata sekitar 66,87% per tahun selama 2018–2023 setelah memperhitungkan jumlah penduduk.

4.5 Visualisasi Spasial Tingkat Provinsi

Karena data hanya tingkat provinsi (1 poligon), peta digunakan sebagai alat komunikasi visual, bukan perbandingan antarkabupaten/kota.

  • Peta 2023

  • Peta 2022

  • Peta 2021

  • Peta 2020

  • Peta 2019

  • Peta 2018

Walaupun tidak menunjukkan variasi internal dalam provinsi, peta membantu komunikasi visual perubahan beban HIV Aceh antar tahun dan dapat menjadi pintu masuk untuk rekomendasi analisis lebih rinci bila data kabupaten/kota tersedia (WHO, 2022).

BAB 5. KESIMPULAN DAN SARAN

5.1 Kesimpulan

Berdasarkan hasil analisis epidemiologi terhadap kasus HIV di Provinsi Aceh selama periode tahun 2018–2023, dapat disimpulkan beberapa hal sebagai berikut:

  • Perkembangan Kasus dan Prevalensi HIV Jumlah kasus HIV di Provinsi Aceh menunjukkan pola fluktuatif dengan kecenderungan meningkat pada periode akhir pengamatan. Pada tahun 2019 tercatat prevalensi terendah sebesar 0,801 per 100.000 penduduk, sementara prevalensi tertinggi terjadi pada tahun 2023 sebesar 8,007 per 100.000 penduduk. Lonjakan kasus dan prevalensi yang signifikan pada tahun 2022–2023 menunjukkan peningkatan beban HIV yang tercatat dalam sistem surveilans.

  • Distribusi Kasus Menurut Kelompok Umur Analisis deskriptif menunjukkan bahwa kasus HIV di Provinsi Aceh didominasi oleh kelompok umur usia produktif, khususnya rentang usia dewasa. Kelompok ini menjadi kontributor utama terhadap total kasus HIV, sementara kelompok usia anak dan lanjut usia menunjukkan jumlah kasus yang relatif lebih rendah. Pola ini konsisten dengan karakteristik epidemi HIV yang banyak terjadi pada kelompok usia aktif secara sosial dan ekonomi.

  • Prevalensi HIV Tahunan Rata-rata prevalensi HIV tahunan selama periode 2018–2023 tercatat sebesar 2,773 per 100.000 penduduk, dengan variasi yang cukup besar antar tahun sebagaimana ditunjukkan oleh koefisien variasi sebesar 100,64%. Hal ini mengindikasikan bahwa dinamika prevalensi HIV di Provinsi Aceh tidak bersifat stabil dan sangat dipengaruhi oleh perubahan jumlah kasus yang tercatat dari tahun ke tahun.

  • Tren Temporal Berdasarkan Model Quasi-Poisson Hasil pemodelan menggunakan Quasi-Poisson rate model dengan offset log(jumlah penduduk) menunjukkan adanya tren peningkatan laju kasus HIV yang signifikan secara statistik selama periode pengamatan. Nilai Incidence Rate Ratio (IRR) sebesar 1,669 menunjukkan bahwa setiap kenaikan satu tahun pengamatan berasosiasi dengan peningkatan laju kasus HIV rata-rata sebesar 66,87% per tahun, setelah mengontrol perubahan ukuran populasi.

  • Interpretasi Epidemiologis Peningkatan laju kasus HIV yang teramati pada tahun-tahun terakhir kemungkinan tidak hanya mencerminkan peningkatan risiko penularan, tetapi juga dapat dipengaruhi oleh faktor lain seperti peningkatan cakupan pemeriksaan HIV, perbaikan sistem pelaporan dan surveilans, serta pemulihan layanan kesehatan pascapandemi COVID-19. Oleh karena itu, hasil analisis tren ini perlu diinterpretasikan secara hati-hati dalam konteks kebijakan dan program kesehatan masyarakat yang berjalan.

5.2 Saran

  • Penguatan program pencegahan dan deteksi dini terutama pada kelompok umur produktif.

  • Peningkatan kualitas surveilans rutin (kelengkapan, ketepatan waktu, konsistensi definisi kasus) sesuai panduan strategis informasi HIV (WHO, 2022).

  • Disarankan pengembangan analisis lanjutan dengan data kabupaten/kota atau populasi kunci untuk memetakan heterogenitas wilayah dan determinan risiko secara lebih spesifik.

  • Untuk pengembangan metodologi, model dapat diperluas dengan kovariat program/testing atau pendekatan intervention analysis bila informasi kebijakan tersedia (Helfenstein, 1996; Bhaskaran et al., 2013).

ACKNOWLEDGEMENT

Penulis menggunakan bantuan AI (ChatGPT) untuk membantu penyusunan struktur laporan, perapihan bahasa, serta contoh sintaks analisis statistik dan visualisasi. Seluruh hasil perhitungan diverifikasi menggunakan skrip R dan data yang digunakan dalam penelitian.


DAFTAR PUSTAKA

  1. Bhaskaran, K., Gasparrini, A., Hajat, S., Smeeth, L., & Armstrong, B. (2013). Time series regression studies in environmental epidemiology. International Journal of Epidemiology, 42(4), 1187–1195. https://doi.org/10.1093/ije/dyt092

  2. Breslow, N. E. (1984). Extra-Poisson variation in log-linear models. Applied Statistics, 33(1), 38–44. https://doi.org/10.2307/2347661

  3. Brookmeyer, R. (2010). Measuring the HIV/AIDS epidemic: Approaches and challenges. Epidemiologic Reviews, 32(1), 26–37. https://doi.org/10.1093/epirev/mxq002

  4. Buthelezi, U. E., Davidson, C. L., & Kharsany, A. B. M. (2016). Strengthening HIV surveillance: Measurements to track the epidemic in real time. African Journal of AIDS Research, 15(2), 99–112. https://doi.org/10.2989/16085906.2016.1196223

  5. Cameron, A. C., & Trivedi, P. K. (2013). Regression analysis of count data (2nd ed.). Cambridge University Press. https://doi.org/10.1017/CBO9781139013567

  6. Dunn, P. K., & Smyth, G. K. (2018). Generalized linear models with examples in R. Springer. https://doi.org/10.1007/978-1-4419-0118-7

  7. Hardin, J. W., & Hilbe, J. M. (2018). Generalized linear models and extensions (4th ed.). Stata Press.

  8. Helfenstein, U. (1996). The use of transfer function models, intervention analysis and related time series methods in epidemiology. International Journal of Epidemiology, 25(2), 289–298. https://doi.org/10.1093/ije/25.2.289

  9. Januraga, P. P., Reekie, J., Mulyani, T., et al. (2018). The cascade of HIV care among key populations in Indonesia: A prospective cohort study. The Lancet HIV, 5(10), e560–e568. https://doi.org/10.1016/S2352-3018(18)30148-6

  10. Johnson, L. F., Kubjane, M., & Eaton, J. W. (2020). Challenges in estimating HIV prevalence trends and geographical variation in HIV prevalence using antenatal data: Insights from mathematical modelling. PLOS ONE, 15(11), e0242595. https://doi.org/10.1371/journal.pone.0242595

  11. Mburu, G., Ram, M., Siu, G., et al. (2014). Intersectionality of HIV stigma and masculinity in eastern Uganda: Implications for involving men in HIV programmes. BMC Public Health, 14, 1061. https://doi.org/10.1186/1471-2458-14-1061

  12. Ouldali, N., Deceuninck, G., Lefebvre, B., Gilca, R., & Quach, C. (2023). Increase of invasive pneumococcal disease in children temporally associated with RSV outbreak in Quebec: A time-series analysis. The Lancet Regional Health – Americas, 20, 100448. https://doi.org/10.1016/j.lana.2023.100448

  13. Samuels, A. (2019). Narrative navigation: HIV and (good) care in Aceh, Indonesia. Culture, Medicine and Psychiatry, 43(1), 1–23. https://doi.org/10.1007/S11013-018-9602-Y

  14. Sukmawati, C., Sihombing, M., Sirojuzilam, & Purwoko, A. (2021). Health services for HIV and AIDS in North Aceh District, Indonesia. In Proceedings of the 2021 Conference (pp. 231–236). Atlantis Press. https://doi.org/10.2991/ASSEHR.K.210125.033

  15. UNAIDS. (2023). Global AIDS Update 2023. Joint United Nations Programme on HIV/AIDS.

  16. Ver Hoef, J. M., & Boveng, P. L. (2007). Quasi-Poisson vs. negative binomial regression: How should we model overdispersed count data? Ecology, 88(11), 2766–2772. https://doi.org/10.1890/07-0043.1

  17. Wang, X., Kim, J., Kim, S., Kim, Y., & Kim, H. (2025). Trends in HIV testing and seroprevalence among key populations at public health centers in South Korea, 2011–2023: A nationwide analysis. BMC Public Health, 25(1), 641. https://doi.org/10.1186/s12889-025-25641-5

  18. Wardhani, B. D. K., Grulich, A. E., Kawi, N. H., Prasetia, Y., & Luis, H. (2024). Very high HIV prevalence and incidence among men who have sex with men and transgender women in Indonesia: A retrospective observational cohort study in Bali and Jakarta, 2017–2020. Journal of the International AIDS Society, 27(10), e26386. https://doi.org/10.1002/jia2.26386

  19. WHO. (2022). Consolidated guidelines on person-centred HIV strategic information: Strengthening routine data for impact. World Health Organization.

  20. Widayati, K., Wulandari, L. P. L., Prabandari, Y. S., et al. (2020). HIV-related stigma among healthcare workers in Indonesia: A qualitative study. BMC Public Health, 20, 1599. https://doi.org/10.1186/s12889-020-09699-5

  21. Zeileis, A., Kleiber, C., & Jackman, S. (2008). Regression models for count data in R. Journal of Statistical Software, 27(8), 1–25. https://doi.org/10.18637/jss.v027.i08

Lampiran

# LIBRARY

library(shiny)
library(bs4Dash)
library(dplyr)
library(DT)
library(ggplot2)
library(readxl)
library(tidyr)
library(sf)
library(leaflet)

# PATH

data_path  <- "data uas baru.xlsx"
shape_path <- "gadm41_IDN_2.shp"
has_shape  <- file.exists(shape_path)

# BACA DATA

data_raw <- read_excel(data_path)

# CLEAN + FILTER (HIV saja)

data_hiv <- data_raw %>%
  mutate(
    Tahun = as.integer(Tahun),
    Jumlah_kasus = as.numeric(Jumlah_kasus),
    `Jumlah Penduduk` = as.numeric(`Jumlah Penduduk`),
    Kelompok_Umur = as.character(Kelompok_Umur),
    HIV = as.character(HIV),
    bps_nama_provinsi = as.character(bps_nama_provinsi)
  ) %>%
  filter(
    HIV == "HIV",
    is.finite(Tahun),
    is.finite(Jumlah_kasus),
    is.finite(`Jumlah Penduduk`)
  )

# AGREGASI PER TAHUN: total kasus + penduduk + prevalensi per 100.000

data_prev <- data_hiv %>%
  group_by(Tahun) %>%
  summarise(
    Kasus_HIV  = sum(Jumlah_kasus, na.rm = TRUE),
    Penduduk   = dplyr::first(`Jumlah Penduduk`),
    Prevalensi = (Kasus_HIV / Penduduk) * 100000,
    .groups = "drop"
  ) %>%
  arrange(Tahun)

# MODEL TREND (QUASI-POISSON)

model_trend <- glm(
  Kasus_HIV ~ Tahun,
  family = quasipoisson(link = "log"),
  offset = log(Penduduk),
  data = data_prev
)
model_sum <- summary(model_trend)

# Koefisien 
coefs <- as.data.frame(model_sum$coefficients)
coefs$Term <- rownames(coefs)
rownames(coefs) <- NULL
coefs <- coefs %>%
  dplyr::select(Term, dplyr::everything()) %>%
  dplyr::mutate(dplyr::across(where(is.numeric), ~round(.x, 6)))

# IRR + p-value
b_year <- unname(coef(model_trend)[["Tahun"]])
IRR    <- exp(b_year)
p_year <- coef(summary(model_trend))["Tahun", "Pr(>|t|)"]

# SHAPEFILE -> ACEH (1 polygon)

aceh_map <- NULL
if (has_shape) {
  shp2 <- st_read(shape_path, quiet = TRUE) %>%
    mutate(
      NAME_1 = toupper(trimws(NAME_1)),
      NAME_2 = toupper(trimws(NAME_2))
    )
  
  aceh_map <- shp2 %>%
    filter(NAME_1 == "ACEH") %>%
    summarise(Provinsi = "ACEH", geometry = st_union(geometry)) %>%
    st_as_sf()
}

ui <- bs4DashPage(
  title = "UAS Epidemiologi - HIV Aceh",
  
  header = bs4DashNavbar(
    skin = "light",
    status = "primary",
    border = FALSE
  ),
  
  sidebar = bs4DashSidebar(
    skin = "light",
    status = "primary",
    title = "Dashboard UAS",
    bs4SidebarMenu(
      bs4SidebarMenuItem("Home", tabName = "home", icon = icon("house")),
      bs4SidebarMenuItem("Data", tabName = "data", icon = icon("table")),
      bs4SidebarMenuItem("Analisis Deskriptif", tabName = "desc", icon = icon("chart-bar")),
      bs4SidebarMenuItem("Ukuran Epidemiologi", tabName = "epi", icon = icon("calculator")),
      bs4SidebarMenuItem("Peta", tabName = "map", icon = icon("map")),
      bs4SidebarMenuItem("Pemodelan", tabName = "ts", icon = icon("chart-line")),
      bs4SidebarMenuItem("Interpretasi", tabName = "interp", icon = icon("clipboard-check"))
    )
  ),
  
  body = bs4DashBody(
    bs4TabItems(
      
      # ================= HOME =================
      bs4TabItem(
        tabName = "home",
        h3("Home"),
        
        bs4Card(
          width = 12,
          title = "Identitas",
          status = "primary",
          solidHeader = TRUE,
          p("Nama        : Muhammad Aidan Faiz"),
          p("NPM         : 140610230070"),
          p("Mata Kuliah : Epidemiologi"),
          p("Tahun       : 2025")
        ),
        
        bs4Card(
          width = 12,
          title = "Tujuan Dashboard",
          status = "primary",
          solidHeader = TRUE,
          p(
            "Dashboard ini menampilkan analisis HIV di Provinsi Aceh berdasarkan kelompok umur dan tahun. ",
            "Outcome utama adalah PREVALENSI HIV (per 100.000 penduduk) dan ditampilkan khusus pada tab 'Ukuran Epidemiologi'. ",
            "Tab lain menampilkan ringkasan data dan pola kasus, serta pemodelan tren menggunakan model Quasi-Poisson ",
            "dengan offset log(Penduduk) untuk memperhitungkan ukuran populasi."
          )
        )
      ),
      
      # ================= DATA =================
      bs4TabItem(
        tabName = "data",
        h3("Data HIV (Bersih)"),
        
        fluidRow(
          bs4ValueBox(
            value = textOutput("vb_total_kasus"),
            subtitle = "Total kasus HIV (semua tahun)",
            icon = icon("virus"),
            color = "danger"
          ),
          bs4ValueBox(
            value = textOutput("vb_n_year"),
            subtitle = "Jumlah tahun",
            icon = icon("calendar"),
            color = "info"
          ),
          bs4ValueBox(
            value = textOutput("vb_max_year"),
            subtitle = "Tahun terakhir",
            icon = icon("clock"),
            color = "warning"
          ),
          bs4ValueBox(
            value = textOutput("vb_total_rows"),
            subtitle = "Jumlah baris data (umur x tahun)",
            icon = icon("database"),
            color = "success"
          )
        ),
        
        bs4Card(
          width = 12,
          title = "Tabel Data (Baris per Kelompok Umur & Tahun)",
          status = "primary",
          solidHeader = TRUE,
          div(style = "overflow-x:auto;", DTOutput("table_data"))
        )
      ),
      
      # ================= DESKRIPTIF =================
      
      bs4TabItem(
        tabName = "desc",
        h3("Analisis Deskriptif (Kasus HIV)"),
        
        fluidRow(
          bs4Card(
            width = 12,
            title = "Kasus HIV per Tahun menurut Kelompok Umur (Aceh)",
            status = "primary",
            solidHeader = TRUE,
            plotOutput("stack_age_year", height = 420)
          )
        ),
        
        fluidRow(
          bs4Card(
            width = 6,
            title = "Histogram Kasus HIV menurut Kelompok Umur (Semua Tahun)",
            status = "primary",
            solidHeader = TRUE,
            plotOutput("hist_age", height = 320)
          ),
          bs4Card(
            width = 6,
            title = "Interpretasi",
            status = "info",
            solidHeader = TRUE,
            p(
              "Distribusi kasus HIV di Aceh didominasi oleh kelompok umur 25–49 tahun, dengan peningkatan kasus yang tajam pada tahun 2022–2023. Kelompok usia produktif menjadi kontributor utama beban HIV, sementara kelompok usia anak dan lanjut usia menunjukkan jumlah kasus yang relatif rendah."
         )
      )
    )
),
      

      
      # ================= UKURAN EPIDEMIOLOGI =================
      # Semua yang berkaitan dengan prevalensi ditaruh di sini
      bs4TabItem(
        tabName = "epi",
        h3("Ukuran Epidemiologi (Prevalensi)"),
        
        fluidRow(
          bs4ValueBox(
            value = textOutput("vb_prev_last"),
            subtitle = "Prevalensi (tahun terakhir) per 100.000",
            icon = icon("percent"),
            color = "primary"
          ),
          bs4ValueBox(
            value = textOutput("vb_prev_min"),
            subtitle = "Prevalensi terendah per 100.000",
            icon = icon("arrow-down"),
            color = "info"
          ),
          bs4ValueBox(
            value = textOutput("vb_prev_max"),
            subtitle = "Prevalensi tertinggi per 100.000",
            icon = icon("arrow-up"),
            color = "danger"
          ),
          bs4ValueBox(
            value = textOutput("vb_prev_mean"),
            subtitle = "Rata-rata prevalensi per 100.000",
            icon = icon("chart-line"),
            color = "success"
          )
        ),
        
        bs4Card(
          width = 12,
          title = "Rumus",
          status = "primary",
          solidHeader = TRUE,
          p("Prevalensi HIV per 100.000 penduduk = (Kasus HIV / Jumlah penduduk) × 100.000.")
        ),
        
        bs4Card(
          width = 12,
          title = "Tabel Prevalensi (per Tahun)",
          status = "primary",
          solidHeader = TRUE,
          div(style = "overflow-x:auto;", DTOutput("table_epi"))
        ),
        
        bs4Card(
          width = 12,
          title = "Plot Prevalensi per Tahun (per 100.000)",
          status = "primary",
          solidHeader = TRUE,
          plotOutput("prev_plot", height = 320)
        )
      ),
      
      # ================= PETA =================
      bs4TabItem(
        tabName = "map",
        h3("Peta Prevalensi HIV per Tahun (Aceh)"),
        
        bs4Card(
          width = 12,
          title = "Status Shapefile",
          status = "primary",
          solidHeader = TRUE,
          verbatimTextOutput("shape_status")
        ),
        
        fluidRow(
          bs4Card(
            width = 4,
            title = "Pilih Tahun",
            status = "primary",
            solidHeader = TRUE,
            selectInput(
              "map_year",
              "Tahun",
              choices = sort(unique(data_prev$Tahun)),
              selected = max(data_prev$Tahun, na.rm = TRUE)
            )
          ),
          bs4Card(
            width = 8,
            title = "Peta (nilai berubah sesuai Tahun)",
            status = "primary",
            solidHeader = TRUE,
            leafletOutput("map_aceh", height = 520)
          )
        )
      ),
      
      # ================= TIME SERIES =================
      # Fokus tren kasus + model (bukan plot prevalensi)
      bs4TabItem(
        tabName = "ts",
        h3("Analisis Time Series (Tren Kasus & Model)"),
        
        bs4Card(
          width = 12,
          title = "Tabel Time Series (Kasus & Penduduk per Tahun)",
          status = "primary",
          solidHeader = TRUE,
          div(style = "overflow-x:auto;", DTOutput("table_ts"))
        ),
        
        bs4Card(
          width = 12,
          title = "Plot Total Kasus HIV per Tahun",
          status = "primary",
          solidHeader = TRUE,
          plotOutput("ts_cases_plot", height = 320)
        ),
        
        bs4Card(
          width = 12,
          title = "Ringkasan Model (Quasi-Poisson: Kasus ~ Tahun + offset log(Penduduk))",
          status = "primary",
          solidHeader = TRUE,
          verbatimTextOutput("glm_out")
        ),
        
        fluidRow(
          bs4Card(
            width = 6,
            title = "Koefisien & p-value (Quasi-Poisson)",
            status = "primary",
            solidHeader = TRUE,
            DTOutput("coef_table")
          ),
          bs4Card(
            width = 6,
            title = "Ringkasan Singkat (IRR)",
            status = "primary",
            solidHeader = TRUE,
            verbatimTextOutput("interpret_short")
          )
        ),
        
        bs4Card(
          width = 12,
          title = "Diagnostik Model (GLM)",
          status = "primary",
          solidHeader = TRUE,
          plotOutput("diag_glm", height = 420)
        )
      ),
      
      # ================= INTERPRETASI =================
      bs4TabItem(
        tabName = "interp",
        h3("Interpretasi"),
        
        bs4Card(
          width = 12,
          title = "Interpretasi Hasil Tren (Model)",
          status = "primary",
          solidHeader = TRUE,
          verbatimTextOutput("interpret_long")
        ),
        
        fluidRow(
          bs4Card(
            width = 6,
            title = "Kesimpulan",
            status = "primary",
            solidHeader = TRUE,
            verbatimTextOutput("kesimpulan")
          ),
          bs4Card(
            width = 6,
            title = "Saran",
            status = "primary",
            solidHeader = TRUE,
            verbatimTextOutput("saran")
          )
        ),
        
        bs4Card(
          width = 12,
          title = "Keterbatasan",
          status = "primary",
          solidHeader = TRUE,
          verbatimTextOutput("limitations")
        )
      )
    )
  )
)

server <- function(input, output, session) {
  
  # ================= DATA TAB =================
  output$vb_total_kasus <- renderText({
    format(sum(data_hiv$Jumlah_kasus, na.rm = TRUE), big.mark = ",")
  })
  
  output$vb_n_year <- renderText({
    length(unique(data_prev$Tahun))
  })
  
  output$vb_max_year <- renderText({
    max(data_prev$Tahun, na.rm = TRUE)
  })
  
  output$vb_total_rows <- renderText({
    nrow(data_hiv)
  })
  
  output$table_data <- renderDT({
    datatable(
      data_hiv,
      rownames = FALSE,
      options = list(pageLength = 10, scrollX = TRUE)
    )
  })
  
  # ================= DESKRIPTIF (KASUS) =================
  
  # Stacked bar: kasus per tahun menurut kelompok umur
  output$stack_age_year <- renderPlot({
    
    df_stack <- data_hiv %>%
      group_by(Tahun, Kelompok_Umur) %>%
      summarise(
        Kasus = sum(Jumlah_kasus, na.rm = TRUE),
        .groups = "drop"
      )
    
    ggplot(df_stack, aes(
      x = factor(Tahun),
      y = Kasus,
      fill = Kelompok_Umur
    )) +
      geom_col() +
      theme_minimal() +
      labs(
        title = "Distribusi Kasus HIV per Tahun menurut Kelompok Umur (Aceh)",
        x = "Tahun",
        y = "Jumlah Kasus HIV",
        fill = "Kelompok Umur"
      )
  })
  
  # Histogram kasus menurut kelompok umur (agregat semua tahun)
  output$hist_age <- renderPlot({
    
    df_age <- data_hiv %>%
      group_by(Kelompok_Umur) %>%
      summarise(
        Total_Kasus = sum(Jumlah_kasus, na.rm = TRUE),
        .groups = "drop"
      )
    
    ggplot(df_age, aes(x = Kelompok_Umur, y = Total_Kasus)) +
      geom_col(fill = "orange", alpha = 0.85) +
      theme_minimal() +
      labs(
        title = "Distribusi Total Kasus HIV menurut Kelompok Umur (Aceh)",
        x = "Kelompok Umur",
        y = "Total Kasus HIV"
      )
  })
  
  
  # ================= UKURAN EPIDEMIOLOGI TAB =================
  output$vb_prev_last <- renderText({
    last_year <- max(data_prev$Tahun, na.rm = TRUE)
    val <- data_prev %>% filter(Tahun == last_year) %>% pull(Prevalensi)
    if (length(val) == 0) return("NA")
    round(val[1], 3)
  })
  
  output$vb_prev_min <- renderText({
    round(min(data_prev$Prevalensi, na.rm = TRUE), 3)
  })
  
  output$vb_prev_max <- renderText({
    round(max(data_prev$Prevalensi, na.rm = TRUE), 3)
  })
  
  output$vb_prev_mean <- renderText({
    round(mean(data_prev$Prevalensi, na.rm = TRUE), 3)
  })
  
  output$table_epi <- renderDT({
    datatable(
      data_prev %>%
        mutate(
          Kasus_HIV  = round(Kasus_HIV, 0),
          Penduduk   = round(Penduduk, 0),
          Prevalensi = round(Prevalensi, 3)
        ),
      rownames = FALSE,
      options = list(pageLength = 10, scrollX = TRUE)
    )
  })
  
  output$prev_plot <- renderPlot({
    ggplot(data_prev, aes(x = Tahun, y = Prevalensi)) +
      geom_line(color = "blue", linewidth = 1) +
      geom_point(color = "red", size = 2) +
      theme_minimal() +
      labs(
        title = "Prevalensi HIV per Tahun (Aceh)",
        x = "Tahun",
        y = "Prevalensi HIV per 100.000 penduduk"
      )
  })
  
  # ================= PETA TAB =================
  output$shape_status <- renderPrint({
    if (!has_shape) {
      cat("Shapefile TIDAK ditemukan:", shape_path, "\n")
      cat("Pastikan file .shp/.dbf/.shx/.prj ada di folder project.\n")
    } else if (is.null(aceh_map) || nrow(aceh_map) == 0) {
      cat("Shapefile ditemukan, tapi ACEH tidak ketemu di kolom NAME_1.\n")
    } else {
      cat("Shapefile ditemukan ✅\n")
      cat("Peta Aceh siap ditampilkan.\n")
    }
  })
  
  output$map_aceh <- renderLeaflet({
    req(has_shape)
    req(!is.null(aceh_map))
    req(nrow(aceh_map) > 0)
    
    # ambil prevalensi sesuai tahun yang dipilih
    prev_val <- data_prev %>%
      filter(Tahun == input$map_year) %>%
      pull(Prevalensi)
    
    if (length(prev_val) == 0) prev_val <- NA_real_
    
    tmp <- aceh_map
    tmp$Prevalensi <- prev_val
    
    # ✅ palet dibuat dari SEMUA tahun (global scale) -> tiap tahun akan punya warna berbeda
    pal <- colorNumeric(
      palette = "YlOrRd",
      domain  = data_prev$Prevalensi,   # penting: semua tahun
      na.color = "grey80"
    )
    
    leaflet(tmp) %>%
      addProviderTiles("CartoDB.Positron") %>%
      addPolygons(
        fillColor = ~pal(Prevalensi),
        color = "white", weight = 1,
        fillOpacity = 0.75,
        label = ~paste0(
          "ACEH | Tahun: ", input$map_year,
          " | Prevalensi: ", round(Prevalensi, 3), " per 100.000"
        )
      ) %>%
      addLegend(
        position = "bottomright",
        pal = pal,
        values = data_prev$Prevalensi,
        title = "Prevalensi HIV / 100.000"
      )
  })
  
  # ================= TIME SERIES TAB =================
  output$table_ts <- renderDT({
    datatable(
      data_prev %>%
        mutate(
          Kasus_HIV = round(Kasus_HIV, 0),
          Penduduk  = round(Penduduk, 0)
        ) %>%
        select(Tahun, Kasus_HIV, Penduduk),
      rownames = FALSE,
      options = list(pageLength = 10, scrollX = TRUE, dom = "tip")
    )
  })
  
  output$ts_cases_plot <- renderPlot({
    ggplot(data_prev, aes(x = Tahun, y = Kasus_HIV)) +
      geom_line(color = "blue", linewidth = 1) +
      geom_point(color = "red", size = 2) +
      theme_minimal() +
      labs(
        title = "Tren Total Kasus HIV per Tahun (Aceh)",
        x = "Tahun",
        y = "Total Kasus HIV"
      )
  })
  
  output$glm_out <- renderPrint({
    print(model_sum)
  })
  
  output$coef_table <- renderDT({
    datatable(coefs, rownames = FALSE, options = list(dom = "t", scrollX = TRUE))
  })
  
  output$interpret_short <- renderPrint({
    b <- unname(coef(model_trend)[["Tahun"]])
    IRR_local <- exp(b)
    p <- coef(summary(model_trend))["Tahun", "Pr(>|t|)"]
    
    cat("IRR (per 1 tahun) =", round(IRR_local, 3), "\n")
    cat("Perubahan rata-rata per tahun =", round((IRR_local - 1) * 100, 2), "%\n")
    cat("p-value =", round(p, 5), "\n\n")
    
    if (is.finite(p) && p < 0.05) {
      cat("Kesimpulan: tren meningkat signifikan (p < 0.05).\n")
    } else {
      cat("Kesimpulan: tren belum signifikan (p >= 0.05).\n")
    }
  })
  
  output$diag_glm <- renderPlot({
    par(mfrow = c(1, 2))
    
    plot(
      fitted(model_trend),
      residuals(model_trend, type = "pearson"),
      xlab = "Fitted values",
      ylab = "Pearson residuals",
      main = "Residual vs Fitted"
    )
    abline(h = 0, lty = 2)
    
    qqnorm(residuals(model_trend, type = "deviance"), main = "QQ Plot (Deviance residuals)")
    qqline(residuals(model_trend, type = "deviance"))
  })
  
  # ================= INTERPRETASI TAB =================
  output$interpret_long <- renderPrint({
    b <- unname(coef(model_trend)[["Tahun"]])
    IRR_local <- exp(b)
    p <- coef(summary(model_trend))["Tahun", "Pr(>|t|)"]
    
    cat("Interpretasi Model Tren (Quasi-Poisson)\n")
    cat("-------------------------------------------------\n")
    cat("Model: Kasus_HIV ~ Tahun + offset(log(Penduduk))\n\n")
    cat("IRR (per 1 tahun):", round(IRR_local, 3), "\n")
    cat(
      "Artinya: setiap kenaikan 1 tahun, terjadi perubahan rata-rata sebesar",
      round((IRR_local - 1) * 100, 2), "%.\n"
    )
    cat("p-value koefisien Tahun:", round(p, 5), "\n\n")
    
    if (is.finite(p) && p < 0.05) {
      cat("Interpretasi: terdapat tren peningkatan yang signifikan secara statistik.\n")
      cat("Catatan: kenaikan juga dapat dipengaruhi perubahan testing/pelaporan.\n")
    } else {
      cat("Interpretasi: belum ada bukti tren yang signifikan secara statistik.\n")
    }
  })
  
  output$kesimpulan <- renderPrint({
    b <- unname(coef(model_trend)[["Tahun"]])
    IRR_local <- exp(b)
    p <- coef(summary(model_trend))["Tahun", "Pr(>|t|)"]
    
    if (is.finite(p) && p < 0.05) {
      cat("1) Terdapat tren peningkatan HIV di Aceh yang signifikan.\n")
      cat(
        "2) Perubahan rata-rata sekitar",
        round((IRR_local - 1) * 100, 2),
        "% per tahun (IRR =", round(IRR_local, 3), ").\n"
      )
    } else {
      cat("1) Tren belum signifikan secara statistik.\n")
      cat("2) Perlu data lebih panjang/lebih detail untuk memastikan pola.\n")
    }
  })
  
  output$saran <- renderPrint({
    cat("Saran:\n")
    cat("- Perpanjang periode data (lebih banyak tahun) agar tren lebih kuat.\n")
    cat("- Jika tersedia, gunakan data per kabupaten/kota agar peta lebih informatif.\n")
    cat("- Lengkapi interpretasi dengan konteks program (testing, pelaporan, intervensi).\n")
  })
  
  output$limitations <- renderPrint({
    cat("Keterbatasan:\n")
    cat("- Data tahunan sedikit (n kecil), sensitif terhadap lonjakan tahun tertentu.\n")
    cat("- Angka dapat dipengaruhi perubahan testing/pelaporan, bukan hanya perubahan risiko.\n")
    cat("- Peta hanya 1 poligon (Provinsi Aceh), variasi internal tidak terlihat.\n")
  })
}

# RUN APP

shinyApp(ui, server)