Home > front end >  Creation of correlated marks. e.g. point sizes varying with inter-point distances
Creation of correlated marks. e.g. point sizes varying with inter-point distances

Time:09-08

I recently dabbled a bit into point pattern analysis and wonder if there is any standard practice to create mark correlation structures varying with the inter-point distance of point locations. Clearly, I understand how to simulate independent marks, as it is frequently mentioned e.g.

library(spatstat)
data(finpines) 
set.seed(0907)
marks(finpines) <- rnorm(npoints(finpines), 30, 5)
plot(finpines)

enter image description here

More generally speaking, assume we have a fair amount of points, say n=100 with coordinates x and y in an arbitrary observation window (e.g. rectangle). Every point carries a characteristic, for example the size of the point as a continuous variable. Also, we can examine every pairwise distance between the points. Is there a way to introduce correlation structure between the marks (of pairs of points) which depends on the inter-point distance between the point locations?


Furthermore, I am aware of the existence of mark analysing techniques like

fin <- markcorr(finpines, correction = "best")
plot(fin)

When it comes to interpretation my lack of knowledge forces me to trust my colleagues (non-scientists). Besides, I looked at several references given in the documentation of the spatstat functions; especially, I had a look on "Statistical Analysis and Modelling of Spatial Point Patterns", p. 347, where inhibition and mutual stimulation as deviations from 1 (independence of marks) of the normalised mark correlation function are explained.

CodePudding user response:

I think the best bet is to use a random field model conditional on your locations. Unfortunately the package RandomFields is not on CRAN at the moment, but hopefully it will return soon. I think it may be possible to install an old version of RandomFields from the archives if you want to get going immediately.

Thus, the procedure is:

  1. Use spatstat to generate the random locations you like.
  2. Extract the coordinates (either coords() or as.data.frame.ppp()).
  3. Define a model in RandomFields (e.g. RMexp()).
  4. Simulate the model on the given coordinates (RFsimulate()).
  5. Convert back to a marked point pattern in spatstat (either ppp() or as.ppp()).
  • Related