Load Data

load(url("https://github.com/mgimond/Spatial/raw/main/Data/ppa.RData"))

marks(starbucks) <- NULL
Window(starbucks) <- ma

plot(starbucks, main=NULL, cols=rgb(0,0,0,0.2), pch=20)

Interpretasi: Visualisasi awal menunjukkan bahwa titik-titik lokasi Starbucks di wilayah Massachusetts tidak tersebar secara merata di seluruh area studi. Sebaliknya, titik-titik tersebut terlihat lebih terkonsentrasi pada wilayah tertentu, terutama di area yang kemungkinan merupakan pusat aktivitas ekonomi atau kawasan dengan tingkat urbanisasi yang tinggi. Pola ini memberikan indikasi awal bahwa distribusi Starbucks tidak mengikuti pola acak sempurna (Complete Spatial Randomness), melainkan dipengaruhi oleh faktor eksternal seperti kepadatan penduduk, aksesibilitas, dan potensi pasar. Oleh karena itu, analisis lebih lanjut diperlukan untuk mengidentifikasi pola spasial secara kuantitatif.


Distribusi Kepadatan Populasi

hist(pop, main=NULL, las=1)

Interpretasi: Histogram kepadatan populasi menunjukkan bahwa distribusi data bersifat menceng ke kanan (right-skewed), di mana sebagian besar wilayah memiliki nilai kepadatan penduduk yang relatif rendah, sementara hanya sebagian kecil wilayah yang memiliki kepadatan sangat tinggi. Hal ini merupakan karakteristik umum data populasi, di mana penduduk cenderung terkonsentrasi pada area perkotaan tertentu. Ketidakseimbangan distribusi ini dapat mempengaruhi analisis statistik, terutama dalam mengidentifikasi hubungan antara kepadatan populasi dan distribusi titik Starbucks.

pop.lg <- log(pop)
hist(pop.lg, main=NULL, las=1)

Interpretasi: Setelah dilakukan transformasi logaritma, distribusi kepadatan populasi menjadi lebih simetris dan nilai-nilai ekstrem menjadi lebih terkompresi. Transformasi ini membantu dalam menstabilkan varians serta memperjelas pola hubungan antara variabel populasi dan distribusi titik Starbucks. Dengan distribusi yang lebih seimbang, analisis lanjutan seperti pemodelan dan estimasi intensitas akan menghasilkan interpretasi yang lebih akurat dan tidak terlalu dipengaruhi oleh outlier.


Rescaling

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

Interpretasi: Proses rescaling dilakukan untuk mengubah satuan panjang dari meter menjadi kilometer, sehingga satuan kepadatan yang dihasilkan menjadi lebih relevan dan mudah diinterpretasikan dalam konteks geografis. Tanpa rescaling, nilai kepadatan akan dinyatakan dalam satuan per meter persegi yang sangat kecil dan sulit dipahami. Dengan menggunakan kilometer, interpretasi seperti jumlah toko per km² menjadi lebih intuitif dan sesuai dengan skala analisis wilayah yang luas seperti negara bagian.


Quadrat Analysis

Q <- quadratcount(starbucks.km, nx=6, ny=3)

plot(starbucks.km, pch=20, cols="grey70", main=NULL)
plot(Q, add=TRUE)

Interpretasi: Hasil pembagian wilayah ke dalam grid menunjukkan bahwa jumlah Starbucks pada setiap quadrat tidak seragam. Beberapa kotak memiliki jumlah titik yang tinggi, sementara yang lain memiliki sedikit atau bahkan tidak ada titik sama sekali. Variasi ini menunjukkan adanya ketidakhomogenan distribusi spasial, yang mengindikasikan bahwa proses yang mendasari distribusi Starbucks tidak bersifat acak. Pola ini mengarah pada kemungkinan adanya faktor-faktor yang mempengaruhi lokasi pendirian Starbucks.

Q.d <- intensity(Q)

plot(intensity(Q, image=TRUE), main=NULL, las=1)
plot(starbucks.km, pch=20, cex=0.6, col=rgb(0,0,0,0.5), add=TRUE)

Interpretasi: Peta intensitas quadrat memperlihatkan variasi kepadatan Starbucks dalam bentuk visual yang lebih jelas, di mana wilayah dengan warna lebih gelap atau intens menunjukkan kepadatan yang lebih tinggi. Pola ini memperkuat indikasi adanya pengelompokan (clustering), karena titik-titik tidak tersebar secara merata. Dengan demikian, dapat disimpulkan bahwa terdapat perbedaan tingkat intensitas antarwilayah yang signifikan.


Tessellation Berdasarkan Populasi

brk  <- c(-Inf, 4, 6, 8, Inf)
Zcut <- cut(pop.lg.km, breaks=brk, labels=1:4)
E    <- tess(image=Zcut)

plot(E, main="", las=1)

Q   <- quadratcount(starbucks.km, tess=E)
Q.d <- intensity(Q)

plot(intensity(Q, image=TRUE), las=1, main=NULL)
plot(starbucks.km, pch=20, cex=0.6, col=rgb(1,1,1,0.5), add=TRUE)

Interpretasi: Dengan menggunakan tessellation berbasis kepadatan populasi, wilayah studi dibagi berdasarkan kategori tingkat populasi. Hasil analisis menunjukkan bahwa kepadatan Starbucks cenderung meningkat seiring dengan meningkatnya kepadatan populasi. Hal ini menunjukkan adanya hubungan yang kuat antara distribusi Starbucks dan jumlah penduduk, di mana Starbucks lebih banyak ditemukan di area dengan populasi tinggi.


Kernel Density

K1 <- density(starbucks.km)
plot(K1, main=NULL, las=1)
contour(K1, add=TRUE)

K2 <- density(starbucks.km, sigma=50)
plot(K2, main=NULL, las=1)
contour(K2, add=TRUE)

Interpretasi: Estimasi kernel density menunjukkan adanya area hotspot, yaitu wilayah dengan konsentrasi Starbucks yang tinggi. Penggunaan bandwidth yang berbeda menghasilkan tingkat kehalusan yang berbeda pula, di mana bandwidth kecil menampilkan detail lokal, sedangkan bandwidth besar memberikan gambaran umum pola global. Hal ini membantu dalam memahami distribusi spasial secara lebih komprehensif.


Kernel dengan Kovariat

rho <- rhohat(starbucks.km, pop.lg.km, method="ratio")
plot(rho, las=1, main=NULL)

pred <- predict(rho)
plot(pred, las=1, main=NULL)

Interpretasi: Analisis ini menunjukkan adanya hubungan non-linear antara kepadatan Starbucks dan kepadatan populasi. Kurva yang dihasilkan memperlihatkan bahwa intensitas Starbucks meningkat seiring meningkatnya nilai log kepadatan populasi. Hal ini mengindikasikan bahwa populasi merupakan faktor penting dalam menentukan lokasi Starbucks.


Perbandingan Observed vs Predicted

# Ambil window yang sama
win <- as.owin(K1)

# Paksa prediksi masuk ke grid K1
pred2 <- as.im(pred, W = win, xy = list(x = K1$xcol, y = K1$yrow))

# Ambil nilai
obs <- K1$v
prd <- pred2$v

# Buat data frame
df <- data.frame(obs = as.vector(obs),
                 prd = as.vector(prd))

df <- na.omit(df)

# Plot
plot(df$prd ~ df$obs,
     pch = 20,
     xlab = "Observed intensity",
     ylab = "Predicted intensity",
     col = rgb(0, 0, 0, 0.1))

Interpretasi: Perbandingan antara intensitas yang diamati dan yang diprediksi menunjukkan bahwa model belum sepenuhnya mampu menangkap pola distribusi yang sebenarnya. Titik-titik yang menyebar dari garis diagonal menunjukkan adanya deviasi, yang berarti masih terdapat faktor lain yang belum dimasukkan dalam model.


Nearest Neighbor

mean(nndist(starbucks.km, k=1))
## [1] 3.275492

Interpretasi: Nilai rata-rata jarak tetangga terdekat yang relatif kecil menunjukkan bahwa titik-titik Starbucks cenderung berada dekat satu sama lain. Hal ini merupakan indikasi kuat adanya pola pengelompokan, bukan distribusi acak.


Fungsi K

K <- Kest(starbucks.km)
plot(K, main=NULL, las=1)

Interpretasi: Jika kurva empiris berada di atas kurva teoritis CSR, maka menunjukkan adanya clustering. Hal ini berarti jumlah titik dalam radius tertentu lebih banyak dibandingkan yang diharapkan pada pola acak.


Fungsi L

L <- Lest(starbucks.km)
plot(L, main=NULL, las=1)

plot(L, . - r ~ r, main=NULL, las=1)

Interpretasi: Nilai positif pada transformasi fungsi L menunjukkan adanya kecenderungan pengelompokan, sedangkan nilai negatif menunjukkan penyebaran. Hasil yang diperoleh mengindikasikan pola clustering.


Pair Correlation Function

g <- pcf(starbucks.km)
plot(g, main=NULL, las=1)

Interpretasi: Nilai fungsi korelasi pasangan yang lebih besar dari 1 pada jarak tertentu menunjukkan bahwa terdapat lebih banyak pasangan titik daripada yang diharapkan, sehingga mengindikasikan adanya clustering pada skala jarak tersebut.


Uji Monte Carlo (ANN)

ann.p <- mean(nndist(starbucks.km, k=1))

n <- 199
ann.r <- numeric(n)

for(i in 1:n){
  rand.p <- rpoint(n=starbucks.km$n, win=ma.km)
  ann.r[i] <- mean(nndist(rand.p, k=1))
}

hist(ann.r, main=NULL)
abline(v=ann.p, col="blue")

Interpretasi: Nilai ANN hasil observasi yang lebih kecil dibandingkan distribusi simulasi menunjukkan bahwa titik-titik Starbucks lebih dekat satu sama lain dibandingkan kondisi acak, sehingga mengindikasikan pola clustering yang signifikan.


Model Poisson

PPM1 <- ppm(starbucks.km ~ pop.lg.km)
## Warning: Values of the covariate 'pop.lg.km' were NA or undefined at 0.57% (4
## out of 699) of the quadrature points. Occurred while executing: ppm.ppp(Q =
## starbucks.km, trend = ~pop.lg.km, data = NULL, interaction = NULL)
PPM0 <- ppm(starbucks.km ~ 1)

anova(PPM0, PPM1, test="LRT")
## Warning: Values of the covariate 'pop.lg.km' were NA or undefined at 0.57% (4
## out of 699) of the quadrature points. Occurred while executing: ppm.ppp(Q =
## starbucks.km, trend = ~pop.lg.km, data = NULL, interaction = NULL,
## Warning: Models were re-fitted after discarding quadrature points that were
## illegal under some of the models
## Analysis of Deviance Table
## 
## Model 1: ~1   Poisson
## Model 2: ~pop.lg.km   Poisson
##   Npar Df Deviance  Pr(>Chi)    
## 1    5                          
## 2    6  1   537.22 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretasi: Hasil uji menunjukkan bahwa model dengan kovariat kepadatan populasi secara signifikan lebih baik dibandingkan model tanpa kovariat. Hal ini menegaskan bahwa kepadatan populasi merupakan faktor penting yang mempengaruhi distribusi spasial Starbucks. ```