spatstat (version 1.16-1)

rmpoispp: Generate Multitype Poisson Point Pattern


Generate a random point pattern, a realisation of the (homogeneous or inhomogeneous) multitype Poisson process.


rmpoispp(lambda, lmax=NULL, win, types, ...)


Intensity of the multitype Poisson process. Either a single positive number, a vector, a function(x,y,m, ...), a pixel image, a list of functions function(x,y, ...), or a list of pixel images.
An upper bound for the value of lambda. May be omitted
Window in which to simulate the pattern. An object of class "owin" or something acceptable to as.owin. Ignored if lambda is a pixel image or list of images.
All the possible types for the multitype pattern.
Arguments passed to lambda if it is a function.


  • The simulated multitype point pattern (an object of class "ppp" with a component marks which is a factor).


This function generates a realisation of the marked Poisson point process with intensity lambda. Note that the intensity function $\lambda(x,y,m)$ is the average number of points of type m per unit area near the location $(x,y)$. Thus a marked point process with a constant intensity of 10 and three possible types will have an average of 30 points per unit area, with 10 points of each type on average.

The intensity function may be specified in any of the following ways. [object Object],[object Object],[object Object],[object Object],[object Object],[object Object] If lmax is missing, an approximate upper bound will be calculated. To generate an inhomogeneous Poisson process the algorithm uses ``thinning'': it first generates a uniform Poisson process of intensity lmax for points of each type m, then randomly deletes or retains each point independently, with retention probability $p(x,y,m) = \lambda(x,y,m)/\mbox{lmax}$.

See Also

rpoispp for unmarked Poisson point process; rmpoint for a fixed number of random marked points; ppp.object, owin.object.


Run this code
# uniform bivariate Poisson process with total intensity 100 in unit square
 pp <- rmpoispp(50, types=c("a","b"))
 # stationary bivariate Poisson process with intensity A = 30, B = 70
 pp <- rmpoispp(c(30,70), types=c("A","B"))
 pp <- rmpoispp(c(30,70))

 # works in any window
 pp <- rmpoispp(c(30,70), win=letterR, types=c("A","B"))

 # inhomogeneous lambda(x,y,m)
 # note argument 'm' is a factor 
 lam <- function(x,y,m) { 50 * (x^2 + y^3) * ifelse(m=="A", 2, 1)}
 pp <- rmpoispp(lam, win=letterR, types=c("A","B"))
 # extra arguments
 lam <- function(x,y,m,scal) { scal * (x^2 + y^3) * ifelse(m=="A", 2, 1)}
 pp <- rmpoispp(lam, win=letterR, types=c("A","B"), scal=50)

 # list of functions lambda[[i]](x,y)
 lams <- list(function(x,y){50 * x^2}, function(x,y){20 * abs(y)})
 pp <- rmpoispp(lams, win=letterR, types=c("A","B"))
 pp <- rmpoispp(lams, win=letterR)
 # functions with extra arguments
 lams <- list(function(x,y,scal){5 * scal * x^2},
              function(x,y, scal){2 * scal * abs(y)})
 pp <- rmpoispp(lams, win=letterR, types=c("A","B"), scal=10)
 pp <- rmpoispp(lams, win=letterR, scal=10)

 # florid example
 lams <- list(function(x,y){
   			   100*exp((6*x + 5*y - 18*x^2 + 12*x*y - 9*y^2)/6)
                         # log quadratic trend
                        # log linear trend
  X <- rmpoispp(lams, win=unit.square(), types=c("on", "off"))   

 # pixel image
 Z <-,y){30 * (x^2 + y^3)}, letterR)
 pp <- rmpoispp(Z, types=c("A","B"))

 # list of pixel images
 ZZ <- list(
,y){20 * (x^2 + y^3)}, letterR),
,y){40 * (x^3 + y^2)}, letterR))
 pp <- rmpoispp(ZZ, types=c("A","B"))
 pp <- rmpoispp(ZZ)

Run the code above in your browser using DataCamp Workspace