MOVMEDIAN

Purpose:

Calculates the moving median of a series.

Syntax:

MOVMEDIAN(series, N, rampflag, "naflag", "edgeflag")

series

-

A series or table.

N

-

An integer, the number of points to calculate the median as the series is processed.

rampflag

-

Optional. An integer, endpoint median flag.

0:

none

1:

up and down (default)

"naflag"

-

Optional. A string, the NA handling method.

"omitnan"

:

ignore NA values (default)

"includenan"

:

include NA values

"edgeflag"

-

Optional. A string, the edge processing flag.

"full"

:

process all segments (default)

"center"

:

center the result within the overlapping N point segments

"discard"

:

only process segments of length N, ignore partial segments

"shrink"

:

shrink the size of both the start and end segments to the actual number of samples in the segments (same as rampflag == 1)  

Returns:

A series or table.

Example:

W1: {4, 3, 2, 1, 2, 3, 4}

W2: movmedian(w1, 3)

 

W2 == {4, 3.5, 3, 2, 2, 2, 3, 3.5, 4}

 

Computes the median of each overlapping moving segment of length 3 but the segment length adjusts from 1 to 3 at the start edge and from 3 to 1 at the end edge.

Example:

W1: {4, 3, 2, 1, 2, 3, 4}

W3: movmedian(w1, 3, 0)

 

W3 == {0, 3, 3, 2, 2, 2, 3, 3, 0}

 

Same as above, except the segment length remains fixed at 3. Values outside of the segment are considered to be 0.

Example:

W1: {4, 3, 2, nan, 2, 3, 4}

W2: movmedian(w1, 3)

W3: movmedian(w1, 3, "includenan")

 

W2 == {4, 3.5, 3, 3, 2, 2.5, 3, 3.5, 4}

W3 == {4, 3.5, 3, nan, nan, nan, 3, 3.5, 4}

 

W2 excludes all NaN values by removing them from the segment. The segment length adjusts up and down at the end points.

 

W3 retains NaN values and returns NaN if any NaN is present in the segment.

Example:

W1: {4, 3, 2, nan, 2, 3, 4}

W2: movmedian(w1, 3, 0)

W3: movmedian(w1, 3, 0, "includenan")

 

W2 == {0, 3, 3, 2.5, 2, 2.5, 3, 3, 0}

W3 == {0, 3, 3, nan, nan, nan, 3, 3, 0}

 

Same as above, except the segment length remains fixed at 3.

Example:

W1: {4, 3, 2, 1, 2, 3, 4}

W2: movmedian(w1, 3, "center")

W3: movmedian(w1, 3, 0, "center")

 

W2 == {3.5, 3, 2, 2, 2, 3, 3.5}

W3 == {0.0, 3, 2, 2, 2, 3, 3}

 

W2 and W3 compute a 3-point centered moving median where the result at point N is the median of points N-1, N and N+1.

 

For W2, the segment length adjusts from 1 to 3 at the start edge and from 3 to 1 at the end edge.

 

For W3, the segment length remains fixed at 3.

Example:

W1: {4, 3, 2, 1, 2, 3, 4}

W2: movmedian(w1, 3, "discard")

W3: movmedian(w1, 3, 0, "discard")

 

W2 == {3, 2, 1.6667, 2, 3}

W3 == {3, 2, 1.6667, 2, 3}

 

W2 and W3 compute a 3-point moving for all overlapping segments that contain exactly 3 samples. Shorter segments at the start and end edges are discarded. The rampflag parameter has no effect.

Example:

W1: {4, 3, 2, 1, 2, 3, 4}

W2: movmedian(w1, 3, "shrink")

W3: movmedian(w1, 3, 0, "shrink")

 

W2 == {4, 3.5, 3, 2, 1.6667, 2, 3, 3.5, 4}

W3 == {4, 3.5, 3, 2, 1.6667, 2, 3, 3.5, 4}

 

Same as the first example, where the median of each overlapping moving segment of length 3 is computed but the segment length and segment divisor adjust from 1 to 3 at the start edge and from 3 to 1 at the end edge. The rampflag is essentially forced to 1.

Remarks:

In particular, for series x of length N, movmedian(x, 3) returns the following N+2 length series:

 

moving median

 

If rampflag is 0, movmedian(x, 3, 0) returns the following N+2 length series:

 

moving median unramped

 

NaN values are ignored by default. Set naflag to "includenan" to process NaN values.

 

For the default, where rampflag == 1 and edgeout == "full", the first N-1 points returned by MOVMEDIAN given an N-point window are the median of the values in consecutively larger segments of size 1, 2, 3, ... , N-1. The last N-1 points are the median of the values of consecutively smaller segments of sizes N-1, N-2, ..., 2, 1. The output length is L + N - 1 where L is the length of the input series.

 

For edgeflag == "center", the result is centered within the N-point segment and the output length is the same as the input length.

 

For edgeout == "shrink", the rampflag is forced to 1 and the result is the same as rampflag == 1 and edgeout == "full". However the first and last N-1 points differ from "shrink" if rampflag == 0 and edgeout == "full".

 

For edgeout == "discard", only segments that contain exactly N samples are processed. Shorter segments at the start and end edges are discarded. The rampflag is ignored.

 

For multi-column series, MOVMEDIAN computes the moving median on each column.

 

See SORT for a description of the sorting algorithm used to compute the median of each segment.

 

See MEDIAN to compute the median of the entire series.

 

See BLOCKMEDIAN to compute the non-overlapping block median of a series.

See Also:

BLOCKMEDIAN

COLMEDIAN

MEDIAN

MEDFILT1

MOVAVG

SORT