LINK DASHBOARD: https://chrisrafael.shinyapps.io/Dashboard_TBC_Kalsel/ LINK VIDEO: https://youtu.be/h3g6P-dnUi8

1 Abstrak

Tuberkulosis (TBC) merupakan penyakit menular yang menjadi tantangan kesehatan terbesar di Indonesia. Dimana TBC sendiri, yang menyebar secara cepat melalui transmisi udara, sudah dengan cepat menjadi beban untuk masyarakat salah satunya di Provinsi Kalimantan Selatan. Penelitian ini bertujuan menganalisis tren waktu, pola spasial, serta keterkaitan faktor sosio-ekonomi dengan kejadian TBC di Provinsi Kalimantan Selatan. Analisis dilakukan melalui statistik deskriptif, visualisasi tren, pengujian autokorelasi spasial, dan disease mapping menggunakan Standardized Morbidity Ratio (SMR), model Poisson-Gamma, serta model spasial Bayesian BYM2. Hasil menunjukkan atingkat risiko TBC antar wilayah. Model Gauss-Poisson menghasilkan estimasi risiko yang lebih stabil dibandingkan SMR mentah. Temuan ini mendukung pentingnya pendekatan sppenanganan overdispersi sebagai dasar perencanaan intervensi pengendalian TBC yang lebih terarah dan berbasis wilayah.

Kata Kunci: Tuberkulosis,Kalimantan Selatan,Disease Mappping

2 Pendahuluan

2.1 Latar Belakang

Tuberkulosis (TB) merupakan penyakit yang menjadi masalah kesehatan serius di dunia. Pada tahun 2023, Global Tuberculosis Report memperkirakan adanya 10,8 juta kasus TB terbaru yang disebabkan oleh penularan udara antara individu. Angka kematian yang diakibatkan oleh hal tersebut mencapai 1,25 juta jiwa. Penelitian oleh menunjukkan bahwa meskipun intervensi kesehatan global telah berkembang, umur penyakit TB sebagai salah satu dari 10 penyebab kematian tertinggi di dunia tetap dominan di banyak negara berpenghasilan rendah dan menengah (Chakaya et al., 2021). Selain itu penyakit ini juga memberi beban sosial-ekonomi yang besar di komunitas rentan karena periode pengobatan yang panjang dan kebutuhan dukungan layanan kesehatan yang intensif, termasuk skrining lanjutan, diagnosis cepat, dan manajemen terapi jangka panjang (Craciun et al., 2023) Indonesia juga menjadi salah satu negara dengan kasus TB tertinggi di dunia. Data terbaru menunjukkan Indonesia berada di peringkat kedua secara global untuk jumlah kasus TB tertinggi setelah India, diperkirakan lebih dari 1 juta kasus di tahun 2022 dan angka kematian mencapai lebih dari 125 ribu jiwa setiap tahunnya. Meskipun berdasarkan studi inventori nasional angka under-reporting telah menurun dalam beberapa tahun terakhir, masih terdapat gap antara estimasi kasus dan kasus yang dilaporkan, sehingga upaya untuk 100% menemukan dan mengobati seluruh kasus aktif masih jauh dari kata optimal. Kesenjangan ini menekankan perlunya strategi nasional yang terintegrasi dan lebih agresif untuk mencapai target eliminasi TB Indonesia pada 2030 (Kementerian Kesehatan, 2024) Provinsi Kalimantan Selatan termasuk ke dalam wilayah di Indonesia dengan tingkat kasus TB yang signifikan di Indonesia. Menurut data dari Badan Pusat Statistik (BPS) Kalimantan Selatan (2024) TB berada dalam daftar utama penyakit menular yang dilaporkan menurut kabupaten/kota, meskipun angka rinci insidensi per kabupaten masih memerlukan pendalaman data dan analisis lebih lanjut. Selain itu, studi mengenai Analisis spasio‑temporal di Astambul dan Sungai Tabuk menunjukkan TB tetap masalah besar di Kalimantan Selatan, dengan klaster kasus dan faktor lokal seperti kepadatan penduduk, kondisi fisik rumah, kelembapan, serta ketersediaan fasilitas kesehatan berperan penting (Lasari dkk., 2023).

2.2 Rumusan Masalah

Tuberkulosis masih menjadi masalah kesehatan yang penting di Provinsi Kalimantan Selatan, namun untuk bisa mencari tahu dibutuhkan analisis karakteristik dari penyakit TBC di Kalimantan Selatan untuk bisa memudahkan identifikasi tren penyakit serta penyebaran. Serta itu, karena adanya gap terutama under-reporting dibutuhkan sebuah metode untuk tetap menangani hal tersebut dan mengidentifikasi wilayah yang memmiliki risiko tinggi. Dan kurangnya penelitian mengenai faktor yang mendorong penyebaran TBC juga sangatlah mengkhawatirkan dan dibutuhkan riset.

2.3 Tujuan Penelitian

Penelitian ini bertujuan untuk menganalisis tingkat kejadian dan tren kasus tuberkulosis di Provinsi Kalimantan Selatan menggunakan analisis prevalence rate. Penelitian ini juga bertujuan untuk mengidentifikasi pengaruh faktor sosio-ekonomi terhadap kejadian TB pada tingkat kabupaten/kota. Selanjutnya, penelitian ini bertujuan untuk menerapkan dan membandingkan metode disease modelling SMR, Poisson-Gamma, dan BYM2 guna menentukan model terbaik dalam memetakan risiko TB secara spasial di Provinsi Kalimantan Selatan.

3 Tinjauan Pustaka

3.1 Epidemiologic Triad (Agent-Host-Environment)

Untuk memahami dinamika penularan penyakit menular seperti tuberkulosis (TBC), kerangka kerja konseptual yang paling fundamental adalah model Segitiga Epidemiologi atau Epidemiologic Triad (Gordis, 2018). Model ini bersifat dinamis yang kejadian dan distribusi penyakit dalam populasi bukanlah disebabkan oleh satu faktor tunggal, melainkan hasil dari interaksi kompleks dan berkelanjutan antara tiga komponen utama: Agent, Host, dan Environment. Kejadian penyakit (TBC) terjadi ketika keseimbangan antara ketiga faktor ini terganggu. Misalnya, kerentanan pejamu meningkat (misal, akibat gizi buruk) atau lingkungan berubah menjadi lebih mendukung transmisi (misal, urbanisasi padat). Dalam konteks TBC secara keseluruhan di Jawa Barat, ketiga elemen ini berinteraksi secara konstan.

3.1.1 Agent (Agen)

Agen merupakan mikroorganisme penyebab penyakit. Dalam kasus TBC, agennya adalah bakteri Mycobacterium tuberculosis. Dimana TBC memiliki karakteristik untuk menyebar melalui udara serta berkembang biak didalam sebuah host. Hal tersebut menimbulkan penyakit klinis (TBC aktif) setelah berhasil menginfeksi. M. tuberculosis ditularkan melalui udara (via droplet nuclei).

3.1.2 Host (Pejamu)

Host merupakan manusia yang rawan terhadap infeksi. Faktor-faktor intrinsik pada host sangat menentukan apakah paparan terhadap agen akan menyebabkan infeksi dan menjadi penyakit atau tidak. Dimana faktor tersebut meliput:

  • Faktor Imunologi: Sistem kekebalan tubuh yang lemah (imunokompromais) akibat kondisi seperti koinfeksi HIV, diabetes melitus, atau malnutrisi (gizi buruk), secara drastis meningkatkan risiko penyakit TBC.

  • Faktor Perilaku: Perilaku yang meningkatkan paparan atau menurunkan pertahanan tubuh. Contoh utamanya adalah kebiasaan merokok, yang merusak mekanisme pertahanan paru-paru dan meningkatkan risiko TBC.

  • Faktor Demografis: Usia (kelompok usia sangat muda dan lanjut usia lebih rentan), jenis kelamin, dan riwayat kontak erat sebelumnya dengan penderita TBC.

3.1.3 Environment (Lingkungan)

Environment merupakan faktor eksternal yang bisa menjadi pendorong ataupun penghambat paparan TBC ke seorang host. Dimana lingkungan tersebut bisa dikatakan sebagai lingkungan fisik, seperti kepadatan tempat tinggal yang bisa mendorong penyebaran TBC ataupun kebersihan. Dan juga hal Sosio-Ekonomik seperti pendidikan yang bisa mendorong seseorang untuk mendapatkan pengobatan yang tepat untuk TBC.

Interaksi ketiga komponen inilah yang menentukan tingkat endemisitas TBC di suatu wilayah.

library(imager)
## Loading required package: magrittr
## 
## Attaching package: 'imager'
## The following object is masked from 'package:magrittr':
## 
##     add
## The following objects are masked from 'package:stats':
## 
##     convolve, spectrum
## The following object is masked from 'package:graphics':
## 
##     frame
## The following object is masked from 'package:base':
## 
##     save.image
img <- load.image("C:\\Users\\HP\\Pictures\\Screenshots\\Screenshot 2025-12-22 184046.png")
plot(img)

3.2 Desain Studi Epidemiologi

Desain studi adalah cetak biru atau arsitektur penelitian yang memandu peneliti dalam mengumpulkan dan menganalisis data untuk menjawab pertanyaan penelitian (Budiarto, 2012). Secara garis besar, desain studi dibagi menjadi deskriptif (mendeskripsikan distribusi penyakit) dan analitik (menguji hipotesis hubungan sebab-akibat).Desain analitik observasional yang umum digunakan meliputi:

3.2.1 Studi Cross-sectional

Dalam studi cross-sectional, pengukuran variabel paparan (faktor risiko) dan variabel outcome (penyakit/TBC) dilakukan secara bersamaan (simultaneously) pada satu titik waktu (Rothman, 2012). Desain ini dapat diibaratkan sebagai “potret” atau snapshot dari populasi pada saat itu.

Kelebihan:

  • Efisien: Relatif cepat untuk dilaksanakan dan biaya lebih murah dibandingkan desain analitik lainnya.

  • Mengukur Prevalensi: Merupakan desain terbaik untuk mengukur frekuensi penyakit (prevalensi) di populasi, sehingga cocok untuk menggambarkan beban penyakit (burden of disease).

  • Hipoetetis Awal: Baik untuk mengeksplorasi asosiasi dan menghasilkan hipotesis awal untuk penelitian kohort atau eksperimen lebih lanjut.

Kekurangan:

  • Masalah Temporal : Kekurangan utamanya adalah ketidakmampuan menentukan mana yang lebih dulu terjadi (temporalitas). Sulit dipastikan apakah paparan menyebabkan penyakit atau penyakit yang menyebabkan paparan (misalnya, apakah status gizi buruk menyebabkan TBC, atau TBC aktif menyebabkan gizi buruk?).

  • Tidak Mengukur Insidensi: Tidak dapat digunakan untuk mengukur laju kasus baru (insidensi), sehingga tidak dapat menghitung Risk Ratio (RR).

  • Bias Prevalensi: Dapat terjadi bias jika paparan (faktor risiko) berhubungan dengan durasi penyakit.

3.2.2 Studi Kohort (Cohort)

Desain ini mengikuti sekelompok individu (kohort) yang bebas dari penyakit pada awal studi, yang dibagi berdasarkan status paparan (terpapar dan tidak terpapar). Kohort tersebut kemudian diikuti dari waktu ke waktu (follow-up) untuk melihat siapa yang berkembang menjadi sakit.

Kelebihan:

  • Temporalitas Jelas: Dapat menentukan urutan waktu (paparan terjadi sebelum penyakit), sehingga menjadi desain observasional terkuat untuk menentukan penyebab (causality).

  • Mengukur Insidensi & RR: Dapat menghitung angka insidensi (kasus baru) secara langsung dan menghitung Risk Ratio (RR).

  • Paparan Langka: Baik untuk meneliti paparan yang langka.

Kekurangan:

  • Mahal dan Lama: Membutuhkan biaya sangat besar dan waktu yang sangat lama, terutama untuk penyakit dengan masa laten panjang seperti TBC.

  • Loss to Follow-up: Risiko subjek penelitian hilang atau keluar dari studi selama periode follow-up, yang dapat menyebabkan bias.

  • Penyakit Langka: Tidak efisien untuk meneliti penyakit yang langka.

3.2.3 Studi Kasus-Kontrol (Case-Control)

Desain ini dimulai dengan mengidentifikasi kelompok kasus (individu yang sakit TBC) dan kelompok kontrol (individu yang tidak sakit TBC). Peneliti kemudian melihat ke belakang (retrospektif) untuk membandingkan riwayat paparan faktor risiko antara kedua kelompok tersebut.

Kelebihan:

  • Efisien untuk Penyakit Langka: Sangat cocok untuk meneliti penyakit yang jarang terjadi atau memiliki masa laten panjang (seperti TBC).

  • Cepat dan Murah: Relatif cepat dan murah dibandingkan kohort, karena tidak memerlukan follow-up.

  • Multiple Paparan: Dapat meneliti berbagai kemungkinan faktor risiko (paparan) secara bersamaan.

Kekurangan:

  • Bias Recall (Daya Ingat): Sangat rentan terhadap bias daya ingat, karena subjek (terutama kasus) mungkin mengingat paparan masa lalu secara berbeda dibandingkan kelompok kontrol.

  • Bias Seleksi: Sulit untuk memilih kelompok kontrol yang benar-benar sebanding (representatif) dengan populasi asal kasus.

  • Tidak Mengukur Prevalensi/Insidensi: Tidak dapat menghitung prevalensi atau insidensi. Hanya menghasilkan Odds Ratio (OR).

3.3 Disease Mapping

Metode statistik spasial untuk memodelkan dan mengestimasi pola persebaran dari sebuah penyakitk klinies serta mengestimasi risiko-risiko pada wilayah tersebut. Dimana sering kali perhitungan empiris digunakan berdasarkan distribusi Poisson, sekarang sudah mengikuti tren bayes dengan adanya priori

3.4 Ukuran Asosiasi dan Frekuensi

Dalam epidemiologi, ukuran digunakan untuk mengkuantifikasi frekuensi penyakit dan kekuatan hubungan antara paparan dan penyakit. Sering kali digunakan untuk melihat adanya signifikansi faktor diantara variabel-variabel saat melakukan sebuah riset seperti case-control study. Sering kali digunakan analisis menggunakan metode Analisis Data Kategorik.

4 Metodologi Penelitian

4.1 Sumber Data

Data yang digunakan dalam penelitian ini merupakan data sekunder yang diperoleh dari sumber resmi yaitu Website Open Data Kalimantan Selatan.

4.2 Variabel

Variabel yang digunakan adalah jumlah kasus Tuberkulosis (TBC) di setiap kabupaten/kota di Provinsi Kalimantan Selatan dan jumlah penduduk (estimasi) di setiap Kabupaten/Kota di Provinsi Kalimantan Selatan pada tahun 2020-2023.

4.3 Metode Analisis

Analisis yang digunakan terdiri atas perhitungan prevalensi, autokorelasi spasial, dan disease modelling. Analisis deskriptif dilakukan untuk memvisualisasikan persebaran kasus TBC di Jawa Barat. Autokorelasi spasial dihitung menggunakan Global Moran’s I dan Geary’s C untuk mendeteksi pola sebaran secara keseluruhan dan Local Moran’s I (LISA) untuk mengidentifikasi klaster signifikan antarwilayah. Kemudian digunakan estimasi disease modelling sebagai identifikasi kabupaten/kota dengan risiko tinggi menggunakan SMR (Standardized Morbidity Rate), Model Gamma-Poisson, dan BYM (Besag-York-Mollié) dengan antisipasi adanya overdispersi dan interdependensi spasial.

4.3.1 Prevalensi

Prevalensi adalah ukuran proporsi individu dalam suatu populasi yang memiliki penyakit (kasus existing, baik baru maupun lama) pada satu titik waktu tertentu (point prevalence) atau selama periode waktu tertentu (period prevalence).

\[ \text{Prevalensi} = \frac{\text{Jumlah kasus (baru + lama) pada waktu } t}{\text{Total populasi pada waktu } t} \]

Ukuran ini menggambarkan beban penyakit (burden of disease) di masyarakat.

4.3.2 Global Moran’S I

Uji global Moran’s I merupakan uji global yang lebih banyak dipakai. Dimana Moran’s I digunakan untuk melihat seluruh hubungan spasial autokorelasi pada keseluruhan area. Berdasarkan tersebut didapatkan rumus Moran’s I sebagai berikut:

\[I = \ \frac{N}{S_{0}}\ .\ \frac{\sum_{i = 1}^{N}{\sum_{j = 1}^{N}\omega_{ij}}(x_{i} - \overline{x})(x_{j} - \overline{x})}{\sum_{i = 1}^{N}{(x_{i} - \overline{x})}^{2}}\]

Dimana, N merupakan jumlah data yang ada, \(\omega_{ij}\) sebagai weight dan x merupakan datanya tersendiri. Dan untuk interpretasi adalah sebagai berikut:

  • I > 0: Autokorelasi spasial positif, data berkarakteristik sama cenderung saling berdekatan

  • I < 0: Autokorelasi spasial negatif, data berkarakteristik berbeda cenderung saling berdekatan

  • I ≈ 0: Pola acak

4.3.3 Geary’S C

Untuk uji global kedua adalah uji Geary’s C, sebuah uji global untuk melihat autokorelasi spasial, namun dengan tambahan bahwa perhitungan menggunakan weighted sum. Dibandingkan dengan Moran, Geary lebih sensitif terhadap autokorelasi bersifat lokal. Didapatkan perhitungan sebagai berikut:

\[C = \ \frac{N - 1\ \sum_{i = 1}^{N}{\sum_{j = 1}^{N}\omega_{ij}}{(x_{i} - x_{j})}^{2}}{2S_{0}\sum_{i = 1}^{N}{(x_{i} - \overline{x})}^{2}}\ \]

Dimana, N merupakan jumlah data yang ada, \(\omega_{ij}\) sebagai weight dan x merupakan datanya tersendiri. Dan untuk interpretasi adalah sebagai berikut:

  • C < 1: Autokorelasi spasial positif, data berkarakteristik sama cenderung saling berdekatan

  • C > 1: Autokorelasi spasial negatif, data berkarakteristik berbeda cenderung saling berdekatan

  • C = 1: Pola acak

4.3.4 Local Moran’S I

Untuk uji lokal yang akan digunakan merupakan varian dari Moran’s I namun diberlakukan untuk uji lokal, dimana akan diperhitungkan berdasarkan dari hubungan lokal antar tetangga. Didapatkan perhitungan sebagai berikut:

\[I_{i} = \frac{(x_{i} - \overline{x})\sum_{j = 1}^{N}\omega_{ij}(x_{j} - \overline{x})}{\frac{\sum_{i = 1}^{N}{(x_{i} - \overline{x})}^{2}}{n}}\]

Dimana, N merupakan jumlah data yang ada, \(\omega_{ij}\) sebagai weight dan x merupakan datanya tersendiri dan n sebagai unit spasial. Dan untuk interpretasi adalah sebagai berikut:

  • I > 0: Autokorelasi spasial positif, data berkarakteristik sama cenderung saling berdekatan

  • I < 0: Autokorelasi spasial negatif, data berkarakteristik berbeda cenderung saling berdekatan

  • I ≈ 0: Pola acak

4.3.5 Getis-Ord Gi

Uji lokal selanjutnya merupakan Getis-Ord. Sebuah uji lokal yang dibandingkan dengan moran dimana Getis-Ord lebih sensitif terhadap perbedaan nilai. Didapatkan hasil:

\[G = \ \frac{\sum_{i = i}^{n}{\sum_{j = i}^{n}\omega_{ij}x_{i}x_{j}}}{\sum_{i = i}^{n}{x_{i}x_{j}}}\]

Dimana, N merupakan jumlah data yang ada, \(\omega_{ij}\) sebagai weight dan x merupakan datanya tersendiri dan n sebagai unit spasial.

4.3.6 Odds Ratio (OR)

OR adalah ukuran asosiasi yang digunakan dalam studi kasus-kontrol dan cross-sectional. OR membandingkan odds (peluang) terjadinya penyakit pada kelompok terpapar dengan odds terjadinya penyakit pada kelompok tidak terpapar.

  • OR = 1 → tidak ada asosiasi antara paparan dan penyakit.

  • OR > 1 → paparan berhubungan dengan peningkatan odds penyakit (faktor risiko).

  • OR < 1 → paparan berhubungan dengan penurunan odds penyakit (faktor protektif).

4.3.7 Standardized Morbidity Rate

Perhitungan rasio seseorang terjangkit/tewas karena sebuah penyakit berdasarkan nilai ekspektasi dan observasi. Ia merupakan estimator yang tak bias namun tak bisa menangani hal seperti overdispersi ataupun pengaruh spasial (Lawson et al., 2000)

\(\phi = \frac{O_1}{R_1}\)

4.3.8 Gauss-Poisson

Salah satu model yang sering digunakan terutama dengan adanya overdispersi adalah model Poisson-Gamma dimana parameter risiko merupakan distribusi probabilitas dari distribusi Gamma.

4.3.9 Besag-York-Mollie Model

Model yang mengasumsi adanya struktur spasial. Dimana efek spasial menjadi sebuah komponen serta juga mengandalkan overdispersi. Dengan model seperti berikut (Riebler et al., 2016):

\[ \eta_i = \alpha + x_i^{\top}\beta + u_i + v_i \]

4.4 Alur Kerja Penelitian

Penelitian dimulai dengan pengumpulan data-data sekunder, yaitu populasi total kabupaten serta kota di Kalimantan Selatan dari 2020-2023 kemudian total kasus penyakit TBC yang akan diikuti oleh analisis deskriptif berdasarkan epidemiologi. Analisis akan dilakukan pada program lunak Rstudio. Pertama akan dilakukan plottingan peta menggunakan jumlah total kasus TBC kemudian melakukan analisis deskriptif. Kemudian menghitung Prevalensi Rate berdasarkan populasi pada semua kabupaten/kota pada interval 2020-2023 dimana kemudian akan dilakukan plottingan pada peta kemudian melihat trend data pada semua variabel dari 2020-2023 dan kemudian analisis spasial autokorelasi pada prevalensi rate. Kemudian akan dilakukan analisis risiko berdasarkan metode disease mapping yaitu SMR, Gamma-Poisson, dan BYM. Dimana akan ada pengujian overdispersi serta autokorelasi spasial untuk menentukan mapping yang paling optimal.

5 Hasil dan Pembahasan

5.1 Tabel Hasil

Berdasarkan perhitungan yang dilakukan didapatkan hasil tabel berikut yang mencangkup data populasi dalam interval 4 tahun serta jumlah total kasus TBC pada masing-masing kabupaten. Dilakukan perhitungan Prevalensi Rate pada masing-masing kabupaten serta kota untuk melihat tingkat keparahan atau beban TBC yang diberikan pada populasi di masing-masing kabupaten/kota dimana didapatkan tabel sebagai berikut:

library(spdep)
## Loading required package: spData
## To access larger datasets in this package, install the spDataLarge
## package with: `install.packages('spDataLarge',
## repos='https://nowosad.github.io/drat/', type='source')`
## Loading required package: sf
## Linking to GEOS 3.13.1, GDAL 3.11.4, PROJ 9.7.0; sf_use_s2() is TRUE
library(sp)
## 
## Attaching package: 'sp'
## The following object is masked from 'package:imager':
## 
##     bbox
library(sf)
library(ggplot2)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:imager':
## 
##     where
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(spData)
library(geodata)
## Loading required package: terra
## terra 1.8.86
## 
## Attaching package: 'terra'
## The following objects are masked from 'package:imager':
## 
##     depth, watershed, width
## The following objects are masked from 'package:magrittr':
## 
##     extract, inset
library(skimr)
library(psych)
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:terra':
## 
##     describe, distance, rescale
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
library(grid)
## 
## Attaching package: 'grid'
## The following object is masked from 'package:terra':
## 
##     depth
## The following object is masked from 'package:imager':
## 
##     depth
library(viridis) 
## Loading required package: viridisLite
library(spatialreg)
## Loading required package: Matrix
## 
## Attaching package: 'spatialreg'
## The following objects are masked from 'package:spdep':
## 
##     get.ClusterOption, get.coresOption, get.mcOption,
##     get.VerboseOption, get.ZeroPolicyOption, set.ClusterOption,
##     set.coresOption, set.mcOption, set.VerboseOption,
##     set.ZeroPolicyOption
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:psych':
## 
##     logit
## The following object is masked from 'package:dplyr':
## 
##     recode
library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following object is masked from 'package:terra':
## 
##     time<-
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(INLA)
## This is INLA_25.10.19 built 2025-10-19 19:10:20 UTC.
##  - See www.r-inla.org/contact-us for how to get help.
##  - List available models/likelihoods/etc with inla.list.models()
##  - Use inla.doc(<NAME>) to access documentation
library(tidyr)
## 
## Attaching package: 'tidyr'
## The following objects are masked from 'package:Matrix':
## 
##     expand, pack, unpack
## The following object is masked from 'package:terra':
## 
##     extract
## The following object is masked from 'package:imager':
## 
##     fill
## The following object is masked from 'package:magrittr':
## 
##     extract
# Load Data
setwd("C:\\Users\\HP\\Documents\\KULIAH\\SEMESTER 5\\Epidem\\Dashboard_UASEpidem")
data <- (read.csv("TBC_data.csv", sep=";", dec="."))

# Prevalence Rate
data$PR.2020 <- data$Kasus.TBC.2020 / data$Populasi.2020 * 100000
data$PR.2021 <- data$Kasus.TBC.2021 / data$Populasi.2021 * 100000
data$PR.2022 <- data$Kasus.TBC.2022 / data$Populasi.2022 * 100000
data$PR.2023 <- data$Kasus.TBC.2023 / data$Populasi.2023 * 100000

data
##              Kabupaten Kasus.TBC.2020 Kasus.TBC.2021 Kasus.TBC.2022
## 1             Balangan             62            119            275
## 2               Banjar            593            197            760
## 3         Barito Kuala            131            568            287
## 4  Hulu Sungai Selatan            168            197            380
## 5   Hulu Sungai Tengah            353            387            716
## 6    Hulu Sungai Utara            186            263            309
## 7     Kota Banjar Baru            243            265            463
## 8     Kota Banjarmasin           4025            940           1800
## 9            Kota Baru            247            321            503
## 10            Tabalong            169            234            280
## 11         Tanah Bumbu            131            237            310
## 12          Tanah Laut            185            256            467
## 13               Tapin            123            156            186
##    Kasus.TBC.2023 Populasi.2020 Populasi.2021 Populasi.2022 Populasi.2023
## 1             327        130400        132200        134500        136100
## 2            1035        565600        572100        579900        591500
## 3             345        313000        317000        321800        326300
## 4             383        228000        230000        232200        236000
## 5             648        258700        260800        263100        266200
## 6             521        226700        228800        231300        234500
## 7             709        253400        258800        265600        268100
## 8            2481        657700        662300        667500        666400
## 9             697        325600        329500        334200        339100
## 10            437        253300        256900        261400        263400
## 11            481        322600        328200        335100        337300
## 12            628        349000        354300        361000        360900
## 13            244        189500        191800        194600        196500
##      PR.2020   PR.2021   PR.2022  PR.2023
## 1   47.54601  90.01513 204.46097 240.2645
## 2  104.84441  34.43454 131.05708 174.9789
## 3   41.85304 179.17981  89.18583 105.7309
## 4   73.68421  85.65217 163.65202 162.2881
## 5  136.45149 148.38957 272.13987 243.4260
## 6   82.04676 114.94755 133.59274 222.1748
## 7   95.89582 102.39567 174.32229 264.4536
## 8  611.98115 141.92964 269.66292 372.2989
## 9   75.85995  97.42033 150.50868 205.5441
## 10  66.71931  91.08603 107.11553 165.9074
## 11  40.60756  72.21207  92.50970 142.6030
## 12  53.00860  72.25515 129.36288 174.0094
## 13  64.90765  81.33472  95.58068 124.1730

5.2 Deskriptif Data

Pertama dilakukan pemlottingan peta berdasarkan dari jumlah total kasus TBC yang terdapat pada masing-masing kabupaten/kota yang ada di Kalimantan Selatan. Dimana akan dilakukan analisis data pada 4 tahun terakhir dari 2020 sampai 2023. Berikut didapatkan peta Total Kasus TBC di Jawa Barat pada 2023.

# Load Peta
indo_adm2 <- st_read("IDN_AdminBoundaries_candidate.gdb",
                     layer = "idn_admbnda_adm2_bps_20200401")
## Reading layer `idn_admbnda_adm2_bps_20200401' from data source 
##   `C:\Users\HP\Documents\KULIAH\SEMESTER 5\Epidem\Dashboard_UASEpidem\IDN_AdminBoundaries_candidate.gdb' 
##   using driver `OpenFileGDB'
## Warning in CPL_read_ogr(dsn, layer, query, as.character(options), quiet, : GDAL
## Message 1: organizePolygons() received a polygon with more than 100 parts.  The
## processing may be really slow.  You can skip the processing by setting
## METHOD=SKIP.
## Simple feature collection with 522 features and 14 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 95.01079 ymin: -11.00762 xmax: 141.0194 ymax: 6.07693
## Geodetic CRS:  WGS 84
kalsel <- indo_adm2[indo_adm2$admin1Name_en == "Kalimantan Selatan", ]

data_long <- data %>%
  pivot_longer(
    cols = matches("^(Kasus\\.TBC|Populasi)\\.\\d{4}$"),
    names_to = c("Jenis", "Tahun"),
    names_pattern = "(Kasus\\.TBC|Populasi)\\.(\\d{4})",
    values_to = "value"
  ) %>%
  pivot_wider(
    names_from = Jenis,
    values_from = value
  ) %>%
  mutate(
    Tahun = as.integer(Tahun),
    Kasus.TBC = as.numeric(Kasus.TBC),
    Populasi  = as.numeric(Populasi),
    IR = Kasus.TBC / Populasi * 100000
  )

kalsel_ir <- merge(
  kalsel,
  data_long,
  by.x = "admin2Name_en",
  by.y = "Kabupaten"
)

tahun_list <- sort(unique(kalsel_ir$Tahun))
ir_range <- range(kalsel_ir$IR, na.rm = TRUE)

for (th in tahun_list) {

  p <- ggplot(subset(kalsel_ir, Tahun == th)) +
    geom_sf(aes(fill = IR), color = "grey40", linewidth = 0.2) +
    scale_fill_viridis_c(
      option = "C",
      name = "PR per 100.000 Penduduk",
      limits = ir_range,        # 🔑 kunci skala warna
      oob = scales::squish,     # cegah nilai ekstrem rusak legend
      na.value = "white"
    ) +
    labs(
      title = paste(
        "Prevalence Rate Tuberkulosis\nProvinsi Kalimantan Selatan", th
      )
    ) +
    theme_minimal(base_size = 14) +
    theme(
      plot.title = element_text(
        hjust = 0.5,
        face = "bold",
        lineheight = 1.1,
        margin = margin(b = 12)
      ),
      plot.margin = margin(15, 15, 15, 15)
    )

  print(p)

  
}

Bisa dilihat dari peta penyebaran Prevalence Rate TBC dari tahun ke tahun. Bisa dilihat bahwa prevalensi untuk kasus TBC di Kalimantan Selatan memusat pada pusat perkotaan seperti Kota Banjar Baru dan Banjarmasin, serta juga ada nilai tinggi untuk Hulu Sungai Tengah dan kabupaten skitarnya, dimana konsisten memiliki PR tinggi dari tahun ke tahun. Dilihat juga tren PR yang menaikd aro 2020-2024, namun hal tersebut akan dikaji lebih dalam bada tren. Untuk melihat lebih dalam akan dilakukan analisis deskriptif pada masing-masing tahun mengenai PR TBC:

desc_IR <- data.frame(
  Tahun = c(2020, 2021, 2022, 2023),
  Mean = c(mean(data$PR.2020),
           mean(data$PR.2021),
           mean(data$PR.2022),
           mean(data$PR.2023)),
  Median = c(median(data$PR.2020),
             median(data$PR.2021),
             median(data$PR.2022),
             median(data$PR.2023)),
  SD = c(sd(data$PR.2020),
         sd(data$PR.2021),
         sd(data$PR.2022),
         sd(data$PR.2023)),
  Min = c(min(data$PR.2020),
          min(data$PR.2021),
          min(data$PR.2022),
          min(data$PR.2023)),
  Max = c(max(data$PR.2020),
          max(data$PR.2021),
          max(data$PR.2022),
          max(data$PR.2023))
)

round(desc_IR, 1)
##   Tahun  Mean Median    SD   Min   Max
## 1  2020 115.0   73.7 151.8  40.6 612.0
## 2  2021 100.9   91.1  37.8  34.4 179.2
## 3  2022 154.9  133.6  61.6  89.2 272.1
## 4  2023 199.8  175.0  70.5 105.7 372.3
IR_prov <- c(
  sum(data$Kasus.TBC.2020) / sum(data$Populasi.2020) * 100000,
  sum(data$Kasus.TBC.2021) / sum(data$Populasi.2021) * 100000,
  sum(data$Kasus.TBC.2022) / sum(data$Populasi.2022) * 100000,
  sum(data$Kasus.TBC.2023) / sum(data$Populasi.2023) * 100000
)

summary(IR_prov)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   100.4   145.9   161.7   158.9   174.7   211.6
sd(IR_prov)
## [1] 45.52769

Dari deskriptif bisa dilihat karakteristik pada data PR TBC di Kalimantan Selatan, namun hal yang perlu diperhatikan merupakan peningkatan rata-rata serta median dan juga nilai minimum dan maximum dari tahun ke tahun menunjukkan sebuah tren naik, untuk hal tersebut akan didalami pada trend line.

plot_tren_satu_kab <- function(df, kab_name) {
  
  ggplot(
    df[df$Kabupaten == kab_name, ],
    aes(x = Tahun, y = IR)
  ) +
    geom_line(color = "firebrick", linewidth = 1.2) +
    geom_point(size = 2) +
    theme_minimal(base_size = 14) +
    labs(
      title = paste("Tren Prevalence Rate TBC:", kab_name),
      x = "Tahun",
      y = "IR per 100.000"
    )
}

kab_list <- unique(data_long$Kabupaten)

for (k in kab_list) {
  print(plot_tren_satu_kab(data_long, k))
}

hitung_tren_rata2 <- function(df) {
  df %>%
    dplyr::group_by(Tahun) %>%
    dplyr::summarise(
      IR_mean = mean(IR, na.rm = TRUE),
      IR_sd   = sd(IR, na.rm = TRUE),
      IR_min  = min(IR, na.rm = TRUE),
      IR_max  = max(IR, na.rm = TRUE),
      .groups = "drop"
    )
}

plot_tren_rata2 <- function(df) {
  
  ggplot(df, aes(x = Tahun, y = IR_mean)) +
    geom_line(linewidth = 1.4, color = "steelblue") +
    geom_point(size = 3, color = "steelblue") +
    theme_minimal(base_size = 14) +
    labs(
      title = "Tren Rata-rata  Prevalence Rate TBC\nSeluruh Kabupaten",
      subtitle = "Kalimantan Selatan",
      x = "Tahun",
      y = " Prevalence Rate per 100.000 penduduk"
    )
}

tren_prov <- hitung_tren_rata2(data_long)
plot_tren_rata2(tren_prov)

Bisa dilihat dari grafik time series sebuah lonjakan besar dari 2020-2023 dalam prevalensi TBC, menunjukkan bahwa TBC merupakan masalah yang semakin lama semakin akan membebani Provinsi Kalimantan Selatan serta Kabupaten/Kotanya. Dimana rata-rata PR meningkat untuk seluruh provinsi dan juga semua kabupaten/kota.

Kemudian dilakukan hal yang sama untuk jumlah total kasus pada Kalimantan Selatan 2020-2023. Dimana dilakukan visualisasi berdasarkan peta dengan hasil sebagai berikut:

kasus_long <- data %>%
  pivot_longer(
    cols = matches("^Kasus\\.TBC\\.\\d{4}$"),
    names_to = "Tahun",
    names_pattern = "Kasus\\.TBC\\.(\\d{4})",
    values_to = "Kasus"
  ) %>%
  mutate(Tahun = as.integer(Tahun))

kalsel_kasus <- merge(
  kalsel,
  kasus_long,
  by.x = "admin2Name_en",
  by.y = "Kabupaten"
)

plot_peta_kasus_tahun <- function(sf_data, tahun) {
  ggplot(sf_data[sf_data$Tahun == tahun, ]) +
    geom_sf(
      aes(fill = Kasus),
      color = "grey40",
      linewidth = 0.2
    ) +
    scale_fill_viridis_c(
      option = "B",
      name = "Jumlah Kasus TBC",
      na.value = "white"
    ) +
    theme_minimal(base_size = 14) +
    labs(
      title = paste("Distribusi Jumlah Kasus TBC Tahun", tahun),
      subtitle = "Provinsi Kalimantan Selatan"
    )
}

tahun_list <- sort(unique(kalsel_kasus$Tahun))

for (t in tahun_list) {
  print(plot_peta_kasus_tahun(kalsel_kasus, t))
}

Hasil menvalidasi adanya peningkatan besar dari 2020 ke 2023 dalam kasus TBC. Serta diidentifikasikan kota/kabupaten seperti Kota Banjarmasin dan Banjarbaru serta Kabupaten Hulu Sungai Tengah. Kemudian dilakukan analisis deskriptif:

# Deskriptif jumlah kasus TBC per tahun
desc_kasus <- data.frame(
  Tahun = c(2020, 2021, 2022, 2023),
  Mean = c(mean(data$Kasus.TBC.2020),
           mean(data$Kasus.TBC.2021),
           mean(data$Kasus.TBC.2022),
           mean(data$Kasus.TBC.2023)),
  Median = c(median(data$Kasus.TBC.2020),
             median(data$Kasus.TBC.2021),
             median(data$Kasus.TBC.2022),
             median(data$Kasus.TBC.2023)),
  SD = c(sd(data$Kasus.TBC.2020),
         sd(data$Kasus.TBC.2021),
         sd(data$Kasus.TBC.2022),
         sd(data$Kasus.TBC.2023)),
  Min = c(min(data$Kasus.TBC.2020),
          min(data$Kasus.TBC.2021),
          min(data$Kasus.TBC.2022),
          min(data$Kasus.TBC.2023)),
  Max = c(max(data$Kasus.TBC.2020),
          max(data$Kasus.TBC.2021),
          max(data$Kasus.TBC.2022),
          max(data$Kasus.TBC.2023))
)

round(desc_kasus, 1)
##   Tahun  Mean Median     SD Min  Max
## 1  2020 508.9    185 1064.9  62 4025
## 2  2021 318.5    256  218.4 119  940
## 3  2022 518.2    380  421.5 186 1800
## 4  2023 687.4    521  578.3 244 2481
kasus_total <- data.frame(
  Tahun = c(2020, 2021, 2022, 2023),
  Total_Kasus = c(
    sum(data$Kasus.TBC.2020),
    sum(data$Kasus.TBC.2021),
    sum(data$Kasus.TBC.2022),
    sum(data$Kasus.TBC.2023)
  )
)

kasus_total
##   Tahun Total_Kasus
## 1  2020        6616
## 2  2021        4140
## 3  2022        6736
## 4  2023        8936

Hal tersebut juga memvalidasi kesimpulan yang kita dapatkan, yaitu peningkatan rata-rata jumlah kasus, serta juga peningkatan besar median. Namun dilihat outlier besar pada tahun 2020 dengan kabupaten dengan 4000 kasus. Kemudian untuk trendline:

plot_tren_kasus_kab <- function(df, kab_name) {
  ggplot(
    df[df$Kabupaten == kab_name, ],
    aes(x = Tahun, y = Kasus)
  ) +
    geom_line(color = "firebrick", linewidth = 1.3) +
    geom_point(size = 2) +
    geom_smooth(
      method = "lm",
      se = FALSE,
      linetype = "dashed",
      color = "black"
    ) +
    theme_minimal(base_size = 14) +
    labs(
      title = paste("Tren Jumlah Kasus TBC:", kab_name),
      x = "Tahun",
      y = "Jumlah Kasus"
    )
}

kab_list <- unique(kasus_long$Kabupaten)

for (k in kab_list) {
  print(plot_tren_kasus_kab(kasus_long, k))
}
## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

Dilihat juga kenaikan pesat pada jumlah kasus TBC di seluruh kabupaten/kota di Kalimantan Selatan yang meningkat, terkecuali di Kota Banjarmasin yang menunjukkan penurunan jumlah kasus TBC. Namun secara menyeluruh ada indikasi peningkatan kasus TBC di Kalimantan Selatan.

5.3 Autokorelasi Spasial

Setelah dilakukan analisis deskriptif menggunakan prevalensi rate, bisa dilakukan analisis lebih dalam, terutama pada efek spasial. Dilakukan analisis untuk melihat besarnya efek dependensi spasial pada penyebaran TBC, dan bagaimana hal tersebut bisa diambil sebagai konsiderasi dalam merespon ataupun menghambat penyebarannya TBC serta pemodelan Risiko.

Analisis akan menggunakan row-based proportion dengan jarak queen didapatkan hasil sebagai berikut:

# Analisis Autokorelasi Spasial
run_spatial_autocorr <- function(
    sf_data,
    var,
    queen = TRUE,
    alpha = 0.05
) {
  
  # ---- CLEAN ----
  sf_data <- sf_data %>% filter(!is.na({{ var }}))
  x_raw <- sf_data[[deparse(substitute(var))]]
  
  # ---- WEIGHTS ----
  nb <- poly2nb(sf_data, queen = queen)
  lw <- nb2listw(nb, style = "W", zero.policy = TRUE)
  
  # ---- GLOBAL ----
  cat("\n===== GLOBAL SPATIAL AUTOCORRELATION =====\n")
  print(moran.test(x_raw, lw, zero.policy = TRUE))
  print(geary.test(x_raw, lw, zero.policy = TRUE))
  
  # ---- LOCAL MORAN (LISA) ----
  x_std <- scale(x_raw)[,1]
  lag_x <- lag.listw(lw, x_std, zero.policy = TRUE)
  
  lisa <- localmoran(x_std, lw, zero.policy = TRUE)
  
  sf_data$LISA_p <- lisa[, 5]   # <<<<<< FIX DI SINI
  sf_data$LISA   <- NA
  
  sf_data$LISA[
    x_std > 0 & lag_x > 0 & sf_data$LISA_p < alpha
  ] <- "High–High"
  
  sf_data$LISA[
    x_std < 0 & lag_x < 0 & sf_data$LISA_p < alpha
  ] <- "Low–Low"
  
  sf_data$LISA[
    x_std > 0 & lag_x < 0 & sf_data$LISA_p < alpha
  ] <- "High–Low"
  
  sf_data$LISA[
    x_std < 0 & lag_x > 0 & sf_data$LISA_p < alpha
  ] <- "Low–High"
  
  
  # ---- GETIS–ORD ----
  GiZ <- localG(x_raw, lw, zero.policy = TRUE)
  sf_data$Gi <- NA
  sf_data$Gi[GiZ >=  1.96] <- "Hotspot"
  sf_data$Gi[GiZ <= -1.96] <- "Coldspot"
  
  # ---- PLOTS ----
  p_lisa <- ggplot(sf_data) +
    geom_sf(aes(fill = LISA), color = "white", linewidth = 0.2) +
    scale_fill_manual(
      values = c(
        "High–High" = "red",
        "Low–Low"   = "blue",
        "High–Low"  = "orange",
        "Low–High"  = "lightblue"
      ),
      na.value = "grey90"
    ) +
    labs(title = "Local Moran’s I (Significant only)") +
    theme_minimal()
  
  p_gi <- ggplot(sf_data) +
    geom_sf(aes(fill = Gi), color = "white", linewidth = 0.2) +
    scale_fill_manual(
      values = c(
        "Hotspot"  = "red",
        "Coldspot" = "blue"
      ),
      na.value = "grey90"
    ) +
    labs(title = "Getis–Ord Gi* (Significant only)") +
    theme_minimal()
  
  print(p_lisa)
  print(p_gi)
  
  invisible(sf_data)
}

kalsel_2023 <- kalsel_ir %>%
  filter(Tahun == 2023) %>%
  filter(!is.na(IR))

hasil_2023 <- run_spatial_autocorr(
  sf_data = kalsel_2023,
  var = IR
)
## 
## ===== GLOBAL SPATIAL AUTOCORRELATION =====
## 
##  Moran I test under randomisation
## 
## data:  x_raw  
## weights: lw    
## 
## Moran I statistic standard deviate = -0.68094, p-value = 0.752
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##       -0.18723569       -0.08333333        0.02328294 
## 
## 
##  Geary C test under randomisation
## 
## data:  x_raw 
## weights: lw   
## 
## Geary C statistic standard deviate = 0.38718, p-value = 0.3493
## alternative hypothesis: Expectation greater than statistic
## sample estimates:
## Geary C statistic       Expectation          Variance 
##        0.92094425        1.00000000        0.04169193

Tidak terdapat adanya autokorelasi spsial yang signifikan pada Prevalensi Rate kasus TBC di Kalimantan Selatan pada tahun 2023, serta secara lokal tidak terdapat hal tersebut juga autokorelasi yang signifikan

kalsel_2022 <- kalsel_ir %>%
  filter(Tahun == 2022) %>%
  filter(!is.na(IR))

hasil_2022 <- run_spatial_autocorr(
  sf_data = kalsel_2022,
  var = IR
)
## 
## ===== GLOBAL SPATIAL AUTOCORRELATION =====
## 
##  Moran I test under randomisation
## 
## data:  x_raw  
## weights: lw    
## 
## Moran I statistic standard deviate = 0.29328, p-value = 0.3847
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##       -0.03554963       -0.08333333        0.02654524 
## 
## 
##  Geary C test under randomisation
## 
## data:  x_raw 
## weights: lw   
## 
## Geary C statistic standard deviate = 0.92666, p-value = 0.1771
## alternative hypothesis: Expectation greater than statistic
## sample estimates:
## Geary C statistic       Expectation          Variance 
##        0.82529383        1.00000000        0.03554467

Seperti sebelumnya, tidak terdapat adanya autokorelasi spsial yang signifikan pada Prevalensi Rate kasus TBC di Kalimantan Selatan pada tahun 2022, serta secara lokal tidak terdapat hal tersebut juga autokorelasi yang signifikan

kalsel_2021 <- kalsel_ir %>%
  filter(Tahun == 2021) %>%
  filter(!is.na(IR))

hasil_2021 <- run_spatial_autocorr(
  sf_data = kalsel_2021,
  var = IR
)
## 
## ===== GLOBAL SPATIAL AUTOCORRELATION =====
## 
##  Moran I test under randomisation
## 
## data:  x_raw  
## weights: lw    
## 
## Moran I statistic standard deviate = 0.92228, p-value = 0.1782
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##        0.06449366       -0.08333333        0.02569091 
## 
## 
##  Geary C test under randomisation
## 
## data:  x_raw 
## weights: lw   
## 
## Geary C statistic standard deviate = -0.042882, p-value = 0.5171
## alternative hypothesis: Expectation greater than statistic
## sample estimates:
## Geary C statistic       Expectation          Variance 
##        1.00826568        1.00000000        0.03715451

Seperti sebelumnya, tidak terdapat adanya autokorelasi spsial yang signifikan pada Prevalensi Rate kasus TBC di Kalimantan Selatan pada tahun 2021, serta secara lokal tidak terdapat hal tersebut juga autokorelasi yang signifikan

kalsel_2020 <- kalsel_ir %>%
  filter(Tahun == 2020) %>%
  filter(!is.na(IR))

hasil_2020 <- run_spatial_autocorr(
  sf_data = kalsel_2020,
  var = IR
)
## 
## ===== GLOBAL SPATIAL AUTOCORRELATION =====
## 
##  Moran I test under randomisation
## 
## data:  x_raw  
## weights: lw    
## 
## Moran I statistic standard deviate = 0.50944, p-value = 0.3052
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##      -0.050225151      -0.083333333       0.004223665 
## 
## 
##  Geary C test under randomisation
## 
## data:  x_raw 
## weights: lw   
## 
## Geary C statistic standard deviate = 1.0496, p-value = 0.1469
## alternative hypothesis: Expectation greater than statistic
## sample estimates:
## Geary C statistic       Expectation          Variance 
##        0.70759420        1.00000000        0.07760589

5.4 Disease Mapping

Salah satu aspek penting dari epidemiologi adalah untuk melihat tingkat risiko pada masing-masing kabupaten untuk memudahkan bisa memudahkan respon pemerintah terhadap area-area yang dianggap memiliki risiko tinggi. Untuk disease Mapping akan menggunakan data kasus TBC Kalimantan Selatan pada tahun 2023.

Pertama dilakukan Disease Mapping dengan menggunakan SMR (Standardized Morbidity Rate) yang didapatkan hasil sebagai berikut:

# SMR
r_kalsel_2023 <- sum(kalsel_2023$Kasus.TBC) / sum(kalsel_2023$Populasi)

kalsel_2023 <- kalsel_2023 %>%
  mutate(
    E   = Populasi * r_kalsel_2023,
    SMR = Kasus.TBC / E,
    SE_SMR  = sqrt(Kasus.TBC) / E,
    MOE_SMR = 1.96 * SE_SMR,
    LCL_SMR = SMR - MOE_SMR,
    UCL_SMR = SMR + MOE_SMR
  )

smr_table <- kalsel_2023 %>%
  st_drop_geometry() %>%
  dplyr::select(admin2Name_en, Kasus.TBC, E, SMR, SE_SMR, MOE_SMR, LCL_SMR, UCL_SMR) %>%
  arrange(desc(SMR))

print(smr_table)
##          admin2Name_en Kasus.TBC         E       SMR     SE_SMR    MOE_SMR
## 1     Kota Banjarmasin      2481 1410.3570 1.7591291 0.03531704 0.06922140
## 2     Kota Banjar Baru       709  567.4020 1.2495549 0.04692802 0.09197892
## 3   Hulu Sungai Tengah       648  563.3809 1.1501987 0.04518407 0.08856078
## 4             Balangan       327  288.0396 1.1352606 0.06278005 0.12304890
## 5    Hulu Sungai Utara       521  496.2916 1.0497861 0.04599196 0.09014425
## 6            Kota Baru       697  717.6652 0.9712050 0.03678701 0.07210255
## 7               Banjar      1035 1251.8400 0.8267830 0.02569930 0.05037063
## 8           Tanah Laut       628  763.8023 0.8222023 0.03280944 0.06430651
## 9             Tabalong       437  557.4550 0.7839197 0.03749997 0.07349993
## 10 Hulu Sungai Selatan       383  499.4662 0.7668187 0.03918261 0.07679791
## 11         Tanah Bumbu       481  713.8557 0.6738057 0.03072289 0.06021687
## 12               Tapin       244  415.8691 0.5867231 0.03756110 0.07361975
## 13        Barito Kuala       345  690.5755 0.4995833 0.02689666 0.05271746
##      LCL_SMR   UCL_SMR
## 1  1.6899077 1.8283505
## 2  1.1575760 1.3415338
## 3  1.0616379 1.2387595
## 4  1.0122117 1.2583095
## 5  0.9596418 1.1399303
## 6  0.8991025 1.0433076
## 7  0.7764123 0.8771536
## 8  0.7578958 0.8865088
## 9  0.7104198 0.8574197
## 10 0.6900208 0.8436166
## 11 0.6135888 0.7340225
## 12 0.5131034 0.6603429
## 13 0.4468659 0.5523008
ggplot(kalsel_2023) +
  geom_sf(aes(fill = SMR), color = "grey40", linewidth = 0.2) +
  scale_fill_viridis_c(option = "C", name = "SMR") +
  theme_minimal(base_size = 14) +
  labs(
    title = "SMR TBC Kalimantan Selatan 2023",
    subtitle = "Observed / Expected Cases per Kabupaten"
  )

Dilihat ada beberapa Kabupaten/Kota yang memiliki risiko tinggi berdasarkan SMR. Diidentifikasi kota Banjarmasin dan Banjarbaru memiliki risiko yang cukup tinggi, dimana Banjarmasin memiliki risiko tertinggi dibandingkan rata-rata. Namun dilihat juga bahwa hampir semua kabupaten/kota memiliki risiko TBC yang lebih tinggi dari rata-rata seperto Kotabaru serta Hulu SUngai Tengah, Hulu Sungai Utara, dan Balangan. Dari estimasi didapatkan bahwa Kalimantan Selatan secara general memiliki risiko TBC yang cukup tinggi dengan titik kritis di Banjarmasin dan Banjarbaru.

Namun, sering kali estimasi memang tidak terlalu optimal karena adanya overdispersi serta adanya dependensi spasial. Karena itu akan dilakukan uji empiris berdasarkan hal tersebut serta pemodelan Gauss-Poisson untuk menghandalkan overdispersi dan BYM untuk menghandalkan pengaruh spasial.

Didapatkan uji sebagai berikut:

kalsel_2023 <- kalsel_2023 %>%
  mutate(contrib_phi = (Kasus.TBC - E)^2 / E)

kalsel_2023 %>%
  st_drop_geometry() %>%  
  arrange(desc(contrib_phi)) %>%
  dplyr::select(admin2Name_en, Kasus.TBC, E, contrib_phi)
##          admin2Name_en Kasus.TBC         E contrib_phi
## 1     Kota Banjarmasin      2481 1410.3570  812.756207
## 2         Barito Kuala       345  690.5755  172.931721
## 3          Tanah Bumbu       481  713.8557   75.956199
## 4                Tapin       244  415.8691   71.029516
## 5               Banjar      1035 1251.8400   37.560377
## 6     Kota Banjar Baru       709  567.4020   35.336469
## 7  Hulu Sungai Selatan       383  499.4662   27.157732
## 8             Tabalong       437  557.4550   26.027957
## 9           Tanah Laut       628  763.8023   24.145334
## 10  Hulu Sungai Tengah       648  563.3809   12.709680
## 11            Balangan       327  288.0396    5.269806
## 12   Hulu Sungai Utara       521  496.2916    1.230134
## 13           Kota Baru       697  717.6652    0.595053
phi <- sum(kalsel_2023$contrib_phi, na.rm = TRUE) / (nrow(kalsel_2023) - 1)
cat("Dispersion parameter (phi) =", phi, "\n")
## Dispersion parameter (phi) = 108.5588
hasil_smr_2023 <- run_spatial_autocorr(
  sf_data = kalsel_2023,
  var = SMR
)
## 
## ===== GLOBAL SPATIAL AUTOCORRELATION =====
## 
##  Moran I test under randomisation
## 
## data:  x_raw  
## weights: lw    
## 
## Moran I statistic standard deviate = -0.68094, p-value = 0.752
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##       -0.18723569       -0.08333333        0.02328294 
## 
## 
##  Geary C test under randomisation
## 
## data:  x_raw 
## weights: lw   
## 
## Geary C statistic standard deviate = 0.38718, p-value = 0.3493
## alternative hypothesis: Expectation greater than statistic
## sample estimates:
## Geary C statistic       Expectation          Variance 
##        0.92094425        1.00000000        0.04169193

Didapatkan hasil dimana risiko dari kasus TBC di Kalimantan Selatan tidak punya autokorelasi spasial yang signfikan karena non-signifikansinya Moran’s I dan Geary’s C. Sudah juga dilakukan uji autokorelasi spasial sebelumny, yan membuktikan bahwa sepanjang waktu kasus TBC di Kalimantan Selatan memang tidak punya autokorelasi spasial signifikan. Hal ini tentuk menjadi indikasi empiris bahwa dependensi spasial pada kasus TBC di Kalimantan Selatan memang tidak begitu memengaruhi, namun secara teoritis memang hal tersebut salah. Dengan adanya transmisi aerosol (melalui udara) hal tersebut merupakan alasan penting bahwa interdependensi spasial harus dikonsiderasi.

Serta didapatkan parameter dispersi yang melebihi 1, mengindikasikan adanya overdispersi yang besar. Hal tersebut mengindikasi TBC yang sangat menyebar.

Karena indikasi overdispersi yang sangat tinggi maka bisa digunakan model Poisson-Gamma untuk menangani overdispersi tersebut, dimana didapatkan hasil seperti berikut:

# Poisson-Gamma
a <- 1
b <- 1 / mean(kalsel_2023$E)

kalsel_2023 <- kalsel_2023 %>%
  mutate(
    RR_PG = (a + Kasus.TBC) / (b + E),
    SE_PG  = sqrt((a + Kasus.TBC) / (b + E)^2),
    MOE_PG = 1.96 * SE_PG,
    LCL_PG = RR_PG - MOE_PG,
    UCL_PG = RR_PG + MOE_PG
  )

pg_table <- kalsel_2023 %>%
  st_drop_geometry() %>%
  dplyr::select(admin2Name_en, Kasus.TBC, E, RR_PG, SE_PG, MOE_PG, LCL_PG, UCL_PG) %>%
  arrange(desc(RR_PG))

print(pg_table)
##          admin2Name_en Kasus.TBC         E     RR_PG      SE_PG     MOE_PG
## 1     Kota Banjarmasin      2481 1410.3570 1.7598363 0.03532412 0.06923528
## 2     Kota Banjar Baru       709  567.4020 1.2513141 0.04696098 0.09204353
## 3   Hulu Sungai Tengah       648  563.3809 1.1519707 0.04521881 0.08862886
## 4             Balangan       327  288.0396 1.1387266 0.06287566 0.12323629
## 5    Hulu Sungai Utara       521  496.2916 1.0517979 0.04603594 0.09023045
## 6            Kota Baru       697  717.6652 0.9725964 0.03681332 0.07215410
## 7               Banjar      1035 1251.8400 0.8275808 0.02571169 0.05039490
## 8           Tanah Laut       628  763.8023 0.8235100 0.03283549 0.06435757
## 9             Tabalong       437  557.4550 0.7857115 0.03754275 0.07358379
## 10 Hulu Sungai Selatan       383  499.4662 0.7688186 0.03923361 0.07689788
## 11         Tanah Bumbu       481  713.8557 0.6752051 0.03075475 0.06027931
## 12               Tapin       244  415.8691 0.5891257 0.03763786 0.07377020
## 13        Barito Kuala       345  690.5755 0.5010304 0.02693556 0.05279370
##       LCL_PG    UCL_PG
## 1  1.6906010 1.8290716
## 2  1.1592706 1.3433577
## 3  1.0633419 1.2405996
## 4  1.0154903 1.2619629
## 5  0.9615675 1.1420284
## 6  0.9004423 1.0447506
## 7  0.7771859 0.8779757
## 8  0.7591524 0.8878675
## 9  0.7121278 0.8592953
## 10 0.6919207 0.8457165
## 11 0.6149258 0.7354845
## 12 0.5153555 0.6628959
## 13 0.4482367 0.5538240
ggplot(kalsel_2023) +
  geom_sf(aes(fill = RR_PG), color = "grey40", linewidth = 0.2) +
  scale_fill_viridis_c(option = "C", name = "RR (Poisson–Gamma)") +
  theme_minimal(base_size = 14) +
  labs(
    title = "Disease Mapping TBC – Poisson–Gamma",
    subtitle = "Empirical Bayes Shrinkage Relative Risk, Kalimantan Selatan 2023"
  )

Didapatkan mapping risiko yang cukup sama dengan hasil RMS dengan penyebaran serta tingkat risiko yang kurang-lebih sama. Namun perbandingann akan dilakukan setelah dilakukan estimasi selanjutnya yaitu dengan konsiderasi adanya interdependensi spasial.

# BYM2
kalsel_2023 <- kalsel_2023 %>%
  mutate(
    E = Populasi * sum(Kasus.TBC) / sum(Populasi),
    idx = 1:n()
  )

nb <- poly2nb(kalsel_2023, queen = TRUE)
adj <- nb2INLA("kalsel_adj.graph", nb)
g <- inla.read.graph("kalsel_adj.graph")

formula_bym2 <- Kasus.TBC ~ 1 +
  f(idx,
    model = "bym2",
    graph = g,
    scale.model = TRUE,
    hyper = list(
      prec = list(prior = "pc.prec", param = c(1, 0.01)),
      phi  = list(prior = "pc", param = c(0.5, 2/3))
    )
  )

bym2_model <- inla(
  formula_bym2,
  family = "poisson",
  data = kalsel_2023,
  E = E,
  control.predictor = list(compute = TRUE),
  control.compute = list(dic = TRUE, waic = TRUE)
)

kalsel_2023 <- kalsel_2023 %>%
  mutate(
    RR_BYM2  = bym2_model$summary.fitted.values$mean,
    SE_BYM2  = bym2_model$summary.fitted.values$sd,
    MOE_BYM2 = 1.96 * SE_BYM2,
    LCL_BYM2 = bym2_model$summary.fitted.values$`0.025quant`,
    UCL_BYM2 = bym2_model$summary.fitted.values$`0.975quant`
  )

bym2_table <- kalsel_2023 %>%
  st_drop_geometry() %>%
  dplyr::select(admin2Name_en, Kasus.TBC, E, RR_BYM2, SE_BYM2, MOE_BYM2, LCL_BYM2, UCL_BYM2) %>%
  arrange(desc(RR_BYM2))

print(bym2_table)
##          admin2Name_en Kasus.TBC         E   RR_BYM2    SE_BYM2   MOE_BYM2
## 1     Kota Banjarmasin      2481 1410.3570 1.7548632 0.03525806 0.06910580
## 2     Kota Banjar Baru       709  567.4020 1.2446369 0.04665059 0.09143515
## 3   Hulu Sungai Tengah       648  563.3809 1.1460941 0.04482048 0.08784813
## 4             Balangan       327  288.0396 1.1279681 0.06180202 0.12113195
## 5    Hulu Sungai Utara       521  496.2916 1.0449976 0.04549892 0.08917788
## 6            Kota Baru       697  717.6652 0.9699337 0.03651233 0.07156417
## 7               Banjar      1035 1251.8400 0.8274060 0.02556881 0.05011487
## 8           Tanah Laut       628  763.8023 0.8232211 0.03262962 0.06395405
## 9             Tabalong       437  557.4550 0.7863989 0.03728903 0.07308650
## 10 Hulu Sungai Selatan       383  499.4662 0.7698970 0.03879143 0.07603120
## 11         Tanah Bumbu       481  713.8557 0.6772660 0.03057689 0.05993071
## 12               Tapin       244  415.8691 0.5952374 0.03729480 0.07309780
## 13        Barito Kuala       345  690.5755 0.5082994 0.02696114 0.05284383
##     LCL_BYM2  UCL_BYM2
## 1  1.6867354 1.8250045
## 2  1.1556635 1.3385898
## 3  1.0607174 1.2364652
## 4  1.0116491 1.2539457
## 5  0.9586260 1.1370268
## 6  0.9003040 1.0434763
## 7  0.7783954 0.8786610
## 8  0.7610839 0.8890292
## 9  0.7158010 0.8620060
## 10 0.6966108 0.8487027
## 11 0.6192695 0.7391600
## 12 0.5253917 0.6715942
## 13 0.4574289 0.5631331
ggplot(kalsel_2023) +
  geom_sf(aes(fill = RR_BYM2), color = "grey40", linewidth = 0.2) +
  scale_fill_viridis_c(option = "C", name = "RR (BYM2)") +
  theme_minimal(base_size = 14) +
  labs(
    title = "Disease Mapping TBC – BYM2",
    subtitle = "Spatio-structured + Unstructured Relative Risk, Kalimantan Selatan 2023"
  )

Didapatkan mapping risiko yang cukup sama dengan hasil Poisson-Gamma serta RMS dengan penyebaran serta tingkat risiko yang kurang-lebih sama. Untuk bisa melihat ketiga model dengan lebih definit dibutuhkan perbandingan model secara empiris untuk menentukan model teroptimal. Perbandingan akan menggunakan margin of error serta WAIC untuk BYM dan Gamma-Poisson dimana didapatkan:

# Perbandingan
summary_compare <- kalsel_2023 %>%
  st_drop_geometry() %>%
  summarise(
    Mean_SE_SMR  = mean(SE_SMR),
    Mean_SE_PG   = mean(SE_PG),
    Mean_SE_BYM2 = mean(SE_BYM2),
    
    Mean_MOE_SMR  = mean(MOE_SMR),
    Mean_MOE_PG   = mean(MOE_PG),
    Mean_MOE_BYM2 = mean(MOE_BYM2),
    
    Mean_CI_SMR  = mean(UCL_SMR - LCL_SMR),
    Mean_CI_PG   = mean(UCL_PG  - LCL_PG),
    Mean_CI_BYM2 = mean(UCL_BYM2 - LCL_BYM2)
  )

print(summary_compare)
##   Mean_SE_SMR Mean_SE_PG Mean_SE_BYM2 Mean_MOE_SMR Mean_MOE_PG Mean_MOE_BYM2
## 1  0.03872001 0.03876004   0.03843493   0.07589122  0.07596968    0.07533246
##   Mean_CI_SMR Mean_CI_PG Mean_CI_BYM2
## 1   0.1517824  0.1519394    0.1507014
mu_pg <- kalsel_2023$E * kalsel_2023$RR_PG
y     <- kalsel_2023$Kasus.TBC

dev_pg <- 2 * sum(
  ifelse(
    y == 0,
    mu_pg,
    y * log(y / mu_pg) - (y - mu_pg)
  )
)

loglik_pg <- dpois(
  y,
  lambda = mu_pg,
  log = TRUE
)

waic_pg <- -2 * sum(loglik_pg)

model_comp <- data.frame(
  Model = c("Poisson–Gamma (EB)", "BYM2"),
  Deviance = c(dev_pg, bym2_model$dic$deviance),
  DIC = c(NA, bym2_model$dic$dic),
  WAIC = c(waic_pg, bym2_model$waic$waic)
)

model_comp
##                Model   Deviance      DIC     WAIC
## 1 Poisson–Gamma (EB) 0.02619485       NA 106.2989
## 2               BYM2 0.02619485 132.0816 128.3620

Dilihat dari hasil bahwa SMR dan Poisson-Gamma memiliki standard error yang relatif sama dibanding dengan BYM yang sedikir lebih tinggi. Namun hal tersebut mengindikasi besarnya ketidakpastian serta itu margin of error pada model, namun tanpa menangkapny efek spasial maupun overdispersi standar error besar tersebut juga belum tentu benar. Dan sudah dibuktikan bahwa ada overdispersi besar pada kasus TBC di Kalimantan Selatan sehingga mendefinisikan Poisson-Gamma ataupun BYM2 sebagai model optimal. Dan berdasarkan WAIC bisa dilihat bahwa Poisson-Gamma merupakan model teroptimal dibandingkan BYM2, namun harus juga dipikirkan bahwa efek spasial tenu saja masih ada secara inherit melewati transmisi TBC via udara.

Namun karena kurangnya info mengenai efek tersebut dan apakah memiliki pengaruh signifikan di Kalimantan Selatan maka tetap akan dipilih Poisson-Gamma.

5.5 Interpretasi Epidemiologis

Bisa dilihat dari prevalence rate TBC di Kalimantan Selatan sangatlah menarik. Dengan adanya heterogenitas PR antar kabupaten dimana kasus terpusat pada kota-kota seperti Banjarmasin dan Banjarbaru serta juga prevalensi besar pada Kabupaten Hulu Sungai Tengah serta disekitarnya. Analisis tren waktu juga memperlihatkan bahwa beban TBC secara agregat provinsi relatif stabil namun dari tahun ke tahun menunjukkan peningkatan besar yang menunjukkan sebuah masalah kesehatan yang akan semakin kritis seiring berjalannya waktu. Hasil uji autokorelasi spasial global dan lokal menunjukkan bahwa pola spasial TBC bersifat lemah hingga moderat, menunjukkan ketergantungan spasial rendah pada kasus TBC pada di Kalimantan Selatan.

Pemodelan menggunakan Gamma-Poisson dapat mengidentifikasi bahwa lebih dari setengah kabupaten memiliki risiko yang tinggi daripada rata-rata menunjukkan seberapa kritis situasi TBC. Dan dari kabupaten/kota tersebut Kota Banjarmasin, Kota Banjarbaru, Hulu Sungai Tengah, dan Balangan memiliki risiko yang tinggi di Kalimantan Selatan dengan Kota Banjarmasin tertinggi.

Secara epidemiologis, hasil ini menegaskan bahwa TBC di Kalimantan Selatan merupakan masalah kesehatan masyarakat yang besar.Dibutuhkan penanganan yang difokuskan pada wilayah dengan risiko relatif tinggi berdasarkan beban kasus.

6 Simulasi Desain Eksperimen

6.1 Studi Kasus-Kontrol: Faktor Sosio-Ekonomi Tuberkulosis (TBC) di Kalimantan Selatan

Studi kasus-kontrol adalah studi observasional retrospektif yang membandingkan dua kelompok yaitu kelompok kasus (penderita) dan kontrol (bukan penderita), lalu menelusuri paparan ataupun faktor risiko di masa lalu untuk menguji hipotesis hubungan paparan–penyakit.

Untuk membantu penanganan serta pencegahan penyebaran penyakit TBC, studi case–control ini digunakan untuk mengidentifikasi faktor-faktor yang berhubungan dengan kejadian tuberkulosis di Provinsi Kalimantan Selatan, khususnya faktor sosio-ekonomi yang didefinisikan sebagai status ekonomi rumah tangga dan kepadatan rumah tangga

6.2 Populasi Target dan Sampling

Populasi yang menjadi unit eksperimen merupakanPenduduk dewasa (≥15 tahun) yang berdomisili minimal 6 bulan di wilayah Provinsi Kalimantan Selatan dan tercakup dalam wilayah kerja fasilitas pelayanan kesehatan (puskesmas). Untuk kelompok kasus akan diberlakukan consecutive sampling dimana akan dipilihkan sebuah time frame tertentu misalnya (Januari 2026 - Desember 2026) dan dalam time frame tersebut akan dilakukan pencatatan setiap pasien TBC baru yang memenuhi kriteria populasi di setiap fasilitas kesehatan yang terpilih. Sampling tersebut sangatlah time-consuming namun bisa mendapatkan sample yang meminimalkan selection bias serta lebih representatif.Untuk memastikan benarnya sampling serta mengurangi bias juga diberlakukan skrining untuk memastikan bahwa individu terdiagnosa TBC oleh dokter. Untuk kelompok kontrol akan dipilih berdasarkan dari kelompok kasus contohnya adalah tetangga dari yang menderita ataupun teman/rekannya. Untuk mengurangi bias maka akan dilakukan frequency matching untuk memastikan persamaan karakteristik pada kontrol serta yang menderita TBC yaitu umur dan jenis kelamin.

6.3 Variabel Utama

Status TBC (Dependen) Pasien dewasa yang menderita dari penyakit TBC melalui diagnosis pada fasilitas kesehatan (sudah terkonfirmasi). Kontrol berupa individu dewasa yang tidak menderita serta mempunyai riwayat TBC.

Variabel Independen (Faktor Risiko Host)

  1. Status Ekonomi Rumah Tangga (Miskin/Tidak Miskin) - Apakah subyek berasal dari rumah tangga dengan pendapatan yang dibawah garis kemiskinan atau tidak
  2. Kepadatan Hunian (Ya/Tidak) - Apakah rumah tangga memiliki anggota yang melebihi dua atau tidak.

6.4 Desain Studi dan Langkah Penelitian

Studi yang digunakan adalah studi kasus-kontrol retrospektif dengan tujuan mengidentifikasi faktor sosio-ekonomi yang berhubungan dengan kejadian tuberkulosis (TBC) pada penduduk dewasa di Provinsi Kalimantan Selatan.

  1. Penentuan Kasus dan Kontrol:

    Kasus: Semua penderita TBC terkonfirmasi dalam periode tertentu di Kalimantan Selatan.

    Kontrol: Individu dari populasi sama tanpa tanpa TBC serta riwayat TBC dipilih berdasarkan frequency matching.

  2. Pengukuran Paparan: Melalui wawancara dilihat status sosio-ekonomi berdasarkan indikator. Ditanyakan pada kontrol serta yang menderita TBC.

  3. Langkah Analisis: Setelah data siap, analisis yang pertama dilakukan berupa asosiasi awal (uji Odds Ratio) antara TBC dan setiap variabel, lalu analisis dengan regresi logistik untuk mengontrol variabel confounder.

6.5 Potential Bias

  1. Selection Bias Adanya bias pada pemilihan unit observasi terutama pada yang menderita TBC karena kemungkinan yang masuk pada rumah sakit tidak mewakili semua penderita TBC hanya penderita yang memiliki akses ke fasilitas kesehatan yang bisa terepresentasi, hal yang sama juga untuk kontrol dengan yang memiliki interaksi kelompok kasus.

  2. Information Bias Dapat terjadi bias pada informasi yang didapatkan,pada variabel dependen bisa terjadi misdiagnosa pada TBC pasien atau saat identifikasi status sosio-ekonomi terutama mengenai pendapatan.

  3. Recall Bias Melaporkan paparan faktor risiko yang lebih intens terutama pada kelompok kasus karena pentingnya informasi, karena itu bisa terjadi bias pada variabel independen.

  4. Confounding Variabel Adanya variabel ketiga yang memengaruhi peluangnya seseorang terkena penyakit TBC serta pada variabel independen seperti faktor biologi (jenis kelamin, umur).

6.6 Analisis Simulasi

Sudah didapatkan data sebagai berikut:

set.seed(123)

n_case <- 200
n_control <- 200
n <- n_case + n_control

TBC <- c(rep(1, n_case), rep(0, n_control))

ekonomi_miskin <- c(
  rbinom(n_case, 1, 0.65),    
  rbinom(n_control, 1, 0.35) 
)

hunian_padat <- c(
  rbinom(n_case, 1, 0.70),  
  rbinom(n_control, 1, 0.40) 
)

data_tbc <- data.frame(
  TBC = TBC,
  Miskin = ekonomi_miskin,
  HunianPadat = hunian_padat
)

head(data_tbc)
##   TBC Miskin HunianPadat
## 1   1      1           0
## 2   1      0           1
## 3   1      1           0
## 4   1      0           1
## 5   1      0           1
## 6   1      1           1

Menghitung OR

tab_miskin <- table(data_tbc$TBC, data_tbc$Miskin)
tab_miskin
##    
##       0   1
##   0 132  68
##   1  68 132
tab_padat <- table(data_tbc$TBC, data_tbc$HunianPadat)

library(epitools)
or_miskin <- oddsratio(tab_miskin)
or_miskin
## $data
##        
##           0   1 Total
##   0     132  68   200
##   1      68 132   200
##   Total 200 200   400
## 
## $measure
##    odds ratio with 95% C.I.
##     estimate    lower    upper
##   0 1.000000       NA       NA
##   1 3.750357 2.488174 5.705041
## 
## $p.value
##    two-sided
##       midp.exact fisher.exact  chi.square
##   0           NA           NA          NA
##   1 1.330525e-10 2.116027e-10 1.55377e-10
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
or_padat <- oddsratio(tab_padat)
or_padat
## $data
##        
##           0   1 Total
##   0     120  80   200
##   1      61 139   200
##   Total 181 219   400
## 
## $measure
##    odds ratio with 95% C.I.
##     estimate    lower    upper
##   0 1.000000       NA       NA
##   1 3.403066 2.258806 5.172043
## 
## $p.value
##    two-sided
##       midp.exact fisher.exact   chi.square
##   0           NA           NA           NA
##   1 2.809566e-09  4.37867e-09 3.088848e-09
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Model Logistik

model_logistik <- glm(
  TBC ~ Miskin + HunianPadat,
  data = data_tbc,
  family = binomial(link = "logit")
)

summary(model_logistik)
## 
## Call:
## glm(formula = TBC ~ Miskin + HunianPadat, family = binomial(link = "logit"), 
##     data = data_tbc)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -1.3233     0.2039  -6.490 8.61e-11 ***
## Miskin        1.3114     0.2205   5.947 2.73e-09 ***
## HunianPadat   1.2126     0.2219   5.464 4.64e-08 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 554.52  on 399  degrees of freedom
## Residual deviance: 481.55  on 397  degrees of freedom
## AIC: 487.55
## 
## Number of Fisher Scoring iterations: 4
exp(cbind(
  OR = coef(model_logistik),
  confint(model_logistik)
))
## Waiting for profiling to be done...
##                   OR     2.5 %    97.5 %
## (Intercept) 0.266260 0.1763842 0.3929407
## Miskin      3.711381 2.4203362 5.7511948
## HunianPadat 3.362083 2.1861849 5.2235244

7 Daftar Pustaka

World Health Organization. (2023). Global tuberculosis report 2023.

Chakaya, J., Khan, M., Ntoumi, F., Aklillu, E., Razia, F., Mwaba, P., Kapata, N., Mfinanga, S., Hasnain, S., Katoto, P., Bulabula, A., Sam-Agudu, N., Nachega, J., Tiberi, S., McHugh, T., Abubakar, I., & Zumla, A. (2021). Global Tuberculosis Report 2020 – Reflections on the Global TB burden, treatment and prevention efforts. International journal of infectious diseases

Craciun, O., Del Rosario Torres, M., Llanes, A., & Romay-Barja, M. (2023). Tuberculosis Knowledge, Attitudes, and Practice in Middle- and Low-Income Countries: A Systematic Review. Journal of Tropical Medicine, 2023.

Kementerian Kesehatan. (2024). Laporan Hasil Studi Inventori TB Indonesia 2023 - 2024

Badan Pusat Statististik. (2024). Kasus Penyakit Menurut Kabupaten/Kota dan Jenis Penyakit di Provinsi Kalimantan Selatan 2024. https://kalsel.bps.go.id/id/statistics-table/3/YTA1Q1ptRmhUMEpXWTBsQmQyZzBjVzgwUzB4aVp6MDkjMw==/kasus-penyakit-menurut-kabupaten-kota-dan-jenis-penyakit-di-provinsi-kalimantan-selatan--2024.html

Lasari, H., Medyna, I., Fadillah, N., Rosadi, D., & Fakhriadi, R. (2023). Spatio-temporal analysis of tuberculosis in Sungai Tabuk District, South Kalimantan, 2020-2021. IOP Conference Series: Earth and Environmental Science, 1239.

Budiarto, E. (2012). Metodologi penelitian kedokteran: Sebuah pengantar. EGC.

Celentano, D. D., & Szklo, M. (2018). Gordis epidemiology (6th ed.). Elsevier.

Rothman, K. J. (2012). Epidemiology: An introduction (2nd ed.). Oxford University Press.

Y. C. MacNab, “Bayesian disease mapping: Past, present, and future,” Spatial Statistics, p. 100593, Jan. 2022, doi: https://doi.org/10.1016/j.spasta.2022.100593.

Lawson, A. B., Biggeri, A. B., Boehning, D., Lesaffre, E., Viel, J. F., Clark, A., Schlattmann, P., & Divino, F. (2000). Disease mapping models: an empirical evaluation. Statistics in Medicine, 19(17–18), 2217–2241. https://doi.org/10.1002/1097-0258(20000915/30)19:17/18

Riebler, A., Sørbye, S. H., Simpson, D., & Rue, H. (2016). An intuitive Bayesian spatial model for disease mapping that accounts for scaling. Statistical Methods in Medical Research, 25(4), 1145–1165. https://doi.org/10.1177/0962280216660421

8 Lampiran

Link Dashboard: https://chrisrafael.shinyapps.io/Dashboard_TBC_Kalsel/

Link Peta: https://drive.google.com/drive/folders/15nmgQnOc58jNLIaXt10To6aZyqdRigT2?usp=sharing

Data

setwd("C:\\Users\\HP\\Documents\\KULIAH\\SEMESTER 5\\Epidem\\Dashboard_UASEpidem")
data <- (read.csv("TBC_data.csv", sep=";", dec="."))
data
##              Kabupaten Kasus.TBC.2020 Kasus.TBC.2021 Kasus.TBC.2022
## 1             Balangan             62            119            275
## 2               Banjar            593            197            760
## 3         Barito Kuala            131            568            287
## 4  Hulu Sungai Selatan            168            197            380
## 5   Hulu Sungai Tengah            353            387            716
## 6    Hulu Sungai Utara            186            263            309
## 7     Kota Banjar Baru            243            265            463
## 8     Kota Banjarmasin           4025            940           1800
## 9            Kota Baru            247            321            503
## 10            Tabalong            169            234            280
## 11         Tanah Bumbu            131            237            310
## 12          Tanah Laut            185            256            467
## 13               Tapin            123            156            186
##    Kasus.TBC.2023 Populasi.2020 Populasi.2021 Populasi.2022 Populasi.2023
## 1             327        130400        132200        134500        136100
## 2            1035        565600        572100        579900        591500
## 3             345        313000        317000        321800        326300
## 4             383        228000        230000        232200        236000
## 5             648        258700        260800        263100        266200
## 6             521        226700        228800        231300        234500
## 7             709        253400        258800        265600        268100
## 8            2481        657700        662300        667500        666400
## 9             697        325600        329500        334200        339100
## 10            437        253300        256900        261400        263400
## 11            481        322600        328200        335100        337300
## 12            628        349000        354300        361000        360900
## 13            244        189500        191800        194600        196500