Inhomogeneous K-function

Estimates the inhomogeneous $K$ function of a non-stationary point pattern.

Kinhom(X, lambda, r = NULL, breaks = NULL, slow = FALSE,
    correction=c("border", "isotropic", "Ripley", "translate"), ...)
The observed data point pattern, from which an estimate of the inhomogeneous $K$ function will be computed. An object of class "ppp" or in a format recognised by as.ppp()
Vector of values of the estimated intensity function, evaluated at the points of the pattern X. Alternatively this may be a matrix: see Details.
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.
An alternative to the argument r. Not normally invoked by the user. See Details.
Not normally given by the user. Logical flag which selects the algorithm used to compute the inhomogeneous $K$ function. The default (slow=FALSE) is faster than the alternative (slow=TRUE). The slow algorithm is
A character vector containing any selection of the options "border", "bord.modif", "isotropic", "Ripley" or "translate". It specifies the edge correction(s) to be applied.
Currently ignored.

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 $K_{\rm inhom}(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 $K_{\rm inhom}(r)$ to be the expected value, given that $u$ is a point of $x$, of the sum of all terms $1/\lambda(u)\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 $K_{\rm inhom}(r) = \pi r^2$.

This allows us to inspect a point pattern for evidence of interpoint interactions after allowing for spatial inhomogeneity of the pattern. Values $K_{\rm inhom}(r) > \pi r^2$ are suggestive of clustering.

The argument lambda should be a vector of length equal to the number of points in the pattern X. It will be interpreted as giving the (estimated) values of $\lambda(x_i)$ for each point $x_i$ of the pattern $x$.

Alternatively lambda may be a square matrix of dimensions $n \times n$ where $n$ is the number of points in X. In this case lambda[i,j] will be interpreted as an estimate of $\lambda(x_i)\lambda(x_j)$.

Edge corrections are used to correct bias in the estimation of $K_{\rm inhom}$, in exactly the same way as for the classical $K$ function. See the documentation for Kest. 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,
  • rthe vector of values of the argument $r$ at which the pair correlation function $g(r)$ has been estimated
  • theovector of values of $\pi r^2$, the theoretical value of $K_{\rm inhom}(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 $K_{\rm inhom}(r)$ using the border correction, translation correction, and Ripley isotropic correction, respectively.


Baddeley, A., Moller, J. and Waagepetersen, R. (2000) Non- and semiparametric estimation of interaction in inhomogeneous point patterns. Statistica Neerlandica 54, 329--350.

See Also

Kest, pcf

  • Kinhom
  # inhomogeneous pattern of maples
  X <- unmark(lansing[lansing$marks == "maple",])
  <testonly>sub <- sample(c(TRUE,FALSE), X$n, replace=TRUE, prob=c(0.1,0.9))
     X <- X[sub , ]</testonly>
  # fit spatial trend
  fit <- ppm(X, ~ polynom(x,y,2), Poisson())
  # predict intensity values at points themselves
  lambda <- predict(fit, locations=X, type="trend")
  # inhomogeneous K function
  Ki <- Kinhom(X, lambda)

  # known intensity function
  lamfun <- function(x,y) { 100 * x }
  # inhomogeneous Poisson process
  Y <- rpoispp(lamfun, 100, owin())
  # evaluate intensity at points of pattern
  lambda <- lamfun(Y$x, Y$y)
  # inhomogeneous K function
  Ki <- Kinhom(Y, lambda)
Documentation reproduced from package spatstat, version 1.5-4, License: GPL version 2 or newer

Community examples

Looks like there are no examples yet.