Autokorelasi spasial positif menandakan bahwa lokasi-lokasi yang bertetangga / berdekatan cenderung memiliki nilai yang mirip. Contohnya, jika daerah A memiliki nilai yang tinggi maka daerah di sekitar daerah A kemungkinan besar memiliki nilai yang tinggi juga.
Sedangkan autokorelasi spasial negatif menandakan bahwa lokasi-lokasi yang bertetangga / berdekatan cenderung memiliki nilai yang berbeda. Contohnya, jika daerah B memiliki nilai yang tinggi maka daerah di sekitar B memiliki nilai yang rendah.
• Moran’s I
\[I=\frac{N}{W}\frac{\Sigma^N_{i=1}\Sigma^N_{j=1}w_{ij}(x_i-\bar{x})(x_j-\bar{x})}{\Sigma^N_{i=1}(x_i-\bar{x})^2}\]
dengan,
N = Jumlah total unit spasial
W = Jumlah total dari semua bobot spasial
\[w_{ij}\]= bobot spasial yang merupaakn hubungan antara unit i dan j
\[x_i\]= nilai observasi pada lokasi i
\[x_j\]= nilai observasi pada lokasi j
\[\bar{x}\]= nilai rata-rata dari semua observasi
• Geary’s C
\[C=\frac{(N-1)}{2W}\frac{\Sigma^N_{i=1}\Sigma^N_{j=1}w_{ij}(x_i-x_j)^2}{\Sigma^N_{i=1}(x_i-\bar{x})^2}\]
dengan,
N = Jumlah total unit spasial
W = Jumlah total dari semua bobot spasial
\[w_{ij}\]= bobot spasial yang merupaakn hubungan antara unit i dan j
\[x_i\]= nilai observasi pada lokasi i
\[x_j\]= nilai observasi pada lokasi j
\[\bar{x}\]= nilai rata-rata dari semua observasi
• Local Moran’s Ii
\[ I_i = \frac{(x_i-\bar{x})}{m_2}\Sigma^N_{j=1}w_{ij}(x_j-\bar{x}) \]
dengan,
\[ m_2=\frac{\Sigma^N_{i=1}(x_i-\bar{x})^2}{N} \] yang merupakan varians dari variabel x
\[I_i\]= Nilai Moran’s I untuk unit spasial i.
\[w_{ij}\]= bobot spasial yang merupaakn hubungan antara unit i dan j
\[x_i\]= nilai observasi pada lokasi i
\[\bar{x}\]= nilai rata-rata dari semua observasi
• Getis–Ord Gi dan Gi*
\[ G_i=\frac{\Sigma^N_{j=1,j\neq i}w_{ij}x_j}{\Sigma^N_{j=1,j\neq i}x_j} \] dengan,
\[w_{ij}\]= bobot spasial yang merupaakn hubungan antara unit i dan j
\[x_j\] = nilai observasi pada lokasi j
\[ G_i^*=\frac{\Sigma^N_{j=1}w_{ij}x_j}{\Sigma^N_{j=1}x_j} \]
dengan,
\[w_{ij}\]= bobot spasial yang merupaakn hubungan antara unit i dan j
\[x_j\] = nilai observasi pada lokasi j
Perbedaan utama dari ukuran global dan lokal adalah skala dalam analisisnya. Ukuran global menganalisis seluruh data, sedangka ukuran lokal menganalisis untuk setiap unit spasial individu. Hal ini akan mengakibatkan ukuran global akan meringkas pola keseluruhan sedangkan ukuran lokal akan mengidentifikasi lokasi klaster tertentu.
Data yang akan digunakan adalah data keluarga yang beresiko terkena stunting pada 30 kecamatan di Kota Bandung pada tahun 2024.
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')`
## Loading required package: 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(sf)
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
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
# Arahkan ke folder kerja Anda
setwd("D:/SEMESTER 5/SPASIAL/TUGAS 1")
# Data kasus
stunting <- read.csv(file.choose(), sep=",")
# Peta administratif Indonesia level kecamatan (gadm36 level 3)
Indo_Kec <- readRDS('gadm36_IDN_3_sp.rds')
# Ambil hanya Kota Bandung
Bandung <- Indo_Kec[Indo_Kec$NAME_2 == "Kota Bandung",]
plot(Bandung)
# Tambahkan id untuk join
Bandung$id <- c(1:30)
# Ubah ke format sf
Bandung_sf <- st_as_sf(Bandung)
# Gabungkan dengan data kasus
Bandung_merged <- Bandung_sf %>%
left_join(stunting, by = "id")
ggplot() +
geom_sf(data=Bandung_merged, aes(fill = stunting), color=NA) +
theme_bw() +
scale_fill_gradient(low = "yellow", high = "red") +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
legend.position = "right") +
labs(title = "Peta Keluarga Beresiko Stunting Kota Bandung",
fill = "Jumlah Kasus")
Pola spasial pada peta diatas menunjukkan bahwa persebaran kasus keluarga berisiko stunting di Kota Bandung tidak acak. Adanya pengelompokan ini merupakan indikasi kuat bahwa kemungkinan ada faktor-faktor sosial, ekonomi, atau lingkungan tertentu yang juga terkonsentrasi di wilayah-wilayah tersebut dan memengaruhi tingginya risiko stunting.
# Matriks bobot spasial
row.names(Bandung) <- as.character(1:30)
W <- poly2nb(Bandung, row.names(Bandung), queen=FALSE)
WB <- nb2mat(W, style='B', zero.policy = TRUE)
WL <- nb2listw(W)
Global_Moran <- moran.test(stunting$stunting, WL)
Global_Moran
##
## Moran I test under randomisation
##
## data: stunting$stunting
## weights: WL
##
## Moran I statistic standard deviate = 4.4706, p-value = 3.9e-06
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic Expectation Variance
## 0.48318768 -0.03448276 0.01340819
Dikarenakan p-value < alpha (3.9e-06 < 0.05) didapatkan bahwa data tersebar secara tidak acak. Hasil uji Moran’s I ini menunjukkan adanya pola pengelompokan (clustering) yang signifikan secara statistik. Selainn itu nilai I > 0 (0.483) menandakan bahwa data ini memiliki autokorelasi spasial positif.
Global_Geary <- geary.test(stunting$stunting, WL)
Global_Geary
##
## Geary C test under randomisation
##
## data: stunting$stunting
## weights: WL
##
## Geary C statistic standard deviate = 4.3119, p-value = 8.094e-06
## alternative hypothesis: Expectation greater than statistic
## sample estimates:
## Geary C statistic Expectation Variance
## 0.4763684 1.0000000 0.0147476
Didapatkan bahwa nilai Geary’s C < 1 (0.476) mengindikasikan bahwa data bersifat autokorelasi spasial positif. Selain itu dengan nilai p-value < alpha mengindikasikan bahwa benar data tersebar secara tidak acak.
Local_Moran <- localmoran(stunting$stunting, WL)
# Ambil p-value dan kuadran dari hasil Local Moran
Bandung_sf$p_value <- Local_Moran[, "Pr(z != E(Ii))"]
Bandung_sf$quadrant <- attr(Local_Moran, "quadr")[, "pysal"]
# Buat kolom baru untuk label klaster yang signifikan
# Kita hanya akan memberi label pada kecamatan dengan p-value < 0.05
Bandung_sf$lisa_cluster <- "Tidak Signifikan"
Bandung_sf$lisa_cluster[Bandung_sf$p_value < 0.05 & Bandung_sf$quadrant == "High-High"] <- "Hot Spot (Tinggi-Tinggi)"
Bandung_sf$lisa_cluster[Bandung_sf$p_value < 0.05 & Bandung_sf$quadrant == "Low-Low"] <- "Cold Spot (Rendah-Rendah)"
Bandung_sf$lisa_cluster[Bandung_sf$p_value < 0.05 & Bandung_sf$quadrant == "Low-High"] <- "Outlier Spasial (Rendah-Tinggi)"
Bandung_sf$lisa_cluster[Bandung_sf$p_value < 0.05 & Bandung_sf$quadrant == "High-Low"] <- "Outlier Spasial (Tinggi-Rendah)"
# Membuat Peta Klaster LISA
ggplot() +
geom_sf(data = Bandung_sf, aes(fill = lisa_cluster), color = "white") +
scale_fill_manual(values = c("Hot Spot (Tinggi-Tinggi)" = "red",
"Cold Spot (Rendah-Rendah)" = "blue",
"Outlier Spasial (Rendah-Tinggi)" = "lightblue",
"Outlier Spasial (Tinggi-Rendah)" = "pink",
"Tidak Signifikan" = "grey80")) +
labs(title = "Peta Klaster LISA Risiko Stunting di Kota Bandung",
fill = "Tipe Klaster") +
theme_minimal()
Peta klaster LISA ini menunjukkan bahwa tidak semua kecamatan di Kota Bandung memiliki pola risiko stunting yang signifikan secara statistik. Sebagian besar wilayah berwarna abu-abu, yang berarti persebaran kasus di sana tidak membentuk klaster yang kuat.
# Panggil library spdep jika belum aktif
library(spdep)
library(ggplot2)
library(dplyr)
# Menghitung statistik Getis-Ord Gi*
# Parameter "G" diubah menjadi "Gi" untuk mendapatkan z-score
G_test <- localG(stunting$stunting, WL)
# Tampilkan beberapa hasil pertama
head(G_test)
## [1] 2.9856342 -0.6318760 -1.8578032 1.1072275 3.7658728 0.1335865
# --- Visualisasi Hasil (Langkah Penting) ---
# 1. Tambahkan z-score dari G_test ke data spasial Anda
Bandung_sf$g_score <- as.vector(G_test)
# 2. Buat kolom baru untuk kategori Hot Spot / Cold Spot
# Kita akan menggunakan z-score untuk menentukan kategori
# Umumnya, z > 1.96 signifikan hot spot, z < -1.96 signifikan cold spot
Bandung_sf$g_cluster <- "Tidak Signifikan"
Bandung_sf$g_cluster[Bandung_sf$g_score > 2.58] <- "Hot Spot (99% Conf.)"
Bandung_sf$g_cluster[Bandung_sf$g_score > 1.96 & Bandung_sf$g_score <= 2.58] <- "Hot Spot (95% Conf.)"
Bandung_sf$g_cluster[Bandung_sf$g_score < -2.58] <- "Cold Spot (99% Conf.)"
Bandung_sf$g_cluster[Bandung_sf$g_score < -1.96 & Bandung_sf$g_score >= -2.58] <- "Cold Spot (95% Conf.)"
# 3. Membuat Peta Hot Spot
ggplot() +
geom_sf(data = Bandung_sf, aes(fill = g_cluster), color = "white") +
scale_fill_manual(values = c("Hot Spot (99% Conf.)" = "#d73027", # Merah Tua
"Hot Spot (95% Conf.)" = "#fc8d59", # Oranye
"Cold Spot (99% Conf.)" = "#4575b4", # Biru Tua
"Cold Spot (95% Conf.)" = "#91bfdb", # Biru Muda
"Tidak Signifikan" = "grey80")) +
labs(title = "Peta Hot Spot Risiko Stunting di Kota Bandung (Getis-Ord Gi*)",
fill = "Tipe Klaster") +
theme_minimal()
Peta tersebut secara visual menunjukkan bahwa risiko stunting tidak tersebar merata di seluruh Kota Bandung, melainkan terkonsentrasi secara signifikan di sebuah titik panas (hot spot) yang berlokasi di bagian barat daya kota.
Dalam konteks MAUP, hasil analisis dapat berubah-ubah tergantung bagaimana definisi batas wilayah yang akan ditetapkan. Dalam konteks ukuran bobot spasial, Rook hanya akan menganggap wilayah lain sebagai tetangga jika berbagi sisi batas, Queen hanya menganggap tetangga jika berbagi sisi atau hanya satu titik sudut, K-NN mengabaikan batas dan menganggap tetangga berdasarkan jarak antar pusat wilayah. Artinya pilihan bobot yang berbeda akan berpengaruh besar terhadap hasil analisis spasial. Dalam konteks multiple test pada analisis lokal, terdapat kesulitan karena harus melakukan uji seperti LISA atau Getis-Ord untuk puluhan bahkan ratusan uji secara bersamaan untuk setiap unit lokasi spasial. Hal inilah yang mengakibatkan keterbatasan dari analisis autokorelasi spasial.