Generate a random point pattern, a realisation of the (homogeneous or inhomogeneous) multitype Poisson process.
rmpoispp(lambda, lmax=NULL, win, types, …,
nsim=1, drop=TRUE, warnwin=!missing(win))
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.
Number of simulated realisations to be generated.
Logical. If nsim=1
and drop=TRUE
(the default), the
result will be a point pattern, rather than a list
containing a point pattern.
Logical value specifying whether to issue a warning
when win
is ignored.
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).
This function generates a realisation of the marked Poisson
point process with intensity lambda
.
Note that the intensity function
The intensity function may be specified in any of the following ways.
If lambda
is a single number,
then this algorithm generates a realisation
of the uniform marked Poisson process inside the window win
with
intensity lambda
for each type. The total intensity of
points of all types is lambda * length(types)
.
The argument types
must be given
and determines the possible types in the multitype pattern.
If lambda
is a numeric vector,
then this algorithm generates a realisation
of the stationary marked Poisson process inside the window
win
with intensity lambda[i]
for points of type
types[i]
. The total intensity of points of all types
is sum(lambda)
.
The argument types
defaults to
names(lambda)
, or if that is null, 1:length(lambda)
.
If lambda
is a function, the process has intensity
lambda(x,y,m,…)
at spatial location (x,y)
for points of type m
.
The function lambda
must work correctly with vectors x
,
y
and m
, returning a vector of function values.
(Note that m
will be a factor
with levels equal to types
.)
The value lmax
, if present, must be an upper bound on the
values of lambda(x,y,m,…)
for all locations (x, y)
inside the window win
and all types m
.
The argument types
must be given.
If lambda
is a list of functions,
the process has intensity lambda[[i]](x,y,…)
at spatial
location (x,y)
for points of type types[i]
.
The function lambda[[i]]
must work correctly with vectors
x
and y
, returning a vector of function values.
The value lmax
, if given, must be an upper bound on the
values of lambda(x,y,…)
for all locations (x, y)
inside the window win
.
The argument types
defaults to
names(lambda)
, or if that is null, 1:length(lambda)
.
If lambda
is a pixel image object of class "im"
(see im.object
), the intensity at a location
(x,y)
for points of any type is equal to the pixel value
of lambda
for the pixel nearest to (x,y)
.
The argument win
is ignored;
the window of the pixel image is used instead.
The argument types
must be given.
If lambda
is a list of pixel images,
then the image lambda[[i]]
determines the intensity
of points of type types[i]
.
The argument win
is ignored;
the window of the pixel image is used instead.
The argument types
defaults to
names(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
rpoispp
for unmarked Poisson point process;
rmpoint
for a fixed number of random marked points;
ppp.object
,
owin.object
.
# NOT RUN {
# 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
data(letterR)
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))
# }
Run the code above in your browser using DataLab