Skip to contents

Circular distance between two angles and circular dispersion of angles about a specified angle.

Usage

circular_distance(x, y, axial = TRUE, na.rm = TRUE)

circular_dispersion(
  x,
  y = NULL,
  w = NULL,
  w.y = NULL,
  axial = TRUE,
  na.rm = TRUE
)

circular_distance_alt(x, y, axial = TRUE, na.rm = TRUE)

circular_dispersion_alt(
  x,
  y = NULL,
  w = NULL,
  w.y = NULL,
  axial = TRUE,
  na.rm = TRUE
)

Arguments

x, y

vectors of numeric values in degrees. length(y) is either 1 or length(x)

axial

logical. Whether the data are axial, i.e. pi-periodical (TRUE, the default) or directional, i.e. \(2 \pi\)-periodical (FALSE).

na.rm

logical. Whether NA values in x should be stripped before the computation proceeds.

w, w.y

(optional) Weights. A vector of positive numbers and of the same length as x. w.y is the (optional) weight of y.

Value

circular_distancereturns a numeric vector of positive numbers, circular_dispersionreturns a positive number.

Details

circular_distance_alt() and circular_dispersion_alt() are the alternative versions in Mardia and Jupp (2000), pp. 19-20. The alternative dispersion has a minimum at the sample median.

Note

If y is NULL, than the circular variance is returned.

References

Mardia, K.V. (1972). Statistics of Directional Data: Probability and Mathematical Statistics. London: Academic Press.

Mardia, K.V., and Jupp, P.E (1999). Directional Statistics, Wiley Series in Probability and Statistics. John Wiley & Sons, Inc., Hoboken, NJ, USA. doi:10.1002/9780470316979

Examples

a <- c(0, 2, 359, 6, 354)
circular_distance(a, 10) # distance to single value
#> [1] 0.030153690 0.019369152 0.036408073 0.004865966 0.075975952

b <- a + 90
circular_distance(a, b) # distance to multiple values
#> [1] 1 1 1 1 1

data("nuvel1")
PoR <- subset(nuvel1, nuvel1$plate.rot == "na")
sa.por <- PoR_shmax(san_andreas, PoR, "right")
circular_dispersion(sa.por$azi.PoR, y = 135)
#> [1] 0.1495228
circular_dispersion(sa.por$azi.PoR, y = 135, w = 1 / san_andreas$unc)
#> [1] 0.09858997