A. Konsep Teori

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

Jawab :

Autokorelasi Positif menunjukkan bahwa lokasi-lokasi yang dekat secara spasial cenderung memiliki nilai variabel yang mirip, sedangkan autokorelasi negatif menunjukkan bahwa lokasi-lokasi yang berdekatan cenderung memiliki nilai yang berbeda.

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

Jawab :

Misal jika kecamatan dengan tingkat kemiskinan tinggi berada berdekatan satu sama lain, maka nilai dari variabel di wilayah kecamatan tersebut akan mirip. Hal ini menimbulkan munculnya autokorelasi positif. Tetapi jika kecamatan kaya dan miskin “bercampur” secara spasial (misalnya suatu kecamatan miskin diapit kecamatan kaya, begitu sebaliknya), maka nilai dari variabel di wilayah kecamatan tersebut bisa sangat bervariasi/berbeda. Hal tersebut menimbulkan munculnya autokorelasi spasial negatif.

3. Tuliskan rumus matematis dari Moran’s 𝐼 • Geary’s 𝐶 • Local Moran’s 𝐼𝑖 • Getis–Ord 𝐺𝑖 dan 𝐺

Jawab :

  • Rumus Moran’s 𝐼 \[ I = \frac{n}{\sum_{i=1}^{n}\sum_{j=1}^{n} w_{ij}} \cdot \frac{\sum_{i=1}^{n}\sum_{j=1}^{n} w_{ij} (Y_i - \bar{Y})(Y_j - \bar{Y})} {\sum_{i=1}^{n} (Y_i - \bar{Y})^2} \] Keterangan Simbol:

\(I\) = Indeks Moran (ukuran autokorelasi spasial global).

\(n\) = Jumlah unit pengamatan (misalnya jumlah wilayah, titik, atau lokasi).

\(Y_i\) = Nilai variabel pada lokasi \(i\).

\(\bar{Y}\) = Nilai rata-rata dari semua \(Y_i\), yaitu

\[ \bar{Y} = \frac{1}{n}\sum_{i=1}^{n} Y_i \] \(w_{ij}\) = Bobot spasial antara lokasi \(i\) dan \(j\), menggambarkan kedekatan spasial (misalnya 1 jika bertetangga, 0 jika tidak, atau nilai lain berdasarkan jarak).

\(\sum_{i=1}^{n}\sum_{j=1}^{n} w_{ij}\) = Jumlah total bobot spasial dari semua pasangan lokasi.

\(\sum_{i=1}^{n} (Y_i - \bar{Y})^2\) = Variansi total (penyebut untuk normalisasi).

  • Rumus Geary’s 𝐶

\[ C = \frac{(n-1)}{2 \sum_{i=1}^{n}\sum_{j=1}^{n} w_{ij}} \cdot \frac{\sum_{i=1}^{n}\sum_{j=1}^{n} w_{ij} (Y_i - Y_j)^2} {\sum_{i=1}^{n} (Y_i - \bar{Y})^2} \]

Keterangan Simbol:

\(C\) = Indeks Geary (ukuran autokorelasi spasial global, alternatif Moran’s I).

\(n\) = Jumlah unit pengamatan (wilayah, titik, atau lokasi).

\(Y_i\) = Nilai variabel pada lokasi \(i\).

\(Y_j\) = Nilai variabel pada lokasi \(j\).

\(\bar{Y}\) = Nilai rata-rata dari semua \(Y_i\).

\(w_{ij}\) = Bobot spasial antara lokasi \(i\) dan \(j\).

\(\sum_{i=1}^{n}\sum_{j=1}^{n} w_{ij}\) = Jumlah total bobot spasial.

\((Y_i - Y_j)^2\) = Perbedaan kuadrat antar pasangan lokasi yang bertetangga.

\(\sum_{i=1}^{n} (Y_i - \bar{Y})^2\) = Variansi total.

Interpretasi Nilai Geary’s C

\(C \approx 1\) → tidak ada autokorelasi spasial (random).

\(C < 1\) → ada autokorelasi spasial positif (lokasi yang berdekatan cenderung mirip).

\(C > 1\) → ada autokorelasi spasial negatif (lokasi yang berdekatan cenderung berbeda).

  • Rumus Local Moran’s \(I_i\)

\[ I_i = \frac{(Y_i - \bar{Y})}{S^2} \sum_{j=1}^{n} w_{ij} (Y_j - \bar{Y}) \]

dengan

\[ S^2 = \frac{1}{n} \sum_{k=1}^{n} (Y_k - \bar{Y})^2 \] Keterangan Simbol:

\(I_i\) = Indeks Moran lokal pada lokasi \(i\).

\(Y_i\) = Nilai variabel pada lokasi \(i\).

\(Y_j\) = Nilai variabel pada lokasi tetangga \(j\).

\(\bar{Y}\) = Nilai rata-rata dari seluruh lokasi.

\(w_{ij}\) = Bobot spasial antara lokasi \(i\) dan \(j\) (misalnya kedekatan/ketetanggaan).

\(S^2\) = Variansi keseluruhan dari variabel \(Y\).

\(n\) = Jumlah total unit pengamatan.

Interpretasi Local Moran’s \(I_i\):

Nilai \(I_i > 0\): menunjukkan bahwa lokasi \(i\) mirip dengan tetangganya (high–high atau low–low cluster → indikasi autokorelasi spasial positif lokal).

Nilai \(I_i < 0\): menunjukkan bahwa lokasi \(i\) berbeda dengan tetangganya (high–low atau low–high → indikasi autokorelasi spasial negatif lokal).

Signifikansi diuji dengan uji randomisasi / Monte Carlo untuk menentukan apakah pola lokal tersebut signifikan atau hanya kebetulan.

  • Rumus Getis–Ord 𝐺𝑖 dan 𝐺
  1. Rumus Getis–Ord \(G_i\) (lokal)

\[ G_i = \frac{\sum_{j=1}^{n} w_{ij} x_j}{\sum_{j=1}^{n} x_j} \]

atau dalam bentuk standar (z-score):

\[ G_i^* = \frac{\sum_{j=1}^{n} w_{ij} x_j - \bar{X} \sum_{j=1}^{n} w_{ij}} { S \sqrt{\frac{\left[n \sum_{j=1}^{n} w_{ij}^2 - \left(\sum_{j=1}^{n} w_{ij}\right)^2\right]}{n-1}} } \]

  1. Rumus Getis–Ord \(G\) (global)

\[ G = \frac{\sum_{i=1}^{n} \sum_{j=1}^{n} w_{ij} x_i x_j}{\sum_{i=1}^{n} \sum_{j=1}^{n} x_i x_j} \]

Keterangan Simbol:

\(G_i\) = Indeks Getis–Ord lokal pada lokasi \(i\).

\(G_i^*\) = Versi standar/normalisasi dari \(G_i\) (digunakan untuk uji signifikansi, sering dipetakan sebagai hot spot dan cold spot).

\(G\) = Indeks Getis–Ord global (menunjukkan kecenderungan umum clustering tinggi/rendah).

\(x_i\) = Nilai variabel pada lokasi \(i\).

\(x_j\) = Nilai variabel pada lokasi \(j\).

\(\bar{X}\) = Rata-rata variabel \(x\).

\(S\) = Standar deviasi dari variabel \(x\).

\(w_{ij}\) = Bobot spasial antara lokasi \(i\) dan \(j\) (misalnya kedekatan atau ketetanggaan).

\(n\) = Jumlah unit pengamatan (misalnya wilayah).

Interpretasi:

Nilai \(G_i\) atau \(G_i^*\) tinggi signifikan → lokasi \(i\) berada dalam hot spot (nilai tinggi dikelilingi nilai tinggi).

Nilai \(G_i\) rendah signifikan → lokasi \(i\) berada dalam cold spot (nilai rendah dikelilingi nilai rendah).

Nilai \(G\) global signifikan → secara keseluruhan terdapat clustering (hot spots atau cold spots) di seluruh wilayah, bukan sekadar acak.

B. Analisis Data (Simulasi)

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

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.

Jawab :

Data Simulasi yang digunakan adalah data kasus penyakit menular TBC pada tingkat kecamatan di Kota Bandung. Sebanyak 30 kecamatan dianalisis dengan asumsi jumlah penduduk bervariasi antara 5.000 hingga 50.000 jiwa per kecamatan. Jumlah kasus disimulasikan menggunakan distribusi Poisson, dengan parameter rata-rata (λ) berbeda antar kecamatan untuk merepresentasikan heterogenitas risiko penyakit di wilayah perkotaan.

Data Simulasi Kasus TBC – 30 Kecamatan (per 10.000 penduduk)

Kecamatan Populasi λ per 10k Expected Cases Kasus Rate per 10k
K01 43,545 2.136 9.30 0 0.000
K02 46,666 3.536 16.49 20 4.291
K03 34,673 3.701 12.82 14 3.917
K04 13,731 2.649 3.64 1 0.727
K05 12,361 1.057 1.31 2 1.619
K06 24,581 0.817 2.01 0 0.000
K07 13,792 2.536 3.50 8 5.800
K08 48,323 4.782 23.11 15 3.104
K09 48,021 3.120 14.98 17 3.540
K10 13,433 1.739 2.34 2 1.489
K11 40,867 0.925 3.78 0 0.000
K12 10,380 1.475 1.53 0 0.000
K13 21,988 1.139 2.50 1 0.455
K14 46,825 2.163 10.12 7 1.495
K15 24,839 2.480 6.16 6 2.416
K16 29,066 2.773 8.06 4 1.376
K17 14,871 2.051 3.05 1 0.672
K18 24,802 1.130 2.80 1 0.403
K19 33,458 1.122 3.75 1 0.299
K20 30,657 3.049 9.35 9 2.938
K21 50,210 3.206 16.09 12 2.390
K22 28,912 2.824 8.17 5 1.730
K23 50,089 1.604 8.03 6 1.199
K24 12,292 1.287 1.58 2 1.626
K25 21,884 0.907 1.99 0 0.000
K26 44,942 1.576 7.08 2 0.445
K27 18,976 1.751 3.32 1 0.527
K28 25,548 1.776 4.54 0 0.000
K29 29,765 2.084 6.20 4 1.344
K30 41,588 1.719 7.14 3 0.722

3. Buat peta choropleth dari data simulasi tersebut!

Jawab :

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(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)
## Warning: package 'ggplot2' was built under R version 4.3.3
data_sim <- data.frame(
  Kecamatan = paste0("K", sprintf("%02d", 1:30)),
  Populasi = c(43545,46666,34673,13731,12361,24581,13792,48323,48021,13433,
               40867,10380,21988,46825,24839,29066,14871,24802,33458,30657,
               50210,28912,50089,12292,21884,44942,18976,25548,29765,41588),
  Lambda_per_10k = c(2.136,3.536,3.701,2.649,1.057,0.817,2.536,4.782,3.120,1.739,
                     0.925,1.475,1.139,2.163,2.480,2.773,2.051,1.130,1.122,3.049,
                     3.206,2.824,1.604,1.287,0.907,1.576,1.751,1.776,2.084,1.719),
  Expected = c(9.30,16.49,12.82,3.64,1.31,2.01,3.50,23.11,14.98,2.34,
               3.78,1.53,2.50,10.12,6.16,8.06,3.05,2.80,3.75,9.35,
               16.09,8.17,8.03,1.58,1.99,7.08,3.32,4.54,6.20,7.14),
  Kasus = c(0,20,14,1,2,0,8,15,17,2,
            0,0,1,7,6,4,1,1,1,9,
            12,5,6,2,0,2,1,0,4,3),
  Rate_per_10k = c(0.000,4.291,3.917,0.727,1.619,0.000,5.800,3.104,3.540,1.489,
                   0.000,0.000,0.455,1.495,2.416,1.376,0.672,0.403,0.299,2.938,
                   2.390,1.730,1.199,1.626,0.000,0.445,0.527,0.000,1.344,0.722)
)

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

library(sf)
library(dplyr)

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

# 2. Konversi ke sf (lebih aman langsung di sini)
Indo_sf <- st_as_sf(Indo_Kec)
## Loading required package: sp
## Warning: package 'sp' was built under R version 4.3.3
# 3. Cek kolom yang tersedia
print(names(Indo_sf))
##  [1] "GID_0"     "NAME_0"    "GID_1"     "NAME_1"    "NL_NAME_1" "GID_2"    
##  [7] "NAME_2"    "NL_NAME_2" "GID_3"     "NAME_3"    "VARNAME_3" "NL_NAME_3"
## [13] "TYPE_3"    "ENGTYPE_3" "CC_3"      "HASC_3"    "geometry"
# 4. Filter hanya Kota Bandung
Bandung_sf <- Indo_sf %>% filter(NAME_2 == "Kota Bandung")

# 5. Buat kolom Kecamatan (kalau ada kolom NAME_3)
if ("NAME_3" %in% names(Bandung_sf)) {
  Bandung_sf <- Bandung_sf %>% mutate(Kecamatan = NAME_3)
} else {
  stop("Kolom NAME_3 tidak ada di shapefile! Kolom yang ada: ",
       paste(names(Bandung_sf), collapse = ", "))
}

# 6. Tambahkan id
Bandung_sf$id <- seq_len(nrow(Bandung_sf))
data_sim$id <- seq_len(nrow(data_sim))

# 7. Join
Bandung_merged <- left_join(Bandung_sf, data_sim, by = "id")

# 8. Plot
ggplot(Bandung_merged) +
  geom_sf(aes(fill = Kasus), color = "white") +
  scale_fill_gradient(low = "pink", high = "red") +
  theme_bw() +
  labs(title = "Peta Jumlah Kasus Kota Bandung",
       fill = "Jumlah Kasus")

4. Apa pola spasial yang terlihat secara visual?

Jawab :

Peta choropleth kasus simulasi di Kota Bandung memperlihatkan variasi intensitas antar kecamatan. Sebagian besar kecamatan menunjukkan jumlah kasus relatif rendah (ditunjukkan dengan warna merah muda), namun terdapat beberapa kecamatan yang menjadi titik konsentrasi dengan kasus cukup tinggi (berwarna merah tua). Pola ini menandakan adanya distribusi spasial yang tidak merata, di mana hanya beberapa wilayah tertentu yang menjadi fokus peningkatan kasus. Kondisi tersebut mengindikasikan potensi terbentuknya klaster lokal yang perlu mendapat perhatian lebih dalam strategi pencegahan dan pengendalian penyakit, baik melalui surveilans lebih intensif maupun intervensi kesehatan masyarakat yang terarah.

C. Pengukuran Autokorelasi

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

• Berapa nilai Moran’s I?

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')`
# Koordinat dummy
set.seed(123)
coords <- cbind(runif(30, 0, 10), runif(30, 0, 10))

# Tetangga k-nearest neighbor
nb <- knn2nb(knearneigh(coords, k = 4))
lw <- nb2listw(nb, style="W")

# Moran's I
moran.test(data_sim$Rate_per_10k, lw, randomisation=TRUE)
## 
##  Moran I test under randomisation
## 
## data:  data_sim$Rate_per_10k  
## weights: lw    
## 
## Moran I statistic standard deviate = -0.53982, p-value = 0.7053
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##       -0.09230284       -0.03448276        0.01147262

p-value = 0.7053 > 0.05 TERIMA H0 Interpretasi = Nilai Moran’s I sebesar -0.0923 dengan p-value 0.7053 menunjukkan bahwa pola spasial penyakit tidak signifikan. Distribusi kasus antar kecamatan cenderung acak dan tidak menunjukkan pengelompokan spasial.

• Apakah signifikan secara statistik (uji permutasi)?

Jawab :

Dengan p-value 0.7053 menunjukkan bahwa pola spasial penyakit tidak signifikan. Distribusi kasus antar kecamatan cenderung acak dan tidak menunjukkan pengelompokan spasial.

• Apa artinya bagi pola spasial penyakit?

Jawab :

Karena nilai Moran’s I negatif kecil (–0.0923) dan tidak signifikan (p = 0.7053), maka tidak ada bukti pola spasial pada distribusi penyakit. Dengan kata lain, angka kejadian penyakit antar kecamatan tidak menunjukkan kecenderungan mengelompok (clustering) maupun menyebar (dispersion), melainkan lebih menyerupai pola acak.Jadi, pola spasial penyakit tidak terbentuk — kasus muncul tersebar tanpa mengikuti kedekatan geografis antar kecamatan.

2. Hitung Geary’s C.

set.seed(123)
coords <- cbind(runif(30,0,10), runif(30,0,10))  # 30 titik random
knn4 <- knearneigh(coords, k=4)                  # 4 nearest neighbors
nb <- knn2nb(knn4)                               # daftar neighbor
lw <- nb2listw(nb, style="W")                    # bobot spasial terstandar

# ---- Hitung Geary’s C ----
geary_res <- geary.test(data_sim$Rate_per_10k, lw, randomisation=TRUE)

geary_res
## 
##  Geary C test under randomisation
## 
## data:  data_sim$Rate_per_10k 
## weights: lw   
## 
## Geary C statistic standard deviate = -0.6435, p-value = 0.7401
## alternative hypothesis: Expectation greater than statistic
## sample estimates:
## Geary C statistic       Expectation          Variance 
##        1.08246002        1.00000000        0.01642062

p-value = 0.7053 > 0.05 TERIMA H0

• Bagaimana perbandingannya dengan Moran’s I?

Jawab :

Moran’s I = −0.0923 (p = 0.7053) → tidak signifikan, menunjukkan kecenderungan lemah ke arah dispersi.

Geary’s C = 1.0825 (p = 0.7401) → tidak signifikan, juga sedikit >1 yang konsisten dengan pola dispersi.

Interpretasi: kedua uji konsisten menyimpulkan tidak ada autokorelasi spasial signifikan pada Rate per 10k. Distribusi kasus antar kecamatan cenderung acak, tanpa pola clustering atau hotspot yang jelas.

• Jelaskan perbedaan sensitivitas kedua ukuran ini.

Jawab :

Moran’s I dan Geary’s C sama-sama digunakan untuk mengukur autokorelasi spasial, namun keduanya memiliki sensitivitas yang berbeda. Moran’s I lebih sensitif dalam mendeteksi pola autokorelasi global, sehingga lebih baik untuk melihat kecenderungan umum apakah nilai tinggi atau rendah cenderung berkelompok dalam skala luas. Sebaliknya, Geary’s C lebih sensitif terhadap variasi lokal antar wilayah yang berdekatan, karena perhitungannya menekankan perbedaan nilai antara pasangan tetangga.

Moran’s I lebih menyoroti pola global, sedangkan Geary’s C lebih peka terhadap ketidaksamaan lokal.

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

# Tetapkan hubungan tetangga: 4 nearest neighbors
knn4 <- knearneigh(coords, k=4)
nb <- knn2nb(knn4)
lw <- nb2listw(nb, style="W")

# Hitung Local Moran’s I (LISA)
lisa <- localmoran(data_sim$Rate_per_10k, lw)

# Gabungkan hasil ke data
data_sim$Local_I <- lisa[,1]
data_sim$Local_I_pvalue <- lisa[,5]

# Tampilkan hasil
data_sim[, c("Kecamatan", "Rate_per_10k", "Local_I", "Local_I_pvalue")]
##    Kecamatan Rate_per_10k       Local_I Local_I_pvalue
## 1        K01        0.000 -8.919981e-01     0.07422604
## 2        K02        4.291 -3.530815e-01     0.79373792
## 3        K03        3.917  6.866580e-01     0.30416784
## 4        K04        0.727 -2.212431e-01     0.39278626
## 5        K05        1.619 -8.613337e-03     0.85131601
## 6        K06        0.000  3.000095e-01     0.48411783
## 7        K07        5.800 -4.153427e-01     0.92350143
## 8        K08        3.104 -1.034537e-01     0.90691413
## 9        K09        3.540 -6.022109e-01     0.41371698
## 10       K10        1.489 -4.311343e-05     0.97871768
## 11       K11        0.000 -4.455175e-01     0.39284798
## 12       K12        0.000 -1.543042e-01     0.80460825
## 13       K13        0.455 -9.999747e-02     0.80509485
## 14       K14        1.495 -2.695985e-04     0.94033848
## 15       K15        2.416 -4.197471e-01     0.18281545
## 16       K16        1.376 -1.500921e-02     0.67708446
## 17       K17        0.672  9.625434e-02     0.68756258
## 18       K18        0.403  2.696459e-01     0.41296242
## 19       K19        0.299  4.244360e-01     0.24620925
## 20       K20        2.938  4.782425e-02     0.86154409
## 21       K21        2.390 -1.397682e-01     0.66930524
## 22       K22        1.730 -1.287644e-02     0.88304792
## 23       K23        1.199 -1.389331e-01     0.14227626
## 24       K24        1.626 -9.176868e-03     0.84962792
## 25       K25        0.000  3.927869e-01     0.37180201
## 26       K26        0.445 -3.181499e-01     0.37511734
## 27       K27        0.527 -1.159020e-01     0.74648844
## 28       K28        0.000 -8.667585e-01     0.08316647
## 29       K29        1.344 -6.213398e-02     0.18009288
## 30       K30        0.722  4.078302e-01     0.09469057

• Identifikasi kecamatan yang masuk kategori High-High, Low-Low, High-Low, dan Low-High.

library(knitr)
## Warning: package 'knitr' was built under R version 4.3.3
# Tambahkan hasil ke data
data_sim$Local_I <- lisa[,1]
data_sim$Local_pvalue <- lisa[,5]

# Global mean
mean_rate <- mean(data_sim$Rate_per_10k)

# Spatial lag (nilai rata-rata tetangga)
lag_rate <- lag.listw(lw, data_sim$Rate_per_10k)

# Klasifikasi cluster LISA
data_sim$LISA_cluster <- NA
data_sim$LISA_cluster[data_sim$Rate_per_10k > mean_rate & lag_rate > mean_rate] <- "High-High"
data_sim$LISA_cluster[data_sim$Rate_per_10k < mean_rate & lag_rate < mean_rate] <- "Low-Low"
data_sim$LISA_cluster[data_sim$Rate_per_10k > mean_rate & lag_rate < mean_rate] <- "High-Low"
data_sim$LISA_cluster[data_sim$Rate_per_10k < mean_rate & lag_rate > mean_rate] <- "Low-High"

kable(
  data_sim[, c("Kecamatan","Rate_per_10k","Local_I","Local_pvalue","LISA_cluster")],
  caption = "Hasil Klasifikasi LISA per Kecamatan"
)
Hasil Klasifikasi LISA per Kecamatan
Kecamatan Rate_per_10k Local_I Local_pvalue LISA_cluster
K01 0.000 -0.8919981 0.0742260 Low-High
K02 4.291 -0.3530815 0.7937379 High-Low
K03 3.917 0.6866580 0.3041678 High-High
K04 0.727 -0.2212431 0.3927863 Low-High
K05 1.619 -0.0086133 0.8513160 High-Low
K06 0.000 0.3000095 0.4841178 Low-Low
K07 5.800 -0.4153427 0.9235014 High-Low
K08 3.104 -0.1034537 0.9069141 High-Low
K09 3.540 -0.6022109 0.4137170 High-Low
K10 1.489 -0.0000431 0.9787177 High-Low
K11 0.000 -0.4455175 0.3928480 Low-High
K12 0.000 -0.1543042 0.8046082 Low-High
K13 0.455 -0.0999975 0.8050949 Low-High
K14 1.495 -0.0002696 0.9403385 High-Low
K15 2.416 -0.4197471 0.1828155 High-Low
K16 1.376 -0.0150092 0.6770845 Low-High
K17 0.672 0.0962543 0.6875626 Low-Low
K18 0.403 0.2696459 0.4129624 Low-Low
K19 0.299 0.4244360 0.2462092 Low-Low
K20 2.938 0.0478243 0.8615441 High-High
K21 2.390 -0.1397682 0.6693052 High-Low
K22 1.730 -0.0128764 0.8830479 High-Low
K23 1.199 -0.1389331 0.1422763 Low-High
K24 1.626 -0.0091769 0.8496279 High-Low
K25 0.000 0.3927869 0.3718020 Low-Low
K26 0.445 -0.3181499 0.3751173 Low-High
K27 0.527 -0.1159020 0.7464884 Low-High
K28 0.000 -0.8667585 0.0831665 Low-High
K29 1.344 -0.0621340 0.1800929 Low-High
K30 0.722 0.4078302 0.0946906 Low-Low

• Buat peta cluster LISA.

# --- 1. Pastikan shapefile sudah ada ---
Bandung_sf$id <- 1:30   # kasih ID ke shapefile

# --- 2. Ambil hanya kolom penting dari data_sim ---
# (buang koordinat dummy X Y biar gak dobel)
data_sim_clean <- data_sim %>%
  dplyr::select(id, Kecamatan, Rate_per_10k, LISA_cluster)

# --- 3. Join shapefile + data LISA ---
Bandung_cluster <- dplyr::left_join(Bandung_sf, data_sim_clean, by = "id")

# --- 4. Plot peta cluster LISA ---
ggplot(Bandung_cluster) +
  geom_sf(aes(fill = LISA_cluster), color = "white", size = 0.3) +
  scale_fill_manual(values = c(
    "High-High"       = "red",
    "Low-Low"         = "blue",
    "High-Low"        = "orange",
    "Low-High"        = "green",
    "Not Significant" = "grey70"
  )) +
  theme_minimal() +
  labs(
    title = "Peta Cluster LISA Kota Bandung",
    fill  = "Cluster"
  )

• Apa interpretasi hasil ini untuk kasus penyakit menular?

Jawab :

  1. High-High (merah) → Kecamatan dengan angka kasus tinggi dan berdekatan dengan kecamatan lain yang juga tinggi. → Ini indikasi klaster endemis, sehingga wilayah ini perlu jadi prioritas intervensi pengendalian penyakit.

  2. Low-Low (biru) → Kecamatan dengan angka kasus rendah, bertetangga dengan wilayah rendah juga. → Menunjukkan adanya “zona aman” atau daerah dengan risiko relatif kecil. Bisa jadi contoh praktik baik atau faktor protektif yang bisa dipelajari.

  3. High-Low (oranye) → Kecamatan dengan angka kasus tinggi, tapi dikelilingi oleh wilayah rendah. → Bisa mengindikasikan anomali lokal atau outlier, mungkin ada faktor khusus (misalnya outbreak lokal, kepadatan penduduk tinggi, sanitasi buruk).

  4. Low-High (hijau) → Kecamatan dengan angka kasus rendah, tetapi dikelilingi wilayah tinggi. → Potensi wilayah berisiko meningkat (spillover effect). Jika tidak diintervensi, bisa jadi daerah ini ikut terdampak.

Kesimpulan: Penyakit menular dalam data ini tidak merata secara acak, melainkan membentuk pola spasial. Ada klaster signifikan (High-High) yang menunjukkan kemungkinan sumber penularan lokal, sementara outlier (High-Low, Low-High) penting untuk dianalisis lebih lanjut, misalnya terkait mobilitas penduduk, sanitasi, atau faktor lingkungan.

4 Hitung Getis–Ord 𝐺

globalG <- globalG.test(data_sim$Rate_per_10k, listw = lw, B = 999)
## Warning in globalG.test(data_sim$Rate_per_10k, listw = lw, B = 999): Binary
## weights recommended (especially for distance bands)
globalG
## 
##  Getis-Ord global G statistic
## 
## data:  data_sim$Rate_per_10k 
## weights: lw   
## 
## standard deviate = -0.18181, p-value = 0.5721
## alternative hypothesis: greater
## sample estimates:
## Global G statistic        Expectation           Variance 
##       3.362122e-02       3.448276e-02       2.245484e-05

Global G statistic = 0.0336

Expectation (nilai harapan) = 0.0345

Variance = 2.25e-05

Standard deviate (Z-score) = –0.18

p-value = 0.5721

Interpretasi

Nilai G observasi (0.0336) hampir sama dengan nilai harapan acak (0.0345).

Z-score sangat kecil (–0.18) dan p-value jauh di atas 0.05 → tidak signifikan.

Artinya, tidak ada bukti kuat adanya konsentrasi spasial (hotspot atau coldspot) dari angka kasus penyakit antar-kecamatan.

Dengan kata lain, distribusi Rate per 10k lebih cenderung acak dalam ruang, bukan terklaster atau terdispersi secara signifikan.

• Tentukan kecamatan yang termasuk hot spot dan cold spot.

data_rate <- data_sim$Rate_per_10k  

# weights matriks tetangga
lw <- nb2listw(nb, style="W")  

# uji Local Getis-Ord Gi*
gi_star <- localG(data_rate, lw)

# gabung hasil ke data frame
hasil_gi <- data.frame(
  Kecamatan = rownames(as.data.frame(gi_star)),
  GiZScore  = as.numeric(gi_star)
)

# tentukan kategori
hasil_gi$Kategori <- ifelse(hasil_gi$GiZScore > 1.96, "Hot Spot",
                      ifelse(hasil_gi$GiZScore < -1.96, "Cold Spot",
                      "Tidak signifikan"))

hasil_gi
##    Kecamatan    GiZScore         Kategori
## 1          1  1.78521751 Tidak signifikan
## 2          2 -0.26145983 Tidak signifikan
## 3          3  1.02753665 Tidak signifikan
## 4          4  0.85457539 Tidak signifikan
## 5          5 -0.18743956 Tidak signifikan
## 6          6 -0.69969495 Tidak signifikan
## 7          7 -0.09602410 Tidak signifikan
## 8          8 -0.11693175 Tidak signifikan
## 9          9 -0.81737006 Tidak signifikan
## 10        10 -0.02667660 Tidak signifikan
## 11        11  0.85446394 Tidak signifikan
## 12        12  0.24738763 Tidak signifikan
## 13        13  0.24675886 Tidak signifikan
## 14        14 -0.07484444 Tidak signifikan
## 15        15 -1.33213616 Tidak signifikan
## 16        16  0.41644492 Tidak signifikan
## 17        17 -0.40216502 Tidak signifikan
## 18        18 -0.81869155 Tidak signifikan
## 19        19 -1.15960602 Tidak signifikan
## 20        20  0.17440894 Tidak signifikan
## 21        21 -0.42710172 Tidak signifikan
## 22        22 -0.14710655 Tidak signifikan
## 23        23  1.46736696 Tidak signifikan
## 24        24 -0.18959320 Tidak signifikan
## 25        25 -0.89310300 Tidak signifikan
## 26        26  0.88692861 Tidak signifikan
## 27        27  0.32327308 Tidak signifikan
## 28        28  1.73260181 Tidak signifikan
## 29        29  1.34046910 Tidak signifikan
## 30        30 -1.67115753 Tidak signifikan
# --- 1. Tambah ID biar join gampang ---
Bandung_sf$id <- 1:30
hasil_gi$id   <- 1:30   # urutan sesuai kecamatan

# --- 2. Gabungkan shapefile dengan hasil Gi* ---
Bandung_gi <- left_join(Bandung_sf, hasil_gi, by = "id")

# --- 3. Plot peta choropleth ---
ggplot(Bandung_gi) +
  geom_sf(aes(fill = Kategori), color = "white", size = 0.3) +
  scale_fill_manual(values = c(
    "Hot Spot" = "red",
    "Cold Spot" = "blue",
    "Tidak signifikan" = "grey70"
  )) +
  theme_minimal() +
  labs(
    title = "Peta Hotspot & Coldspot (Getis-Ord Gi*) Kota Bandung",
    fill  = "Kategori"
  )

Interpretasi :

Semua kecamatan jatuh ke kategori “Tidak signifikan” → artinya tidak ada daerah dengan pola spasial “Hotspot” atau “Coldspot” yang kuat secara statistik.

• Bandingkan hasilnya dengan peta LISA.

Jawab :

LISA: lebih sensitif terhadap hubungan nilai antar tetangga → masih bisa menangkap pola lokal (misalnya 1–2 kecamatan dengan pola High–High / Low–Low meski tidak kuat).

Getis–Ord Gi*: lebih ketat karena fokus ke concentration nilai ekstrem → hasilnya menunjukkan tidak ada konsentrasi signifikan.

Peta LISA memberikan indikasi adanya pola spasial lokal (meski lemah), sementara Getis–Ord Gi* menguatkan kesimpulan bahwa pola tersebut belum signifikan secara statistik dan distribusi kasus lebih mendekati acak.

• Apakah ada perbedaan wilayah yang ditandai sebagai klaster signifikan?

Jawab : Ada perbedaan besar antara hasil kedua peta. Peta LISA mengidentifikasi banyak klaster dan outlier spasial yang signifikan, sementara peta Getis-Ord Gi* tidak menemukan satu pun klaster yang signifikan (baik hotspot maupun coldspot).

Perbedaan ini bisa terjadi karena kedua metode memiliki tujuan dan dasar statistik yang berbeda:

LISA mengukur keterkaitan spasial lokal (local spatial autocorrelation) dan mengidentifikasi klaster serta outlier berdasarkan hubungan antara satu wilayah dan tetangganya.

Getis-Ord Gi* berfokus pada klaster nilai tinggi atau rendah yang ekstrem, bukan sekadar hubungan antara tetangga. Metode ini mengidentifikasi “hotspot” dan “coldspot” yang sangat kuat secara statistik.

Dengan kata lain, meskipun ada pola spasial yang terdeteksi oleh LISA, pola tersebut mungkin tidak cukup ekstrem atau kuat untuk memenuhi kriteria hotspot/coldspot Getis-Ord Gi*.

D. Diskusi Kritis

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

Jawab :

Analisis autokorelasi spasial adalah alat yang sangat ampuh bagi Dinas Kesehatan Kota Bandung dalam merancang strategi pencegahan penyakit menular. Teknik ini memungkinkan kita untuk tidak hanya melihat jumlah kasus, tetapi juga menemukan pola dan klaster penyakit di peta kota. Dengan begitu, kita bisa mengidentifikasi area-area mana saja yang menjadi “hotspot” atau kantong-kantong penyebaran penyakit, misalnya demam berdarah di wilayah padat penduduk atau TBC di kawasan kumuh. Informasi ini sangat krusial karena kita bisa mengalokasikan sumber daya secara lebih efisien dan tepat sasaran, seperti mengirim tim penyuluh dan petugas fogging hanya ke area yang paling membutuhkan.

Lebih dari sekadar memetakan klaster, analisis ini juga membantu kita memahami faktor-faktor pemicu di balik penyebaran penyakit dengan mengaitkan data kasus dengan faktor lingkungan seperti sanitasi atau kepadatan penduduk. Dengan wawasan ini, kita bisa mengambil tindakan yang lebih dari sekadar pengobatan, seperti berkolaborasi dengan dinas lain untuk memperbaiki kondisi sanitasi atau air bersih di area berisiko tinggi. Pada akhirnya, data spasial ini mengubah pendekatan kita dari reaktif menjadi proaktif, memungkinkan kita untuk mencegah penyakit sebelum menyebar dan menyusun kebijakan kesehatan yang lebih terencana dan berbasis bukti.

1.2 Sebutkan keterbatasan dari analisis autokorelasi spasial, misalnya terkait dengan:

• MAUP (Modifiable Areal Unit Problem) • Ukuran bobot spasial (rook, queen, k-nearest neighbors) • Masalah multiple testing pada analisis lokal

Jawab:

1. MAUP (Modifiable Areal Unit Problem)

Keterbatasan:

  • Nilai autokorelasi global (misal Moran’s I) atau pola lokal bisa berubah drastis saat skala atau zonasi berubah.

  • Membuat kesimpulan tentang “kluster” atau pola spasial menjadi tidak stabil jika unit analisis diubah.

  • Sulit membandingkan studi antarwilayah yang menggunakan pembagian administratif berbeda.

2. Ukuran bobot spasial / definisi tetangga (spatial weights)

Keterbatasan:

  • Hasil Moran’s I atau LISA sangat sensitif terhadap pilihan matriks bobot.
  • Tidak ada aturan baku untuk menentukan metode terbaik; pemilihan bersifat subjektif.
  • Perubahan definisi tetangga dapat menghasilkan pola klaster yang berbeda, termasuk arah dan kekuatan autokorelasi.

3. Masalah multiple testing pada analisis lokal

Keterbatasan:

  • Semakin banyak wilayah, semakin besar kemungkinan false positives (menyatakan ada klaster padahal terjadi secara kebetulan).
  • Tanpa koreksi multiple testing (misal Bonferroni, FDR), hasil klaster lokal bisa menyesatkan.
  • Membutuhkan interpretasi hati-hati, terutama pada peta “hotspot” atau “coldspot”.