\[ Abstrak \] Provinsi Jawa Barat merupakan wilayah dengan jumlah kasus Tuberkulosis (TBC) tertinggi di Indonesia, mencapai 224.798 kasus pada tahun 2024. Penyebaran TBC sangat dipengaruhi oleh kondisi spasial, di mana kasus di satu wilayah dapat berdampak pada wilayah sekitarnya. Penelitian ini bertujuan untuk (1) mendeskripsikan pola spasial kasus TBC, (2) menguji adanya autokorelasi spasial global dan lokal, (3) menganalisis pengaruh faktor lingkungan dan kesehatan, serta (4) menentukan model ekonometrik spasial terbaik di 27 kabupaten/kota di Jawa Barat. Data sekunder tahun 2024 digunakan dengan variabel dependen jumlah kasus TBC dan variabel independen meliputi jumlah puskesmas, persentase air minum layak, persentase sanitasi layak, dan indeks kualitas udara. Metode analisis menggunakan uji Moran’s I, Local Indicators of Spatial Association (LISA), serta perbandingan model Spatial Autoregressive (SAR) dan Spatial Error Model (SEM) dengan pembobot queen contiguity. Hasil uji Moran’s I menunjukkan adanya autokorelasi spasial positif yang signifikan (I = 0.35; p < 0.05). Analisis LISA mengidentifikasi adanya klaster High-High (HH) di wilayah Bekasi, Depok, dan Bogor, serta klaster Low-Low (LL) di Garut dan Tasikmalaya. Berdasarkan uji Lagrange Multiplier (LM) dan Akaike Information Criterion (AIC), model SAR (AIC = 475.64) terpilih sebagai model terbaik. Hasil estimasi SAR menunjukkan bahwa kasus TBC di suatu wilayah dipengaruhi secara signifikan oleh kasus TBC di wilayah tetangganya. Variabel independen yang berpengaruh signifikan adalah jumlah puskesmas (berpengaruh positif) dan persentase sanitasi layak (berpengaruh negatif).

Kata Kunci: Tuberkulosis (TBC), Ekonometrik Spasial, Moran’s I, LISA, Spatial Autoregressive (SAR), Jawa Barat

BAB 1

PENDAHULUAN

1.1 Latar belakang

Tuberkulosis (TBC) merupakan penyakit menular yang disebabkan oleh Mycobacterium tuberculosis dan hingga kini masih menjadi tantangan utama kesehatan global [1]. Menurut laporan WHO tahun 2023, jumlah kasus TBC secara global mencapai 10,8 juta jiwa, dan Indonesia menempati posisi kedua tertinggi dengan sekitar 10% dari total kasus dunia [2].

Provinsi Jawa Barat menjadi wilayah dengan jumlah kasus TBC tertinggi di Indonesia, yaitu mencapai 224.798 kasus pada tahun 2024 menurut data Badan Pusat Statistik [1]. Kondisi ini menunjukkan bahwa penularan TBC belum terkendali dan dapat menghambat pencapaian Tujuan Pembangunan Berkelanjutan (SDGs) poin ke-3, yaitu kehidupan sehat dan kesejahteraan bagi semua [2].

TBC merupakan penyakit yang sangat dipengaruhi oleh kondisi spasial dan lingkungan, karena penyebarannya tidak terjadi secara acak tetapi membentuk pola antarwilayah. Kasus tinggi di suatu daerah dapat berdampak pada peningkatan kasus di daerah sekitar akibat mobilitas penduduk dan kesamaan kondisi lingkungan [4]. Penelitian sebelumnya menunjukkan adanya autokorelasi spasial positif pada kasus TBC di Jawa Tengah, di mana peningkatan kasus di satu kabupaten/kota meningkatkan risiko di wilayah tetangganya [5]. Hal ini menjadi dasar penggunaan model Spatial Autoregressive (SAR), yang mengasumsikan bahwa nilai variabel dependen (y) di suatu wilayah dipengaruhi oleh y di wilayah sekitarnya (endogenitas spasial) [4][5].

Selain aspek spasial, faktor lingkungan dan pelayanan kesehatan juga memiliki peran penting dalam penyebaran TBC. Oleh karena itu, penelitian ini menggunakan empat variabel independen utama:

  1. Jumlah Puskesmas, yang mencerminkan akses masyarakat terhadap pelayanan kesehatan dasar. Semakin banyak fasilitas kesehatan, semakin cepat proses deteksi dan pengobatan TBC dilakukan, sehingga menekan penyebaran penyakit [1], [6].

  2. Persentase Rumah Tangga dengan Sumber Air Minum Layak, karena kualitas air yang buruk meningkatkan risiko infeksi sekunder dan menurunkan imunitas tubuh terhadap TBC [1].

  3. Persentase Rumah Tangga dengan Sanitasi Layak, sebab sanitasi yang tidak memadai dapat memicu penyakit infeksi saluran pernapasan dan memperbesar risiko TBC [1]. Di sisi lain, air minum aman dan sanitasi layak berhubungan langsung dengan kualitas hidup dan kesehatan penduduk [2].

  4. Indeks Kualitas Udara, karena polusi udara terutama partikulat halus (PM2.5) dapat merusak sistem pernapasan dan meningkatkan kerentanan terhadap infeksi Mycobacterium tuberculosis [1], [7].

Dengan demikian, analisis spasial ekonometrik menjadi penting untuk memahami pola penyebaran TBC di Jawa Barat secara menyeluruh. Model SAR digunakan untuk menangkap efek dependensi spasial antarwilayah, sedangkan Spatial Error Model (SEM) digunakan untuk mengatasi korelasi pada komponen error antarwilayah [8]. Model terbaik akan dipilih berdasarkan kriteria informasi seperti Akaike Information Criterion (AIC).

Melalui pendekatan ini, penelitian diharapkan dapat memberikan gambaran mengenai pola penyebaran TBC di Jawa Barat serta menjadi dasar kebijakan kesehatan publik yang efektif dan berbasis lokasi.

1.2 Identifikasi masalah

  • Kasus TBC di Jawa Barat berjumlah 224.798 dan diduga membentuk pola spasial, bukan acak. Diperlukan uji autokorelasi spasial global (Moran’s I dan Geary’s C) dan lokal (LISA) untuk membuktikan hal tersebut. Perlu dianalisis pengaruh jumlah puskesmas, air minum layak, sanitasi layak, dan indeks kualitas udara terhadap jumlah kasus TBC dengan mempertimbangkan dependensi spasial.

  • Diperlukan model spasial ekonometrik terbaik (SAR atau SEM) yang dapat menjelaskan variasi jumlah kasus TBC antarwilayah di Jawa Barat.

1.3 Tujuan

  • Mendeskripsikan pola dan distribusi spasial kasus TBC di kabupaten/kota Jawa Barat tahun 2024.

  • Menguji adanya autokorelasi spasial global dan lokal pada kasus TBC.

  • Menganalisis pengaruh faktor lingkungan dan kesehatan terhadap kasus TBC dengan mempertimbangkan efek spasial.

  • Menentukan model spasial terbaik (SAR atau SEM) untuk menjelaskan variasi kasus TBC di Jawa Barat.

1.4 Batasan penelitian

  • Penelitian difokuskan pada kasus TBC paru di tingkat kabupaten/kota di Jawa Barat tahun 2024.

  • Variabel independen terbatas pada empat faktor: jumlah puskesmas, persentase air minum layak, persentase sanitasi layak, dan indeks kualitas udara.

  • Analisis spasial dilakukan pada level agregat wilayah (kabupaten/kota).

  • Model yang digunakan adalah SAR dan SEM dengan matriks bobot spasial queen contiguity.

BAB 2

TINJAUAN PUSTAKA

2.1 Spatial dependence

Dependensi spasial merupakan kondisi di mana nilai suatu variabel pada suatu wilayah dipengaruhi oleh nilai variabel yang sama di wilayah sekitarnya, sehingga observasi antarwilayah tidak bersifat independen [4]. dependensi ini muncul akibat kedekatan geografis, interaksi sosial, atau kesamaan karakteristik lingkungan yang menyebabkan fenomena di satu lokasi dapat menyebar ke lokasi lain di sekitarnya [5]. Dalam konteks epidemiologi, seperti pada penyebaran tuberkulosis (TBC), wilayah dengan jumlah kasus tinggi sering kali diikuti oleh wilayah tetangga dengan kasus tinggi juga karena mobilitas penduduk dan kondisi lingkungan yang mirip[1][5].

2.2 Autokorelasi spasial

Autokorelasi spasial menggambarkan tingkat hubungan antara nilai suatu variabel di satu lokasi dengan lokasi lain yang berdekatan secara geografis [4]. Autokorelasi spasial positif terjadi ketika wilayah yang berdekatan memiliki nilai yang mirip (sama-sama tinggi atau rendah), sedangkan autokorelasi negatif terjadi ketika wilayah berdekatan memiliki nilai yang berlawanan [5]. Secara umum, autokorelasi spasial dapat diukur menggunakan pendekatan global dan lokal. Ukuran global yang paling umum adalah Moran’s I dan Geary’s C, di mana Moran’s I berfungsi mirip dengan koefisien korelasi Pearson namun mempertimbangkan aspek spasial, sedangkan Geary’s C lebih sensitif terhadap variasi lokal antarwilayah. Untuk analisis lokal, digunakan Local Moran’s I (LISA) yang dapat mengidentifikasi klaster seperti high-high, low-low, high-low, dan low-high, serta Getis-Ord G yang mendeteksi hot spots (wilayah bernilai tinggi dikelilingi wilayah bernilai tinggi) dan cold spots (wilayah bernilai rendah dikelilingi wilayah bernilai rendah) [4], [5].

2.3 Model spatial econometrics

Model spasial ekonometrik digunakan untuk mengatasi pelanggaran asumsi independensi akibat adanya dependensi antarwilayah [4]. Dua bentuk utamanya adalah Spatial Autoregressive Model (SAR), yang memasukkan pengaruh nilai variabel dependen dari wilayah tetangga (spatial lag), dan Spatial Error Model (SEM), yang menggunakan dependensi spasial pada komponen error [5], [6]. SAR menekankan adanya hubungan spasial antar wilayah, sedangkan SEM menangkap korelasi spasial yang tidak teramati, dan keduanya umumnya diestimasi menggunakan metode Maximum Likelihood [8].

BAB 3

METODOLOGI

3.1 Sumber Data

Data yang digunakan merupakan data sekunder yang bersumber dari Badan Pusat Statistika (BPS) Provinsi Jawa Barat, Open Data Jabar, dan Laporan Kinerja Direktorat Pengendalian Pencemaran Udara tahun 2024 [9][10][11][12]. Dalam penelitian ini mencakup data dari 27 kabupaten/kota yang ada di Provinsi Jawa Barat. Variabel-variabel yang digunakan dapat dilihat sebagai berikut :

Variabel Keterangan
Y Jumlah Kasus TBC
X1 Jumlah Puskesmas
X2 Persentase Rumah Tangga yang Memiliki Sumber Air Minum Layak
X3 Persentase Rumah Tangga yang Memiliki Sanitasi Layak
X4 Indeks Kualitas Udara

3.2 Unit Spasial

Unit spasial dalam penelitian ini adalah kabupaten/kota di Provinsi Jawa Barat. Setiap kabupaten/kota dianggap sebagai satuan wilayah yang merepresentasikan satu observasi dalam analisis spasial. Unit spasial ini dipilih karena data kasus TBC, jumlah fasilitas kesehatan, dan indikator lingkungan tersedia pada level daerah tersebut.

3.3 Metode Analisis

Penelitian ini menggunakan pendekatan analisis spasial ekonometrik untuk mengidentifikasi pola penyebaran dan hubungan antarwilayah kasus TBC di Provinsi Jawa Barat tahun 2024. Tahapan analisis dilakukan sebagai berikut:

  1. Eksplorasi Data Spasial: Mengidentifikasi karakteristik statistik dan pola awal persebaran kasus TBC melalui analisis deskriptif dan peta.

  2. Uji Autokorelasi Spasial: Mengukur adanya ketergantungan spasial menggunakan statistik Moran’s I dan analisis LISA untuk mendeteksi klaster wilayah.

  3. Pemodelan Spasial Ekonometrik: Membandingkan model OLS, SAR, dan SEM untuk mengetahui bentuk ketergantungan spasial yang dominan.

  4. Pemilihan Model Terbaik: Memilih model dengan uji LM dan (AIC).

  5. Visualisasi dan Interpretasi Hasil: Menyajikan hasil estimasi dan pola klaster spasial untuk memberikan interpretasi substantif terhadap faktor-faktor yang memengaruhi kasus TBC.

3.4 Alur Kerja

  1. Pengumpulan Data: Memperoleh data sekunder dari Badan Pusat Statistik (BPS) Jawa Barat, Open Data Jabar, dan Laporan Direktorat Pengendalian Pencemaran Lingkungan terkait jumlah kasus TBC, jumlah puskesmas, air minum layak, sanitasi layak, dan indeks kualitas udara.

  2. Analisis Deskriptif dan Visualisasi Awal: Membuat peta tematik untuk menggambarkan distribusi kasus TBC antar kabupaten/kota.

  3. Uji Autokorelasi Spasial: Menguji adanya pola ketergantungan spasial global (Moran’s I) dan lokal (LISA).

  4. Pemodelan Spasial Ekonometrik: Membangun dan membandingkan model SAR dan SEM berdasarkan hasil uji LM serta nilai AIC.

  5. Pemilihan Model Terbaik: Menentukan model yang paling sesuai untuk menjelaskan variasi spasial kasus TBC

  6. Visualisasi dan Interpretasi: Menampilkan peta hasil estimasi.

BAB 4

HASIL DAN PEMBAHASAN

4.1 Peta deskriptif

Berdasarkan gambar, kabupaten/kota yang memiliki kasus TBC tinggi (merah gelap) cenderung berdekatan dengan daerah dengan kasus yang tinggi juga. Daerah dengan kasus yang rendah (merah terang) cenderung berdekatan dengan daerah yang kasusnya rendah juga. Hal ini menunjukkan terdapat kemungkinan dependensi spasial antar daerah.

4.2 Hasil uji autokorelasi

Uji Statistik p-value
Moran’s I 0.002 (I = 0.35)

Berdasarkan hasil Moran’s I yang menggunakan matriks bobot spasial dengan queen continquity, nilai p-value <0.05 (Tolak H0) dan nilai I = 0.35 yang berarti terdapat autokorelasi spasial positif yang signifikan. Daerah dengan kasus tinggi dikelilingi oleh daerah dengan kassu tinggi juga, dan sebaliknya untuk daerah dengan kasus rendah dikelilingi oleh daerah dengan kasus rendah juga.

Untuk local Moran’s I (LISA), menghasilkan nilai berbeda pada setiap daerah. Terdapat beberapa daerah yang signifikan dan terbagi menjadi 2 bagian. Pertama daerah high-high cluster seperti Bekasi, Depok, dan Bogor. Kedua, daerah low-low cluster seperti Garut dan Tasikmalaya. Hasil visualisasi dapat dilihat pada gambar berikut.

4.3 Estimasi model

Berdasarkan hasil estimasi OLS, hanya variabel X1 (jumlah puskesmas) dan X3 (sanitasi layak) yang signifikan. Koefisien X1 sendiri bernilai positif yang berarti semakin banyak jumlah puskesmas, maka semakin tinggi kasus TBC dengan asumsi variabel lain konstan. Hal tersebut tentu tidak sesuai dengan landasan teori yang seharusnya berpengaruh terbalik. Penyebab kesalahan tersebut bisa jadi dikarenakan terdapat variabel prediktor lain yang tidak dimasukkan ke dalam model tetapi berhubungan dengan variabel X1 dan berpengaruh terhadap Y seperti kepadatan penduduk.

Sedangkan koefisien X3 bernilai negatif, maka semakin tinggi persentase masyarakat yang memiliki akses terhadap sanitasi layak, maka semakin rendah kasus TBC dengan asumsi variabel lain konstan. Hal tersebut sesuai dengan landasan teori yang telah ditemukan.

Berdasarkan hasil estimasi SAR, variabel yang signifikan hanya X1 (jumlah puskesmas) dan X3 (sanitasi layak) sama seperti OLS. Selain itu, tanda koefisiennya juga sama seperti OLS dan hanya berbeda di nilai koefisien sehingga interpretasi modelnya sama seperti OLS dan perbedaan tanda koefisien pada X1 dengan landasan teori bisa disebabkan oleh variabel prediktor lain yang tidak dimasukkan ke dalam model juga.

Variabel Direct Indirect Total
Jumlah Puskesmas (X1) 254.18423 99.68413 353.86836
Persentase Rumah Tangga yang Memiliki Sumber Air Minum Layak (X2) 171.72826 67.34715 239.07541
Persentase Rumah Tangga yang Memiliki Sanitasi Layak (X3) -69.84007 -27.38938 -97.22945
Indeks Kualitas Udara (X4) -94.76753 -37.16525 -131.93278

Untuk model SAR, dampak dari kovariat atau variabel X dapat dikategorikan menjadi tiga jenis yaitu direct, indirect, dan total impact. Direct impact merupakan impact yang terjadi secara lokal pada suatu daerah sebagai hasil dari perubahan variabel prediktornya. Sedangkan indirect impact adalah efek spillover yaitu dampak yang disebabkan oleh variabel prediktor dari daerah tetangganya. Terakhir, total impact merupakan gabungan dari direct dan indirect impact.

Berdasarkan hasil estimasi SEM, variabel yang signifikan hanya X1 (jumlah puskesmas) dan X3 (sanitasi layak) sama seperti OLS dan SAR. Selain itu, tanda koefisiennya juga sama seperti OLS dan SAR serta hanya berbeda di nilai koefisien sehingga interpretasi modelnya sama seperti OLS dan SAR serta perbedaan tanda koefisien pada X1 dengan landasan teori bisa disebabkan oleh variabel prediktor lain yang tidak dimasukkan ke dalam model juga.

4.4 Perbandingan model

Model LM-Test Value p-value AIC
SAR LMlag 18.325 0.00001 475.64
SEM LMerror 9.3529 0.002 478.58
SAR (Robust) LMlag 10.679 0.001 475.64
SEM (Robust) LMerror 1.7062 0.19 478.58

Berdasarkan tabel uji LM (Lagrange Multiplier), p-value SAR dan SEM sama-sama signifikan (p-value < 0.05) untuk uji LM biasa sehingga dilanjutkan pada pengujian robust dan diperoleh SAR signifikan (p-value < 0.05) sedangkan SEM tidak signifikan (p-value > 0.05). Selain itu berdasarkan AIC, AIC SAR lebih kecil daripada SEM sehingga model SAR lebih cocok terhadap data dan lebih sederhana sesuai prinsip parsimoni. Dengan demikian, model SAR yang dipilih sebagai model terbaik.

4.5 Interpretasi hasil

Model SAR yang terbentuk dari penelitian ini adalah sebagai berikut.

\[ y = rho Wy + X beta + epsilon, epsilon sim N(0, sigma^{2}I)\]

Dengan:

  • Y = Angka kasus TBC pada kabupaten/kota Jawa Barat

  • \(\rho\) = dependensi spasial pada jumlah kasus TBC antar kabupaten/kota

  • W = matriks bobot spasial

  • X = [1, X1, X2, X3, dan X4] dengan X1 = jumlah puskesmas, X2 = persentase rumah tangga yang memiliki sumber air minum layak, X3 = persentase rumah tangga yang memiliki sanitasi layak, dan X4 = indeks kualitas udara.

  • \(\beta\) = koefisien pada setiap variabel X

BAB 5

KESIMPULAN DAN SARAN

Kasus Tuberkulosis (TBC) di provinsi Jawa Barat menunjukkan dependensi spasial positif. Hal tersebut mendukung hipotesis bahwa kasus tuberkulosis memiliki dependensi spasial dan diperlukan pemodelan spasial ekonometrik. Model spasial ekonometrik terbaik yang dipilih adalah SAR (Spatial Autoregressive) berdasarkan uji LM dan AIC. Hasil estimasi model SAR menunjukkan bahwa kasus TBC dipengaruhi oleh kasus TBC di area tetangganya. Sedangkan variabel prediktor yang berpengaruh signifikan adalah jumlah puskesmas (X1) dengan koefisien bernilai positif dan persentase masyarakat yang memiliki akses terhadap sanitasi layak (X3) dengan koefisien bernilai negatif. Saran untuk penelitian selanjutnya adalah memasukkan variabel prediktor lain yang signifikan seperti kepadatan penduduk sehingga tidak memengaruhi pengaruh dari variabel prediktor yang sudah ada seperti X1 dan menggunakan metode yang melibatkan aspek waktu juga, tidak hanya ruang apabila didasari dengan landasan teori yang kuat.

Daftar Pustaka

[1] H. Zeanova et al., “Analisis Faktor Penyebab Penyakit TBC di Jawa Barat Menggunakan Regresi Binomial Negatif,” ResearchGate, 2024. [Online]. Available:

https://www.researchgate.net/publication/387640440_ANALISIS_FAKTOR_PENYEBAB_PENYAKIT_TBC_DI_JAWA_BARAT_MENGGUNAKAN_REGRESI_BINOMIAL_NEGATIF

[2] Kementerian Kesehatan Republik Indonesia, Profil Kesehatan Indonesia 2024, Jakarta: Kemenkes RI, 2024.

[3] M. Sobari, I. G. N. M. Jaya, and B. N. Ruchjana, “Spatial Analysis of Dengue Disease in Jakarta Province,” CAUCHY – Jurnal Matematika Murni dan Aplikasi, vol.7, no. 4, pp. 535–547, 2023.

[4] L. Anselin, “Spatial Econometrics,” in A Companion to Theoretical Econometrics, B. H. Baltagi, Ed., Oxford: Blackwell Publishing, 2001, pp. 310–330.

[5] H. I. Zebua and I. G. N. M. Jaya, “Spatial Autoregressive Model of Tuberculosis Cases in Central Java Province 2019,” CAUCHY – Jurnal Matematika Murni dan Aplikasi, vol. 7, no. 2, pp. 240–248, 2022.

[6] H. Yasin, A. R. Hakim, and B. Warsito, Regresi Spasial (Aplikasi dengan R), Pekalongan: WADE Group, 2020.

[7] W. Wang et al., “Reclaiming independence in spatial-clustering datasets: A series of data-driven spatial weights matrices,” Statistics in Medicine, vol. 41, no. 15, pp. 2939–2956, 2022.

[8] A. A. Grasa, Econometric Model Selection: A New Approach, Dordrecht: Springer, 2018.

[9] Badan Pusat Statistik Provinsi Jawa Barat, Persentase Rumah Tangga yang Memiliki Akses Terhadap Sumber Air Minum Layak (Persen), 2024,” Statistik Table, diakses 2025. [Online]. Tersedia:

https://jabar.bps.go.id/id/statistics-table/2/NzI5IzI=/persentase-rumah-tangga-yang-memiliki-akses-terhadap-sumber-air-minum-layak-.html

[10] Pemerintah Provinsi Jawa Barat, “Persentase Keluarga dengan Akses Sanitasi Layak (Jamban Sehat) Berdasarkan Kabupaten/Kota di Jawa Barat,” Open Data Jabar, diakses 2025. [Online]. Tersedia:

https://opendata.jabarprov.go.id/id/dataset/persentase-keluarga-dengan-akses-sanitasi-layak-jamban-sehat-berdasarkan-kabupatenkota-di-jawa-barat

[11] Pemerintah Provinsi Jawa Barat, “Jumlah Puskesmas Berdasarkan Kabupaten/Kota di Jawa Barat,” Open Data Jabar, diakses 2025. [Online]. Tersedia:

https://opendata.jabarprov.go.id/en/dataset/jumlah-puskesmas-berdasarkan-kabupatenkota-di-jawa-barat

[12] Kementerian Lingkungan Hidup dan Kehutanan Republik Indonesia, Laporan Kinerja Direktorat Pengendalian Pencemaran Udara Tahun 2024, Jakarta: Direktorat Pengendalian Pencemaran Udara, Direktorat Jenderal Pengendalian Pencemaran dan Kerusakan Lingkungan, 2024.

Lampiran

Syntax Python

import streamlit as st

import pandas as pd

st.set_page_config(

page_title= “Welcome”,

page_icon= ” “,

layout= ‘wide’

)

st.write( “# Dashboard Kasus TBC di Jawa Barat Tahun 2024”)

st.sidebar.success( “Silahkan pilih section.”)

st.markdown( “Dashboard ini dibuat dengan tujuan memberikan wawasan terkait TBC dan faktor-faktor pengaruhnya.”)

st.markdown( ‘Dengan faktor-faktor sebagai berikut:’)

st.markdown( ‘Y = Jumlah Kasus n X1 = Jumlah Puskesmas n X2 = Persentase Rumah Tangga yang Memiliki Sumber Air Minum Layak n’

‘X3 = Persentase Rumah Tangga yang Memiliki Sanitasi Layak n X4 = Indeks Kualitas Udara’)

@st.cache_data

def get_data():

return pd.read_csv( ‘data/data_jumlah_tbc.csv’, index_col=0, sep= ‘;’)

df = get_data()

df = df.sort_index()

cols = [ “Y”, “X1”, “X2”, “X3”, “X4” ]

for col in cols:

df [col ] = (

df [col ].astype(str)

.str.replace( “,”, “.”) # fix comma decimals

.str.replace( “%”, ” “) # remove percent signs

)

df [col ] = pd.to_numeric(df [col ], errors= “coerce”)

with st.container(border=True):

st.subheader( ‘Bar Chart’)

st.bar_chart(df [ ‘Y’ ])

st.subheader( ‘DataFrame’)

st.dataframe(df)

st.subheader( ‘Statistik Deskriptif’)

st.write(df.describe())

import geopandas as gpd

import numpy as np

from libpysal.weights import Queen

from spreg import ML_Lag, ML_Error

import streamlit as st

import pandas as pd

import statsmodels.formula.api as smf

from spreg import OLS

@st.cache_data

def load_data():

gdf = gpd.read_file( “data/gadm41_IDN_2.json”)

gdf = gdf [gdf [ ‘NAME_1’ ] == ‘JawaBarat’ ]

df = pd.read_csv( ‘data/data_jumlah_tbc.csv’, sep= ‘;’, index_col=0)

df.index = df.index.str.replace( ’ ‘,’ ’, regex=False)

merged = gdf.merge(df, left_on= ‘NAME_2’, right_index=True)

return merged

data_spatial = load_data()

cols = [ “Y”, “X1”, “X2”, “X3”, “X4” ]

for col in cols:

data_spatial [col ] = (

data_spatial [col ].astype(str)

.str.replace( “,”, “.”)

.str.replace( “%”, ” “)

)

data_spatial [col ] = pd.to_numeric(data_spatial [col ], errors= “coerce”)

y = data_spatial [ “Y” ].values.reshape((-1, 1))

X = data_spatial [ [ “X1”, “X2”, “X3”, “X4” ] ].values

w = Queen.from_dataframe(data_spatial)

w.transform = “r”

# SAR Model

sar_model = ML_Lag(y, X, w=w, method= “full”)

# OLS Model

formula = ‘Y ~ X1 + X2 + X3 + X4’

ols_model = smf.ols(formula, data=data_spatial).fit()

# SEM Model

sem_model = ML_Error(y, X, w=w, name_y= ‘Y’, name_x= [ ‘X1’, ‘X2’, ‘X3’, ‘X4’ ])

# with st.container(border=True):

st.subheader( ‘Model dengan AIC terbaik adalah SAR’)

c1, c2 = st.columns( [1, 1 ])

c3, c4 = st.columns( [1, 1 ])

with c1:

with st.container(border=True):

st.header( “Spatial Auto Regression (SAR)”)

st.markdown( “##### Model Fit and Diagnostics”)

col1, col2, col3 = st.columns(3)

# col1.metric( “Pseudo R-squared”, f “{sar_model.pr2:.4f}”)

col1.metric( “AIC”, f “{sar_model.aic:.2f}”)

col2.metric( “Log-Likelihood”, f “{sar_model.logll:.2f}”)

col3.metric( “Observations”, sar_model.n)

st.markdown( “##### Model Coefficients ( B)”)

coeffs = {

‘Variable’: sar_model.name_x [:-1 ],

‘Coefficient’: sar_model.betas.flatten() [:-1 ], # Exclude rho from betas

‘Std. Error’: sar_model.std_err.flatten() [:-1 ],

‘Z_Statistic’ : [z [1 ] for z in sar_model.z_stat [:-1 ] ],

‘Probability’: np.array( [p for z, p in sar_model.z_stat ] [:-1 ]),

}

coeffs_df = pd.DataFrame(coeffs).round(4)

st.dataframe(coeffs_df, use_container_width=True, hide_index=True)

with c3:

with st.container(border=True):

st.header( ‘Ordinary Least Square (OLS)’)

st.markdown( “##### Model Fit and Diagnostics”)

col1, col2, col3 = st.columns(3)

col1.metric( “AIC”, f “{ols_model.aic:.2f}”)

col2.metric( “Log-Likelihood”, f “{ols_model.llf:.2f}”)

col3.metric( “Observations”, ols_model.nobs)

st.markdown( “##### Model Coefficients ( B)”)

coeffs = {

‘Variabel’: ols_model.params.index.tolist(),

‘Coefficient’: ols_model.params.values,

‘Std. Error’: ols_model.bse.values,

‘Z_Statistic’: ols_model.tvalues.values,

‘Probability’: ols_model.pvalues.values

}

coeffs_df = pd.DataFrame(coeffs).round(4)

st.dataframe(coeffs_df, use_container_width=True, hide_index=True)

with c2:

with st.container(border=True):

st.header( “Spatial Error Model (SEM)”)

st.markdown( “##### Model Fit and Diagnostics”)

col1, col2, col3 = st.columns(3)

col1.metric( “AIC”, f “{sem_model.aic:.2f}”)

col2.metric( “Log-Likelihood”, f “{sem_model.logll:.2f}”)

col3.metric( “Observations”, sem_model.n)

st.markdown( “##### Model Coefficients ( B)”)

coeffs = {

‘Variable’: sar_model.name_x [:-1 ],

‘Coefficient’: sem_model.betas.flatten() [:-1 ], # Exclude rho from betas

‘Std. Error’: sem_model.std_err.flatten() [:-1 ],

‘Z_Statistic’ : [z [1 ] for z in sem_model.z_stat [:-1 ] ],

‘Probability’: np.array( [p for z, p in sem_model.z_stat ] [:-1 ]),

}

coeffs_df = pd.DataFrame(coeffs).round(4)

st.dataframe(coeffs_df, use_container_width=True, hide_index=True)

import streamlit as st

import geopandas as gpd

import matplotlib.pyplot as plt

import pandas as pd

from utils.LISA import lisa_map

from utils.Map import create_indo_map

st.title( “Peta Kasus TBC”)

@st.cache_data

def load_data():

df =pd.read_excel( ‘data/Data_prediksi.xlsx’, index_col=0)

df.index = df.index.str.replace( ’ ‘,’ ’, regex=False)

gdf = gpd.read_file( ‘data/gadm41_IDN_2.json’)

gdf = gdf [gdf [ ‘NAME_1’ ] == ‘JawaBarat’ ]

merged = gdf.merge(df, left_on= ‘NAME_2’, right_index=True)

return merged

merged = load_data()

provinsi = st.multiselect(

“Pilih Kabupaten / Kota”,

options=merged.NAME_2.tolist(),

# default= [ ‘Bandung’ ]

)

fig, ax = plt.subplots(figsize=(20, 4))

cola, colb = st.columns( [1, 1 ])

with cola:

with st.container(border=True):

if provinsi:

merged.plot(ax=ax, color= ‘lightgray’, edgecolor= ‘black’)

merged_selected = merged [merged [ ‘NAME_2’ ].isin(provinsi) ]

merged_selected.plot(

ax=ax,

cmap= ‘YlOrRd’,

legend=True,

column= ‘Y’,

edgecolor= ‘black’,

vmin=0,

vmax=30000

)

else:

merged.plot(

ax=ax,

cmap= ‘YlOrRd’,

legend=True,

column= ‘Y’,

edgecolor= ‘black’,

vmin=0,

vmax=30000

)

ax.set_title( ‘Peta Kasus TBC di Jawa Barat’, fontsize=14)

ax.axis( ‘off’)

# plt.tight_layout()

st.pyplot(fig)

with colb:

with st.container(border=True):

lisa_map()

st.write( ” ” ”

Local Moran’s I atau LISA berfungsi untuk mendeteksi lokasi-lokasi spesifik yang memiliki pola spasial yang signifikan.

Melihat peta yang dihasilkan, dapat dilihat bahwa wilayah barat yang ada di Jawa Barat (Bekasi, Depok, Bogor) dapat dikategorikan sebagai High-High cluster atau hotspot yang mana terdapat kasus TBC yang tinggi.

Wilayah selatan dan timur Jawa Barat (Garut dan Tasikmalaya) cenderung membentuk Low-Low Cluster atau coldspot

” ” “, unsafe_allow_html=True)

import streamlit as st

import geopandas as gpd

import matplotlib.pyplot as plt

import pandas as pd

@st.cache_data

def load_data():

df = pd.read_excel( ‘data/Data_prediksi.xlsx’, index_col=0)

df.index = df.index.str.replace( ’ ‘,’ ’, regex=False)

gdf = gpd.read_file( ‘data/gadm41_IDN_2.json’)

gdf = gdf [gdf [ ‘NAME_1’ ] == ‘JawaBarat’ ]

merged = gdf.merge(df, left_on= ‘NAME_2’, right_index=True)

return merged

st.title( “Peta Prediksi dan Residual Kasus TBC”)

merged = load_data()

provinsi = st.multiselect(

“Pilih Kabupaten / Kota”,

options=merged.NAME_2.tolist(),

)

col, col2 = st.columns( [1, 1 ])

cola, colb = st.columns( [1, 1 ])

with col:

with st.container(border=True):

fig1, ax1 = plt.subplots(figsize=(10, 4))

merged.plot(ax=ax1, color= ‘lightgray’, edgecolor= ‘black’)

if provinsi:

merged_selected = merged [merged [ ‘NAME_2’ ].isin(provinsi) ]

merged_selected.plot(

ax=ax1,

column= ‘Y’,

cmap= ‘YlOrRd’,

legend=True,

edgecolor= ‘black’,

vmin=-5000,

vmax=30000

)

else:

merged.plot(

ax=ax1,

column= ‘Y’,

cmap= ‘YlOrRd’,

legend=True,

edgecolor= ‘black’,

vmin=-5000,

vmax=30000

)

ax1.set_title( ‘Peta Kasus TBC Aktual di Jawa Barat’, fontsize=14)

ax1.axis( ‘off’)

st.pyplot(fig1)

with col2:

with st.container(border=True):

d = merged.copy()

d = d [ [ ‘NAME_2’, ‘Y’, ‘Y_prediksi’, ‘Residual’ ] ]

if provinsi:

d = d [d [ ‘NAME_2’ ].isin(provinsi) ]

d.rename(columns={ ‘NAME_2’: ‘Kabupaten/Kota’}, inplace=True)

d.set_index( ‘Kabupaten/Kota’, inplace=True)

d = d.sort_index()

st.dataframe(d)

with cola:

with st.container(border=True):

fig2, ax2 = plt.subplots(figsize=(10, 4))

merged.plot(ax=ax2, color= ‘lightgray’, edgecolor= ‘black’)

if provinsi:

merged_selected = merged [merged [ ‘NAME_2’ ].isin(provinsi) ]

merged_selected.plot(

ax=ax2,

column= ‘Y_prediksi’,

cmap= ‘YlOrRd’,

legend=True,

edgecolor= ‘black’,

vmin=-5000,

vmax=30000

)

else:

merged.plot(

ax=ax2,

column= ‘Y_prediksi’,

cmap= ‘YlOrRd’,

legend=True,

edgecolor= ‘black’,

vmin=-5000,

vmax=30000

)

ax2.set_title( ‘Peta Prediksi Kasus TBC di Jawa Barat’, fontsize=14)

ax2.axis( ‘off’)

st.pyplot(fig2)

with colb:

with st.container(border=True):

fig3, ax3 = plt.subplots(figsize=(10, 4))

merged.plot(ax=ax3, color= ‘lightgray’, edgecolor= ‘black’)

if provinsi:

merged_selected = merged [merged [ ‘NAME_2’ ].isin(provinsi) ]

merged_selected.plot(

ax=ax3,

column= ‘Residual’,

cmap= ‘YlOrRd’,

legend=True,

edgecolor= ‘black’,

vmin=-5000,

vmax=30000

)

else:

merged.plot(

ax=ax3,

column= ‘Residual’,

cmap= ‘YlOrRd’,

legend=True,

edgecolor= ‘black’,

vmin=-5000,

vmax=30000

)

ax3.set_title( ‘Peta Residual Kasus TBC di Jawa Barat’, fontsize=14)

ax3.axis( ‘off’)

st.pyplot(fig3)

# with st.container(border=True):

# lisa_map()

# st.write( ” ” ”

Local Moran’s I atau LISA berfungsi untuk mendeteksi lokasi-lokasi spesifik yang memiliki pola spasial yang signifikan.

# Melihat peta yang dihasilkan, dapat dilihat bahwa wilayah barat yang ada di Jawa Barat (Bekasi, Depok, Bogor) dapat dikategorikan sebagai High-High cluster atau hotspot yang mana terdapat kasus TBC yang tinggi.

# Wilayah selatan dan timur Jawa Barat (Garut dan Tasikmalaya) cenderung membentuk Low-Low Cluster atau coldspot

” ” “, unsafe_allow_html=True)

def lisa_map():

import streamlit as st

import geopandas as gpd

import matplotlib.pyplot as plt

import pandas as pd

from libpysal.weights import Queen

from esda import Moran_Local

gdf = gpd.read_file( “data/gadm41_IDN_2.json”)

gdf = gdf [gdf [ ‘NAME_1’ ] == ‘JawaBarat’ ]

df = pd.read_csv( ‘data/data_jumlah_tbc.csv’, sep= ‘;’, index_col=0)

df.index = df.index.str.replace( ’ ‘,’ ’, regex=False)

merged = gdf.merge(df, left_on= ‘NAME_2’, right_index=True)

y = merged [ “Y” ].values

w = Queen.from_dataframe(merged)

w.transform = ‘r’

moran_loc = Moran_Local(y, w)

merged [ “LISA” ] = moran_loc.Is

fig, ax = plt.subplots(1, 1, figsize=(20, 4))

merged.plot(

column= “LISA”,

cmap= “RdYlBu”,

legend=True,

vmin=-1,

vmax=1,

ax=ax

)

merged.boundary.plot(ax=ax, color= “black”, linewidth=0.5)

ax.set_title( “Peta LISA Kasus TBC di Jawa Barat”, fontsize=14)

ax.axis( “off”)

st.pyplot(fig)

# c, _ = st.columns( [1, 1 ])

# with c:

# with st.container(border=True):

# merged.plot(

# column= “LISA”,

# cmap= “RdYlBu”,

# legend=True,

# vmin=-1,

# vmax=1,

# ax=ax

# )

# merged.boundary.plot(ax=ax, color= “black”, linewidth=0.5)

# ax.set_title( “Peta LISA Kasus TBC di Jawa Barat”, fontsize=14)

# ax.axis( “off”)

# st.pyplot(fig)

if name == ’ main ’:

lisa_map()