Jelaskan dengan kata-kata Anda apa yang dimaksud dengan autokorelasi spasial positif dan autokorelasi spasial negatif.
Autokorelasi spasial positif berarti wilayah yang berdekatan cenderung memiliki karakteristik yang serupa. Misalnya, kemiskinan suatu daerah dengan nilai tinggi biasanya dikelilingi oleh daerah bernilai tinggi pula, sedangkan daerah dengan nilai rendah juga cenderung berdekatan dengan daerah bernilai rendah. Pola ini menggambarkan adanya pengelompokan (clustering) dalam ruang.
Sebaliknya, autokorelasi spasial negatif muncul ketika wilayah yang berdekatan justru memiliki karakteristik yang berlawanan. Misalnya, suatu lokasi dengan nilai tinggi dikelilingi oleh lokasi bernilai rendah, atau sebaliknya. Pola ini menunjukkan adanya kecenderungan penyebaran yang saling menjauh atau bersifat menyebar (dispersi).
Berikan contoh sederhana dari fenomena yang bisa menunjukkan masing-masing pola tersebut.
Autokorelasi spasial positif : Fenomena tingkat stunting di Jawa Barat seringkali menunjukkan pola pengelompokan. Misalnya, beberapa kabupaten di wilayah Pantura (Indramayu, Subang, dan Karawang) memiliki prevalensi stunting relatif tinggi dan saling berdekatan. Hal ini terjadi karena karakteristik sosial-ekonomi, pola konsumsi, dan akses sanitasi di wilayah tersebut relatif serupa.
Autokorelasi spasial negatif : Contohnya dapat ditemukan pada harga tanah di Kota Bandung dan sekitarnya. Kawasan pusat kota Bandung (misalnya Dago, Cihampelas) memiliki harga tanah yang sangat tinggi, sementara wilayah yang berbatasan langsung seperti sebagian Kabupaten Bandung atau Bandung Barat memiliki harga tanah yang jauh lebih rendah. Kondisi ini mencerminkan adanya perbedaan mencolok antar lokasi yang saling berdekatan.
Tuliskan rumus matematis dari:
Moran’s I \[ 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:
Geary’s C \[ C = \frac{(N-1) \sum_{i=1}^{N} \sum_{j=1}^{N} w_{ij}(x_i - x_j)^2} {2 S_0 \sum_{i=1}^{N} (x_i - \bar{x})^2} \]
Keterangan:
\(N\): jumlah unit spasial (lokasi).
\(x_i, x_j\): nilai variabel pada lokasi \(i\) dan \(j\).
\(\bar{x}\): rata-rata nilai variabel.
\(w_{ij}\): bobot spasial antara lokasi \(i\) dan \(j\).
\(S_0 = \sum_{i=1}^{N} \sum_{j=1}^{N} w_{ij}\): total bobot spasial.
Local Moran’s \(I_i\) \[ I_i = \frac{x_i - \bar{x}}{m_2} \sum_{j=1}^{N} w_{ij}(x_j - \bar{x}) \]
dengan\[ m_2 = \frac{1}{N} \sum_{k=1}^{N} (x_k - \bar{x})^2 \]
Keterangan:
\(N\): jumlah unit spasial (lokasi).
\(x_i\): nilai variabel pada lokasi ke-\(i\).
\(\bar{x}\): rata-rata nilai variabel.
\(w_{ij}\): bobot spasial antara lokasi \(i\) dan \(j\).
\(m_2\): varian rata-rata dari nilai variabel.
Getis-Ord \(G_i\) dan \(G_i^*\)
Rumusan Matematis statistik lokal Getis–Ord tidak terstandar adalah
rasio massa tetangga dengan massa total (Ord &
Getis, 1995).
Untuk suatu band jarak \(d\) (atau
bobot ketetanggaan biner) dengan \(w_{ij}(d)
\in \{0,1\}\):
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 \text{dengan } w_{ii}(d) = 1 \]
Keterangan:
\(x_j\): nilai variabel pada lokasi \(j\).
\(w_{ij}(d)\): bobot spasial yang merepresentasikan kedekatan antara lokasi \(i\) dan \(j\) berdasarkan jarak \(d\).
\(G_i(d)\): menghitung konsentrasi nilai di sekitar lokasi \(i\), tanpa memasukkan lokasi itu sendiri.
\(G_i^*(d)\): menghitung konsentrasi nilai di sekitar lokasi \(i\), dengan memasukkan lokasi itu sendiri.
Ukuran global (seperti Moran’s I dan Geary’s C) memberikan gambaran umum tentang ada atau tidaknya autokorelasi spasial pada keseluruhan wilayah studi. Artinya, kita hanya memperoleh satu nilai ringkasan yang mewakili pola spasial secara menyeluruh. Namun, ukuran ini tidak mampu menunjukkan di mana tepatnya pola pengelompokan (clustering) atau penyebaran terjadi.
Ukuran lokal (seperti Local Moran’s I dan Getis–Ord) berfokus pada setiap lokasi secara individu. Ukuran ini dapat mengidentifikasi pola spasial setempat, misalnya mendeteksi hot spot (lokasi dengan nilai tinggi yang dikelilingi nilai tinggi), cold spot (nilai rendah dikelilingi rendah), atau bahkan outlier spasial.
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(spData)
set.seed(58)
setwd("C:/Users/Fadhail/Documents/Semester 5/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)
if(!exists("Bandung_sf")) {
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") + theme_minimal()
# Membuat objek neighbor
nb <- spdep::poly2nb(sf::as_Spatial(Bandung_sf), queen = TRUE)
# Membuat bobot spasial
lwW <- spdep::nb2listw(nb, style="W") # row-standardized
lwB <- spdep::nb2listw(nb, style="B") # binary (untuk raw G)
# Simulasi data
N <- nrow(Bandung_sf)
z <- rnorm(N)
lz <- spdep::lag.listw(lwW, z)
# Parameter model simulasi
beta0 <- 1.9
beta1 <- 0.75
beta2 <- 1.21
# Variabel acak untuk heterogenitas spasial
N <- nrow(Bandung_sf)
z <- rnorm(N)
lz <- rnorm(N)
# Rata-rata (lambda) untuk kasus TBC
lambda <- exp(beta0 + beta1*scale(z) + beta2*scale(lz))
# Populasi simulasi (acak antara 3.000–8.000 per kecamatan)
pop <- round(runif(N, 3000, 8000))
# Kasus TBC per kecamatan (Poisson)
cases <- rpois(N, lambda = lambda * (pop/10000))
# Buat tabel data TBC
TBC <- dplyr::tibble(
id = Bandung_sf$id,
pop = pop,
cases = cases,
rate10k = (cases/pop) * 10000
)
# Gabungkan ke shapefile grid
Bandung_merged <- dplyr::left_join(Bandung_sf, TBC, by = "id")
# Plot peta hasil simulasi
ggplot(Bandung_merged) +
geom_sf(aes(fill = rate10k), color = "white", size = 0.2) +
scale_fill_viridis_c(option = "magma") +
labs(title = "Rate Malaria (per 10.000) – Simulasi",
fill = "Rate") +
theme_minimal()
Peta simulasi ini menggambarkan distribusi tingkat malaria per 10.000 penduduk di suatu wilayah. Terlihat adanya variasi spasial yang cukup mencolok: sebagian besar kecamatan berada pada kategori rendah hingga sangat rendah (ditunjukkan dengan warna ungu tua hingga hitam), sementara beberapa kecamatan tertentu di bagian barat dan utara menunjukkan tingkat malaria yang jauh lebih tinggi (dengan gradasi oranye hingga kuning terang). Pola ini mengindikasikan adanya kemungkinan pengelompokan kasus malaria di lokasi tertentu yang dapat berkaitan dengan kondisi lingkungan, kepadatan penduduk, maupun faktor akses kesehatan. Dengan kata lain, fenomena ini menekankan pentingnya analisis spasial lebih lanjut, baik pada level global untuk melihat kecenderungan keseluruhan maupun pada level lokal untuk mengidentifikasi hot spot malaria yang memerlukan prioritas intervensi.
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 = -0.97624, p-value = 0.3289
## alternative hypothesis: two.sided
## sample estimates:
## Moran I statistic Expectation Variance
## -0.126730947 -0.034482759 0.008929054
Berapa nilai Moran’s I?
Nilai Moran’s I = -0.1267
Apakah signifikan secara statistik (uji
permutasi)?
Hasil tersebut menunjukkan bahwa p-value = 0.3289 > \(\alpha\) (5%). Artinya, tidak signifikan
secara statistik, sehingga kita tidak dapat menolak hipotesis nol (tidak
autokorelasi spasial)
Apa artinya bagi pola spasial penyakit?
Interpretasinya, distribusi kasus malaria per 10.000 penduduk di Kota
Bandung tidak menunjukkan pola spasial yang teratur
(baik pengelompokan/cluster maupun penyebaran/dispersi yang signifikan).
Dengan kata lain, kasus cenderung menyebar secara acak di seluruh
wilayah, sehingga faktor spasial kemungkinan tidak berperan dominan
dalam pola penyebaran penyakit ini.
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 = -0.54121, p-value = 0.5884
## alternative hypothesis: two.sided
## sample estimates:
## Geary C statistic Expectation Variance
## 1.07328340 1.00000000 0.01833497
Bagaimana perbandingannya dengan Moran’s I
Nilai Moran’s I = -0.1267 dengan p-value = 0.3289 → tidak signifikan.
Nilai Geary’s C = 1.0732 dengan p-value = 0.5884 → juga tidak signifikan.
Keduanya konsisten menunjukkan tidak ada autokorelasi spasial pada data kasus penyakit per 10.000 penduduk di Kota Bandung. Dengan kata lain, pola sebaran penyakit cenderung acak, tanpa indikasi pengelompokan (clustering) ataupun dispersi.
Jelaskan perbedaan sensitivitas kedua ukuran ini.
Moran’s I lebih sensitif dalam mendeteksi pola global (misalnya apakah ada kecenderungan besar terhadap clustering nilai tinggi atau rendah secara keseluruhan wilayah).
Geary’s C lebih sensitif dalam mendeteksi
perbedaan lokal antar-lokasi yang berdekatan (misalnya kontras
nilai tinggi di samping rendah).
Dengan demikian, meskipun keduanya sama-sama mengukur autokorelasi
spasial, Geary’s C biasanya memberikan hasil yang lebih ketat karena
fokus pada variasi lokal, sementara Moran’s I lebih umum menangkap
kecenderungan pola besar di seluruh wilayah.
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()
Interpretasi : Hasil analisis Local Moran’s I (LISA) menunjukkan adanya satu kecamatan di bagian utara Kota Bandung yang termasuk kategori Low–High (outlier), yaitu wilayah dengan kasus penyakit menular relatif rendah tetapi dikelilingi oleh kecamatan dengan kasus lebih tinggi. Hasil ini mengindikasikan adanya anomali spasial, di mana wilayah tersebut tidak mengikuti pola tetangganya. Dalam konteks epidemiologi, kondisi ini dapat ditafsirkan sebagai tanda bahwa kecamatan tersebut mungkin memiliki faktor protektif tertentu—seperti intervensi kesehatan, kondisi lingkungan, atau perilaku masyarakat yang lebih baik—namun di sisi lain juga berpotensi menjadi wilayah rentan apabila terjadi mobilitas penduduk yang tinggi dari area sekitarnya.
x_raw <- Bandung_merged$rate10k
sum_x <- sum(x_raw)
# Matriks bobot biner (tidak distandarisasi)
Wb <- spdep::listw2mat(lwB) # diag=0 secara default
# G_i (tanpa i)
num_G <- as.numeric(Wb %*% x_raw) # Σ_{ji} w_ij x_j
den_G <- (sum_x - x_raw) # Σ_{ji} 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 (p0.05)",
z_Gistar <= -1.96 ~ "Cold spot (p0.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.01461 Min. :0.03105 Min. :-0.9921 MULTIPOLYGON :30
## 1st Qu.:0.05193 1st Qu.:0.10152 1st Qu.:-0.7634 epsg:NA : 0
## Median :0.10808 Median :0.13231 Median :-0.4385 +proj=long...: 0
## Mean :0.14092 Mean :0.17160 Mean :-0.1248
## 3rd Qu.:0.18705 3rd Qu.:0.27236 3rd Qu.: 0.1846
## Max. :0.33443 Max. :0.33835 Max. : 2.3459
Nilai statistik \(z_{G_i^*}\) yang diperoleh berkisar antara -0.9921 hingga 2.3459, dengan rata-rata sekitar -0.1248. Dalam aturan interpretasi, lokasi dengan \(z > 1.96\) dikategorikan sebagai hot spot signifikan (pola pengelompokan nilai tinggi), sedangkan lokasi dengan \(z < -1.96\) dianggap cold spot signifikan (pola pengelompokan nilai rendah). Dari hasil ini, terdapat setidaknya satu wilayah dengan nilai z = 2.3459 yang masuk kategori hot spot (p < 0.05), sementara tidak ditemukan wilayah yang mencapai kategori cold spot karena nilai minimum hanya -0.9921.
Visualisasi
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()
Bandingkan hasilnya dengan peta LISA
Pada peta LISA, hanya ada satu kecamatan di bagian utara yang teridentifikasi sebagai outlier kategori Low–High, sementara wilayah lainnya tidak signifikan. Artinya, hanya satu titik yang dianggap anomali.
Sebaliknya, pada peta Getis–Ord \(G_i^*\)∗ terlihat variasi spasial yang lebih luas, dengan beberapa wilayah menunjukkan nilai \(G_i^*\)∗ yang relatif tinggi (berwarna kuning–hijau) dan beberapa lainnya rendah (ungu tua). Ini menandakan adanya indikasi konsentrasi kasus (hot spot) di lebih dari satu lokasi.
Apakah ada perbedaan wilayah yang ditandai sebagai klaster signifikan? Ya
LISA lebih fokus pada deteksi hubungan antara satu lokasi dengan tetangganya, sehingga hasilnya cenderung menunjukkan titik outlier tunggal (kasus Low–High).
Getis–Ord \(G_i^*\)∗ menyoroti konsentrasi spasial (hot spot dan cold spot), sehingga menghasilkan lebih banyak wilayah yang tampak menonjol sebagai area dengan kepadatan kasus relatif tinggi atau rendah
MAUP (Modifiable Areal Unit Problem)
Hasil analisis sangat dipengaruhi oleh skala dan cara pembagian wilayah.
Analisis pada level kecamatan bisa menghasilkan kesimpulan berbeda jika
dilakukan pada level kelurahan.
Ukuran bobot spasial (rook, queen, k-nearest
neighbors)
Pemilihan matriks bobot spasial (misalnya rook, queen,
atau k-nearest neighbors) dapat menghasilkan hasil yang
berbeda. Oleh karena itu, pemilihan bobot harus sesuai dengan konteks
data dan fenomena yang dikaji.
Masalah multiple testing pada analisis
lokal
Pada analisis lokal (misalnya LISA), uji dilakukan pada banyak lokasi
secara bersamaan, sehingga meningkatkan risiko kesalahan tipe I (false
positive). Hal ini perlu diperhatikan dengan melakukan koreksi, seperti
Bonferroni atau FDR (False Discovery Rate).