Inhomogeneous K-function
Estimates the inhomogeneous K function of a non-stationary point pattern.
Kinhom(X, lambda=NULL, ..., r = NULL, breaks = NULL, correction=c("border", "bord.modif", "isotropic", "translate"), renormalise=TRUE, normpower=1, update=TRUE, leaveoneout=TRUE, nlarge = 1000, lambda2=NULL, reciplambda=NULL, reciplambda2=NULL, diagonal=TRUE, sigma=NULL, varcov=NULL, ratio=FALSE)
X |
The observed data point pattern,
from which an estimate of the inhomogeneous K function
will be computed.
An object of class |
lambda |
Optional.
Values of the estimated intensity function.
Either a vector giving the intensity values
at the points of the pattern |
... |
Extra arguments. Ignored if |
r |
vector of values for the argument r at which the inhomogeneous K function should be evaluated. Not normally given by the user; there is a sensible default. |
breaks |
This argument is for internal use only. |
correction |
A character vector containing any selection of the
options |
renormalise |
Logical. Whether to renormalise the estimate. See Details. |
normpower |
Integer (usually either 1 or 2). Normalisation power. See Details. |
update |
Logical value indicating what to do when |
leaveoneout |
Logical value (passed to |
nlarge |
Optional. Efficiency threshold.
If the number of points exceeds |
lambda2 |
Advanced use only. Matrix containing estimates of the products lambda(x[i]) * lambda(x[j]) of the intensities at each pair of data points x[i] and x[j]. |
reciplambda |
Alternative to |
reciplambda2 |
Advanced use only. Alternative to |
diagonal |
Do not use this argument. |
sigma,varcov |
Optional arguments passed to |
ratio |
Logical.
If |
This computes a generalisation of the K function for inhomogeneous point patterns, proposed by Baddeley, Moller and Waagepetersen (2000).
The “ordinary” K function
(variously known as the reduced second order moment function
and Ripley's K function), is
described under Kest
. It is defined only
for stationary point processes.
The inhomogeneous K function Kinhom(r) is a direct generalisation to nonstationary point processes. Suppose x is a point process with non-constant intensity lambda(u) at each location u. Define Kinhom(r) to be the expected value, given that u is a point of x, of the sum of all terms 1/lambda(x[j]) over all points x[j] in the process separated from u by a distance less than r. This reduces to the ordinary K function if lambda() is constant. If x is an inhomogeneous Poisson process with intensity function lambda(u), then Kinhom(r) = pi * r^2.
Given a point pattern dataset, the inhomogeneous K function can be estimated essentially by summing the values 1/(lambda(x[i]) * lambda(x[j])) for all pairs of points x[i], x[j] separated by a distance less than r.
This allows us to inspect a point pattern for evidence of interpoint interactions after allowing for spatial inhomogeneity of the pattern. Values Kinhom(r) > pi * r^2 are suggestive of clustering.
The argument lambda
should supply the
(estimated) values of the intensity function lambda.
It may be either
containing the values
of the intensity function at the points of the pattern X
.
(object of class "im"
)
assumed to contain the values of the intensity function
at all locations in the window.
(object of class "ppm"
, "kppm"
or "dppm"
)
whose fitted trend can be used as the fitted intensity.
(If update=TRUE
the model will first be refitted to the
data X
before the trend is computed.)
which can be evaluated to give values of the intensity at any locations.
if lambda
is omitted, then it will be estimated using
a ‘leave-one-out’ kernel smoother.
If lambda
is a numeric vector, then its length should
be equal to the number of points in the pattern X
.
The value lambda[i]
is assumed to be the
the (estimated) value of the intensity
lambda(x[i]) for
the point x[i] of the pattern X.
Each value must be a positive number; NA
's are not allowed.
If lambda
is a pixel image, the domain of the image should
cover the entire window of the point pattern. If it does not (which
may occur near the boundary because of discretisation error),
then the missing pixel values
will be obtained by applying a Gaussian blur to lambda
using
blur
, then looking up the values of this blurred image
for the missing locations.
(A warning will be issued in this case.)
If lambda
is a function, then it will be evaluated in the
form lambda(x,y)
where x
and y
are vectors
of coordinates of the points of X
. It should return a numeric
vector with length equal to the number of points in X
.
If lambda
is omitted, then it will be estimated using
a ‘leave-one-out’ kernel smoother,
as described in Baddeley, Moller
and Waagepetersen (2000). The estimate lambda[i]
for the
point X[i]
is computed by removing X[i]
from the
point pattern, applying kernel smoothing to the remaining points using
density.ppp
, and evaluating the smoothed intensity
at the point X[i]
. The smoothing kernel bandwidth is controlled
by the arguments sigma
and varcov
, which are passed to
density.ppp
along with any extra arguments.
Edge corrections are used to correct bias in the estimation of Kinhom. Each edge-corrected estimate of Kinhom(r) is of the form
K^inhom(r)= (1/A) sum[i] sum[j] 1(d[i,j] <= r) * e(x[i],x[j],r)/(lambda(x[i]) * lambda(x[j]))
where A
is a constant denominator,
d[i,j] is the distance between points
x[i] and x[j], and
e(x[i],x[j],r) is
an edge correction factor. For the ‘border’ correction,
1(b[i] > r)/(sum[j] 1(b[j] > r)/lambda(x[j]))
where b[i] is the distance from x[i] to the boundary of the window. For the ‘modified border’ correction,
1(b[i] > r)/area(W [-] r)
where W [-] r is the eroded window obtained by trimming a margin of width r from the border of the original window. For the ‘translation’ correction,
1/area(W intersect (W + x[j]-x[i]))
and for the ‘isotropic’ correction,
1/(area(W) g(x[i],x[j]))
where g(x[i],x[j]) is the fraction of the circumference of the circle with centre x[i] and radius ||x[i]-x[j]|| which lies inside the window.
If renormalise=TRUE
(the default), then the estimates
described above
are multiplied by c^normpower where
c = area(W)/sum[i] (1/lambda(x[i])).
This rescaling reduces the variability and bias of the estimate
in small samples and in cases of very strong inhomogeneity.
The default value of normpower
is 1 (for consistency with
previous versions of spatstat)
but the most sensible value is 2, which would correspond to rescaling
the lambda
values so that
sum[i] (1/lambda(x[i])) = area(W).
If the point pattern X
contains more than about 1000 points,
the isotropic and translation edge corrections can be computationally
prohibitive. The computations for the border method are much faster,
and are statistically efficient when there are large numbers of
points. Accordingly, if the number of points in X
exceeds
the threshold nlarge
, then only the border correction will be
computed. Setting nlarge=Inf
or correction="best"
will prevent this from happening.
Setting nlarge=0
is equivalent to selecting only the border
correction with correction="border"
.
The pair correlation function can also be applied to the
result of Kinhom
; see pcf
.
An object of class "fv"
(see fv.object
).
Essentially a data frame containing at least the following columns,
r |
the vector of values of the argument r at which Kinhom(r) has been estimated |
theo |
vector of values of pi * r^2, the theoretical value of Kinhom(r) for an inhomogeneous Poisson process |
and containing additional columns
according to the choice specified in the correction
argument. The additional columns are named
border
, trans
and iso
and give the estimated values of
Kinhom(r)
using the border correction, translation correction,
and Ripley isotropic correction, respectively.
If ratio=TRUE
then the return value also has two
attributes called "numerator"
and "denominator"
which are "fv"
objects
containing the numerators and denominators of each
estimate of Kinhom(r).
Adrian Baddeley Adrian.Baddeley@curtin.edu.au
and Rolf Turner r.turner@auckland.ac.nz
Baddeley, A., Moller, J. and Waagepetersen, R. (2000) Non- and semiparametric estimation of interaction in inhomogeneous point patterns. Statistica Neerlandica 54, 329–350.
# inhomogeneous pattern of maples X <- unmark(split(lansing)$maple) # (1) intensity function estimated by model-fitting # Fit spatial trend: polynomial in x and y coordinates fit <- ppm(X, ~ polynom(x,y,2), Poisson()) # (a) predict intensity values at points themselves, # obtaining a vector of lambda values lambda <- predict(fit, locations=X, type="trend") # inhomogeneous K function Ki <- Kinhom(X, lambda) plot(Ki) # (b) predict intensity at all locations, # obtaining a pixel image lambda <- predict(fit, type="trend") Ki <- Kinhom(X, lambda) plot(Ki) # (2) intensity function estimated by heavy smoothing Ki <- Kinhom(X, sigma=0.1) plot(Ki) # (3) simulated data: known intensity function lamfun <- function(x,y) { 50 + 100 * x } # inhomogeneous Poisson process Y <- rpoispp(lamfun, 150, owin()) # inhomogeneous K function Ki <- Kinhom(Y, lamfun) plot(Ki) # How to make simulation envelopes: # Example shows method (2) if(interactive()) { smo <- density.ppp(X, sigma=0.1) Ken <- envelope(X, Kinhom, nsim=99, simulate=expression(rpoispp(smo)), sigma=0.1, correction="trans") plot(Ken) }
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.