Generate N Random Multitype Points
Generate a random multitype point pattern with a fixed number of points, or a fixed number of points of each type.
rmpoint(n, f=1, fmax=NULL, win=unit.square(), types, ptypes, ..., giveup=1000, verbose=FALSE, nsim=1, drop=TRUE)
n |
Number of marked points to generate. Either a single number specifying the total number of points, or a vector specifying the number of points of each type. |
f |
The probability density of the multitype points,
usually un-normalised.
Either a constant, a vector,
a function |
fmax |
An upper bound on the values of |
win |
Window in which to simulate the pattern.
Ignored if |
types |
All the possible types for the multitype pattern. |
ptypes |
Optional vector of probabilities for each type. |
... |
Arguments passed to |
giveup |
Number of attempts in the rejection method after which the algorithm should stop trying to generate new points. |
verbose |
Flag indicating whether to report details of performance of the simulation algorithm. |
nsim |
Number of simulated realisations to be generated. |
drop |
Logical. If |
This function generates random multitype point patterns consisting of a fixed number of points.
Three different models are available:
If n
is a single number and the argument ptypes
is missing,
then n
independent, identically distributed
random multitype points are generated.
Their locations
(x[i],y[i])
and types m[i]
have
joint probability density proportional to f(x,y,m).
If n
is a single number and ptypes
is given,
then n
independent, identically distributed
random multitype points are generated.
Their types m[i]
have probability distribution
ptypes
. Given the types, the locations (x[i],y[i])
have conditional probability density proportional to
f(x,y,m).
If n
is a vector, then we generate n[i]
independent, identically distributed random points of type
types[i]
. For points of type m the conditional probability
density of location (x,y) is proportional to
f(x,y,m).
Note that the density f
is normalised in different ways
in Model I and Models II and III. In Model I the normalised
joint density is g(x,y,m)=f(x,y,m)/Z where
Z = sum_[m] integral lambda(x,y,m) dx dy
while in Models II and III the normalised conditional density is g(x,y|m) = f(x,y,m)/Z[m] where
Z[m] = integral lambda(x,y,m) dx dy.
In Model I, the marginal distribution of types is p[m] = Z[m]/Z.
The unnormalised density f
may be specified
in any of the following ways.
If f
is a single number, the conditional density of
location given type is uniform. That is, the points of each type
are uniformly distributed.
In Model I, the marginal distribution of types is also uniform
(all possible types have equal probability).
If f
is a numeric vector, the conditional density of
location given type is uniform. That is, the points of each type
are uniformly distributed.
In Model I, the marginal distribution of types is
proportional to the vector f
. In Model II, the marginal
distribution of types is ptypes
, that is, the values in
f
are ignored.
The argument types
defaults to names(f)
,
or if that is null, 1:length(f)
.
If f
is a function, it will be called in the form
f(x,y,m,...)
at spatial location (x,y)
for points of type m
.
In Model I, the joint probability density of location and type is
proportional to f(x,y,m,...)
.
In Models II and III, the conditional probability density of
location (x,y)
given type m
is
proportional to f(x,y,m,...)
.
The function f
must work correctly with vectors x
,
y
and m
, returning a vector of function values.
(Note that m
will be a factor
with levels types
.)
The value fmax
must be given and must be an upper bound on the
values of f(x,y,m,...)
for all locations (x, y)
inside the window win
and all types m
.
The argument types
must be given.
If f
is a list of functions, then the functions will be
called in the form f[[i]](x,y,...)
at spatial
location (x,y)
for points of type types[i]
.
In Model I, the joint probability density of location and type is
proportional to f[[m]](x,y,...)
.
In Models II and III, the conditional probability density of
location (x,y)
given type m
is
proportional to f[[m]](x,y,...)
.
The function f[[i]]
must work correctly with vectors
x
and y
, returning a vector of function values.
The value fmax
must be given and must be an upper bound on the
values of f[[i]](x,y,...)
for all locations (x, y)
inside the window win
.
The argument types
defaults to names(f)
,
or if that is null, 1:length(f)
.
If f
is a pixel image object of class "im"
(see im.object
), the unnormalised density at a location
(x,y)
for points of any type is equal to the pixel value
of f
for the pixel nearest to (x,y)
.
In Model I, the marginal distribution of types is uniform.
The argument win
is ignored;
the window of the pixel image is used instead.
The argument types
must be given.
If f
is a list of pixel images,
then the image f[[i]]
determines the density values
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(f)
,
or if that is null, 1:length(f)
.
The implementation uses the rejection method.
For Model I, rmpoispp
is called repeatedly
until n
points have been generated.
It gives up after giveup
calls
if there are still fewer than n
points.
For Model II, the types are first generated according to
ptypes
, then
the locations of the points of each type
are generated using rpoint
.
For Model III, the locations of the points of each type
are generated using rpoint
.
A point pattern (an object of class "ppp"
) if nsim=1
,
or a list of point patterns if nsim > 1
.
Adrian Baddeley Adrian.Baddeley@curtin.edu.au
and Rolf Turner r.turner@auckland.ac.nz
abc <- c("a","b","c") ##### Model I rmpoint(25, types=abc) rmpoint(25, 1, types=abc) # 25 points, equal probability for each type, uniformly distributed locations rmpoint(25, function(x,y,m) {rep(1, length(x))}, types=abc) # same as above rmpoint(25, list(function(x,y){rep(1, length(x))}, function(x,y){rep(1, length(x))}, function(x,y){rep(1, length(x))}), types=abc) # same as above rmpoint(25, function(x,y,m) { x }, types=abc) # 25 points, equal probability for each type, # locations nonuniform with density proportional to x rmpoint(25, function(x,y,m) { ifelse(m == "a", 1, x) }, types=abc) rmpoint(25, list(function(x,y) { rep(1, length(x)) }, function(x,y) { x }, function(x,y) { x }), types=abc) # 25 points, UNEQUAL probabilities for each type, # type "a" points uniformly distributed, # type "b" and "c" points nonuniformly distributed. ##### Model II rmpoint(25, 1, types=abc, ptypes=rep(1,3)/3) rmpoint(25, 1, types=abc, ptypes=rep(1,3)) # 25 points, equal probability for each type, # uniformly distributed locations rmpoint(25, function(x,y,m) {rep(1, length(x))}, types=abc, ptypes=rep(1,3)) # same as above rmpoint(25, list(function(x,y){rep(1, length(x))}, function(x,y){rep(1, length(x))}, function(x,y){rep(1, length(x))}), types=abc, ptypes=rep(1,3)) # same as above rmpoint(25, function(x,y,m) { x }, types=abc, ptypes=rep(1,3)) # 25 points, equal probability for each type, # locations nonuniform with density proportional to x rmpoint(25, function(x,y,m) { ifelse(m == "a", 1, x) }, types=abc, ptypes=rep(1,3)) # 25 points, EQUAL probabilities for each type, # type "a" points uniformly distributed, # type "b" and "c" points nonuniformly distributed. ###### Model III rmpoint(c(12, 8, 4), 1, types=abc) # 12 points of type "a", # 8 points of type "b", # 4 points of type "c", # each uniformly distributed rmpoint(c(12, 8, 4), function(x,y,m) { ifelse(m=="a", 1, x)}, types=abc) rmpoint(c(12, 8, 4), list(function(x,y) { rep(1, length(x)) }, function(x,y) { x }, function(x,y) { x }), types=abc) # 12 points of type "a", uniformly distributed # 8 points of type "b", nonuniform # 4 points of type "c", nonuniform ######### ## Randomising an existing point pattern: # same numbers of points of each type, uniform random locations (Model III) rmpoint(table(marks(demopat)), 1, win=Window(demopat)) # same total number of points, distribution of types estimated from X, # uniform random locations (Model II) rmpoint(npoints(demopat), 1, types=levels(marks(demopat)), win=Window(demopat), ptypes=table(marks(demopat)))
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.