The interaction between two arbitrary points is measured by second-order properties, which reflect the tendency of the events to appear clustered (points tend to be close together), independently (the Poisson process) or regularly spaced (points tend to avoid each other).

We start this section by loading the required data sets and packages.

library(spatstat)
library(rasterVis)
load(url("https://userpage.fu-berlin.de/soga/data/r-data/ppp_data_berlin.RData"))
par(mar = c(0, 0, 2, 2), 
    mfrow = c(1, 3), 
    cex.main = 2)

plot(ppp_random, main = "independant")
plot(ppp_regular, main = "regular")
plot(ppp_locations, main = "clustered")

A simple diagnostic option or dependence between points is the Fry plot. It is a scatterplot of the vector differences \(x_j - x_i\) between all pairs of distinct points in the pattern. In spatstat, the Fry plot is computed by the command fryplot().

par(mar = c(0, 0, 3, 2), 
    mfrow = c(1, 3), 
    cex.main = 2)

fryplot(ppp_random, main = "independant", pch = 16, cex = 0.2)
fryplot(ppp_regular, main = "regular", pch = 16, cex = 0.2)
fryplot(ppp_locations, main = "clustered", pch = 16, cex = 0.2)


Distance methods for point patterns

Classical techniques for investigating inter-point interaction are distance methods, based on measuring the distances between points (Baddeley 2010):

These methods are available in the spatstat package using the functions pairdist(), nndist() and distmap() respectively.

par(mar = c(2, 2, 2, 2), mfrow = c(1, 3), oma = c(0, 0, 2, 0))
hist(pairdist(ppp_locations),
  freq = FALSE,
  breaks = nrow(pairdist(ppp_locations)),
  main = "independant",
  xlim = c(0, 40000)
)
hist(pairdist(ppp_regular),
  freq = FALSE,
  breaks = nrow(pairdist(ppp_regular)),
  main = "regular"
)
hist(pairdist(ppp_random),
  freq = FALSE, breaks = nrow(pairdist(ppp_random)), main = "clustered"
)
mtext("Pairwise Distances Histogram", outer = TRUE, cex = 1.5)

levelplot(pairdist(ppp_random), main = "Pairwise Distances: independant", par.settings=BTCTheme())

levelplot(pairdist(ppp_regular), main = "Pairwise Distances: regular", par.settings=BTCTheme())

levelplot(pairdist(ppp_locations), main = "Pairwise Distances: clustered", par.settings=BTCTheme())