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)
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:
- Use
spatstat
to generate the random locations you like. - Extract the coordinates (either
coords()
oras.data.frame.ppp()
). - Define a model in
RandomFields
(e.g.RMexp()
). - Simulate the model on the given coordinates (
RFsimulate()
). - Convert back to a marked point pattern in spatstat (either
ppp()
oras.ppp()
).