Nearest-Neighbour Correlation of Marked Point Pattern

Computes the nearest-neighbour correlation of a marked point pattern.

spatial, nonparametric
            f = function(m1, m2) { m1 * m2 },
            use = "all.obs", method = c("pearson", "kendall", "spearman"))
The observed point pattern. An object of class "ppp".
Function $f$ used in the definition of the nearest neighbour correlation.
Extra arguments passed to f.
Arguments passed to the standard correlation function cor.

The nearest neighbour correlation $\bar n_f$ of a marked point process $X$ is a number measuring the dependence between the mark of a typical point and the mark of its nearest neighbour.

Three different values are computed: the unnormalised, normalised, and classical correlations. The unnormalised nearest neighbour correlation (Stoyan and Stoyan, 1994, section 14.7) is defined as $$\bar n_f = E[f(M, M^\ast)]$$ where $E[]$ denotes mean value, $M$ is the mark attached to a typical point of the point process, and $M^\ast$ is the mark attached to its nearest neighbour (i.e. the nearest other point of the point process). Here $f$ is any function $f(m_1,m_2)$ with two arguments which are possible marks of the pattern, and which returns a nonnegative real value. Common choices of $f$ are: for continuous real-valued marks, $$f(m_1,m_2) = m_1 m_2$$ for discrete marks (multitype point patterns), $$f(m_1,m_2) = 1(m_1 = m_2)$$ and for marks taking values in $[0,2\pi)$, $$f(m_1,m_2) = \sin(m_1 - m_2)$$ For example, in the second case, the unnormalised nearest neighbour correlation $\bar n_f$ equals the proportion of points in the pattern which have the same mark as their nearest neighbour.

Note that $\bar n_f$ is not a ``correlation'' in the usual statistical sense. It can take values greater than 1.

We can define a normalised nearest neighbour correlation by $$\bar m_f = \frac{E[f(M,M^\ast)]}{E[f(M,M')]}$$ where again $M$ is the mark attached to a typical point, $M^\ast$ is the mark attached to its nearest neighbour, and $M'$ is an independent copy of $M$ with the same distribution. This normalisation is also not a ``correlation'' in the usual statistical sense, but is normalised so that the value 1 suggests ``lack of correlation'': if the marks attached to the points of X are independent and identically distributed, then $\bar m_f = 1$. The interpretation of values larger or smaller than 1 depends on the choice of function $f$.

Finally if the marks of X are real numbers, we can also compute the classical correlation, that is, the correlation coefficient of the two random variables $M$ and $M^\ast$. The classical correlation has a value between $-1$ and $1$. Values close to $-1$ or $1$ indicate strong dependence between the marks.

This function computes the unnormalised and normalised nearest neighbour correlations, and the classical correlation if appropriate.

The argument X must be a point pattern (object of class "ppp") and must be a marked point pattern.

The argument f must be a function, accepting two arguments m1 and m2 which are vectors of equal length containing mark values (of the same type as the marks of X). It must return a vector of numeric values of the same length as m1 and m2. The values must be non-negative.

The arguments use and method control the calculation of the classical correlation using cor, as explained in the help file for cor.

Other arguments may be passed to f through the ... argument. This algorithm assumes that X can be treated as a realisation of a stationary (spatially homogeneous) random spatial point process in the plane, observed through a bounded window. The window (which is specified in X as X$window) may have arbitrary shape. Biases due to edge effects are treated using the border method edge correction.


  • Labelled vector of length 2 or 3 containing the unnormalised and normalised nearest neighbour correlations, and the classical correlation if appropriate.


Stoyan, D. and Stoyan, H. (1994) Fractals, random shapes and point fields: methods of geometrical statistics. John Wiley and Sons.

  • nncorr
  # heights of neighbouring trees are slightly negatively correlated

  nncorr(amacrine, function(m1, m2) { m1 == m2})
  # neighbouring cells are usually of different type
Documentation reproduced from package spatstat, version 1.9-3, License: GPL version 2 or newer

Community examples

Looks like there are no examples yet.