rmpoispp {spatstat.random} | R Documentation |
Generate Multitype Poisson Point Pattern
Description
Generate a random point pattern, a realisation of the (homogeneous or inhomogeneous) multitype Poisson process.
Usage
rmpoispp(lambda, lmax=NULL, win, types, ...,
nsim=1, drop=TRUE, warnwin=!missing(win))
Arguments
lambda |
Intensity of the multitype Poisson process.
Either a single positive number, a vector, a |
lmax |
An upper bound for the value of |
win |
Window in which to simulate the pattern.
An object of class |
types |
All the possible types for the multitype pattern. |
... |
Arguments passed to |
nsim |
Number of simulated realisations to be generated. |
drop |
Logical. If |
warnwin |
Logical value specifying whether to issue a warning
when |
Details
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.
- single number:
-
If
lambda
is a single number, then this algorithm generates a realisation of the uniform marked Poisson process inside the windowwin
with intensitylambda
for each type. The total intensity of points of all types islambda * length(types)
. The argumenttypes
must be given and determines the possible types in the multitype pattern. - vector:
-
If
lambda
is a numeric vector, then this algorithm generates a realisation of the stationary marked Poisson process inside the windowwin
with intensitylambda[i]
for points of typetypes[i]
. The total intensity of points of all types issum(lambda)
. The argumenttypes
defaults tonames(lambda)
, or if that is null,1:length(lambda)
. - function:
-
If
lambda
is a function, the process has intensitylambda(x,y,m,...)
at spatial location(x,y)
for points of typem
. The functionlambda
must work correctly with vectorsx
,y
andm
, returning a vector of function values. (Note thatm
will be a factor with levels equal totypes
.) The valuelmax
, if present, must be an upper bound on the values oflambda(x,y,m,...)
for all locations(x, y)
inside the windowwin
and all typesm
. The argumenttypes
must be given. - list of functions:
-
If
lambda
is a list of functions, the process has intensitylambda[[i]](x,y,...)
at spatial location(x,y)
for points of typetypes[i]
. The functionlambda[[i]]
must work correctly with vectorsx
andy
, returning a vector of function values. The valuelmax
, if given, must be an upper bound on the values oflambda(x,y,...)
for all locations(x, y)
inside the windowwin
. The argumenttypes
defaults tonames(lambda)
, or if that is null,1:length(lambda)
. - pixel image:
-
If
lambda
is a pixel image object of class"im"
(seeim.object
), the intensity at a location(x,y)
for points of any type is equal to the pixel value oflambda
for the pixel nearest to(x,y)
. The argumentwin
is ignored; the window of the pixel image is used instead. The argumenttypes
must be given. - list of pixel images:
-
If
lambda
is a list of pixel images, then the imagelambda[[i]]
determines the intensity of points of typetypes[i]
. The argumentwin
is ignored; the window of the pixel image is used instead. The argumenttypes
defaults tonames(lambda)
, or if that is null,1:length(lambda)
.
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}
.
Value
A point pattern (an object of class "ppp"
) if nsim=1
,
or a list of point patterns if nsim > 1
.
Each point pattern is multitype (it carries a vector of marks
which is a factor).
Author(s)
Adrian Baddeley Adrian.Baddeley@curtin.edu.au
and Rolf Turner rolfturner@posteo.net
See Also
rpoispp
for unmarked Poisson point process;
rmpoint
for a fixed number of random marked points;
im.object
,
owin.object
,
ppp.object
.
Examples
# 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
,
function(x,y){
100*exp(-0.6*x+0.5*y)
}
# log linear trend
)
X <- rmpoispp(lams, win=unit.square(), types=c("on", "off"))
# pixel image
Z <- as.im(function(x,y){30 * (x^2 + y^3)}, letterR)
pp <- rmpoispp(Z, types=c("A","B"))
# list of pixel images
ZZ <- list(
as.im(function(x,y){20 * (x^2 + y^3)}, letterR),
as.im(function(x,y){40 * (x^3 + y^2)}, letterR))
pp <- rmpoispp(ZZ, types=c("A","B"))
pp <- rmpoispp(ZZ)
# randomising an existing point pattern
rmpoispp(intensity(amacrine), win=Window(amacrine))