Main Content

mad

Mean or median absolute deviation

Description

y = mad(X) returns the mean absolute deviation of the values in X.

  • If X is a vector, then mad returns the mean or median absolute deviation of the values in X.

  • If X is a matrix, then mad returns a row vector containing the mean or median absolute deviation of each column of X.

  • If X is a multidimensional array, then mad operates along the first nonsingleton dimension of X.

example

y = mad(X,flag) specifies whether to compute the mean absolute deviation (flag = 0, the default) or the median absolute deviation (flag = 1).

example

y = mad(X,flag,'all') returns the mean or median absolute deviation of all elements of X.

example

y = mad(X,flag,dim) returns the mean or median absolute deviation along the operating dimension dim of X.

example

y = mad(X,flag,vecdim) returns the mean or median absolute deviation over the dimensions specified in the vector vecdim. For example, if X is a 2-by-3-by-4 array, then mad(X,0,[1 2]) returns a 1-by-1-by-4 array. Each element of the output array is the mean absolute deviation of the elements on the corresponding page of X.

example

Examples

collapse all

Compare the robustness of the standard deviation, mean absolute deviation, and median absolute deviation in the presence of outliers.

Create a data set x of normally distributed data. Create another data set xo that contains the elements of x and an additional outlier.

rng('default') % For reproducibility
x = normrnd(0,1,1,50);
xo = [x 10];

Compute the ratio of the standard deviations of the two data sets.

r1 = std(xo)/std(x)
r1 = 
1.4633

Compute the ratio of the mean absolute deviations of the two data sets.

r2 = mad(xo)/mad(x)
r2 = 
1.1833

Compute the ratio of the median absolute deviations of the two data sets.

r3 = mad(xo,1)/mad(x,1)
r3 = 
1.0336

In this case, the median absolute deviation is less influenced by the outlier compared to the other two scale estimates.

Find the mean and median absolute deviations of all the values in an array.

Create a 3-by-5-by-2 array X and add an outlier.

X = reshape(1:30,[3 5 2]);
X(6) = 100
X = 
X(:,:,1) =

     1     4     7    10    13
     2     5     8    11    14
     3   100     9    12    15


X(:,:,2) =

    16    19    22    25    28
    17    20    23    26    29
    18    21    24    27    30

Find the mean and median absolute deviations of the elements in X.

meandev = mad(X,0,'all')
meandev = 
10.1178
mediandev = mad(X,1,'all')
mediandev = 
7.5000

meandev is the mean absolute deviation of all the elements in X, and mediandev is the median absolute deviation of all the elements in X.

Find the median absolute deviation along different dimensions for a multidimensional array.

Set the random seed for reproducibility of the results.

rng('default') 

Create a 1-by-3-by-2 array of random numbers.

X = randn([1,3,2])
X = 
X(:,:,1) =

    0.5377    1.8339   -2.2588


X(:,:,2) =

    0.8622    0.3188   -1.3077

Find the median absolute deviation of X along the default dimension.

Y2 = mad(X,1) % Flag is set to 1 for the median absolute deviation
Y2 = 
Y2(:,:,1) =

    1.2962


Y2(:,:,2) =

    0.5434

By default, mad operates along the first dimension of X whose size does not equal 1. In this case, this dimension is the second dimension of X. Therefore, Y2 is a 1-by-1-by-2 array.

Find the median absolute deviation of X along the third dimension.

Y3 = mad(X,1,3)
Y3 = 1×3

    0.1623    0.7576    0.4756

Y3 is a 1-by-3 matrix.

Find the mean absolute deviation over multiple dimensions by using the vecdim input argument.

Set the random seed for reproducibility of the results.

rng('default')

Create a 4-by-3-by-2 array of random numbers.

X = randn([4 3 2])
X = 
X(:,:,1) =

    0.5377    0.3188    3.5784
    1.8339   -1.3077    2.7694
   -2.2588   -0.4336   -1.3499
    0.8622    0.3426    3.0349


X(:,:,2) =

    0.7254   -0.1241    0.6715
   -0.0631    1.4897   -1.2075
    0.7147    1.4090    0.7172
   -0.2050    1.4172    1.6302

Find the mean absolute deviation of each page of X by specifying the first and second dimensions.

ypage = mad(X,0,[1 2])
ypage = 
ypage(:,:,1) =

    1.4626


ypage(:,:,2) =

    0.6652

For example, ypage(:,:,2) is the mean absolute deviation of all the elements in X(:,:,2), and is equivalent to specifying mad(X(:,:,2),0,'all').

Find the mean absolute deviation of the elements in each X(:,i,:) slice by specifying the first and third dimensions.

ycol = mad(X,0,[1 3])
ycol = 1×3

    0.8330    0.7872    1.5227

For example, ycol(3) is the mean absolute deviation of all the elements in X(:,3,:), and is equivalent to specifying mad(X(:,3,:),0,'all').

Input Arguments

collapse all

Input data that represents a sample from a population, specified as a vector, matrix, or multidimensional array.

  • If X is a vector, then mad returns the mean or median absolute deviation of the values in X.

  • If X is a matrix, then mad returns a row vector containing the mean or median absolute deviation of each column of X.

  • If X is a multidimensional array, then mad operates along the first nonsingleton dimension of X.

To specify the operating dimension when X is a matrix or an array, use the dim input argument.

mad treats NaNs as missing values and removes them.

Data Types: single | double

Indicator for the type of deviation, specified as 0 or 1.

  • If flag is 0 (default), then mad computes the mean absolute deviation, mean(abs(X – mean(X))).

  • If flag is 1, then mad computes the median absolute deviation, median(abs(X – median(X))).

Data Types: single | double | logical

Dimension along which to operate, specified as a positive integer. If you do not specify a value for dim, then the default is the first dimension of X whose size does not equal 1.

Consider the mean absolute deviation of a matrix X:

  • If dim is equal to 1, then mad(X) returns a row vector that contains the mean absolute deviation of each column in X.

  • If dim is equal to 2, then mad(X) returns a column vector that contains the mean absolute deviation of each row in X.

Data Types: single | double

Vector of dimensions, specified as a positive integer vector. Each element of vecdim represents a dimension of the input array X. The output y has length 1 in the specified operating dimensions. The other dimension lengths are the same for X and y.

For example, if X is a 2-by-3-by-3 array, then mad(X,0,[1 2]) returns a 1-by-1-by-3 array. Each element of the output array is the mean absolute deviation of the elements on the corresponding page of X.

Mapping of input dimension of 2-by-3-by-3 to output dimension of 1-by-1-by-3

Data Types: single | double

Output Arguments

collapse all

Mean or median absolute deviation, returned as a scalar, vector, matrix, or multidimensional array. If flag is 0 (default), then y is the mean absolute deviation of the values in X, mean(abs(X – mean(X))). If flag is 1, then y is the median absolute deviation of the values in X, median(abs(X – median(X))).

Tips

  • For normally distributed data, multiply mad by one of the following factors to obtain an estimate of the normal scale parameter σ:

    • sigma = 1.253 * mad(X,0) — For mean absolute deviation

    • sigma = 1.4826 * mad(X,1) — For median absolute deviation

Algorithms

collapse all

Mean Absolute Deviation

mad uses the mean function to calculate the mean absolute deviation. The mean absolute deviation is given by mean(abs(X – mean(X))).

Median Absolute Deviation

mad uses the median function to calculate the median absolute deviation. The median absolute deviation is given by median(abs(X – median(X))).

References

[1] Mosteller, F., and J. Tukey. Data Analysis and Regression. Upper Saddle River, NJ: Addison-Wesley, 1977.

[2] Sachs, L. Applied Statistics: A Handbook of Techniques. New York: Springer-Verlag, 1984, p. 253.

Extended Capabilities

Version History

Introduced before R2006a

See Also

| |