#' @title Inhomogeneous O-ring
#' @description Calculates the inhomogeneous O-ring point pattern statistic
#' (Wiegand & Maloney 2004)
#'
#' @param x spatstat ppp object
#' @param inhomogeneous (FALSE/TRUE) Run homogeneous (pcf) or inhomogeneous
#' (pcfinhom)
#' @param ... additional arguments passed to pcf or pcfinhom
#'
#' @details
#' The function K(r) is the expected number of points in a circle of radius r centered
#' at an arbitrary point (which is not counted), divided by the intensity l of the pattern.
#' The alternative pair correlation function g(r), which arises if the circles of
#' Ripley's K-function are replaced by rings, gives the expected number of points at
#' distance r from an arbitrary point, divided by the intensity of the pattern. Of special
#' interest is to determine whether a pattern is random, clumped, or regular.
#'
#' Using rings instead of circles has the advantage that one can isolate specific
#' distance classes, whereas the cumulative K-function confounds effects at larger
#' distances with effects at shorter distances. Note that the K-function and the O-ring
#' statistic respond to slightly different biological questions. The accumulative
#' K-function can detect aggregation or dispersion up to a given distance r and is
#' therefore appropriate if the process in question (e.g., the negative effect of
#' competition) may work only up to a certain distance, whereas the O-ring statistic
#' can detect aggregation or dispersion at a given distance r. The O-ring statistic
#' has the additional advantage that it is a probability density function (or a
#' conditioned probability spectrum) with the interpretation of a neighborhood
#' density, which is more intuitive than an accumulative measure.
#'
#' @return plot of o-ring and data.frame with plot labels and descriptions
#'
#' @author Jeffrey S. Evans <jeffrey_evans@@tnc.org>
#'
#' @references
#' Wiegand T., and K. A. Moloney (2004) Rings, circles and null-models for point
#' pattern analysis in ecology. Oikos 104:209-229
#'
#' @examples
#' if (require(spatstat.explore, quietly = TRUE)) {
#' data(lansing)
#' x <- spatstat.geom::unmark(split(lansing)$maple)
#' o.ring(x)
#'
#' } else {
#' cat("Please install spatstat.explore package to run example", "\n")
#' }
#'
#' @export
o.ring <- function(x, inhomogeneous = FALSE, ...) {
if( inhomogeneous ) {
g <- spatstat.explore::pcfinhom(x, ...)
} else {
g <- spatstat.explore::pcf(x, ...)
}
lambda <- summary(x)$intensity
O <- spatstat.explore::eval.fv(lambda * g)
graphics::plot(O, ylab = "O-ring(r)", main = "O-ring")
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.