Mahasiswa memahami konsep dasar autokorelasi spasial, mampu menghitung ukuran global dan lokal (Moran’s I, Geary’s C, Local Moran’s I, Getis–Ord), serta menginterpretasikan hasil dalam konteks nyata.

Bagian A. Konsep Teori

1. Jelaskan dengan kata-kata Anda apa yang dimaksud dengan autokorelasi spasial positif dan autokorelasi spasial negatif!

Menurut saya autokorelasi spasial positif terjadi ketika suatu wilayah memiliki nilai yang mirip dengan wilayah di sekitarnya. Misalnya daerah dengan angka tinggi dikelilingi oleh daerah dengan angka tinggi juga, atau sebaliknya daerah rendah dikelilingi daerah rendah. Jadi, ada kecenderungan nilai berkelompok (clustering).

Sebaliknya, autokorelasi spasial negatif muncul ketika suatu wilayah justru memiliki nilai yang berlawanan dengan tetangganya. Contohnya, daerah dengan nilai tinggi dikelilingi oleh nilai rendah, atau sebaliknya. Pola ini sering disebut checkerboard karena pola tinggi-rendahnya saling bergantian.

2. Berikan contoh sederhana dari fenomena yang bisa menunjukkan masing masing pola tersebut!

Autokorelasi positif: Kasus penyakit menular, misalnya diare. Kecamatan dengan jumlah kasus tinggi biasanya berdekatan dengan kecamatan lain yang juga tinggi karena ada faktor lingkungan dan interaksi antar penduduk.

Autokorelasi negatif: Harga tanah di perkotaan. Wilayah dengan harga tanah yang sangat tinggi biasanya berdampingan dengan wilayah yang harganya jauh lebih rendah, misalnya area pusat kota (mahal) yang langsung berbatasan dengan area pemukiman padat penduduk (murah).

3. Tuliskan rumus matematis dari :

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} \]

Keterangan:
- \(N\) = jumlah unit spasial (wilayah)
- \(x_i\) = nilai variabel pada unit \(i\)
- \(\bar{x}\) = rata-rata dari seluruh nilai
- \(w_{ij}\) = bobot spasial antara unit \(i\) dan \(j\)
- \(S_0 = \sum_i \sum_j w_{ij}\) = total bobot spasial


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} \]

Keterangan:
- \(N\) = jumlah unit spasial
- \(x_i, x_j\) = nilai variabel pada unit \(i\) dan \(j\)
- \(w_{ij}\) = bobot spasial
- \(S_0\) = total bobot spasial
- Fokus pada perbedaan nilai antar tetangga (kontras lokal).


c) Local Moran’s (LISA) \(I_i\)

\[ 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 \] Keterangan:
- \(I_i\) = nilai indeks Moran lokal pada unit \(i\)
- \(m^2\) = varians rata-rata dari variabel \(x\)
- \(w_{ij}\) = bobot spasial
- Mengukur apakah unit \(i\) mirip atau berbeda dengan tetangganya (cluster atau outlier).


d) Getis–Ord \(G_i\) (tanpa lokasi \(i\))

\[ G_i(d) = \frac{\sum_{j \neq i} w_{ij}(d) x_j}{\sum_{j \neq i} x_j} \] Keterangan:
- \(G_i(d)\) = statistik Getis–Ord pada jarak \(d\)
- \(w_{ij}(d)\) = bobot spasial (1 jika \(j\) tetangga \(i\) pada jarak \(d\), 0 jika tidak)
- \(x_j\) = nilai variabel pada unit \(j\)
- Mengukur konsentrasi nilai tinggi/rendah di sekitar unit \(i\), tetapi tidak termasuk \(i\) itu sendiri.


e) Getis–Ord \(G_i^*\) (dengan lokasi \(i\))

\[ G_i^*(d) = \frac{\sum_{j=1}^{N} w_{ij}(d) x_j}{\sum_{j=1}^{N} x_j} \] Keterangan:
- \(G_i^*(d)\) = statistik Getis–Ord dengan memasukkan unit \(i\)
- \(w_{ij}(d)\) = bobot spasial pada jarak \(d\)
- \(x_j\) = nilai variabel pada unit \(j\)
- Nilai tinggi \(G_i^*\) mengindikasikan hotspot (nilai tinggi dikelilingi tinggi), sedangkan nilai rendah menunjukkan coldspot.

4. Jelaskan perbedaan utama antara ukuran global dan lokal.

Ukuran global (seperti Moran’s I dan Geary’s C) memberikan gambaran umum tentang apakah ada pola spasial secara keseluruhan dalam data. Jadi sifatnya menyeluruh untuk seluruh wilayah studi.

Sedangkan ukuran lokal (seperti Local Moran’s I dan Getis–Ord Gi*) fokus pada tiap lokasi atau unit wilayah. Ukuran ini membantu kita tahu bagian mana yang menjadi hotspot, coldspot, atau bahkan outlier spasial. Jadi, ukuran lokal lebih detail karena mengungkapkan di mana pola spasial itu terjadi.


Bagian B. Analisis Data (Simulasi)

1. Gunakan data spasial kecamatan di Kota Bandung (atau gunakan grid simulasi jika data asli tidak tersedia).

setwd("/Users/Imamul Caesar/Downloads/SPASIAL")

# Load shapefile rds
Indo_Kec <- readRDS("gadm36_IDN_3_sp.rds")

# Ambil Kota Bandung (periksa nama di data, biasanya "Kota Bandung")
Bandung <- Indo_Kec[Indo_Kec$NAME_2 == "Kota Bandung", ]

# Tambahkan id
Bandung$id <- seq_len(nrow(Bandung))

# Konversi ke sf
Bandung_sf <- sf::st_as_sf(Bandung)

# Jika data asli tidak ada (untuk knit demo), buat grid dummy
if (!exists("Bandung_sf") || nrow(Bandung_sf) == 0) {
  bb <- sf::st_as_sfc(
    sf::st_bbox(c(
      xmin = 107.55, ymin = -6.98,
      xmax = 107.72, ymax = -6.85
    )),
    crs = 4326
  )
  
  grid <- sf::st_make_grid(bb, n = c(6, 5)) |>
    sf::st_as_sf() |>
    dplyr::mutate(id = dplyr::row_number())
  
  Bandung_sf <- grid
}

# Validasi geometri
Bandung_sf <- sf::st_make_valid(Bandung_sf)

# Pastikan ada kolom id
if (!"id" %in% names(Bandung_sf)) {
  Bandung_sf$id <- seq_len(nrow(Bandung_sf))
}

# Plot pakai ggplot
ggplot(Bandung_sf) +
  geom_sf(fill = "grey90", color = "white") +
  labs(title = "Kota Bandung - Unit (contoh)") +
  theme_minimal()

2. Buat data simulasi kasus penyakit menular (misalnya diare per 10.000 penduduk) untuk 30 kecamatan di Kota Bandung. Gunakan distribusi Poisson dengan rata-rata berbeda antar kecamatan.

# Asumsi Bandung_sf sudah ada (hasil shapefile atau grid mock)

# Neighbor list (queen contiguity)
nb <- spdep::poly2nb(sf::as_Spatial(Bandung_sf), queen = TRUE)
lwW <- spdep::nb2listw(nb, style = "W")

# Jumlah unit
N <- nrow(Bandung_sf)

# Variabel acak + lag spasial
set.seed(123)
z <- rnorm(N)
lz <- spdep::lag.listw(lwW, z)

# Parameter simulasi
beta0 <- 1.5; beta1 <- 0.7; beta2 <- 0.9
lambda <- exp(beta0 + beta1*scale(z) + beta2*scale(lz))

# Populasi dan kasus
pop <- round(runif(N, 50000, 150000))
cases <- rpois(N, lambda = lambda * (pop/10000))

# Buat tabel TBC
TBC <- tibble(
  id = Bandung_sf$id,
  kecamatan = if("Kecamatan" %in% names(Bandung_sf)) Bandung_sf$Kecamatan else paste0("Kec_", id),
  populasi = pop,
  kasus_TBC = cases,
  rate10k = (cases/pop)*10000
)

# Merge ke shapefile
Bandung_merged <- left_join(Bandung_sf, TBC, by="id")

3. Buat peta choropleth dari data simulasi tersebut.

ggplot(Bandung_merged) +
  geom_sf(aes(fill = rate10k), color="white", size=0.2) +
  scale_fill_viridis_c(option="magma") +
  labs(title="Rate TBC (per 10.000 Penduduk) — Simulasi", fill="Rate") +
  theme_minimal()

4. Apa pola spasial yang terlihat secara visual?

Secara umum, distribusi kasus TBC di Kota Bandung tidak merata. Ada beberapa kecamatan yang terlihat menonjol dengan warna lebih terang (kuning–oranye) yang menandakan angka kasus tinggi, dan kecamatan tersebut letaknya saling berdekatan, terutama di bagian utara dan selatan kota. Hal ini menunjukkan adanya indikasi cluster kasus tinggi atau bisa disebut hotspot.

Sementara itu, sebagian besar wilayah lainnya didominasi oleh warna ungu tua hingga hitam, yang berarti angka kasusnya relatif rendah. Kecamatan-kecamatan dengan kasus rendah ini juga terlihat saling berdekatan, membentuk kelompok wilayah dengan tingkat kejadian TBC yang rendah (coldspot).

Dengan kata lain, secara visual peta ini menunjukkan adanya autokorelasi spasial positif, di mana kecamatan dengan nilai tinggi cenderung bersebelahan dengan kecamatan bernilai tinggi juga, dan sebaliknya untuk kecamatan bernilai rendah. Jadi, pola penyebarannya tidak acak, melainkan cenderung mengelompok (clustering).

Bagian C. Pengukuran Autokorelasi

1. Hitung Moran’s I untuk data simulasi kasus TBC di Kota Bandung

moran_res <- spdep::moran.test(Bandung_merged$rate10k, lwW,
randomisation = TRUE, alternative = "two.sided")
moran_res
## 
##  Moran I test under randomisation
## 
## data:  Bandung_merged$rate10k  
## weights: lwW    
## 
## Moran I statistic standard deviate = 5.3025, p-value = 1.142e-07
## alternative hypothesis: two.sided
## sample estimates:
## Moran I statistic       Expectation          Variance 
##        0.55946066       -0.03448276        0.01254663

a) Berapakah nilai Moran’s I?

Nilai Moran’s I yang diperoleh adalah 0.559.


b) Apakah signfikan secara statistik (uji permutasi)?

Ya, signifikan. Hal ini terlihat dari p-value = 1.142e-07 yang jauh lebih kecil daripada taraf signifikan (0,05). Artinya, hipotesis nol ditolak, yaitu tidak ada autokorelasi spasial.


c) Apa artinya bagi pola spasial penyakit?

Nilai Moran’s I yang positif (0.559) dan signifikan menunjukkan adanya autokorelasi spasial positif. Dengan kata lain, kejadian penyakit (TBC per 10.000 penduduk) di Kota Bandung tidak tersebar acak, tetapi cenderung mengelompok (clustering). Kecamatan dengan angka kasus tinggi cenderung berdekatan dengan kecamatan yang juga tinggi, begitu juga untuk kasus rendah yang berdekatan dengan rendah.

2. Hitung Geary’s C.

geary_res <- spdep::geary.test(Bandung_merged$rate10k, lwW,
 randomisation = TRUE, alternative = "two.sided")
 geary_res
## 
##  Geary C test under randomisation
## 
## data:  Bandung_merged$rate10k 
## weights: lwW   
## 
## Geary C statistic standard deviate = 4.9583, p-value = 7.112e-07
## alternative hypothesis: two.sided
## sample estimates:
## Geary C statistic       Expectation          Variance 
##        0.40528598        1.00000000        0.01438652

a) Bagaimana perbandingannya dengan Morans’I?

  • Nilai Geary’s C = 0.405. Karena nilainya < 1, ini menunjukkan adanya autokorelasi spasial positif.

  • Hasil ini konsisten dengan uji Moran’s I = 0.559 sebelumnya yang juga menunjukkan autokorelasi positif.

  • Bedanya hanya pada skala interpretasi: Moran’s I punya range -1 sampai +1, sedangkan Geary’s C berpusat di 1 (di mana nilai < 1 berarti positif, dan > 1 berarti negatif). Jadi walaupun angkanya berbeda, kesimpulan keduanya sama: ada clustering spasial pada kasus TBC.


b) Jelaskan perbedaan sensitivitas kedua ukuran ini

  • Moran’s I lebih peka terhadap pola global (clustering secara keseluruhan). Artinya Moran’s I menangkap apakah nilai tinggi/rendah secara umum cenderung berdekatan di seluruh wilayah studi.

  • Geary’s C lebih peka terhadap perbedaan lokal antara suatu unit dengan tetangganya. Jadi, ukuran ini lebih sensitif kalau ada variasi kecil atau kontras antar kecamatan yang bersebelahan.

  • Dengan kata lain, meskipun keduanya sama-sama mendeteksi autokorelasi spasial, Moran’s I lebih global sementara Geary’s C lebih lokal dalam cara kerjanya.

3. Hitung Local Moran’s I (LISA)

x <- scale(Bandung_merged$rate10k)[,1]
 lagx <- spdep::lag.listw(lwW, x)

lisa <- spdep::localmoran(x, lwW, alternative = "two.sided", zero.policy = TRUE)
lisa_df <- as.data.frame(lisa)
names(lisa_df) <- c("Ii","Ei","Vi","Zi","Pi.two.sided")
alpha <- 0.05
quad <- dplyr::case_when(
 x >= 0 & lagx >= 0 ~ "High-High",
 x < 0 & lagx < 0 ~ "Low-Low",
 x >= 0 & lagx < 0 ~ "High-Low (Outlier)",
 x < 0 & lagx >= 0 ~ "Low-High (Outlier)"
 )
Bandung_LISA <- dplyr::bind_cols(Bandung_merged, lisa_df) |>
 dplyr::mutate(quad = ifelse(Pi.two.sided <= alpha, quad, "Not significant"))

ggplot(Bandung_LISA) +
 geom_sf(aes(fill = quad), color="white", size=0.2) +
 scale_fill_manual(values=c(
   "High-High"="#d73027","Low-Low"="#4575b4",
   "High-Low (Outlier)"="#fdae61","Low-High (Outlier)"="#74add1",
   "Not significant"="grey85"
 )) +
 labs(title="Local Moran's I (LISA)", fill="Kategori") +
 theme_minimal()

a) Identifikasi kecamatan yang masuk kategori High-High, Low-Low, High-Low, dan Low-High.

  • Pada peta yang dihasilkan terlihat bahwa wilayah yang signifikan hanya berada di bagian utara Kota Bandung, ditandai warna merah dengan kategori High–High. Artinya, kecamatan-kecamatan di utara ini memiliki angka kasus TBC tinggi dan dikelilingi oleh tetangga dengan kasus tinggi juga.

  • Untuk kategori Low–Low, High–Low, dan Low–High, tidak ada kecamatan yang muncul signifikan (semuanya ditampilkan abu-abu = Not significant).


b) Buat peta cluster LISA.

Peta cluster LISA terlampir di atas.


c) Apa interpretasi hasil ini untuk kasus penyakit menular?

Hasil ini menunjukkan bahwa penyebaran penyakit TBC di Kota Bandung tidak acak, melainkan membentuk cluster signifikan di bagian utara kota. Daerah-daerah ini menjadi hotspot karena tingkat kasusnya tinggi dan berdekatan dengan wilayah lain yang juga tinggi.

Dalam konteks penyakit menular, temuan ini penting karena mengindikasikan adanya faktor lingkungan atau sosial di wilayah utara yang memicu penyebaran lebih intens. Wilayah ini bisa diprioritaskan untuk intervensi kesehatan masyarakat, seperti peningkatan akses layanan kesehatan, program skrining TBC, dan penyuluhan perilaku hidup bersih.

4. Hitung Getis–Ord 𝐺∗𝑖.

x_raw <- Bandung_merged$rate10k
sum_x <- sum(x_raw)
# Matriks bobot biner (tidak distandarisasi)
Wb <- spdep::listw2mat(lwW) # diag=0 secara default
# G_i (tanpa i)
num_G <- as.numeric(Wb %*% x_raw)     # Σ_{j￿i} w_ij x_j
den_G <- (sum_x- x_raw)               # Σ_{j￿i} x_j
G_raw <- num_G / den_G

# G_i^* (dengan i) — set w_ii = 1
Wb_star <- Wb; diag(Wb_star) <- 1
num_Gs <- as.numeric(Wb_star %*% x_raw)     # Σ_j w_ij^* x_j
den_Gs <- sum_x                             # Σ_j x_j
G_star_raw <- num_Gs / den_Gs

# Z-skor (yang dihitung spdep::localG)
Gz <- spdep::localG(x_raw, listw = lwW) # z(G_i^*) dengan listw yang diberikan

Bandung_G <- dplyr::mutate(Bandung_merged,
                           G_raw = G_raw,
                           G_star_raw = G_star_raw,
                           z_Gistar = as.numeric(Gz),
                           hotcold = dplyr::case_when(
                             z_Gistar >= 1.96 ~ "Hot spot (p￿0.05)",
                             z_Gistar <=-1.96 ~ "Cold spot (p￿0.05)",
                             TRUE ~ "Not significant"
 ))
summary(dplyr::select(Bandung_G, G_raw, G_star_raw, z_Gistar))
##      G_raw            G_star_raw         z_Gistar                geometry 
##  Min.   :0.008807   Min.   :0.01687   Min.   :-1.7088   MULTIPOLYGON :30  
##  1st Qu.:0.016617   1st Qu.:0.02451   1st Qu.:-1.1567   epsg:NA      : 0  
##  Median :0.021757   Median :0.04168   Median :-0.7578   +proj=long...: 0  
##  Mean   :0.034013   Mean   :0.06540   Mean   :-0.1448                     
##  3rd Qu.:0.042738   3rd Qu.:0.07648   3rd Qu.: 0.4792                     
##  Max.   :0.120036   Max.   :0.21994   Max.   : 4.1281
ggplot(Bandung_G) +
 geom_sf(aes(fill = G_star_raw), color="white", size=0.2) +
 scale_fill_viridis_c() +
 labs(title="Raw Getis–Ord G* (proporsi massa tetangga)", fill="G*_raw") +
 theme_minimal()

Bandung_G$hotcold <- recode(Bandung_G$hotcold,
                            "Hot spot (p\uffff0.05)"  = "Hot spot (p<0.05)",
                            "Coldspot" = "Cold spot (p<0.05)"
)
ggplot(Bandung_G) +
  geom_sf(aes(fill = hotcold), color="white", size=0.2) +
  scale_fill_manual(values = c(
    "Hot spot (p<0.05)"  = "#b2182b",
    "Cold spot (p>0.05)" = "#2166ac",
    "Not significant"    = "grey85"
  )) +
  labs(title="Getis–Ord Gi* — Hot/Cold Spots (z-skor)", fill=NULL) +
  theme_minimal()

a) Tentukan kecamatan yang termasuk hot spot dan cold spot.

  • Hot Spot Terlihat jelas pada peta Gi* (z-score) bahwa wilayah bagian utara—beberapa kecamatan di ujung utara (misalnya kecamatan A, B, C sesuai batas administrasi asli data)—berwarna merah tua. Artinya nilai variabel yang dianalisis (misal kasus penyakit/kejadian) tinggi dan dikelilingi nilai tinggi secara signifikan.

  • Cold Spot Tidak ada area yang berwarna biru atau kategori cold spot signifikan. Jadi tidak ditemukan cold spot signifikan.


b) Bandingkan hasilnya dengan peta LISA.

Peta LISA menunjukkan klaster High–High (merah) di lokasi yang sama dengan hot spot pada peta Gi*. Artinya, kecamatan utara tersebut memiliki nilai tinggi yang dikelilingi tetangga bernilai tinggi, dan signifikan secara lokal.


c) Apakah ada perbedaan wilayah yang ditandai sebagai klaster signifikan?

  • Tidak ada perbedaan besar: area yang ditandai sebagai hot spot pada Getis–Ord Gi* sejalan dengan klaster High–High pada LISA.

  • Perbedaan kecil mungkin hanya pada batas presisi/tingkat signifikansi, tetapi secara spasial wilayahnya konsisten.

Bagian D. Diskusi Kritis

1. Bagaimana hasil analisis autokorelasi spasial bisa membantu dinas kesehatan dalam menyusun strategi pencegahan dan intervensi penyakit menular di Kota Bandung?

a). Identifikasi daerah prioritas Dengan adanya autokorelasi spasial, kita bisa tahu bahwa kasus penyakit menular (misalnya TBC) tidak tersebar secara acak, tapi cenderung membentuk cluster di wilayah tertentu. Informasi ini membantu dinas kesehatan untuk memfokuskan intervensi di daerah yang benar-benar menjadi hotspot, ketimbang membagi sumber daya secara merata ke semua kecamatan.

b). Efisiensi alokasi sumber daya Sumber daya kesehatan (tenaga medis, obat-obatan, fasilitas, program skrining) bisa diarahkan lebih banyak ke kecamatan dengan kategori High–High (tinggi dikelilingi tinggi) karena wilayah ini paling berisiko menyebarkan penyakit ke area sekitar. Dengan begitu, anggaran dan program yang terbatas bisa digunakan lebih efektif.

c). Pencegahan penyebaran lebih luas Dengan peta spasial, dinas kesehatan juga bisa mengantisipasi daerah tetangga dari hotspot. Misalnya, kecamatan dengan kasus rendah tapi berdekatan dengan hotspot (kategori Low–High) bisa diberikan program preventif lebih awal agar tidak ikut tertular.

d). Evaluasi kebijakan berbasis bukti Analisis spasial memberikan bukti kuantitatif dan visual yang bisa dipakai sebagai dasar untuk menyusun kebijakan kesehatan. Misalnya, jika hasil menunjukkan bahwa bagian utara Bandung adalah klaster TBC, maka kebijakan intervensi bisa diprioritaskan di sana, dan nanti hasilnya bisa dievaluasi apakah angka kasus berkurang.


2. Sebutkan keterbatasan dari analisis autokorelasi spasial, misalnya terkait dengan:

- MAUP(Modifiable Areal Unit Problem)

Keterbatasan pertama adalah masalah MAUP, yaitu hasil analisis spasial sangat dipengaruhi oleh skala dan pembagian wilayah. Pola yang tampak pada level kecamatan bisa berubah atau bahkan hilang ketika dianalisis pada level kabupaten. Fenomena ini terjadi karena adanya scale effect (perbedaan hasil akibat ukuran unit spasial) dan zoning effect (perbedaan hasil akibat cara pembagian atau batas wilayah). Dengan demikian, interpretasi autokorelasi spasial hanya berlaku pada level analisis yang digunakan dan tidak dapat langsung digeneralisasi ke skala lain.

- Ukuran bobot spasial (rook, queen, k-nearest neighbors)

Hasil autokorelasi spasial juga sangat bergantung pada definisi bobot spasial yang dipakai, misalnya rook, queen, atau k-nearest neighbors. Pemilihan bobot yang berbeda bisa menghasilkan kesimpulan yang berbeda, misalnya suatu wilayah terdeteksi sebagai hotspot dengan definisi queen tetapi tidak dengan rook. Karena tidak ada standar universal, pemilihan bobot spasial sering kali subjektif dan bisa saja tidak mencerminkan hubungan nyata antarwilayah, seperti interaksi sosial atau mobilitas penduduk.

- Masalah multiple testing pada analisis lokal

Keterbatasan lainnya muncul pada analisis lokal, seperti Local Moran’s I atau Getis–Ord Gi*, karena setiap wilayah diuji secara terpisah. Hal ini menimbulkan masalah multiple testing, yaitu semakin banyak uji dilakukan semakin besar kemungkinan muncul hasil signifikan secara kebetulan (false positive). Akibatnya, peta hotspot atau coldspot bisa menampilkan wilayah “signifikan” yang sebenarnya hanya noise. Untuk mengurangi bias ini, biasanya dilakukan koreksi signifikansi atau interpretasi hasil dengan lebih hati-hati.