Mark Correlation Function

Estimate the marked correlation function of a marked point pattern.

markcorr(X, f = function(x,y) { x * y }, r=NULL,
         slow=FALSE, correction=c("border", "isotropic", "Ripley", "translate"),
         method="density", ...)
The observed point pattern. An object of class "ppp" or something acceptable to as.ppp.
Function $f$ used in the definition of the mark correlation function.
numeric vector. The values of the argument $r$ at which the mark correlation function $\rho_f(r)$ should be evaluated. There is a sensible default.
A character vector containing any selection of the options "border", "isotropic", "Ripley" or "translate". It specifies the edge correction(s) to be applied.
A character vector indicating the user's choice of density estimation technique to be used. Options are "density", "loess", "sm" and "smrep".
Logical vector indicating whether to use exact analytic geometry to calculate the edge correction weights for the translation correction in the case where the window of observation of X is polygonal. These calculations are ex
Arguments passed to the function loess.

The mark correlation function $\rho_f(r)$ of a marked point process $X$ is a measure of the dependence between the marks of two points of the process a distance $r$ apart. It is informally defined as $$\rho_f(r) = \frac{E[f(M_1,M_2)]}{E[f(M,M')]}$$ where $E[ ]$ denotes expectation and $M_1,M_2$ are the marks attached to two points of the process separated by a distance $r$, while $M,M'$ are independent realisations of the marginal distribution of marks.

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)$$. Note that $\rho_f(r)$ is not a ``correlation'' in the usual statistical sense. It can take any nonnegative real value. The value 1 suggests ``lack of correlation'': if the marks attached to the points of X are independent and identically distributed, then $\rho_f(r) \equiv 1$. The interpretation of values larger or smaller than 1 depends on the choice of function $f$.

The argument X must be a point pattern (object of class "ppp") or any data that are acceptable to as.ppp. It 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 argument r is the vector of values for the distance $r$ at which $\rho_f(r)$ is estimated.

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 in the same manner as in Kest. The edge corrections implemented here are [object Object],[object Object],[object Object] Note that the estimator assumes the process is stationary (spatially homogeneous).

The numerator and denominator of the mark correlation function (in the expression above) are estimated using density estimation techniques. The user can choose between [object Object],[object Object],[object Object],[object Object]


  • A data frame containing numeric columns
  • rthe values of the argument $r$ at which the mark correlation function $\rho_f(r)$ has been estimated
  • theothe theoretical value of $\rho_f(r)$ when the marks attached to different points are independent, namely 1
  • together with a column or columns named "border", "iso" and/or "trans", according to the selected edge corrections. These columns contain estimates of the function $\rho_f(r)$ obtained by the edge corrections named.


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

See Also

Kest, Kmulti

  • markcorr
    # Longleaf Pine data: real-valued marks represent tree diameter
    # Subset of this large pattern
    swcorner <- owin(c(0,100),c(0,100))
    sub <- longleaf[ , swcorner]
    # mark correlation function
    mc <- markcorr(sub)
    plot(mc$r, mc$trans,
         xlab="r", ylab="mcf(r)",
         type="l", ylim=c(0,2), xlim=c(0,40))
    # or:
    conspire(mc, cbind(trans,theo) ~ r, xlim=c(0,40),ylim=c(0,2))

    # simulated data with independent marks
    X <- rpoispp(100)
    X$marks <- runif(X$n)
    Xc <- markcorr(X)
    conspire(Xc, cbind(iso,trans,theo) ~ r, xlim=c(0,0.4),ylim=c(0,2))
    # multitype pattern
    gmc <- markcorr(ganglia, function(m1,m2){m1 == m2})
    conspire(gmc, cbind(iso,trans,theo)~ r, ylim=c(0,2), xlim=c(0,0.4))
    # shows strong negative association between types at close distances

   <testonly>niets <- markcorr(ganglia, function(m1,m2){m1 == m2}, method="loess")
    niets <- markcorr(X, correction="isotropic", method="smrep")</testonly>
Documentation reproduced from package spatstat, version 1.2-1, License: GPL version 2 or newer

Community examples

Looks like there are no examples yet.