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,
norm = FALSE,
axial = TRUE,
na.rm = TRUE
)
Arguments
- x, y
vectors of numeric values in degrees.
length(y)
is either1
orlength(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 inx
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 ofy
.- norm
logical. Whether the dispersion should be normalized by the maximum possible angular difference.
Value
circular_distance
returns a numeric vector of positive numbers,
circular_dispersion
returns a positive number.
References
Mardia, K.V. (1972). Statistics of Directional Data: Probability and Mathematical Statistics. London: Academic Press.
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.1474684
circular_dispersion(sa.por$azi.PoR, y = 135, w = 1 / san_andreas$unc)
#> [1] 0.09840187