MAD: Median Absolute Deviation In DescTools: Tools for Descriptive Statistics

Description

Compute the median absolute deviation, i.e., the (lo-/hi-) median of the absolute deviations from the median, and (by default) adjust by a factor for asymptotically normal consistency.

Usage

 ```1 2``` ```MAD(x, weights = NULL, center = Median, constant = 1.4826, na.rm = FALSE, low = FALSE, high = FALSE) ```

Arguments

 `x` a numeric vector. `weights` a numerical vector of weights the same length as `x` giving the weights to use for elements of `x`. `center` the centre given either as numeric value or as a function to be applied to `x` (defaults to the `DescTools::Median(x)`). Note in cases when weights are defined to provide a function that also support weights. If this is not possible fall back to a numeric value. `constant` scale factor (default is `1.4826`) `na.rm` if `TRUE` then `NA` values are stripped from `x` before computation takes place. `low` if `TRUE`, compute the ‘lo-median’, i.e., for even sample size, do not average the two middle values, but take the smaller one. `high` if `TRUE`, compute the ‘hi-median’, i.e., take the larger of the two middle values for even sample size.

Details

The actual value calculated is `constant * cMedian(abs(x - center))` with the default value of `center` being `median(x)`, and `cMedian` being the usual, the ‘low’ or ‘high’ median, see the arguments description for `low` and `high` above.

The default `constant = 1.4826` (approximately 1/ Φ^(-1)(3/4) = `1/qnorm(3/4)`) ensures consistency, i.e.,

for X_i distributed as N(μ, σ^2) and large n.

If `na.rm` is `TRUE` then `NA` values are stripped from `x` before computation takes place. If this is not done then an `NA` value in `x` will cause `MAD` to return `NA`.

`IQR` which is simpler but less robust, `median`, `var`.
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16``` ```MAD(c(1:9)) print(MAD(c(1:9), constant = 1)) == MAD(c(1:8, 100), constant = 1) # = 2 ; TRUE x <- c(1,2,3,5,7,8) sort(abs(x - median(x))) c(MAD(x, constant = 1), MAD(x, constant = 1, low = TRUE), MAD(x, constant = 1, high = TRUE)) # use weights x <- sample(20, 30, replace = TRUE) z <- as.numeric(names(w <- table(x))) (m1 <- MAD(z, weights=w)) (m2 <- MAD(x)) stopifnot(identical(m1, m2)) ```