Tugas 2

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.

    Jawaban :

    • Autokorelasi spasial positif adalah autokorelasi yang terjadi ketika lokasi yang berdekatan cenderung memiliki nilai yang mirip/sama. Artinya, wilayah dengan nilai tinggi dikelilingi wilayah dengan nilai tinggi juga, dan wilayah rendah dikelilingi wilayah rendah juga.

    • Autokorelasi spasial negatif adalah autokorelasi yang terjadi ketika lokasi yang berdekatan cenderung memiliki nilai yang berlawanan/kontras. Misalnya, suatu lokasi dengan nilai tinggi justru dikelilingi tetangga bernilai rendah, atau sebaliknya.

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

    Jawaban :

    • Contoh autokorelasi spasial positif :

      • Daerah dengan curah hujan tinggi biasanya dikelilingi daerah lain dengan curah hujan tinggi juga.

      • Daerah sawah dengan kesuburan tinggi biasanya bersebelahan dengan sawah lain yang juga subur.

    • Contoh autokorelasi spasial negatif :

      • Kawasan perumahan elite (harga tanah tinggi) sering bersebelahan dengan kampung kota (harga tanah rendah).

      • Kawasan pusat kota dengan kepadatan penduduk tinggi sering berdampingan dengan taman kota yang kepadatannya rendah.

  3. Tuliskan rumus matematis dari :

    • Moran’s 𝐼

    • Geary’s 𝐶

    • Local Moran’s 𝐼𝑖

    • Getis–Ord 𝐺𝑖 dan 𝐺∗𝑖

    Jawaban :

    • Moran’s I (Global)

      Moran’s I adalah ukuran autokorelasi spasial global yang melihat apakah nilai pada lokasi yang berdekatan cenderung mirip atau berbeda. Secara konsep mirip dengan korelasi Pearson, tapi ditambahkan bobot spasial.

      Rumus :

      \[ I = \frac{N}{S_0} \cdot \frac{\sum_i \sum_j w_{ij}(x_i - \bar{x})(x_j - \bar{x})}{\sum_i (x_i - \bar{x})^2} \]

      Keterangan :

      • \(N\): jumlah lokasi

      • \(x_i\): nilai pada lokasi \(i\)

      • \(\bar{x}\): rata-rata global

      • \(w_{ij}\): bobot spasial (hubungan antara lokasi \(i\) dan \(j\)

      • \(S_0 = \sum_i \sum_j w_{ij}\): jumlah seluruh bobot

      Interpretasi :

      • \(I > 0\) : autokorelasi positif (lokasi bertetangga mirip, high–high atau low–low

      • \(I < 0\) : autokorelasi negatif (checkerboard, high–low).

      • \(I \approx 0\) : tidak ada autokorelasi (acak).

    • Geary’s C (Global)

      Geary’s C juga ukuran autokorelasi spasial global, tetapi lebih menekankan pada perbedaan nilai antar lokasi tetangga (kontras) daripada kovarians.

      Rumus :

      \[ C = \frac{(N-1)\sum_i \sum_j w_{ij}(x_i - x_j)^2}{2S_0 \sum_i (x_i - \bar{x})^2} \]Keterangan :

      • \(N\): jumlah lokasi/observasi

      • \(x_i\): nilai variabel pada lokasi \(i\)

      • \(x_j\): nilai variabel pada lokasi \(j\) (tetangga \(i\))

      • \(\bar{x}\): rata-rata global

      • \(w_{ij}\): bobot spasial antara lokasi \(i\) dan \(j\)

      • \(S_0 = \sum_i \sum_j w_{ij}\): jumlah total bobot spasial

      Interpretasi :

      • \(C < 1\) : autokorelasi positif (tetangga mirip).

      • \(C > 1\) : autokorelasi negatif (tetangga berlawanan).

      • \(C = 1\) : tidak ada autokorelasi.

    • Local Moran’s \(I_i\)

      Local Moran’s I adalah versi lokal dari Moran’s I. Ia menunjukkan kontribusi tiap lokasi \(i\) terhadap autokorelasi global.

      Rumus :

      \[ I_i = \frac{(x_i - \bar{x})}{m_2} \sum_j w_{ij}(x_j - \bar{x}) \]dengan :

      \[ m_2 = \frac{\sum_k (x_k - \bar{x})^2}{N} \]

      Keterangan :

      • \(N\): jumlah lokasi/observasi
      • \(x_i\): nilai variabel pada lokasi \(i\)
      • \(\bar{x}\): rata-rata global
      • \(w_{ij}\): bobot spasial antara lokasi \(i\) dan \(j\)
      • \(x_j\): nilai variabel pada lokasi \(j\) (tetangga \(i\))
      • \(m_2\): varians rata-rata dari seluruh data

      Interpretasi :

      • Nilai tinggi signifikan → lokasi termasuk hot spot (tinggi dikelilingi tinggi) atau cold spot (rendah dikelilingi rendah).

      • Nilai rendah signifikan → lokasi outlier (tinggi dikelilingi rendah, atau sebaliknya).

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

      Getis–Ord digunakan untuk mendeteksi cluster lokal (hot spot analysis). Ia membandingkan jumlah nilai di sekitar lokasi \(i\) dengan jumlah total.

      • Tanpa memasukkan lokasi \(i\) (Local \(G_i\)):

        \[ 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^*_i\)):

        \[ G^*_i(d) = \frac{\sum_{j=1}^N w_{ij}(d) x_j}{\sum_{j=1}^N x_j}, \quad w_{ii}(d)=1 \]

      Keterangan :

      • \(N\): jumlah lokasi/observasi

      • \(x_i\): nilai variabel pada lokasi \(i\)

      • \(x_j\): nilai variabel pada lokasi \(j\)

      • \(w_{ij}(d)\): bobot spasial berdasarkan jarak \(d\) antara lokasi \(i\) dan \(j\)

      • \(w_{ii}(d)\): bobot untuk lokasi \(i\) sendiri (diberi 1 untuk \(G^*_i\), tidak dihitung pada \(G_i\))

  4. Jelaskan perbedaan utama antara ukuran global dan lokal

    Jawaban :

    Ukuran global seperti Moran’s I dan Geary’s C digunakan untuk melihat pola spasial secara keseluruhan. Indeks ini hanya menghasilkan satu nilai ringkasan yang mewakili seluruh wilayah studi, sehingga kita bisa mengetahui apakah secara umum data menunjukkan autokorelasi spasial positif, negatif, atau acak. Dengan kata lain, ukuran global lebih cocok dipakai untuk mengetahui adanya kecenderungan pola spasial pada level makro.

    Sebaliknya, ukuran lokal seperti Local Moran’s \(I_i\)​ dan Getis–Ord \(G^*_i\) memberikan informasi yang lebih detail pada tiap lokasi atau unit spasial. Nilai indeks dihitung untuk setiap titik, sehingga kita bisa mengetahui wilayah mana yang membentuk cluster bernilai tinggi (hot spot), cluster bernilai rendah (cold spot), atau bahkan outlier. Ukuran lokal ini sangat bermanfaat ketika kita ingin mengidentifikasi area spesifik yang menjadi pusat suatu fenomena, misalnya daerah dengan kasus penyakit tinggi atau kawasan rawan kriminalitas.
    Ukuran global dan lokal sama-sama digunakan untuk mengukur autokorelasi spasial, tetapi fokus dan detail informasinya berbeda. Berikut adalah tabel perbedaan ukuran global dan lokal :

    Aspek Ukuran Global (Moran’s I, Geary’s C) Ukuran Lokal (Local Moran’s I, Getis–Ord G*_i)
    Cakupan analisis Seluruh wilayah (ringkasan global) Setiap lokasi / unit spasial
    Output Satu nilai indeks untuk keseluruhan data Nilai indeks untuk tiap lokasi
    Fokus utama Pola umum: ada/tidaknya autokorelasi spasial Pola setempat: cluster (hot spot / cold spot) dan outlier
    Pertanyaan “Apakah secara keseluruhan ada pengelompokan?” “Di titik mana pengelompokan atau anomali terjadi?”
    Kegunaan Uji awal pola spasial global Identifikasi wilayah prioritas / area khusus
    Contoh hasil Moran’s I = 0,45 → ada autokorelasi positif global Kelurahan X = hot spot, Kelurahan Y = cold spot

Bagian B. Analisis Data (Simulasi)

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

    Jawaban :
    Dalam simulasi ini, digunakan grid buatan (poligon simulasi) untuk mewakili 30 kecamatan di Kota Bandung, sehingga memungkinkan pemodelan distribusi kasus TBC secara spasial meskipun data asli tidak tersedia.

    library(sf)
    ## Linking to GEOS 3.13.0, GDAL 3.10.1, PROJ 9.5.1; sf_use_s2() is TRUE
    library(sp)
    library(spdep)
    ## Loading required package: spData
    ## 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)
    ## 
    ## 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(mapview)
    library(spData)
    # ==== Opsi A: menggunakan file RDS Anda ====
    setwd("C:/Users/DEDEN GUNAWAN/OneDrive/Documents/Bahan Kuliah/Semester 5/Analisis Spasial")
    Indo_Kec <- readRDS("gadm36_IDN_3_sp.rds")
    Bandung <- Indo_Kec[Indo_Kec$NAME_2 == "Kota Bandung", ]
    Bandung$id <- seq_len(nrow(Bandung))
    Bandung_sf <- sf::st_as_sf(Bandung)
    
    # Untuk keperluan *knit* tanpa data eksternal, siapkan grid mock 30 poligon (DEMO).
    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
    }
    
    Bandung_sf <- sf::st_make_valid(Bandung_sf)
    Bandung_sf$id <- if(!"id" %in% names(Bandung_sf)) seq_len(nrow(Bandung_sf)) else Bandung_sf$id
    
    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.

    Jawaban :

    Data yang digunakan merupakan data simulasi jumlah kasus TBC per 100.000 penduduk di 30 kecamatan Kota Bandung. Jumlah kasus dihasilkan dengan distribusi Poisson, di mana rata-rata kasus dibuat berbeda pada tiap kecamatan agar lebih mendekati variasi kondisi nyata antar wilayah.

    set.seed(123)
    
    # Neighbor queen
    nb <- spdep::poly2nb(sf::as_Spatial(Bandung_sf), queen = TRUE)
    # Listw untuk analitik global/lokal (row-standar & biner)
    lwW <- spdep::nb2listw(nb, style="W") # row-standardized
    lwB <- spdep::nb2listw(nb, style="B") # binary (untuk raw G)
    
    N <- nrow(Bandung_sf)
    z <- rnorm(N)
    lz <- spdep::lag.listw(lwW, z)
    
    # Parameter untuk TBC 
    beta0 <- 1
    beta1 <- 0.4    # efek faktor acak z
    beta2 <- 0.7    # efek lag spasial
    lambda <- exp(beta0 + beta1*scale(z) + beta2*scale(lz))
    
    # Populasi tiap unit (3.000–8.000)
    pop <- round(runif(N, 3000, 8000))
    
    # Kasus TBC simulasi (Poisson)
    cases <- rpois(N, lambda = lambda * (pop/10000))
    
    TBC <- dplyr::tibble(
      id = Bandung_sf$id,
      pop = pop,
      cases = cases,
      rate100k = (cases/pop)*100000   # ganti ke per 100.000
    )
    
    # Merge ke shapefile Bandung
    Bandung_TBC <- dplyr::left_join(Bandung_sf, TBC, by="id")
    
    head(TBC)
    ## # A tibble: 6 × 4
    ##      id   pop cases rate100k
    ##   <int> <dbl> <int>    <dbl>
    ## 1     1  6326     0      0  
    ## 2     2  3474     1     28.8
    ## 3     3  4920     1     20.3
    ## 4     4  4372     1     22.9
    ## 5     5  7073     2     28.3
    ## 6     6  5243     1     19.1
  3. Buat peta choropleth dari data simulasi tersebut.

    Jawaban :

    Setelah data simulasi kasus penyakit menular pada 30 kecamatan di Kota Bandung berhasil dibuat, langkah selanjutnya adalah memvisualisasikannya ke dalam bentuk peta choropleth. Peta choropleth akan membantu memperlihatkan perbedaan jumlah kasus antar kecamatan secara visual, sehingga pola distribusi spasial lebih mudah dipahami dibandingkan hanya melihat tabel angka.

    Berikut syntax untuk membuat peta choropleth menggunakan ggplot2 dan data spasial kecamatan Kota Bandung :

    # Plot
    ggplot(Bandung_TBC) +
      geom_sf(aes(fill = rate100k), color="white", size=0.2) +
      scale_fill_viridis_c(option="plasma") +
      labs(
        title="Rate TBC (per 100.000) — Simulasi",
        fill="Rate"
      ) +
      theme_minimal()

  4. Apa pola spasial yang terlihat secara visual?

    Jawaban :

    Berdasarkan peta tematik yang ditampilkan, terlihat pola spasial distribusi kasus TBC (per 100.000 penduduk) yang tidak merata di wilayah tersebut. Secara visual, wilayah bagian utara cenderung memiliki tingkat kasus TBC yang lebih tinggi (ditunjukkan dengan warna kuning hingga merah), sedangkan wilayah tengah hingga selatan didominasi oleh warna ungu tua hingga biru, yang menandakan tingkat kasus TBC relatif rendah.

    Dengan kata lain, terdapat kluster konsentrasi kasus TBC di bagian utara yang menurun intensitasnya ke arah selatan. Hal ini mengindikasikan kemungkinan adanya faktor-faktor lingkungan, sosial, atau akses kesehatan yang berbeda antar wilayah, sehingga memunculkan perbedaan tingkat TBC secara spasial.

Bagian C. Pengukuran Autokorelasi

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

    a) Berapa nilai Moran’s I?

    Jawaban :

    Berikut adalah perhitungan nilai Moran’s I menggunakan software R :

    library(spdep)
    moran.test(Bandung_TBC$rate100k, lwW,
                       randomisation = TRUE,
                       alternative = "two.sided")
    ## 
    ##  Moran I test under randomisation
    ## 
    ## data:  Bandung_TBC$rate100k  
    ## weights: lwW    
    ## 
    ## Moran I statistic standard deviate = 4.87, p-value = 1.116e-06
    ## alternative hypothesis: two.sided
    ## sample estimates:
    ## Moran I statistic       Expectation          Variance 
    ##        0.49477925       -0.03448276        0.01181075

    Berdasarkan output di atas, diperoleh nilai Moran’s I sebesar 0,4948. Angka ini diperoleh dari perhitungan statistik Moran yang mengukur sejauh mana nilai-nilai variabel (di sini : rate TBC per 10.000) mirip di lokasi-lokasi yang berdekatan.

    b) Apakah signifikan secara statistik (uji permutasi)?

    Jawaban :

    Berikut adalah pengujian hipotesis untuk hasil Moran’s I :

    Hipotesis

    H₀ : Tidak ada autokorelasi spasial (nilai kasus TBC terdistribusi acak antarwilayah).

    H₁ : Ada autokorelasi spasial (nilai kasus TBC tidak acak, melainkan membentuk pola spasial).

    Kriteria Uji : Tolak H0 jika pvalue < α, dimana α = 5%

    Dari hasil uji, diperoleh standard deviate = 4,87 dan p-value = 1.116e-06. Karena p-value < 0.05, maka H₀ ditolak. Dengan demikian, hasil Moran’s I terbukti signifikan secara statistik (ada autokorelasi spasial).

    c) Apa artinya bagi pola spasial penyakit?

    Jawaban :

    Penolakan H₀ berarti terdapat autokorelasi spasial positif yang signifikan pada kasus TBC. Dengan kata lain, wilayah dengan angka TBC tinggi cenderung berdekatan dengan wilayah lain yang juga tinggi, begitu pula untuk wilayah dengan angka rendah. Hal ini menunjukkan pola clustering spasial, bukan pola acak.

  2. Hitung Geary’s C.

    Berikut adalah perhitungan nilai Geary’s Cmenggunakan software R :

    geary_res <- spdep::geary.test(Bandung_TBC$rate100k, lwW,
    randomisation = TRUE, alternative = "two.sided")
    geary_res
    ## 
    ##  Geary C test under randomisation
    ## 
    ## data:  Bandung_TBC$rate100k 
    ## weights: lwW   
    ## 
    ## Geary C statistic standard deviate = 4.7012, p-value = 2.586e-06
    ## alternative hypothesis: two.sided
    ## sample estimates:
    ## Geary C statistic       Expectation          Variance 
    ##        0.42059049        1.00000000        0.01518971

    a) Bagaimana perbandingannya dengan Moran’s I?

    Jawaban :

    Dari hasil uji, diperoleh Geary’s C = 0,421 dengan p-value = 2,586e-06 (sangat signifikan). Karena nilai Geary’s C < 1, maka sebaran kasus TBC di Kota Bandung mengindikasikan adanya autokorelasi spasial positif. Sebelumnya, nilai Moran’s I = 0,495 dengan p-value 0,05 juga menunjukkan autokorelasi spasial positif yang signifikan. Jadi, kedua ukuran memberikan kesimpulan yang konsisten bahwa distribusi kasus TBC tidak acak, melainkan membentuk pola clustering spasial. Hal yang membedakan hanya pada skala interpretasi dimana :

    • Moran’s I > 0 menunjukkan kecenderungan clustering.

    • Geary’s C < 1 juga menunjukkan kecenderungan clustering.

    b) Jelaskan perbedaan sensitivitas kedua ukuran ini.

    Jawaban :

    Moran’s I mengukur korelasi antara nilai suatu wilayah dengan rata-rata nilai tetangganya. Ia lebih sensitif dalam mendeteksi pola global, yaitu apakah secara umum ada kecenderungan wilayah mirip berkelompok. Sementara itu, Geary’s C didasarkan pada selisih kuadrat (squared differences) antar pasangan tetangga. Karena sifatnya menghitung perbedaan lokal, Geary’s C lebih sensitif terhadap variasi lokal dan outlier spasial (wilayah yang sangat berbeda dari tetangganya). Dengan kata lain, Moran’s I cenderung menyoroti struktur spasial global, sementara Geary’s C lebih tajam dalam menangkap anomali atau heterogenitas lokal.

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

    Berikut adalah perhitungan nilai Local Moran’s I (LISA) menggunakan software R :

    x <- scale(Bandung_TBC$rate100k)[,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")
    lisa_df
    ##                Ii            Ei           Vi           Zi Pi.two.sided
    ## 6199  0.227950575 -2.835097e-02 0.0927609534  0.841528097 0.4000521512
    ## 6210  0.090053515 -2.354772e-03 0.0157314324  0.736761268 0.4612675407
    ## 6221  0.149374432 -7.014169e-03 0.0234534706  1.021178198 0.3071700199
    ## 6223  0.100498641 -5.349934e-03 0.0218553907  0.715987976 0.4739987736
    ## 6224 -0.012909895 -2.564826e-03 0.0171311225 -0.079038823 0.9370017432
    ## 6225  0.124456383 -7.914620e-03 0.0322491983  0.737111859 0.4610543277
    ## 6226  0.159616403 -2.526069e-03 0.0364454901  0.849326928 0.3956994010
    ## 6227 -0.112736670 -2.835097e-02 0.0927609534 -0.277067927 0.7817279485
    ## 6228  0.257327699 -1.180656e-02 0.0392874055  1.357820358 0.1745206936
    ## 6200  0.001794476 -6.734929e-05 0.0004509693  0.087672901 0.9301366585
    ## 6201 -0.419717561 -6.864646e-02 0.4281302957 -0.536546171 0.5915811350
    ## 6202  0.018083801 -1.081516e-03 0.0044371371  0.287716376 0.7735638539
    ## 6203  0.016742933 -1.098726e-02 0.1009036086  0.087297053 0.9304353966
    ## 6204  0.089864838 -8.837607e-04 0.0045410382  1.346673615 0.1780853735
    ## 6205  0.042463322 -1.824917e-04 0.0026391306  0.830129735 0.4064654371
    ## 6206 -0.053828701 -1.855176e-02 0.0936390275 -0.115282271 0.9082213906
    ## 6207  4.636687125 -2.616724e-01 1.7939996003  3.657122327 0.0002550627
    ## 6208  0.105572085 -9.643661e-04 0.0064515809  1.326371404 0.1847167060
    ## 6209  0.604453910 -3.297194e-02 0.1639789222  1.574112101 0.1154615355
    ## 6211 -0.029144005 -2.835097e-02 0.1844678051 -0.001846428 0.9985267642
    ## 6212 -0.065392542 -8.436127e-04 0.0043349194 -0.980389218 0.3268940297
    ## 6213  0.583944167 -2.835097e-02 0.1844678051  1.425609301 0.1539811500
    ## 6214  0.294282671 -2.835097e-02 0.1416712743  0.857173525 0.3913489918
    ## 6215  0.133818695 -2.343056e-03 0.0156533450  1.088307318 0.2764594610
    ## 6216 -0.515442979 -3.500047e-02 0.3136290317 -0.857893349 0.3909513572
    ## 6217  0.596907616 -2.835097e-02 0.1416712743  1.661187919 0.0966757112
    ## 6218  1.408160373 -3.975591e-02 0.1963305185  3.267755436 0.0010840400
    ## 6219  5.738757839 -3.099192e-01 3.0934663451  3.439043718 0.0005837730
    ## 6220  0.334720883 -1.262349e-02 0.0419710853  1.695450723 0.0899899506
    ## 6222  0.337017458 -2.835097e-02 0.1416712743  0.970711370 0.3316920285

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

    Jawaban :

    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_TBC, lisa_df) |>
    dplyr::mutate(quad = ifelse(Pi.two.sided <= alpha, quad, "Not significant"))
    
    # Daftar kecamatan tiap kategori
    High_High <- Bandung_LISA$NAME_3[Bandung_LISA$quad == "High-High"]
    Low_Low   <- Bandung_LISA$NAME_3[Bandung_LISA$quad == "Low-Low"]
    High_Low  <- Bandung_LISA$NAME_3[Bandung_LISA$quad == "High-Low (Outlier)"]
    Low_High  <- Bandung_LISA$NAME_3[Bandung_LISA$quad == "Low-High (Outlier)"]
    
    cat("Kecamatan kategori High-High:\n")
    ## Kecamatan kategori High-High:
    print(High_High)
    ## [1] "Cidadap"  "Sukajadi" "Sukasari"
    cat("\nKecamatan kategori Low-Low:\n")
    ## 
    ## Kecamatan kategori Low-Low:
    print(Low_Low)
    ## character(0)
    cat("\nKecamatan kategori High-Low (Outlier):\n")
    ## 
    ## Kecamatan kategori High-Low (Outlier):
    print(High_Low)
    ## character(0)
    cat("\nKecamatan kategori Low-High (Outlier):\n")
    ## 
    ## Kecamatan kategori Low-High (Outlier):
    print(Low_High)
    ## character(0)

    Berdasarkan hasil analisis Local Moran’s I (LISA), diperoleh kategori sebagai berikut:

    • High-High : Kecamatan Cidadap, Sukajadi, dan Sukasari termasuk dalam klaster hotspot, yaitu wilayah dengan angka kasus TBC tinggi yang berdekatan dengan wilayah bertetangga yang juga tinggi.

    • Low-Low: Tidak ada kecamatan yang termasuk kategori ini, artinya tidak ditemukan coldspot (wilayah dengan kasus rendah yang berkelompok dengan wilayah rendah lain).

    • High-Low (Outlier) : Tidak ada kecamatan yang termasuk kategori ini, sehingga tidak ada wilayah dengan angka kasus tinggi yang dikelilingi tetangga rendah.

    • Low-High (Outlier) : Tidak ada kecamatan yang termasuk kategori ini, sehingga tidak ada wilayah dengan angka kasus rendah yang dikelilingi tetangga tinggi.

    Dengan demikian, pola spasial TBC di Kota Bandung hanya menunjukkan klaster High-High di tiga kecamatan tersebut, sedangkan kategori lainnya tidak muncul secara signifikan.

    b) Buat peta cluster LISA.

    Jawaban :

    Berikut adalah peta Local Indicators of Spatial Association (LISA) yang menggambarkan distribusi klaster spasial kasus TBC di Kota Bandung :

    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()

    c) Apa interpretasi hasil ini untuk kasus penyakit menular?

    Jawaban :

    Hasil analisis LISA menunjukkan bahwa kasus TBC di Kota Bandung membentuk klaster spasial High-High pada Kecamatan Cidadap, Sukajadi, dan Sukasari. Interpretasi dari pola ini adalah bahwa wilayah-wilayah tersebut memiliki tingkat kejadian TBC yang tinggi, dan dikelilingi oleh tetangga yang juga tinggi, sehingga membentuk suatu hotspot penyebaran penyakit.

    Dalam konteks penyakit menular, temuan ini sangat penting karena menunjukkan adanya potensi penularan yang lebih intensif di area tersebut akibat kedekatan geografis, kepadatan penduduk, dan kemungkinan adanya faktor lingkungan atau sosial yang mendukung penyebaran TBC. Dengan kata lain, penyakit cenderung tidak terdistribusi acak, melainkan terkonsentrasi di lokasi tertentu.

    Ketiadaan klaster Low-Low maupun outlier (High-Low dan Low-High) mengindikasikan bahwa tidak ada wilayah dengan risiko rendah yang saling berkelompok, maupun wilayah dengan kondisi anomali dibandingkan tetangganya. Hal ini menegaskan bahwa perhatian utama dalam pengendalian TBC perlu difokuskan pada area klaster hotspot.

  4. Hitung Getis–Ord 𝐺∗𝑖

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

    Jawaban :

    # Data asli
    x_raw <- Bandung_TBC$rate100k
    sum_x <- sum(x_raw)
    
    # Matriks bobot biner (tidak distandarisasi)
    Wb <- spdep::listw2mat(lwB) # diag = 0
    
    # Hitung G* (mengikutkan i)
    Wb_star <- Wb; diag(Wb_star) <- 1
    num_Gs <- as.numeric(Wb_star %*% x_raw) 
    den_Gs <- sum_x
    G_star_raw <- num_Gs / den_Gs
    
    # Z-score Getis-Ord G*
    Gz <- spdep::localG(x_raw, listw = lwW)
    
    # Gabung ke shapefile
    Bandung_G <- dplyr::mutate(
      Bandung_TBC,
      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"
      )
    )
    
    # Tampilkan daftar kecamatan
    Hotspot <- Bandung_G$NAME_3[Bandung_G$hotcold == "Hot spot (p<0.05)"]
    Coldspot <- Bandung_G$NAME_3[Bandung_G$hotcold == "Cold spot (p<0.05)"]
    
    cat("Kecamatan kategori Hot spot:\n")
    ## Kecamatan kategori Hot spot:
    print(Hotspot)
    ## [1] "Cidadap"  "Sukajadi" "Sukasari"
    cat("\nKecamatan kategori Cold spot:\n")
    ## 
    ## Kecamatan kategori Cold spot:
    print(Coldspot)
    ## character(0)

    Berdasarkan hasil analisis Getis–Ord G*, diperoleh bahwa kecamatan yang termasuk kategori Hot spot adalah Cidadap, Sukajadi, dan Sukasari. Ketiga wilayah ini memiliki tingkat kasus TBC yang tinggi dan secara spasial dikelilingi oleh wilayah bertetangga yang juga tinggi, sehingga terbentuk klaster konsentrasi kasus (hotspot).

    Sementara itu, tidak ada kecamatan yang termasuk kategori Cold spot. Artinya, tidak ditemukan wilayah dengan kasus TBC rendah yang saling berdekatan secara signifikan sehingga membentuk klaster rendah (coldspot).

    Dengan demikian, konsentrasi kasus TBC di Kota Bandung hanya teridentifikasi di beberapa kecamatan dengan nilai tinggi, tanpa adanya klaster rendah yang signifikan.

    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()

    ggplot(Bandung_G) +
      geom_sf(aes(fill = hotcold), color="white", size=0.2) +
      scale_fill_manual(values=c("Hot spot (p<0.05)"="red",
                                 "Cold spot (p<0.05)"="blue",
                                 "Not significant"="grey85")) +
      labs(title="Peta Hotspot dan Coldspot (Getis–Ord G*)", fill="Kategori") +
      theme_minimal()

    b) Bandingkan hasilnya dengan peta LISA.

    Jawaban :

    Hasil analisis Getis–Ord G* menunjukkan adanya hotspot di Kecamatan Cidadap, Sukajadi, dan Sukasari. Jika dibandingkan dengan hasil peta LISA, ketiga kecamatan tersebut juga masuk dalam kategori High-High, yaitu wilayah dengan kasus TBC tinggi yang dikelilingi oleh tetangga dengan nilai tinggi pula. Dengan demikian, kedua metode memberikan hasil yang konsisten dalam mengidentifikasi adanya klaster signifikan pada wilayah yang sama.

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

    Jawaban :

    Tidak terdapat perbedaan wilayah yang signifikan antara hasil analisis Getis–Ord G* dan LISA. Kedua metode sama-sama menandai klaster di Cidadap, Sukajadi, dan Sukasari sebagai area konsentrasi kasus TBC. Perbedaannya hanya terletak pada sudut pandang pengukuran dimana LISA menekankan pada hubungan antara suatu wilayah dengan tetangga langsung, sedangkan Getis–Ord G* melihat akumulasi nilai dalam klaster. Namun, dalam kasus ini keduanya menghasilkan pola spasial yang sejalan.

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?

    Jawaban :

    Analisis autokorelasi spasial membantu dinas kesehatan untuk tidak hanya melihat jumlah kasus penyakit secara keseluruhan, tetapi juga pola distribusinya di ruang. Dengan mengetahui adanya klaster hotspot (misalnya di Cidadap, Sukajadi, dan Sukasari), dinas kesehatan dapat :

    • Memfokuskan sumber daya (tenaga medis, obat-obatan, dan program pencegahan) pada wilayah dengan konsentrasi kasus tinggi.

    • Menyusun strategi berbasis lokasi, misalnya melakukan penyuluhan, pemeriksaan massal, atau perbaikan lingkungan di wilayah hotspot.

    • Mengantisipasi penyebaran ke wilayah sekitar, karena kedekatan spasial meningkatkan risiko meluasnya penularan.

    • Memonitor efektivitas intervensi, dengan melihat apakah pola klaster berubah setelah kebijakan diterapkan.

    Dengan demikian, hasil autokorelasi spasial menjadi dasar untuk kebijakan kesehatan berbasis bukti (evidence-based policy) yang lebih tepat sasaran dan efisien.

  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

    Jawaban :

    Berikut adalah keterbatasan analisis autokorelasi spasial :

    • MAUP (Modifiable Areal Unit Problem) : Masalah statistik yang muncul karena hasil analisis spasial tergantung pada unit wilayah yang dipakai (misalnya kecamatan, kelurahan, atau RW). Contoh : Pola hotspot yang jelas di tingkat kecamatan bisa jadi hilang atau berbeda kalau analisis dilakukan di tingkat kelurahan. Berikut adalah keterbatasan dari MAUP :

      • Hasil analisis bisa berubah tergantung pada bagaimana batas wilayah administratif atau unit analisis didefinisikan (misalnya tingkat kecamatan vs kelurahan).

      • Pola hotspot yang terlihat di tingkat kecamatan bisa menghilang atau berbeda jika analisis dilakukan pada tingkat kelurahan.

      Artinya, hasil analisis sangat dipengaruhi oleh skala spasial dan cara agregasi data.

    • Ukuran bobot spasial (rook, queen, k-nearest neighbors) : Matriks yang mendefinisikan siapa “tetangga” dari setiap wilayah, dan seberapa kuat pengaruh tetangga itu. Berikut adalah keterbatasan dari ukuran bobot spasial :

      • Pwmilihan matriks bobot spasial (misalnya rook contiguity, queen contiguity, atau k-nearest neighbors) dapat menghasilkan hasil analisis yang berbeda. Misalnya, dengan queen lebih banyak tetangga dihitung dibandingkan rook, sehingga pola klaster bisa terlihat lebih luas.

      • Tidak ada satu pilihan bobot spasial yang “paling benar”; interpretasi hasil harus hati-hati karena sangat dipengaruhi oleh asumsi struktur kedekatan yang dipakai.

    • Masalah multiple testing pada analisis lokal

      Pada analisis lokal (LISA atau Getis–Ord G*), setiap unit spasial diuji secara terpisah. Jika ada banyak wilayah, maka dilakukan banyak uji statistik sekaligus (multiple testing), sehingga peluang mendapatkan hasil signifikan secara kebetulan (false positive) meningkat. Misalnya, dengan tingkat signifikansi 5% pada 30 kecamatan, secara statistik mungkin ada 1–2 wilayah yang teridentifikasi signifikan hanya karena faktor kebetulan. Oleh karena itu, perlu dilakukan koreksi multiple testing (misalnya Bonferroni atau FDR) agar hasil lebih reliabel.