median.complex {complexlm}R Documentation

Improved Median for Complex Numbers

Description

By default stats::median handles complex numbers by computing the medians of the real and imaginary components separately. This is not ideal as the result is not rotationally invariant (the same set of numbers will have a different median if the coordinates are rotated). This method calculates the complex median as the geometric median, as implemented in pracma::geo_median, which is rotationally invariant.

Usage

## S3 method for class 'complex'
median(x, na.rm = FALSE, tol = 1e-07, maxiter = 200, ...)

Arguments

x

a numeric or complex vector, of which the median is to be calculated.

na.rm

logical. Should NA values be removed before finding the median?

tol

numeric. Relative tolerance to be passed to pracma::geo_median. Default is 1e-07.

maxiter

maximum number of iterations for calculating geometric median. Not used if x is numeric.

...

Additional arguments. Currently ignored.

Details

The geometric median fails if any of the input data are colinear. Meaning that a straight line on the complex plane can be drawn which intersects with one or more element of x. If this function encounters such an error, it adds a small amount of random jitter to the data, then calculates the geometric medium again. The jitter is generated by a normal distribution with a standard deviation equal to the absolute minimum real or imaginary component of x, divided by 10^8 (or 10^-9 if the minimum is zero).

Value

The median of x. If x is complex, the geometric median as calculated by Weiszfeld's algorithm.

Note

This method masks the default method for complex numbers.

References

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

See Also

stats::median and pracma::geo_median

Examples

set.seed(4242)
n <- 7
foo <- complex(real = rnorm(n), imaginary = rnorm(n))
median(foo)

[Package complexlm version 1.1.2 Index]