movmad

Moving median absolute deviation

Description

example

M = movmad(A,k) returns an array of local k-point median absolute deviations (MADs), where each MAD is calculated over a sliding window of length k across neighboring elements of A. M is the same size as A.

When k is odd, the window is centered about the element in the current position. When k is even, the window is centered about the current and previous elements. The window size is automatically truncated at the endpoints when there are not enough elements to fill the window. When the window is truncated, the MAD is taken over only the elements that fill the window.

  • If A is a vector, then movmad operates along the length of the vector.

  • If A is a multidimensional array, then movmad operates along the first array dimension whose size does not equal 1.

example

M = movmad(A,[kb kf]) computes the MAD with a window of length kb+kf+1 that includes the element in the current position, kb elements backward, and kf elements forward.

example

M = movmad(___,dim) computes the MAD along dimension dim for any of the previous syntaxes. For example, movmad(A,k,2) for a matrix A operates across the columns of A, computing the k-element sliding MAD for each row.

example

M = movmad(___,nanflag) specifies whether to include or omit NaN values from the calculation for any of the previous syntaxes. movmad(A,k,'includenan') includes all NaN values in the calculation, which is the default. movmad(A,k,'omitnan') ignores them and computes the MAD over fewer points.

example

M = movmad(___,Name,Value) specifies additional parameters for the moving MAD using one or more name-value pair arguments. For example, if x is a vector of time values, then movmad(A,k,'SamplePoints',x) computes the moving MAD of A relative to the times in x.

Examples

collapse all

Compute the three-point centered moving MAD of a row vector. When there are fewer than three elements in the window at the endpoints, compute over the elements that are available.

A = [1 2 4 -1 -2 -3 -1 3 2 1];
M = movmad(A,3)
M = 1×10

    0.5000    1.0000    2.0000    1.0000    1.0000    1.0000    2.0000    1.0000    1.0000    0.5000

Compute the three-point trailing moving MAD of a row vector. When there are fewer than three elements in the window at the endpoints, compute over the elements that are available.

A = [1 2 1 -1 -2 -3 -1 3 4 1];
M = movmad(A,[2 0])
M = 1×10

         0    0.5000         0    1.0000    1.0000    1.0000    1.0000    2.0000    1.0000    1.0000

Compute the 3-point centered moving MAD for each row of a matrix. The dimension argument is 2, which slides the window across the columns of A. The window starts on the first row, slides horizontally to the end of the row, then moves to the second row, and so on.

A = [1 2 1; -1 -2 -3; -1 3 4]
A = 3×3

     1     2     1
    -1    -2    -3
    -1     3     4

M = movmad(A,3,2)
M = 3×3

    0.5000         0    0.5000
    0.5000    1.0000    0.5000
    2.0000    1.0000    0.5000

Compute the three-point centered moving MAD of a row vector containing two NaN elements.

A = [2 1 NaN -1 -2 -3 NaN 3 4 1];
M = movmad(A,3)
M = 1×10

    0.5000       NaN       NaN       NaN    1.0000       NaN       NaN       NaN    1.0000    1.5000

Recalculate the moving MAD omitting the NaN values. When movmad discards NaN elements, it computes over the remaining elements in the window.

M = movmad(A,3,'omitnan')
M = 1×10

    0.5000    0.5000    1.0000    0.5000    1.0000    0.5000    3.0000    0.5000    1.0000    1.5000

Compute a 3-hour centered moving MAD of the data in A according to the time vector t.

A = [4 8 6 -1 -2 -3];
k = hours(3);
t = datetime(2016,1,1,0,0,0) + hours(0:5)
t = 1x6 datetime
Columns 1 through 3

   01-Jan-2016 00:00:00   01-Jan-2016 01:00:00   01-Jan-2016 02:00:00

Columns 4 through 6

   01-Jan-2016 03:00:00   01-Jan-2016 04:00:00   01-Jan-2016 05:00:00

M = movmad(A,k,'SamplePoints',t)
M = 1×6

    2.0000    2.0000    2.0000    1.0000    1.0000    0.5000

Compute the three-point centered moving MAD of a row vector, but discard any calculation that uses fewer than three points from the output. In other words, return only the MADs computed from a full three-element window, discarding endpoint calculations.

A = [1 2 1 -1 -2 -3 -1 3 4 1];
M = movmad(A,3,'Endpoints','discard')
M = 1×8

     0     1     1     1     1     2     1     1

Input Arguments

collapse all

Input array, specified as a vector, matrix, or multidimensional array.

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Window length, specified as a numeric or duration scalar. When k is a positive integer scalar, the centered MAD includes the element in the current position plus surrounding neighbors. For example, a three-point MAD defined by a window of length three results in the following calculation for a vector A:

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

Directional window length, specified as a numeric or duration row vector containing two elements. When kb and kf are positive integer scalars, the calculation is over kb+kf+1 elements. The calculation includes the element in the current position, kb elements before the current position, and kf elements after the current position. For example, a four-point MAD defined by the directional window [2 1] results in the following calculation for a vector A:

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

Dimension to operate along, specified as a positive integer scalar. If no value is specified, then the default is the first array dimension whose size does not equal 1.

Consider a matrix A.

  • If dim = 1, then movmad(A,k,1) starts with the first column and slides vertically over each row. The MAD is computed over k elements at a time. Then it moves to the second column and repeats the computation. This process continues until all columns are exhausted.

  • If dim = 2, then movmad(A,k,2) starts with the first row and slides horizontally across each column, computing over k elements at a time. Then it moves to the second row and repeats the computation. This process continues until all rows are exhausted.

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

NaN condition, specified as one of these values:

  • 'includenan' — Include NaN values from the input when computing the MAD, resulting in NaN output.

  • 'omitnan' — Ignore all NaN values in the input. If a window contains only NaN values, then movmad returns NaN.

Name-Value Pair Arguments

Specify optional comma-separated pairs of Name,Value arguments. Name is the argument name and Value is the corresponding value. Name must appear inside quotes. You can specify several name and value pair arguments in any order as Name1,Value1,...,NameN,ValueN.

Example: M = movmad(A,k,'Endpoints','fill')

Method to treat windows near endpoints, specified as the comma-separated pair consisting of 'Endpoints' and one of the following:

'Endpoints' ValueDescription
'shrink'Shrink the window size near the endpoints of the input to include only existing elements.
'discard'Do not output any MAD values when the window does not completely overlap with existing elements.
'fill'Replace nonexisting elements with NaN.
numeric or logical scalarReplace nonexisting elements with the specified numeric or logical value.

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string

Sample points for computing MADs, specified as the comma-separated pair consisting of 'SamplePoints' and a vector. The sample points represent the locations of the data in A. Sample points do not need to be uniformly sampled. By default, the sample points vector is [1 2 3 ... ].

Moving windows are defined relative to the sample points, which must be sorted and contain unique elements. For example, if t is a vector of times corresponding to the input data, then movmad(rand(1,10),3,'SamplePoints',t) has a window that represents the time interval between t(i)-1.5 and t(i)+1.5.

When the sample points vector has data type datetime or duration, then the moving window length must have type duration.

If the sample points are nonuniformly spaced and the 'Endpoints' name-value pair is specified, then its value must be 'shrink'.

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | datetime | duration

More About

collapse all

Median Absolute Deviation

For a random variable vector A made up of N scalar observations, the median absolute deviation (MAD) is defined as

MAD = median(|Aimedian(A)|)

for i = 1,2,...,N.

Extended Capabilities

Introduced in R2017a