Pendahuluan

Analisis ini bertujuan untuk mengeksplorasi pola spasial dari lokasi gerai Starbucks di wilayah Massachusetts. Tujuan utamanya adalah untuk menguji apakah lokasi Starbucks tersebar secara acak (Complete Spatial Randomness / CSR), atau apakah ada pola pengelompokan (clustering). Lebih jauh, kita akan menguji apakah sebaran tersebut dipengaruhi oleh kepadatan penduduk di sekitarnya.

Analisis ini menggunakan package spatstat di R.

Persiapan Data

Pertama, kita akan memuat data yang disediakan oleh repository M. Gimond dan memuat library yang dibutuhkan.

# Memuat library
library(spatstat)

# Memuat workspace data dari internet
load(url("https://github.com/mgimond/Spatial/raw/main/Data/ppa.RData"))

# Memastikan pop.lg tersedia (jika tidak ada di workspace, buat secara manual dari pop)
if(!exists("pop.lg")) {
  pop.lg <- log(pop)
}

# Menghapus 'marks' atau atribut tambahan pada titik karena kita hanya fokus pada pola lokasinya saja
marks(starbucks) <- NULL

# Menentukan batas wilayah (Window) observasi, yaitu batas state Massachusetts (objek 'ma')
Window(starbucks) <- ma

# Mengatur margin global seminimal mungkin agar tidak muncul error 'figure margins too large'
# mar=c(bawah, kiri, atas, kanan)
par(mar=c(0.5, 0.5, 2, 0.5))

# Memvisualisasikan sebaran titik awal
plot(starbucks, main="Lokasi Starbucks di Massachusetts", cols=rgb(0,0,0,0.5), pch=20)

Interpretasi: Dari peta di atas, secara visual terlihat bahwa lokasi Starbucks tidak tersebar merata. Ada konsentrasi tinggi di wilayah timur (sekitar Boston).

Analisis Orde Pertama: Mengukur Kepadatan Global dan Lokal

starbucks.km <- rescale(starbucks, 1000, "km")
ma.km <- rescale(ma, 1000, "km")
pop.km <- rescale(pop, 1000, "km")
pop.lg.km <- rescale(pop.lg, 1000, "km")
# Membagi menjadi 6 kolom dan 3 baris
Q <- quadratcount(starbucks.km, nx= 6, ny=3)

# Menghitung kepadatan (titik per km persegi)
Q.d <- intensity(Q)

# Visualisasi kepadatan per kuadrat
par(mar=c(1, 1, 3, 1))
plot(intensity(Q, image=TRUE), main="Kepadatan Starbucks per Grid (Kuadrat)", las=1)
plot(starbucks.km, pch=20, cex=0.6, col=rgb(0,0,0,0.5), add=TRUE)

# Menghitung Kernel Density dengan bandwidth otomatis
K1 <- density(starbucks.km)

par(mar=c(0.5, 0.5, 2, 0.5))
plot(K1, main="KDE: Estimasi Kepadatan Kernel Starbucks", las=1)
contour(K1, add=TRUE) # Menambahkan garis kontur
plot(starbucks.km, pch=20, cex=0.6, col=rgb(0,0,0,.5), add=TRUE)

Interpretasi: Peta kepadatan kernel mempertegas adanya intensitas (kepadatan gerai) yang sangat tinggi di satu wilayah spesifik (Boston dan sekitarnya).

Analisis Orde Kedua: Jarak Antar Titik

Analisis orde kedua berfokus pada hubungan spasial (interaksi) antar titik, seperti jarak satu titik dengan titik lainnya.

# Jarak rata-rata ke tetangga pertama (dalam km)
ann.1 <- mean(nndist(starbucks.km, k=1))
print(paste("Jarak rata-rata tetangga terdekat:", round(ann.1, 2), "km"))
## [1] "Jarak rata-rata tetangga terdekat: 3.28 km"
# Menghitung fungsi L
L <- Lest(starbucks.km)

# Visualisasi Fungsi L - margin diperlebar sedikit agar label angka terlihat
par(mar=c(4, 4, 2, 1)) 
plot(L, main="Fungsi L (Transformasi K-Ripley)", las=1)

Interpretasi: Garis hitam pekat (observasi/iso) berada jauh di atas garis merah putus-putus (teoretis Poisson/CSR). Hal ini mengindikasikan bahwa pada berbagai skala jarak, lokasi Starbucks menunjukkan pola yang sangat mengelompok (clustered) dibandingkan dengan keacakan spasial.

Uji Hipotesis Keacakan Spasial (CSR)

Kita perlu menguji secara statistik apakah pengelompokan yang terlihat signifikan secara statistik menggunakan Simulasi Monte Carlo. Kita membandingkan fungsi L observasi dengan amplop (envelope) dari simulasi proses Poisson (titik acak).

# Membuat envelope dengan 39 simulasi (nsim=39 berarti tingkat signifikansi ~0.05)
env <- envelope(starbucks.km, fun=Lest, nsim=39, global=TRUE)
## Generating 39 simulated realisations of CSR  ...
## 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
## 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 
## 39.
## 
## Done.
par(mar=c(4, 4, 2, 1))
plot(env, main="Monte Carlo Envelope untuk Fungsi L", las=1)

Interpretasi: Garis hitam pekat (data aktual kita) secara keseluruhan berada di luar batas atas selubung abu-abu (grey envelope). Ini membuktikan secara statistik bahwa kita menolak hipotesis nol (H0) tentang Keacakan Spasial Sempurna (CSR). Lokasi Starbucks secara signifikan mengelompok (clustered).

Pemodelan Intensitas Menggunakan Kovariat (Poisson Point Process)

Pola mengelompok sudah terbukti. Pertanyaan selanjutnya: Mengapa mengelompok? Salah satu hipotesis yang paling masuk akal adalah karena Starbucks didirikan di area dengan populasi yang padat. Kita akan memodelkan intensitas titik terhadap kepadatan penduduk (population density).

# Membangun model Point Process Poisson menggunakan populasi sebagai kovariat
PPM1 <- ppm(starbucks.km ~ pop.km)
PPM1
## Nonstationary Poisson process
## Fitted to point pattern dataset 'starbucks.km'
## 
## Log intensity:  ~pop.km
## 
## Fitted trend coefficients:
##   (Intercept)        pop.km 
## -5.2364654082  0.0001836711 
## 
##                  Estimate         S.E.       CI95.lo       CI95.hi Ztest
## (Intercept) -5.2364654082 9.039783e-02 -5.4136419048 -5.0592889116   ***
## pop.km       0.0001836711 6.060545e-06  0.0001717927  0.0001955496   ***
##                  Zval
## (Intercept) -57.92689
## pop.km       30.30604
## Problem:
##  Values of the covariate 'pop.km' were NA or undefined at 0.57% (4 out of 699) 
## of the quadrature points
# Memvisualisasikan efek kovariat
par(mar=c(4, 4, 2, 1))
plot(effectfun(PPM1, "pop.km", se.fit=TRUE), main="Efek Populasi Terhadap Intensitas Starbucks", 
     xlab="Log Kepadatan Penduduk", ylab="Intensitas Lokasi")

Interpretasi: Model poin proses (PPM1) menunjukkan hubungan positif antara kepadatan penduduk dengan keberadaan Starbucks. Grafik efek menunjukkan tren eksponensial naik; semakin tinggi kepadatan penduduk (kovariat), semakin tinggi ekspektasi intensitas (jumlah) gerai Starbucks yang ditemukan.

Kesimpulan

  1. Analisis Orde Pertama: Kepadatan Starbucks di Massachusetts tidak merata, melainkan terpusat secara ekstrim di wilayah timur (Boston area).

  2. Analisis Orde Kedua: Hasil ANN dan fungsi L-Ripley menunjukkan pola yang sangat mengelompok (clustered).

  3. Uji Signifikansi (Monte Carlo): Pengelompokan ini terbukti secara statistik signifikan karena kurva L berada di atas envelope CSR.

  4. Faktor Pendorong: Pemodelan spasial membuktikan bahwa kepadatan penduduk merupakan kovariat/variabel penjelas yang sangat kuat untuk menerangkan pola pengelompokan (aglomerasi) lokasi Starbucks di negara bagian tersebut.