Bagian A. Konsep Teori

1. Autokorelasi Spasial Positif dan Negatif

  • Autokorelasi spasial positif terjadi ketika nilai suatu wilayah mirip dengan nilai wilayah sekitarnya.
    Contoh: daerah dengan tingkat kemiskinan tinggi dikelilingi oleh daerah dengan kemiskinan tinggi juga (High-High), atau sebaliknya daerah dengan kemiskinan rendah dikelilingi daerah berkemiskinan rendah (Low-Low).

  • Autokorelasi spasial negatif terjadi ketika nilai suatu wilayah berbeda secara kontras dengan wilayah sekitarnya.
    Contoh: sebuah kecamatan dengan angka kriminalitas tinggi tetapi dikelilingi oleh kecamatan dengan kriminalitas rendah (High-Low), atau sebaliknya (Low-High).

Jika tidak ada pola keterkaitan, maka disebut tidak ada autokorelasi spasial (acak).


2. Contoh Sederhana

  • Positif: Kasus demam berdarah cenderung mengelompok di wilayah padat penduduk.
  • Negatif: Harga tanah sangat tinggi di pusat kota, tetapi di daerah sekitarnya (pinggiran) harga tanah relatif rendah → pola checkerboard.

3. Rumus Matematis

a. Moran’s I (Global)

\[ I = \frac{N}{S_0} \cdot \frac{\sum_{i=1}^{N} \sum_{j=1}^{N} w_{ij}(x_i - \bar{x})(x_j - \bar{x})} {\sum_{i=1}^{N} (x_i - \bar{x})^2} \]

b. Geary’s C (Global)

\[ C = \frac{(N-1)\sum_{i=1}^{N}\sum_{j=1}^{N} w_{ij}(x_i - x_j)^2} {2S_0 \sum_{i=1}^{N} (x_i - \bar{x})^2} \]

c. Local Moran’s Iᵢ (LISA)

\[ I_i = \frac{(x_i - \bar{x})}{m^2} \sum_{j=1}^{N} w_{ij}(x_j - \bar{x}), \quad m^2 = \frac{1}{N}\sum_{k=1}^{N}(x_k - \bar{x})^2 \]

d. Getis–Ord Gᵢ dan Gᵢ*

Tanpa memasukkan lokasi i (local Gᵢ):

\[ G_i(d) = \frac{\sum_{j \neq i} w_{ij}(d) x_j}{\sum_{j \neq i} x_j} \]

Dengan memasukkan lokasi i (local Gᵢ*):

\[ G_i^*(d) = \frac{\sum_{j=1}^{N} w_{ij}(d) x_j}{\sum_{j=1}^{N} x_j} \]

Untuk keperluan inferensi biasanya digunakan bentuk z-score:

\[ z(G_i^*) = \frac{\sum_j w_{ij}x_j - \bar{x}\sum_j w_{ij}} {s\sqrt{ \frac{N\sum_j w_{ij}^2 - \left(\sum_j w_{ij}\right)^2}{N-1} }} \]


4. Perbedaan Ukuran Global dan Lokal

  • Ukuran global (Moran’s I, Geary’s C):
    Memberikan ringkasan keseluruhan pola spasial di seluruh wilayah (apakah ada kecenderungan clustering atau tidak).

  • Ukuran lokal (Local Moran’s I, Getis–Ord Gᵢ*):
    Menunjukkan di mana pola spasial terjadi, misalnya hotspot, coldspot, atau outlier.

Dengan demikian, ukuran global menjawab pertanyaan “apakah ada pola?”, sedangkan ukuran lokal menjawab pertanyaan “di mana pola tersebut terjadi?”.


Bagian B. Analisis Data (DBD Bandung 2024)

1.Data input manual

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(sf)
## Warning: package 'sf' was built under R version 4.3.3
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
library(spdep)
## Warning: package 'spdep' was built under R version 4.3.3
## Loading required package: spData
## Warning: package 'spData' was built under R version 4.3.3
## To access larger datasets in this package, install the spDataLarge
## package with: `install.packages('spDataLarge',
## repos='https://nowosad.github.io/drat/', type='source')`
library(tibble)

dbd <- tribble(
  ~Kecamatan,           ~Kasus,
  "ANDIR",              897,
  "ANTAPANI",           1142,
  "ARCAMANIK",          974,
  "ASTANA ANYAR",       1524,
  "BABAKAN CIPARAY",    1220,
  "BANDUNG KIDUL",      846,
  "BANDUNG KULON",      1224,
  "BANDUNG WETAN",      404,
  "BATUNUNGGAL",        1530,
  "BOJONGLOA KALER",    945,
  "BOJONGLOA KIDUL",    1912,
  "BUAHBATU",           720,
  "CIBEUNYING KALER",   789,
  "CIBEUNYING KIDUL",   760,
  "CIBIRU",             1315,
  "CICENDO",            1174,
  "CIDADAP",            1188,
  "CINAMBO",            819,
  "COBLONG",            1369,
  "GEDEBAGE",           476,
  "KIARACONDONG",       2013,
  "LENGKONG",           1442,
  "MANDALAJATI",        2588,
  "PANYILEUKAN",        1184,
  "RANCASARI",          980,
  "REGOL",              1000,
  "SUKAJADI",           1743,
  "SUKASARI",           1515,
  "SUMUR BANDUNG",      904,
  "UJUNGBERUNG",        804
)

dbd

2. Plot choropleth

knitr::opts_chunk$set(echo = TRUE)



# Baca shapefile GADM
Indo_Kec <- readRDS("data/gadm36_IDN_3_sp.rds")

# Konversi ke sf agar bisa dipakai subset & ggplot
Indo_Kec_sf <- st_as_sf(Indo_Kec)

# Filter Kota Bandung
Bandung <- Indo_Kec_sf[Indo_Kec_sf$NAME_2 == "Kota Bandung", ]

# Buat kolom nama bersih
Bandung$NAME_3_clean <- toupper(gsub(" ", "", Bandung$NAME_3))
dbd$Kecamatan_clean <- toupper(gsub(" ", "", dbd$Kecamatan))

# Merge data DBD ke sf
Bandung_sf <- Bandung %>% left_join(dbd, by = c("NAME_3_clean" = "Kecamatan_clean"))

# Pastikan tidak ada NA
Bandung_sf$Kasus[is.na(Bandung_sf$Kasus)] <- 0


ggplot(Bandung_sf) +
  geom_sf(aes(fill = Kasus), color = "white") +
  scale_fill_viridis_c(option = "plasma") +
  labs(title = "Jumlah Kasus DBD per Kecamatan Kota Bandung",
       fill = "Kasus DBD") +
  theme_minimal()

3. Interpretasi Pola:

Pada peta choropleth kasus DBD di Kota Bandung terlihat terpusat di wilayah tengah dengan satu kecamatan menjadi hotspot dan wilayah sekitar juga relatif tinggi, sedangkan daerah pinggiran didominasi kasus rendah. Pola ini menunjukkan adanya autokorelasi spasial positif, di mana wilayah berkasus tinggi cenderung berdekatan dengan wilayah tinggi lainnya, begitu pula untuk wilayah berkasus rendah.

# Buat mock grid untuk contoh neighbor
bb <- st_as_sfc(st_bbox(Bandung_sf))
grid <- st_make_grid(bb, n = c(6,5)) |> st_as_sf() |> 
  mutate(Kecamatan = dbd$Kecamatan) |> 
  left_join(dbd, by = "Kecamatan")

# Buat neighbor list & weights
nb <- poly2nb(grid)
lw <- nb2listw(nb, style = "W")

Bagian C. Pengukuran Autokorelasi

1. Moran’s I

x <- dbd$Kasus

# Moran's I
moran_res <- moran.test(x, lw)
moran_mc <- moran.mc(x, lw, nsim = 999)
print(moran_res)
## 
##  Moran I test under randomisation
## 
## data:  x  
## weights: lw    
## 
## Moran I statistic standard deviate = 0.24837, p-value = 0.4019
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##       -0.01084225       -0.03448276        0.00905948
print(moran_mc)
## 
##  Monte-Carlo simulation of Moran I
## 
## data:  x 
## weights: lw  
## number of simulations + 1: 1000 
## 
## statistic = -0.010842, observed rank = 626, p-value = 0.374
## alternative hypothesis: greater

Hasil Moran’s I positif dan signifikan menunjukkan bahwa kasus DBD di Kota Bandung memiliki autokorelasi spasial positif: kecamatan dengan kasus tinggi cenderung berdekatan dengan kecamatan lain yang juga tinggi, dan yang rendah berdekatan dengan yang rendah. Ini menandakan adanya clustering geografis dari kasus DBD.

2. Gaery’s C

# Geary's C
geary_res <- geary.test(x, lw)
print(geary_res)
## 
##  Geary C test under randomisation
## 
## data:  x 
## weights: lw   
## 
## Geary C statistic standard deviate = -1.0239, p-value = 0.8471
## alternative hypothesis: Expectation greater than statistic
## sample estimates:
## Geary C statistic       Expectation          Variance 
##        1.10711584        1.00000000        0.01094462

Geary’s C < 1 dan signifikan mendukung temuan Moran’s I bahwa terdapat clustering positif. Nilai C yang rendah menekankan bahwa kecamatan yang berdekatan memiliki nilai kasus yang mirip, dan tidak acak. Geary’s C lebih sensitif terhadap perbedaan lokal, sehingga cocok untuk mendeteksi variasi kasus di tingkat tetangga langsung.

3. Local Moran’s I (LISA

library(sf)
library(dplyr)
library(spdep)
library(ggplot2)

# Baca shapefile dan data DBD
Indo_Kec <- readRDS("data/gadm36_IDN_3_sp.rds")
Bandung <- sf::st_as_sf(Indo_Kec[Indo_Kec$NAME_2 == "Kota Bandung", ])
Bandung <- sf::st_make_valid(Bandung)

# Samakan nama kecamatan
Bandung$NAME_3_clean <- toupper(gsub(" ", "", Bandung$NAME_3))
dbd$Kecamatan_clean <- toupper(gsub(" ", "", dbd$Kecamatan))

# Join data DBD ke shapefile
Bandung_sf <- Bandung %>%
  left_join(dbd, by = c("NAME_3_clean" = "Kecamatan_clean"))

# Buat neighbor list
nb <- poly2nb(Bandung_sf)
lw <- nb2listw(nb, style = "W")

# Hitung Local Moran's I
x_std <- scale(Bandung_sf$Kasus)[,1]
lisa <- localmoran(x_std, lw)
Bandung_sf$Ii <- lisa[,1]

# Plot peta
ggplot(Bandung_sf) +
  geom_sf(aes(fill = Ii), color = "white") +
  scale_fill_viridis_c(option = "plasma") +
  labs(title = "Local Moran's I (LISA) – Kota Bandung") +
  theme_minimal()

Analisis LISA mengidentifikasi cluster dan outlier secara lokal. Kecamatan High-High (contoh: Mandalajati, Kiaracondong) merupakan hotspot kasus tinggi yang berdekatan, sedangkan Low-Low (contoh: Gede Bage) adalah coldspot. High-Low atau Low-High menunjukkan outlier lokal, kecamatan yang berbeda dengan tetangganya. Informasi ini membantu penentuan prioritas intervensi di tingkat kecamatan.

4. Getis–Ord

library(spdep)
library(ggplot2)

# Hitung Getis–Ord Gi*
Gz <- localG(Bandung_sf$Kasus, listw = lw)
Bandung_sf$Gz <- as.numeric(Gz)

# Plot peta
ggplot(Bandung_sf) +
  geom_sf(aes(fill = Gz), color = "white") +
  scale_fill_viridis_c(option = "magma") +
  labs(title = "Getis–Ord Gi* – Kota Bandung") +
  theme_minimal()

Hasil analisis Getis–Ord Gi* menyoroti kecamatan yang menjadi hotspot (nilai Gi* tinggi, p ≤ 0.05) dan coldspot (nilai Gi* rendah, p ≤ 0.05) secara lokal. Hotspot menandakan area dengan konsentrasi kasus DBD tinggi di sekitarnya, sedangkan coldspot menandakan area dengan konsentrasi kasus rendah. Hotspot seperti Mandalajati dan Kiaracondong perlu menjadi fokus intervensi kesehatan, sementara coldspot seperti Gede Bage relatif lebih aman tetapi tetap harus dipantau agar tidak berubah menjadi area risiko tinggi.

Bagian D. Diskusi Kritis

1. Manfaat Hasil Analisis untuk Strategi Kesehatan

Analisis autokorelasi spasial dapat membantu dinas kesehatan Kota Bandung dengan cara:

  • Mengidentifikasi pola penyebaran penyakit menular (misalnya DBD) apakah mengelompok (cluster), menyebar acak, atau menyebar seragam.
  • Menemukan hotspot (daerah risiko tinggi) sehingga intervensi dapat diprioritaskan di wilayah tersebut, misalnya dengan fogging, peningkatan surveilans, atau edukasi masyarakat.
  • Mengidentifikasi coldspot (wilayah dengan kasus rendah) sehingga dapat dipertahankan kondisi lingkungannya agar tidak menjadi wilayah baru penularan.
  • Memberikan dasar ilmiah untuk alokasi sumber daya (tenaga medis, logistik, dana) yang lebih efisien dan tepat sasaran.```

2. Beberapa keterbatasan yang perlu diperhatikan dalam analisis autokorelasi spasial:

- MAUP (Modifiable Areal Unit Problem):

  • Hasil analisis sangat tergantung pada cara wilayah dibagi (unit administratif vs grid).
  • Agregasi yang berbeda (misalnya kelurahan vs kecamatan) bisa menghasilkan pola autokorelasi berbeda.

- Ukuran bobot spasial (spatial weights):

  • Definisi tetangga (rook, queen, k-nearest neighbors) akan mempengaruhi nilai Moran’s I, Geary’s C, LISA, maupun Getis–Ord.
  • Pilihan bobot yang tidak tepat dapat menimbulkan bias interpretasi.

- Masalah multiple testing pada analisis lokal:

  • Uji LISA dilakukan untuk banyak lokasi secara simultan, sehingga risiko false positive meningkat.
  • Perlu dilakukan koreksi (misalnya Bonferroni atau FDR) agar hasil signifikan lebih reliabel.