I have some spatial point pattern X distributed in polygon wind and I wonder how can I simulate different point patterns that by their spatial properties (for example, number of points, spatial autocorrelation of intensity function and etc.) would resemble X spatial point pattern? I am very new in spatial point pattern analysis, so I am not exactly sure what parameters should I want to replicate in my simulations, nor do I know the best methods to do so.

So far, I have tried a number of different methods, but none of these gave me a satisfactory result.

I will share what I have tried:

  1. rpoispp function from spatstat with parameter ex=X. Number of points were different and simulated patterns of points seemed to have much more homogeneous distribution than X
  2. Estimate intensity of X with density.ppp and nndensity. Calculate variogram of intensity functions and feed sill and range parameters into gstat function to simulate random field R. Than I scaled R values so that the sum of them would be the same as sum of intensity values of X and minimum value of R would be 0. Then I used rpoissp(R,wind) to generate points. The problem was that the number of points was slightly different than that of X and distribution of points seemed not respectful of R image. Finally, intensities of generated point patterns exhibited different variograms.
  3. I also tried to scale R values from .1 to .9 and use them as probabilities in generating values of binary variable with many trials. Then I filtered the same number of most successful cases as there are points in X to get the locations of points. However, the resulting distribution of points was too respectful of R and autocorrelation of intensities of these points were different from that of X.
  4. Finally, with the help of spsann I tried simulated spatial annealing algorithm to optimize Kinhom function of random point pattern, so that this function would converge to that of X. It worked - functions looked very similar, but the problem is that I do not think that this is the right parameter to optimize, since visually point patterns were very different. Also, the calculation time was too long for me, as I will need to simulate many point patterns. But maybe this was due to poor choice of parameter values, as my understanding of how to use spsann is extremely limited. If that's the case and calculation time can be decreased, this method seems to be the most promising - all I need is to choose more suitable parameter to optimize for.

---- 2021-07-15 Update:

What I wanted in simulated point patterns were: a) The same number of points b) Similar autocorrelation structure between points c) Different point intensity distribution, but with the maintained spatial autocorrelation of original intensity map

General requirement was that the map of point distribution would be different, but somehow resembling the original distribution, as if you would be looking at the same origin spatial data, but in different location.

What I eventually did was the toroidal shift of points in space as described by Fortin ir Jacquez (2000). Simple, yet powerful technique more or less meeting the criteria I set.

I leave this question open, however, for I believe there must be even better solution.

FORTIN, M.-J. AND G. M. JACQUEZ Randomization tests and spatially auto-correlated data. Bulletin of the Ecological Society of America,  2000, 81(3), 201-205.
  • $\begingroup$ Hey Liudas, have you found a way for solving your problem? Thanks in advance! $\endgroup$
    – nd091680
    Jul 8, 2021 at 16:57
  • 1
    $\begingroup$ Hi nd091680, I left an update in response to your comment. $\endgroup$ Jul 15, 2021 at 6:18

1 Answer 1


This is very hard to answer in general. How closely do you want the new pattern to resemble the original pattern? If you want the exact same number of points most standard point process models (such as a Poisson point process) wont work as they have a random number of points.

The most extreme case is to use spatstat::rjitter() which simply shifts the points by independent displacement vectors. If you choose a very small radius the new point patterns will be almost distinguishable from the original pattern.

Otherwise, you can first estimate the inhomogeneous intensity of points with spatstat::density.ppp() and then place a fixed number of independent points according to this intensity with spatstat::rpoint().

If you want a better answer you need to post details of your pattern and which properties you want to maintain.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.