spatstat (version 1.3-2)

pcf: Pair Correlation Function


Estimates the pair correlation function of a point pattern.


pcf(X, ..., method="c")


Either the observed data point pattern, or an estimate of its $K$ function, or an array of multitype $K$ functions (see Details).
Arguments controlling the smoothing spline function smooth.spline.
Letter "a", "b" or "c" indicating the method for deriving the pair correlation function from the K function.


  • A data frame containing (at least) the variables
  • rthe vector of values of the argument $r$ at which the pair correlation function $g(r)$ has been estimated
  • pcfvector of values of $g(r)$


The pair correlation function of a stationary point process is $$g(r) = \frac{K'(r)}{2\pi r}$$ where $K'(r)$ is the derivative of $K(r)$, the reduced second moment function (aka ``Ripley's $K$ function'') of the point process. See Kest for information about $K(r)$. For a stationary Poisson process, the pair correlation function is identically equal to 1. Values $g(r) < 1$ suggest inhibition between points; values greater than 1 suggest clustering.

We also apply the same definition to other variants of the classical $K$ function, such as the multitype $K$ functions (see Kcross, Kdot) and the inhomogeneous $K$ function (see Kinhom). For all these variants, the benchmark value of $K(r) = \pi r^2$ corresponds to $g(r) = 1$.

This routine computes an estimate of $g(r)$ from an estimate of $K(r)$ or its variants, using smoothing splines to approximate the derivative.

The argument X may be either

  • a point pattern for which an estimate of the pair correlation function should be computed. This should be an object of class"ppp", or in a format recognised byas.ppp().
  • a data frame containing an estimate of a$K$function. This data frame should be the value returned byKest,Kcross,KmultiorKinhom.
  • a function array (object of class"fasp", seefasp.object) containing several estimates of$K$functions. This should have been obtained fromalltypeswith the argumentfun="K".
If X is a point pattern, the $K$ function is first estimated by Kest. The smoothing spline operations are performed by smooth.spline and predict.smooth.spline from the modreg library. Three numerical methods are available:
  • "a"apply smoothing to$K(r)$, estimate its derivative, and plug in to the formula above;
  • "b"apply smoothing to$Y(r) = \frac{K(r)}{2 \pi r}$constraining$Y(0) = 0$, estimate the derivative of$Y$, and solve;
  • "c"apply smoothing to$Z(r) = \frac{K(r)}{\pi r^2}$constraining$Z(0)=1$, estimate its derivative, and solve.
Method "c" seems to be the best at suppressing variability for small values of $r$. However it effectively constrains $g(0) = 1$. If the point pattern seems to have inhibition at small distances, you may wish to experiment with method "b" which effectively constrains $g(0)=0$. Method "a" seems comparatively unreliable.

Useful arguments to control the splines include the smoothing tradeoff parameter spar and the degrees of freedom df. See smooth.spline for details.


Stoyan, D, Kendall, W.S. and Mecke, J. (1995) Stochastic geometry and its applications. 2nd edition. Springer Verlag.

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

See Also

Kest, Kinhom, Kcross, Kdot, Kmulti, alltypes, smooth.spline, predict.smooth.spline


  p <- pcf(simdat)
  plot(p$r, p$pcf, type="l", xlab="r", ylab="g(r)",
                  main="pair correlation")
    abline(h=1, lty=1)

  # multitype point pattern
  p <- pcf(alltypes(ganglia, "K"), spar=0.5, method="b")
  conspire(p, cbind(pcf,1) ~ r, subset="r <= 0.2",
             title="Pair correlation functions for ganglia")