Tugas 1 Spasial Bab 3.12: Spatial Autocorrelation

Bagian A. Konsep Teori

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

  • Autokorelasi spasial positif: nilai pada lokasi yang berdekatan cenderung mirip. Contoh: daerah dengan insiden penyakit tinggi dikelilingi daerah dengan insiden tinggi.
  • Autokorelasi spasial negatif: nilai pada lokasi yang berdekatan cenderung berbeda. Contoh: pola penggunaan lahan “checkerboard” (misal: area industri intensif bersebelahan dengan area perumahan rendah intensitas).

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

  • Positif: kasus DBD di perkotaan yang berkumpul pada klaster tertentu.
  • Negatif: distribusi sekolah elit dan non-elit di suatu kota yang saling bergantian.

Soal 3: Tuliskan rumus matematis dari:

  • Moran’s \(I\)

  • Geary’s \(C\)

  • Local Moran’s \(I_i\)

  • Getis–Ord \(G_i\) dan \(G^*_i\)

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

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

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 \] Getis–Ord \(G_i^*\) (lokal): \[ G_i^*(d) = \frac{\sum_{j=1}^{N} w_{ij}(d)x_j}{\sum_{j=1}^{N} x_j} \]

Soal 4: Jelaskan perbedaan utama antara ukuran global dan ukuran lokal.

  • Global (Moran’s I, Geary’s C): memberikan satu angka yang menggambarkan pola keseluruhan wilayah.
  • Lokal (Local Moran’s I, Gi*): mengidentifikasi titik/wilayah yang menjadi hot spot, cold spot, atau outlier.

================================================================================================

Bagian B. Analisis Data (Simulasi)

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

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(sp)
## Warning: package 'sp' was built under R version 4.3.3
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(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(viridis)
## Warning: package 'viridis' was built under R version 4.3.3
## Loading required package: viridisLite
## Warning: package 'viridisLite' was built under R version 4.3.3

Soal 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.

# Buat grid poligon 30 unit (6x5)
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() |> mutate(id = row_number())

# Data simulasi
set.seed(123)
N <- nrow(grid)
z <- rnorm(N)
coords <- st_coordinates(st_centroid(grid))
## Warning: st_centroid assumes attributes are constant over geometries
nb <- poly2nb(as_Spatial(grid), queen=TRUE)
lwW <- nb2listw(nb, style="W")
lagz <- lag.listw(lwW, z)

lambda <- exp(1.2 + 0.6*scale(z) + 1.0*scale(lagz))
pop <- round(runif(N, 3000, 8000))
cases <- rpois(N, lambda = lambda * (pop/10000))
rate10k <- (cases/pop)*10000

data_sim <- tibble(id = grid$id, pop=pop, cases=cases, rate10k=rate10k)
mapdata <- left_join(grid, data_sim, by="id")

Soal 3: Buat peta choropleth dari data simulasi tersebut.

ggplot(mapdata) +
  geom_sf(aes(fill=rate10k), color="white", size=0.2) +
  scale_fill_viridis_c(option="magma") +
  labs(title="Rate Diare per 10.000", fill="Rate") +
  theme_minimal()

Interpretasi: Pada peta choropleth Rate Diare per 10.000 di atas, terlihat adanya variasi spasial yang cukup jelas. Sebagian besar wilayah di sisi kiri dan bagian atas peta memiliki warna gelap, yang menunjukkan angka kejadian diare relatif rendah. Sebaliknya, di sisi kanan bawah peta terlihat beberapa kotak dengan warna lebih terang (ungu muda hingga kuning), yang merepresentasikan angka kejadian diare tinggi. Pola ini mengindikasikan adanya pengelompokan spasial (clustering), khususnya klaster daerah dengan nilai tinggi (hot spot) yang saling berdekatan di bagian kanan bawah. Sementara itu, daerah dengan nilai rendah juga cenderung berdekatan, membentuk cold spot di sisi lain peta. Dengan demikian, distribusi penyakit tidak bersifat acak, melainkan menunjukkan autokorelasi spasial positif, yaitu lokasi dengan nilai yang serupa cenderung berdekatan satu sama lain.

Soal 4: Apa pola spasial yang terlihat secara visual?

Pada peta choropleth hasil simulasi data, terlihat bahwa nilai Rate Diare per 10.000 tidak tersebar secara acak, melainkan menunjukkan adanya pengelompokan spasial. Hal ini ditandai dengan beberapa wilayah di bagian kanan bawah peta yang memiliki nilai tinggi (ditunjukkan dengan warna terang) dan berdekatan satu sama lain, membentuk suatu klaster atau hot spot. Sebaliknya, wilayah lain yang didominasi oleh nilai rendah (warna gelap) juga cenderung berkelompok di area kiri dan atas peta, membentuk cold spot. Pola ini secara visual menunjukkan adanya autokorelasi spasial positif, di mana lokasi dengan nilai yang mirip saling berdekatan sehingga menghasilkan struktur klaster yang jelas dalam ruang geografis.

================================================================================================

Bagian C. Pengukuran Autokorelasi

Soal 1: Hitung Moran’s I untuk data simulasi kasus diare di Kota Bandung.

moran_res <- moran.test(mapdata$rate10k, lwW)
moran_res
## 
##  Moran I test under randomisation
## 
## data:  mapdata$rate10k  
## weights: lwW    
## 
## Moran I statistic standard deviate = 6.0502, p-value = 7.234e-10
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##       0.484684302      -0.034482759       0.007363362

Soal: Berapa nilai Moran’s I?

Nilai Moran’s I yang diperoleh adalah 0.4847 menunjukkan adanya hubungan spasial positif yang cukup kuat. Angka ini berarti bahwa lokasi dengan nilai yang mirip (tinggi dengan tinggi atau rendah dengan rendah) cenderung berdekatan.

Soal: Apakah signifikan secara statistik (uji permutasi)?

Nilai p-value = 7.234 × 10⁻¹⁰, jauh lebih kecil dari taraf signifikansi umum (α = 0.05). Hal ini menunjukkan bahwa hasil uji Moran’s I sangat signifikan secara statistik, sehingga kita menolak hipotesis nol (tidak ada autokorelasi spasial) dan menerima hipotesis alternatif bahwa terdapat autokorelasi spasial positif.

Soal: Apa artinya bagi pola spasial penyakit?

Hasil ini mengindikasikan adanya klaster spasial kasus diare. Kecamatan dengan angka kasus tinggi cenderung berdekatan dengan kecamatan lain yang juga tinggi, sedangkan kecamatan dengan angka kasus rendah cenderung berdekatan dengan yang rendah pula. Dengan kata lain, distribusi penyakit tidak bersifat acak, tetapi terkelompok secara spasial.

Soal 2: Hitung Geary’s C.

geary_res <- geary.test(mapdata$rate10k, lwW)
geary_res
## 
##  Geary C test under randomisation
## 
## data:  mapdata$rate10k 
## weights: lwW   
## 
## Geary C statistic standard deviate = 5.3758, p-value = 3.812e-08
## alternative hypothesis: Expectation greater than statistic
## sample estimates:
## Geary C statistic       Expectation          Variance 
##        0.38968387        1.00000000        0.01288915

Soal: Bagaimana perbandingannya dengan Moran’s I?

Nilai Geary’s C yang diperoleh adalah 0.3897, jauh lebih kecil dari 1. Menurut aturan interpretasi, hal ini menunjukkan adanya autokorelasi spasial positif. Hasil ini konsisten dengan analisis Moran’s I sebelumnya (0.4847), yang juga mengindikasikan adanya clustering spasial yang signifikan. Dengan demikian, kedua ukuran ini memberikan kesimpulan yang searah.

Soal: Jelaskan perbedaan sensitivitas kedua ukuran ini.

  1. Moran’s I mengukur hubungan spasial berdasarkan kovarians antar-nilai, sehingga lebih peka terhadap pola global dalam distribusi data.

  2. Geary’s C menggunakan selisih kuadrat antar-tetangga, sehingga lebih peka terhadap variasi lokal atau kontras nilai di antara lokasi yang berdekatan.

  3. Oleh karena itu, meskipun keduanya sama-sama mengukur autokorelasi spasial, Geary’s C cenderung lebih cepat mendeteksi adanya outlier atau perbedaan tajam antar-lokasi.

Soal 3: Hitung Local Moran’s I (LISA).

x <- scale(mapdata$rate10k)[,1]
lagx <- lag.listw(lwW, x)
lisa <- localmoran(x, lwW)
lisa_df <- as.data.frame(lisa)
names(lisa_df) <- c("Ii","Ei","Vi","Zi","Pi")
alpha <- 0.05

quad <- case_when(
  x >= 0 & lagx >= 0 ~ "High-High",
  x < 0 & lagx < 0 ~ "Low-Low",
  x >= 0 & lagx < 0 ~ "High-Low",
  x < 0 & lagx >= 0 ~ "Low-High"
)
map_lisa <- bind_cols(mapdata, lisa_df) %>% mutate(quad = ifelse(Pi<=alpha, quad, "Not Sig"))
map_lisa
## Simple feature collection with 30 features and 10 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: 107.55 ymin: -6.98 xmax: 107.72 ymax: -6.85
## Geodetic CRS:  WGS 84
## First 10 features:
##    id  pop cases   rate10k           Ii           Ei          Vi          Zi
## 1   1 6326     0  0.000000  0.264175893 -0.014163129 0.129652107  0.77300857
## 2   2 3474     1  2.878526  0.159117648 -0.004568185 0.023386201  1.07036341
## 3   3 4920     1  2.032520 -0.103609806 -0.006839454 0.034933759 -0.51774947
## 4   4 4372     6 13.723696  0.477175866 -0.015912434 0.080533175  1.73754991
## 5   5 7073    15 21.207408  2.463923270 -0.067511574 0.323762202  4.44891062
## 6   6 5243    25 47.682624  5.260031641 -0.536952294 2.308749188  3.81516846
## 7   7 7050     2  2.836879  0.173006312 -0.004669304 0.023901439  1.14925343
## 8   8 7062     1  1.416029  0.222510017 -0.008782254 0.024483168  1.47817999
## 9   9 6972     3  4.302926 -0.005532511 -0.001776080 0.004986353 -0.05319659
## 10 10 5199    12 23.081362  0.406444381 -0.086027991 0.221138932  1.04724734
##              Pi                              x      quad
## 1  4.395173e-01 POLYGON ((107.55 -6.98, 107...   Not Sig
## 2  2.844558e-01 POLYGON ((107.5783 -6.98, 1...   Not Sig
## 3  6.046331e-01 POLYGON ((107.6067 -6.98, 1...   Not Sig
## 4  8.229015e-02 POLYGON ((107.635 -6.98, 10...   Not Sig
## 5  8.630692e-06 POLYGON ((107.6633 -6.98, 1... High-High
## 6  1.360901e-04 POLYGON ((107.6917 -6.98, 1... High-High
## 7  2.504515e-01 POLYGON ((107.55 -6.954, 10...   Not Sig
## 8  1.393596e-01 POLYGON ((107.5783 -6.954, ...   Not Sig
## 9  9.575753e-01 POLYGON ((107.6067 -6.954, ...   Not Sig
## 10 2.949855e-01 POLYGON ((107.635 -6.954, 1...   Not Sig

Soal: Identifikasi kecamatan yang masuk kategori High-High, Low-Low, High-Low, dan Low-High.

Berdasarkan output tabel:

High-High: Kecamatan dengan id = 5 dan id = 6 (nilai rate tinggi dan dikelilingi tetangga dengan nilai tinggi, signifikan pada p < 0.05).

Low-Low: Tidak ada kecamatan yang signifikan dalam kategori ini.

High-Low: Tidak ada kecamatan yang signifikan dalam kategori ini.

Low-High: Tidak ada kecamatan yang signifikan dalam kategori ini.

Sisanya masuk kategori Not Significant.

Dengan demikian, pola yang paling menonjol adalah adanya klaster High-High di beberapa kecamatan bagian tertentu (sejalan dengan peta choropleth sebelumnya, yaitu area kanan bawah peta dengan warna terang).

Soal: Buat peta cluster LISA.

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

Soal: Apa interpretasi hasil ini untuk kasus penyakit menular?

High-High (klaster kasus tinggi): Area dengan kategori High-High adalah klaster signifikan dari kasus diare. Artinya, di kecamatan tersebut angka kejadian tinggi, dan wilayah sekitar juga menunjukkan angka tinggi. Hal ini menunjukkan adanya konsentrasi spasial penyakit menular di wilayah tertentu, sehingga wilayah tersebut dapat dianggap sebagai hot spot penyebaran penyakit.

Tidak adanya Low-Low signifikan: Tidak ditemukan klaster daerah dengan angka kasus rendah yang saling berdekatan secara signifikan.

Tidak adanya High-Low / Low-High: Tidak ditemukan outlier spasial (misalnya daerah dengan nilai sangat tinggi di tengah tetangga rendah, atau sebaliknya).

Makna kesehatan masyarakat: Klaster High-High harus menjadi prioritas intervensi karena berpotensi menjadi pusat penularan. Peta LISA membantu memetakan wilayah rawan sehingga tindakan pencegahan (misalnya peningkatan akses air bersih, sanitasi, penyuluhan kesehatan, atau surveilans penyakit) dapat difokuskan pada wilayah tersebut.

Kesimpulan: Hasil analisis LISA mengungkap adanya klaster signifikan High-High untuk kasus diare, menunjukkan bahwa penyakit ini cenderung mengelompok secara spasial di beberapa kecamatan. Hal ini menegaskan bahwa penyakit menular seperti diare tidak tersebar acak, tetapi mengikuti pola spasial yang dapat dipengaruhi faktor lingkungan maupun perilaku masyarakat.

Soal 4: Hitung Getis–Ord \(G_i\) dan \(G^*_i\). 

Gz <- localG(mapdata$rate10k, lwW)
map_getis <- mapdata %>% mutate(zG=as.numeric(Gz),
                                hotcold=case_when(zG>=1.96 ~ "Hot Spot",
                                                  zG<=-1.96 ~ "Cold Spot",
                                                  TRUE ~ "Not Sig"))
map_getis
## Simple feature collection with 30 features and 6 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: 107.55 ymin: -6.98 xmax: 107.72 ymax: -6.85
## Geodetic CRS:  WGS 84
## First 10 features:
##    id  pop cases   rate10k                              x          zG  hotcold
## 1   1 6326     0  0.000000 POLYGON ((107.55 -6.98, 107... -0.77300857  Not Sig
## 2   2 3474     1  2.878526 POLYGON ((107.5783 -6.98, 1... -1.07036341  Not Sig
## 3   3 4920     1  2.032520 POLYGON ((107.6067 -6.98, 1...  0.51774947  Not Sig
## 4   4 4372     6 13.723696 POLYGON ((107.635 -6.98, 10...  1.73754991  Not Sig
## 5   5 7073    15 21.207408 POLYGON ((107.6633 -6.98, 1...  4.44891062 Hot Spot
## 6   6 5243    25 47.682624 POLYGON ((107.6917 -6.98, 1...  3.81516846 Hot Spot
## 7   7 7050     2  2.836879 POLYGON ((107.55 -6.954, 10... -1.14925343  Not Sig
## 8   8 7062     1  1.416029 POLYGON ((107.5783 -6.954, ... -1.47817999  Not Sig
## 9   9 6972     3  4.302926 POLYGON ((107.6067 -6.954, ...  0.05319659  Not Sig
## 10 10 5199    12 23.081362 POLYGON ((107.635 -6.954, 1...  1.04724734  Not Sig
ggplot(map_getis) +
  geom_sf(aes(fill=hotcold), color="white", size=0.2) +
  scale_fill_manual(values=c("Hot Spot"="#b2182b","Cold Spot"="#2166ac","Not Sig"="grey85")) +
  labs(title="Getis–Ord Gi* (Hot/Cold Spots)", fill=NULL) +
  theme_minimal()

Soal: Tentukan kecamatan yang termasuk hot spot dan cold spot.

Berdasarkan hasil uji Getis–Ord Gi* untuk data simulasi kasus diare di Kota Bandung, diperoleh temuan sebagai berikut:

  • Hot Spot: Kecamatan dengan id = 5 dan id = 6 teridentifikasi sebagai Hot Spot signifikan (p < 0.05). Wilayah ini memiliki nilai kasus diare tinggi dan dikelilingi oleh tetangga dengan nilai tinggi pula.

  • Cold Spot: Tidak ditemukan kecamatan yang signifikan sebagai Cold Spot.

  • Not Significant: Kecamatan lainnya tidak menunjukkan pola spasial yang signifikan.

Soal: Bandingkan hasilnya dengan peta LISA.

Hasil ini konsisten dengan analisis Local Moran’s I (LISA), di mana kecamatan id = 5 dan id = 6 juga masuk kategori High-High. Dengan demikian, baik LISA maupun Getis–Ord Gi* sama-sama menandai kedua kecamatan tersebut sebagai klaster signifikan penyakit menular.

Soal: Apakah ada perbedaan wilayah yang ditandai sebagai klaster signifikan?

  • Local Moran’s I (LISA) lebih detail karena membedakan pola High-High, Low-Low, High-Low, dan Low-High. Dengan demikian, LISA dapat mengidentifikasi outlier spasial (misalnya daerah tinggi dikelilingi rendah).

  • Getis–Ord Gi* lebih fokus pada deteksi Hot Spot (klaster tinggi) dan Cold Spot (klaster rendah), tanpa memisahkan kategori outlier.

================================================================================================

Bagian D. Diskusi Kritis

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

Hasil analisis autokorelasi spasial (Moran’s I, Geary’s C, LISA, dan Getis–Ord Gi) memberikan informasi kuantitatif dan spasial mengenai pola penyebaran penyakit menular di Kota Bandung. Jika ditemukan autokorelasi spasial positif dan peta lokal (LISA atau Gi) menunjukkan adanya hot spot, maka strategi pencegahan dan intervensi dapat dirancang lebih fokus, efisien, dan berbasis bukti.

Beberapa implikasi praktisnya adalah:
1. Prioritas lokasi → intervensi kesehatan dipusatkan di kecamatan yang masuk kategori Hot Spot atau High-High.
2. Intervensi spesifik → tindakan kesehatan masyarakat (perbaikan sanitasi, penyediaan air bersih, penyuluhan, vaksinasi, pengendalian vektor) difokuskan pada klaster signifikan.
3. Alokasi sumber daya → anggaran dan tenaga kesehatan difokuskan ke wilayah klaster untuk memaksimalkan dampak.
4. Monitoring berbasis spasial → evaluasi keberhasilan program dapat dilakukan dengan memantau perubahan Moran’s I atau peta LISA dari waktu ke waktu.
5. Perencanaan jangka panjang → hasil analisis spasial dapat digabungkan dengan data sosio-ekonomi/lingkungan untuk merancang kebijakan pencegahan struktural.

Dengan demikian, analisis spasial mendukung perubahan pendekatan dari intervensi umum menjadi intervensi terfokus yang lebih efektif dalam pengendalian penyakit menular.

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

  1. MAUP (Modifiable Areal Unit Problem) 
  • Penjelasan: Hasil analisis bergantung pada unit spasial (mis. kecamatan, kelurahan, RW). Agregasi berbeda dapat menghasilkan pola berbeda.

  • Dampak: Klaster bisa muncul di level kelurahan tetapi hilang di level kecamatan.

  • Mitigasi: Lakukan analisis pada beberapa skala, gunakan data titik jika tersedia, dan pilih unit analisis yang relevan epidemiologis.

  1. Ukuran bobot spasial (rook, queen, k-nearest neighbors) 
  • Penjelasan: Definisi tetangga (rook, queen, k-nearest neighbors, distance) mempengaruhi hasil indeks.

  • Dampak: Hasil bisa berubah tergantung definisi W yang digunakan.

  • Mitigasi: Pilih W sesuai logika penyakit (mis. penyakit berbasis kontak → kNN/distance; penyakit berbasis lingkungan → rook/queen), dan lakukan analisis sensitivitas dengan beberapa jenis W.

  1. Masalah multiple testing pada analisis lokal 
  • Penjelasan: LISA dan Gi* melakukan banyak uji lokal, sehingga meningkatkan risiko false positive.

  • Dampak: Peta klaster bisa menampilkan wilayah signifikan padahal hanya kebetulan.

  • Mitigasi: Gunakan koreksi multiple testing (Bonferroni, Holm, atau FDR/Benjamini–Hochberg), lakukan uji permutasi (Monte Carlo), dan interpretasi hasil secara hati-hati.

Kesimpulan:

  • Analisis autokorelasi spasial membantu menentukan prioritas lokasi intervensi dan mengarahkan kebijakan kesehatan publik berbasis bukti spasial.

  • Namun, hasil analisis dipengaruhi oleh skala wilayah (MAUP), definisi bobot spasial (W), dan masalah multiple testing pada analisis lokal.

  • Oleh karena itu, diperlukan analisis sensitivitas, koreksi statistik, dan interpretasi hati-hati agar hasil yang diperoleh dapat digunakan secara tepat dalam perencanaan pencegahan dan pengendalian penyakit menular.