Learn R Programming

robustbase (version 0.92-6)

mc: Medcouple, a Robust Measure of Skewness

Description

Compute the ‘medcouple’, a robust concept and estimator of skewness. The medcouple is defined as a scaled median difference of the left and right half of distribution, and hence not based on the third moment as the classical skewness.

Usage

mc(x, na.rm = FALSE, doReflect = (length(x) <= 100),="" eps1 =" .Machine$double.eps," eps2 =" .Machine$double.xmin," maxit =" 100," trace.lev =" 0," full.result =" FALSE)

Arguments

x
a numeric vector
na.rm
logical indicating how missing values (NAs) should be dealt with.
doReflect
logical indicating if the internal MC should also be computed on the reflected sample -x, with final result (mc.(x) - mc.(-x))/2. This makes sense since the internal MC, mc.() computes the himedian() which can differ slightly from the median.
eps1,eps2
tolerance in the algorithm; only change with care!
maxit
maximul number of iterations; typically a few should be sufficient.
trace.lev
integer specifying how much diagnostic output the algorithm (in C) should produce. No output by default, most output for trace.lev = 5.
full.result
logical indicating if the full return values (from C) should be returned as a list via attr(*, "mcComp").

Value

a number between -1 and 1, which is the medcouple, $MC(x)$. For r <- mc(x, full.result = TRUE, ....), then attr(r, "mcComp") is a list with components
medc
the medcouple $mc.(x)$.
medc2
the medcouple $mc.(-x)$ if doReflect=TRUE.
eps
tolerances used.
iter,iter2
number of iterations used.
converged,converged2
logical specifying “convergence”.

References

Guy Brys, Mia Hubert and Anja Struyf (2004) A Robust Measure of Skewness; JCGS 13 (4), 996--1017.

Hubert, M. and Vandervieren, E. (2008). An adjusted boxplot for skewed distributions, Computational Statistics and Data Analysis 52, 5186--5201.

See Also

Qn for a robust measure of scale (aka “dispersion”), ....

Examples

Run this code
mc(1:5) # 0 for a symmetric sample

x1 <- c(1, 2, 7, 9, 10)
mc(x1) # = -1/3

data(cushny)
mc(cushny) # 0.125

stopifnot(mc(c(-20, -5, -2:2, 5, 20)) == 0,
          mc(x1, doReflect=FALSE) ==  -mc(-x1, doReflect=FALSE),
          all.equal(mc(x1, doReflect=FALSE), -1/3, tolerance = 1e-12))

Run the code above in your browser using DataLab