R: Inhomogeneous Cross K Function

Kcross.inhom {spatstat.core} | R Documentation

## Inhomogeneous Cross K Function

### Description

For a multitype point pattern, estimate the inhomogeneous version of the cross K function, which counts the expected number of points of type j within a given distance of a point of type i, adjusted for spatially varying intensity.

### Usage

    Kcross.inhom(X, i, j, lambdaI=NULL, lambdaJ=NULL, ...,  r=NULL, breaks=NULL,
             correction = c("border", "isotropic", "Ripley", "translate"),
             sigma=NULL, varcov=NULL,
             lambdaIJ=NULL,
             lambdaX=NULL, update=TRUE, leaveoneout=TRUE)

### Arguments

`X` | The observed point pattern, from which an estimate of the inhomogeneous cross type K function Kij(r) will be computed. It must be a multitype point pattern (a marked point pattern whose marks are a factor). See under Details.
`i` | The type (mark value) of the points in `X` from which distances are measured. A character string (or something that will be converted to a character string). Defaults to the first level of `marks(X)`.
`j` | The type (mark value) of the points in `X` to which distances are measured. A character string (or something that will be converted to a character string). Defaults to the second level of `marks(X)`.
`lambdaI` | Optional. Values of the estimated intensity of the sub-process of points of type `i`. Either a pixel image (object of class `"im"`), a numeric vector containing the intensity values at each of the type `i` points in `X`, a fitted point process model (object of class `"ppm"` or `"kppm"` or `"dppm"`), or a `function(x,y)` which can be evaluated to give the intensity value at any location.
`lambdaJ` | Optional. Values of the the estimated intensity of the sub-process of points of type `j`. Either a pixel image (object of class `"im"`), a numeric vector containing the intensity values at each of the type `j` points in `X`, a fitted point process model (object of class `"ppm"` or `"kppm"` or `"dppm"`), or a `function(x,y)` which can be evaluated to give the intensity value at any location.
`r` | Optional. Numeric vector giving the values of the argument r at which the cross K function Kij(r) should be evaluated. There is a sensible default. First-time users are strongly advised not to specify this argument. See below for important conditions on r.
`breaks` | This argument is for advanced use only.
`correction` | A character vector containing any selection of the options `"border"`, `"bord.modif"`, `"isotropic"`, `"Ripley"` ,`"translate"`, `"translation"`, `"none"` or `"best"`. It specifies the edge correction(s) to be applied. Alternatively `correction="all"` selects all options.
`...` | Ignored.
`sigma` | Standard deviation of isotropic Gaussian smoothing kernel, used in computing leave-one-out kernel estimates of `lambdaI`, `lambdaJ` if they are omitted.
`varcov` | Variance-covariance matrix of anisotropic Gaussian kernel, used in computing leave-one-out kernel estimates of `lambdaI`, `lambdaJ` if they are omitted. Incompatible with `sigma`.
`lambdaIJ` | Optional. A matrix containing estimates of the product of the intensities `lambdaI` and `lambdaJ` for each pair of points of types `i` and `j` respectively.
`lambdaX` | Optional. Values of the intensity for all points of `X`. Either a pixel image (object of class `"im"`), a numeric vector containing the intensity values at each of the points in `X`, a fitted point process model (object of class `"ppm"` or `"kppm"` or `"dppm"`), or a `function(x,y)` which can be evaluated to give the intensity value at any location. If present, this argument overrides both `lambdaI` and `lambdaJ`.
`update` | Logical value indicating what to do when `lambdaI`, `lambdaJ` or `lambdaX` is a fitted point process model (class `"ppm"`, `"kppm"` or `"dppm"`). If `update=TRUE` (the default), the model will first be refitted to the data `X` (using `update.ppm` or `update.kppm`) before the fitted intensity is computed. If `update=FALSE`, the fitted intensity of the model will be computed without re-fitting it to `X`.
`leaveoneout` | Logical value (passed to `density.ppp` or `fitted.ppm`) specifying whether to use a leave-one-out rule when calculating the intensity.

### Details

This is a generalisation of the function `Kcross` to include an adjustment for spatially inhomogeneous intensity, in a manner similar to the function `Kinhom`.

The inhomogeneous cross-type K function is described by Moller and Waagepetersen (2003, pages 48-49 and 51-53).

Briefly, given a multitype point process, suppose the sub-process of points of type j has intensity function lambda[j](u) at spatial locations u. Suppose we place a mass of 1/lambda[j](z) at each point z of type j. Then the expected total mass per unit area is 1. The inhomogeneous “cross-type” K function K[ij]inhom(r) equals the expected total mass within a radius r of a point of the process of type i.

If the process of type i points were independent of the process of type j points, then K[ij]inhom(r) would equal pi * r^2. Deviations between the empirical Kij curve and the theoretical curve pi * r^2 suggest dependence between the points of types i and j.

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, and the mark vector `X$marks` must be a factor.

The arguments `i` and `j` will be interpreted as levels of the factor `X$marks`. (Warning: this means that an integer value `i=3` will be interpreted as the number 3, not the 3rd smallest level). If `i` and `j` are missing, they default to the first and second level of the marks factor, respectively.

The argument `lambdaI` supplies the values of the intensity of the sub-process of points of type `i`. It may be either

a pixel image

  (object of class `"im"`) which gives the values of the type `i` intensity at all locations in the window containing `X`;

a numeric vector

  containing the values of the type `i` intensity evaluated only at the data points of type `i`. The length of this vector must equal the number of type `i` points in `X`.

a function

  which can be evaluated to give values of the intensity at any locations.

a fitted point process model

  (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.)

omitted:

  if `lambdaI` is omitted then it will be estimated using a leave-one-out kernel smoother.

If `lambdaI` is omitted, then it will be estimated using a ‘leave-one-out’ kernel smoother, as described in Baddeley, Moller and Waagepetersen (2000). The estimate of `lambdaI` for a given point is computed by removing the point from the point pattern, applying kernel smoothing to the remaining points using `density.ppp`, and evaluating the smoothed intensity at the point in question. The smoothing kernel bandwidth is controlled by the arguments `sigma` and `varcov`, which are passed to `density.ppp` along with any extra arguments.

Similarly `lambdaJ` should contain estimated values of the intensity of the sub-process of points of type `j`. It may be either a pixel image, a function, a numeric vector, or omitted.

Alternatively if the argument `lambdaX` is given, then it specifies the intensity values for all points of `X`, and the arguments `lambdaI`, `lambdaJ` will be ignored.

The optional argument `lambdaIJ` is for advanced use only. It is a matrix containing estimated values of the products of these two intensities for each pair of data points of types `i` and `j` respectively.

The argument `r` is the vector of values for the distance r at which Kij(r) should be evaluated. The values of r must be increasing nonnegative numbers and the maximum r value must not exceed the radius of the largest disc contained in the window.

The argument `correction` chooses the edge correction as explained e.g. in `Kest`.

The pair correlation function can also be applied to the result of `Kcross.inhom`; see `pcf`.

### Value

An object of class `"fv"` (see `fv.object`).

Essentially a data frame containing numeric columns

`r` | the values of the argument r at which the function Kij(r) has been estimated
`theo` | the theoretical value of Kij(r) for a marked Poisson process, namely pi * r^2

together with a column or columns named `"border"`, `"bord.modif"`, `"iso"` and/or `"trans"`, according to the selected edge corrections. These columns contain estimates of the function Kij(r) obtained by the edge corrections named.

### Warnings

The arguments `i` and `j` are always interpreted as levels of the factor `X$marks`. They are converted to character strings if they are not already character strings. The value `i=1` does not refer to the first level of the factor.

### Author(s)

Adrian Baddeley Adrian.Baddeley@curtin.edu.au, Rolf Turner r.turner@auckland.ac.nz and Ege Rubak rubak@math.aau.dk.

### References

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

Moller, J. and Waagepetersen, R. Statistical Inference and Simulation for Spatial Point Processes Chapman and Hall/CRC Boca Raton, 2003.

### See Also

`Kcross`, `Kinhom`, `Kdot.inhom`, `Kmulti.inhom`, `pcf`

### Examples

        # Lansing Woods data
        woods <- lansing

        ma <- split(woods)$maple
        wh <- split(woods)$whiteoak

        # method (1): estimate intensities by nonparametric smoothing
        lambdaM <- density.ppp(ma, sigma=0.15, at="points")
        lambdaW <- density.ppp(wh, sigma=0.15, at="points")
        K <- Kcross.inhom(woods, "whiteoak", "maple", lambdaW, lambdaM)

        # method (2): leave-one-out
        K <- Kcross.inhom(woods, "whiteoak", "maple", sigma=0.15)

        # method (3): fit parametric intensity model
        fit <- ppm(woods ~marks * polynom(x,y,2))
        # alternative (a): use fitted model as 'lambda' argument
        K <- Kcross.inhom(woods, "whiteoak", "maple",
                          lambdaI=fit, lambdaJ=fit, update=FALSE)
        K <- Kcross.inhom(woods, "whiteoak", "maple",
                          lambdaX=fit, update=FALSE)
        # alternative (b): evaluate fitted intensities at data points
        # (these are the intensities of the sub-processes of each type)
        inten <- fitted(fit, dataonly=TRUE)
        # split according to types of points
        lambda <- split(inten, marks(woods))
        K <- Kcross.inhom(woods, "whiteoak", "maple",
                  lambda$whiteoak, lambda$maple)

        # synthetic example: type A points have intensity 50,
        #                    type B points have intensity 100 * x
        lamB <- as.im(function(x,y){50 + 100 * x}, owin())
        X <- superimpose(A=runifpoispp(50), B=rpoispp(lamB))
        K <- Kcross.inhom(X, "A", "B",
            lambdaI=as.im(50, Window(X)), lambdaJ=lamB)

[Package spatstat.core version 2.4-4 Index]