Moving average

From HandWiki
Short description: Type of statistical measure over subsets of a dataset
Smoothing of a noisy sine (blue curve) with a moving average (red curve).

In statistics, a moving average (rolling average or running average) is a calculation to analyze data points by creating a series of averages of different subsets of the full data set. It is also called a moving mean (MM)[1] or rolling mean and is a type of finite impulse response filter. Variations include: simple, cumulative, or weighted forms (described below).

Given a series of numbers and a fixed subset size, the first element of the moving average is obtained by taking the average of the initial fixed subset of the number series. Then the subset is modified by "shifting forward"; that is, excluding the first number of the series and including the next value in the subset.

A moving average is commonly used with time series data to smooth out short-term fluctuations and highlight longer-term trends or cycles. The threshold between short-term and long-term depends on the application, and the parameters of the moving average will be set accordingly. For example, it is often used in technical analysis of financial data, like stock prices, returns or trading volumes. It is also used in economics to examine gross domestic product, employment or other macroeconomic time series. Mathematically, a moving average is a type of convolution and so it can be viewed as an example of a low-pass filter used in signal processing. When used with non-time series data, a moving average filters higher frequency components without any specific connection to time, although typically some kind of ordering is implied. Viewed simplistically it can be regarded as smoothing the data.

Simple moving average

Moving Average Types comparison - Simple and Exponential.png

In financial applications a simple moving average (SMA) is the unweighted mean of the previous [math]\displaystyle{ k }[/math] data-points. However, in science and engineering, the mean is normally taken from an equal number of data on either side of a central value. This ensures that variations in the mean are aligned with the variations in the data rather than being shifted in time. An example of a simple equally weighted running mean is the mean over the last [math]\displaystyle{ k }[/math] entries of a data-set containing [math]\displaystyle{ n }[/math] entries. Let those data-points be [math]\displaystyle{ p_{1}, p_{2}, \dots, p_{n} }[/math]. This could be closing prices of a stock. The mean over the last [math]\displaystyle{ k }[/math] data-points (days in this example) is denoted as [math]\displaystyle{ \textit{SMA}_{k} }[/math] and calculated as:

[math]\displaystyle{ \begin{align} \textit{SMA}_{k} &= \frac{p_{n-k+1} + p_{n-k+2} \cdots + p_{n}}{k} \\ &= \frac{1}{k} \sum_{i=n-k+1}^{n} p_{i} \end{align} }[/math]

When calculating the next mean [math]\displaystyle{ \textit{SMA}_{k,next} }[/math] with the same sampling width [math]\displaystyle{ k }[/math] the range from [math]\displaystyle{ n-k+2 }[/math] to [math]\displaystyle{ n+1 }[/math] is considered. A new value [math]\displaystyle{ p_{n+1} }[/math] comes into the sum and the oldest value [math]\displaystyle{ p_{n-k+1} }[/math] drops out. This simplifies the calculations by reusing the previous mean [math]\displaystyle{ \textit{SMA}_{k,prev} }[/math].

[math]\displaystyle{ \begin{align} \textit{SMA}_{k, next} &= \frac{1}{k} \sum_{i=n-k+2}^{n+1} p_{i} \\ &= \frac{1}{k} \Big( \underbrace{ p_{n-k+2} + p_{n-k+3} + \dots + p_{n} + p_{n+1} }_{ \sum_{i=n-k+2}^{n+1} p_{i} } + \underbrace{ p_{n-k+1} - p_{n-k+1} }_{= 0} \Big) \\ &= \underbrace{ \frac{1}{k} \Big( p_{n-k+1} + p_{n-k+2} + \dots + p_{n} \Big) }_{= \textit{SMA}_{k, prev}} - \frac{p_{n-k+1}}{k} + \frac{p_{n+1}}{k} \\ &= \textit{SMA}_{k, prev} + \frac{1}{k} \Big( p_{n+1} - p_{n-k+1} \Big) \end{align} }[/math]

This means that the moving average filter can be computed quite cheaply on real time data with a FIFO / circular buffer and only 3 arithmetic steps.

During the initial filling of the FIFO / circular buffer the sampling window is equal to the data-set size thus [math]\displaystyle{ k = n }[/math] and the average calculation is performed as a cumulative moving average.

The period selected ([math]\displaystyle{ k }[/math]) depends on the type of movement of interest, such as short, intermediate, or long-term. In financial terms, moving-average levels can be interpreted as support in a falling market or resistance in a rising market.

If the data used are not centered around the mean, a simple moving average lags behind the latest datum by half the sample width. An SMA can also be disproportionately influenced by old data dropping out or new data coming in. One characteristic of the SMA is that if the data has a periodic fluctuation, then applying an SMA of that period will eliminate that variation (the average always containing one complete cycle). But a perfectly regular cycle is rarely encountered.[2]

For a number of applications, it is advantageous to avoid the shifting induced by using only "past" data. Hence a central moving average can be computed, using data equally spaced on either side of the point in the series where the mean is calculated.[3] This requires using an odd number of points in the sample window.

A major drawback of the SMA is that it lets through a significant amount of the signal shorter than the window length. Worse, it actually inverts it. This can lead to unexpected artifacts, such as peaks in the smoothed result appearing where there were troughs in the data. It also leads to the result being less smooth than expected since some of the higher frequencies are not properly removed.

Cumulative average

In a cumulative average (CA), the data arrive in an ordered datum stream, and the user would like to get the average of all of the data up until the current datum. For example, an investor may want the average price of all of the stock transactions for a particular stock up until the current time. As each new transaction occurs, the average price at the time of the transaction can be calculated for all of the transactions up to that point using the cumulative average, typically an equally weighted average of the sequence of n values [math]\displaystyle{ x_1. \ldots, x_n }[/math] up to the current time:

[math]\displaystyle{ \textit{CA}_n = {{x_1 + \cdots + x_n} \over n}\,. }[/math]

The brute-force method to calculate this would be to store all of the data and calculate the sum and divide by the number of points every time a new datum arrived. However, it is possible to simply update cumulative average as a new value, [math]\displaystyle{ x_{n+1} }[/math] becomes available, using the formula

[math]\displaystyle{ \textit{CA}_{n+1} = {{x_{n+1} + n \cdot \textit{CA}_n} \over {n+1}}. }[/math]

Thus the current cumulative average for a new datum is equal to the previous cumulative average, times n, plus the latest datum, all divided by the number of points received so far, n+1. When all of the data arrive (n = N), then the cumulative average will equal the final average. It is also possible to store a running total of the data as well as the number of points and dividing the total by the number of points to get the CA each time a new datum arrives.

The derivation of the cumulative average formula is straightforward. Using

[math]\displaystyle{ x_1 + \cdots + x_n = n \cdot \textit{CA}_n }[/math]

and similarly for n + 1, it is seen that

[math]\displaystyle{ \begin{align} x_{n+1} & = (x_1 + \cdots + x_{n+1}) - (x_1 + \cdots + x_n) \\[6pt] \end{align} }[/math]

Solving this equation for [math]\displaystyle{ \textit{CA}_{n+1} }[/math] results in

[math]\displaystyle{ \begin{align} \textit{CA}_{n+1} & = {x_{n+1} + n \cdot \textit{CA}_n \over {n+1}} \\[6pt] & = {x_{n+1} + (n + 1 - 1) \cdot \textit{CA}_n \over {n+1}} \\[6pt] & = {(n + 1) \cdot \textit{CA}_n + x_{n+1} - \textit{CA}_n \over {n+1}} \\[6pt] & = {\textit{CA}_n} + {{x_{n+1} - \textit{CA}_n} \over {n+1}} \end{align} }[/math]

Weighted moving average

A weighted average is an average that has multiplying factors to give different weights to data at different positions in the sample window. Mathematically, the weighted moving average is the convolution of the data with a fixed weighting function. One application is removing pixelization from a digital graphical image.

In technical analysis of financial data, a weighted moving average (WMA) has the specific meaning of weights that decrease in arithmetical progression.[4] In an n-day WMA the latest day has weight n, the second latest [math]\displaystyle{ n-1 }[/math], etc., down to one.

[math]\displaystyle{ \text{WMA}_{M} = { n p_{M} + (n-1) p_{M-1} + \cdots + 2 p_{((M-n)+2)} + p_{((M-n)+1)} \over n + (n-1) + \cdots + 2 + 1} }[/math]
WMA weights n = 15

The denominator is a triangle number equal to [math]\displaystyle{ \frac{n(n + 1)}{2}. }[/math] In the more general case the denominator will always be the sum of the individual weights.

When calculating the WMA across successive values, the difference between the numerators of [math]\displaystyle{ \text{WMA}_{M+1} }[/math] and [math]\displaystyle{ \text{WMA}_{M} }[/math] is [math]\displaystyle{ np_{M+1}-p_{M}-\ldots-p_{M-n+1} }[/math]. If we denote the sum [math]\displaystyle{ p_{M}+\ldots+p_{M-n+1} }[/math] by [math]\displaystyle{ \text{Total}_{M} }[/math], then

[math]\displaystyle{ \begin{align} \text{Total}_{M+1} &= \text{Total}_M + p_{M+1} - p_{M-n+1} \\[3pt] \text{Numerator}_{M+1} &= \text{Numerator}_M + n p_{M+1} - \text{Total}_M \\[3pt] \text{WMA}_{M+1} &= { \text{Numerator}_{M+1} \over n + (n-1) + \cdots + 2 + 1} \end{align} }[/math]

The graph at the right shows how the weights decrease, from highest weight for the most recent data, down to zero. It can be compared to the weights in the exponential moving average which follows.

Exponential moving average

Main page: Exponential smoothing
EMA weights α = 0.125

An exponential moving average (EMA), also known as an exponentially weighted moving average (EWMA),[5] is a first-order infinite impulse response filter that applies weighting factors which decrease exponentially. The weighting for each older datum decreases exponentially, never reaching zero. The graph at right shows an example of the weight decrease.

The EMA for a series [math]\displaystyle{ Y }[/math] may be calculated recursively:

[math]\displaystyle{ S_t = \begin{cases} Y_0, & t = 0 \\ \alpha Y_t + (1 - \alpha) \cdot S_{t-1}, & t \gt 0 \end{cases} }[/math]


  • The coefficient [math]\displaystyle{ \alpha }[/math] represents the degree of weighting decrease, a constant smoothing factor between 0 and 1. A higher [math]\displaystyle{ \alpha }[/math] discounts older observations faster.
  • [math]\displaystyle{ Y_t }[/math] is the value at a time period [math]\displaystyle{ t }[/math].
  • [math]\displaystyle{ S_t }[/math] is the value of the EMA at any time period [math]\displaystyle{ t }[/math].

S1 may be initialized in a number of different ways, most commonly by setting S1 to Y1 as shown above, though other techniques exist, such as setting S1 to an average of the first 4 or 5 observations. The importance of the S1 initialization's effect on the resultant moving average depends on [math]\displaystyle{ \alpha }[/math]; smaller [math]\displaystyle{ \alpha }[/math] values make the choice of S1 relatively more important than larger [math]\displaystyle{ \alpha }[/math] values, since a higher [math]\displaystyle{ \alpha }[/math] discounts older observations faster.

Whatever is done for S1 it assumes something about values prior to the available data and is necessarily in error. In view of this, the early results should be regarded as unreliable until the iterations have had time to converge. This is sometimes called a 'spin-up' interval. One way to assess when it can be regarded as reliable is to consider the required accuracy of the result. For example, if 3% accuracy is required, initialising with Y1 and taking data after five time constants (defined above) will ensure that the calculation has converged to within 3% (only <3% of Y1 will remain in the result). Sometimes with very small alpha, this can mean little of the result is useful. This is analogous to the problem of using a convolution filter (such as a weighted average) with a very long window.

This formulation is according to Hunter (1986).[6] By repeated application of this formula for different times, we can eventually write St as a weighted sum of the datum points [math]\displaystyle{ Y_t }[/math], as:

[math]\displaystyle{ \begin{align} S_{t}=\alpha &\left[Y_{t}+(1-\alpha )Y_{t-1}+(1-\alpha )^{2}Y_{t-2}+\cdots \right.\\[6pt]&\left.\cdots +(1-\alpha )^{k}Y_{t-k}\right]+(1-\alpha )^{k+1}S_{t-(k+1)} \end{align} }[/math]

for any suitable k ∈ {0, 1, 2, ...} The weight of the general datum [math]\displaystyle{ Y_{t-i} }[/math] is [math]\displaystyle{ \alpha\left(1 - \alpha\right)^{i} }[/math].

This formula can also be expressed in technical analysis terms as follows, showing how the EMA steps towards the latest datum, but only by a proportion of the difference (each time):

[math]\displaystyle{ \text{EMA}_\text{today} = \text{EMA}_\text{yesterday} + \alpha \left[\text{price}_\text{today} - \text{EMA}_\text{yesterday}\right] }[/math]

Expanding out [math]\displaystyle{ \text{EMA}_\text{yesterday} }[/math] each time results in the following power series, showing how the weighting factor on each datum p1, p2, etc., decreases exponentially:

[math]\displaystyle{ \text{EMA}_\text{today} = { \alpha \left[p_1 + (1 - \alpha) p_2 + (1 - \alpha)^2 p_3 + (1 - \alpha)^3 p_4 + \cdots \right] } }[/math]


  • [math]\displaystyle{ p_1 }[/math] is [math]\displaystyle{ \text{price}_\text{today} }[/math]
  • [math]\displaystyle{ p_2 }[/math] is [math]\displaystyle{ \text{price}_\text{yesterday} }[/math]
  • and so on
[math]\displaystyle{ \text{EMA}_\text{today} = \frac{p_1 + (1 - \alpha) p_2 + (1 - \alpha)^2 p_3 + (1 - \alpha)^3 p_4 + \cdots}{1 + (1 - \alpha) + (1 - \alpha)^2 + (1 - \alpha)^3 + \cdots}, }[/math]

since [math]\displaystyle{ 1/\alpha = 1 + (1 - \alpha) + (1 - \alpha)^2 + \cdots }[/math].

It can also be calculated recursively without introducing the error when initializing the first estimate (n starts from 1):

[math]\displaystyle{ \text{EMA}_n = \frac{\text{WeightedSum}_n}{\text{WeightedCount}_n} }[/math]
[math]\displaystyle{ \text{WeightedSum}_n = p_n + (1 - \alpha)\text{WeightedSum}_{n-1} }[/math]
[math]\displaystyle{ \text{WeightedCount}_n = 1 + (1 - \alpha)\text{WeightedCount}_{n-1} = \frac{1 - (1 - \alpha)^n}{1 - (1 - \alpha)} = \frac{1 - (1 -\alpha)^n}{\alpha} }[/math]
Assume [math]\displaystyle{ \text{WeightedSum}_0 = \text{WeightedCount}_0 = 0 }[/math]

This is an infinite sum with decreasing terms.

Approximating the EMA with a limited number of terms

The question of how far back to go for an initial value depends, in the worst case, on the data. Large price values in old data will affect the total even if their weighting is very small. If prices have small variations then just the weighting can be considered. The power formula above gives a starting value for a particular day, after which the successive days formula shown first can be applied. The weight omitted by stopping after k terms is

[math]\displaystyle{ \alpha \left[ (1 - \alpha)^k + (1 - \alpha)^{k+1} + (1 - \alpha)^{k+2} + \cdots \right], }[/math]

which is

[math]\displaystyle{ \alpha (1 - \alpha)^k \left[1 + (1 - \alpha) + (1 - \alpha)^2 + \cdots \right], }[/math]

i.e. a fraction

[math]\displaystyle{ \begin{align} & \frac{\text{weight omitted by stopping after } k \text{ terms}}{\text{total weight}} \\[6pt] = {} & \frac{\alpha \left[ (1 - \alpha)^k + (1 - \alpha)^{k+1} + (1 - \alpha)^{k+2} + \cdots \right] } {\alpha \left[ 1 + (1 - \alpha) + (1 - \alpha)^2 + \cdots \right]} \\[6pt] = {} & \frac{\alpha (1 - \alpha)^k \frac 1 {1 - (1 - \alpha)}}{ \frac{\alpha}{1 - (1 - \alpha)} } \\[6pt] = {} & (1 - \alpha)^k \end{align} }[/math][7]

out of the total weight.

For example, to have 99.9% of the weight, set above ratio equal to 0.1% and solve for k:

[math]\displaystyle{ k = {\log(0.001) \over \log(1 - \alpha)} }[/math]

to determine how many terms should be used. Since [math]\displaystyle{ \alpha \to 0 }[/math] as [math]\displaystyle{ N \to \infty }[/math], we know [math]\displaystyle{ \log\,(1-\alpha) }[/math] approaches [math]\displaystyle{ -\alpha }[/math] as N increases .[8] This gives:

[math]\displaystyle{ k \approx {\log(0.001) \over {- \alpha}} }[/math]

When [math]\displaystyle{ \alpha }[/math] is related to N as [math]\displaystyle{ \alpha = {2 \over N+1} }[/math], this simplifies to approximately[9]

[math]\displaystyle{ k \approx 3.45(N + 1) \, }[/math]

for this example (99.9% weight).

Relationship between SMA and EMA

Note that there is no "accepted" value that should be chosen for [math]\displaystyle{ \alpha }[/math], although there are some recommended values based on the application. A commonly used value for α is [math]\displaystyle{ \alpha = 2 / (N + 1) }[/math]. This is because the weights of an SMA and EMA have the same "center of mass" when [math]\displaystyle{ \alpha_{\mathrm{EMA}} = 2 / \left(N_{\mathrm{SMA}} + 1\right) }[/math].


The weights of an N-day SMA have a "center of mass" on the [math]\displaystyle{ R^{\mathrm{th}} }[/math] day, where

[math]\displaystyle{ R = \frac{N + 1}{2} }[/math]

(or [math]\displaystyle{ R = \left(N-1\right) / 2 }[/math], if we use zero-based indexing)

For the remainder of this proof we will use one-based indexing.

Now meanwhile, the weights of an EMA have center of mass

[math]\displaystyle{ R_{\mathrm{EMA}} = \alpha \left[1 + 2(1-\alpha) + 3(1-\alpha)^2 + ... + k(1-\alpha)^{k-1}\right] }[/math]

That is,

[math]\displaystyle{ R_{\mathrm{EMA}} = \alpha \sum_{k=1}^{\infty} \! \, k\left(1-\alpha\right)^{k-1} }[/math]

We also know the Maclaurin Series

[math]\displaystyle{ 1 / (1-x) = \sum_{k=0}^{\infty} \! \, x^k }[/math]

Taking derivatives of both sides with respect to x gives:

[math]\displaystyle{ (x-1)^{-2} = \sum_{k=0}^{\infty} \! \, k x^{k-1} }[/math]


[math]\displaystyle{ (x-1)^{-2} = 0 + \sum_{k=1}^{\infty} \! \, k x^{k-1} }[/math]

Substituting [math]\displaystyle{ x = 1 - \alpha }[/math], we get

[math]\displaystyle{ R_{\mathrm{EMA}} = \alpha \left(\alpha\right)^{-2} }[/math]


[math]\displaystyle{ R_{\mathrm{EMA}} = \left(\alpha\right)^{-1} }[/math]

So the value of α that sets [math]\displaystyle{ R_{\mathrm{SMA}} = R_{\mathrm{EMA}} }[/math] is, in fact:

[math]\displaystyle{ \frac{N_{\mathrm{SMA}} + 1}{2} = \left( \alpha_{\mathrm{EMA}} \right)^{-1} }[/math]


[math]\displaystyle{ \frac{2}{N_{\mathrm{SMA}} + 1} = \alpha_{\mathrm{EMA}} }[/math]

And so [math]\displaystyle{ 2 / \left(N + 1\right) }[/math] is the value of α that creates an EMA whose weights have the same center of gravity as would the equivalent N-day SMA

This is also why sometimes an EMA is referred to as an N-day EMA. Despite the name suggesting there are N periods, the terminology only specifies the α factor. N is not a stopping point for the calculation in the way it is in an SMA or WMA. For sufficiently large N, the first N datum points in an EMA represent about 86% of the total weight in the calculation when [math]\displaystyle{ \alpha = 2 / (N + 1) }[/math]:


The sum of the weights of all the terms (i.e., infinite number of terms) in an exponential moving average is 1. The sum of the weights of N terms is [math]\displaystyle{ 1 - (1 - \alpha)^{N+1} }[/math]. Both of these sums can be derived by using the formula for the sum of a geometric series. The weight omitted after N terms is given by subtracting this from 1, and you get [math]\displaystyle{ 1 - \left[1 - (1 - \alpha)^{N+1}\right] = (1 - \alpha)^{N+1} }[/math] (this is essentially the formula given previously for the weight omitted).

We now substitute the commonly used value for [math]\displaystyle{ \alpha = 2 / (N + 1) }[/math] in the formula for the weight of N terms. If you make this substitution, and you make use of[10] [math]\displaystyle{ \lim_{n \to \infty} \left( 1 + {a \over n} \right)^n = e^a }[/math], then you get

[math]\displaystyle{ \frac {\alpha \left[1 + (1 - \alpha) + (1 - \alpha)^2 + \cdots + (1 - \alpha)^N \right]} {\alpha \left[1 + (1 - \alpha) + (1 - \alpha)^2 + \cdots\right])} = 1 - {\left(1 - {2 \over N + 1}\right)}^{N} }[/math][11]
i.e. [math]\displaystyle{ \lim_{N \to \infty} \left[1 - {\left(1 - {2 \over N+1}\right)}^{N+1} \right] }[/math] simplified,[12] tends to [math]\displaystyle{ 1 - e^{-2} \approx 0.8647 }[/math].

the 0.8647 approximation. Intuitively, what this is telling us is that the weight after N terms of an ``N-period" exponential moving average converges to 0.8647.

The designation of [math]\displaystyle{ \alpha = 2 / \left(N + 1\right) }[/math] is not a requirement. (For example, a similar proof could be used to just as easily determine that the EMA with a half-life of N-days is [math]\displaystyle{ \alpha = 1 - 0.5^\frac{1}{N} }[/math] or that the EMA with the same median as an N-day SMA is [math]\displaystyle{ \alpha = 1 - 0.5^\frac{1}{0.5N} }[/math]). In fact, 2/(N+1) is merely a common convention to form an intuitive understanding of the relationship between EMAs and SMAs, for industries where both are commonly used together on the same datasets. In reality, an EMA with any value of α can be used, and can be named either by stating the value of α, or with the more familiar N-day EMA terminology letting [math]\displaystyle{ N =\left( 2 / \alpha \right) - 1 }[/math].

Exponentially weighted moving variance and standard deviation

In addition to the mean, we may also be interested in the variance and in the standard deviation to evaluate the statistical significance of a deviation from the mean.

EWMVar can be computed easily along with the moving average. The starting values are [math]\displaystyle{ \text{EMA}_1 = x_1 }[/math] and [math]\displaystyle{ \text{EMVar}_1 = 0 }[/math], and we then compute the subsequent values using:[13]

[math]\displaystyle{ \begin{align} \delta_i &= x_i - \text{EMA}_{i-1} \\ \text{EMA}_i &= \text{EMA}_{i-1} + \alpha \cdot \delta_i \\ \text{EMVar}_i &= \left(1-\alpha\right)\left(\text{EMVar}_{i-1} + \alpha \cdot \delta_i^2\right) \end{align} }[/math]

From this, the exponentially weighted moving standard deviation can be computed as [math]\displaystyle{ \text{EMSD}_i=\sqrt{\text{EMVar}_i} }[/math]. We can then use the standard score to normalize data with respect to the moving average and variance. This algorithm is based on Welford's algorithm for computing the variance.

Modified moving average

A modified moving average (MMA), running moving average (RMA), or smoothed moving average (SMMA) is defined as:

[math]\displaystyle{ \overline{p}_{MM,\text{today}} = \frac{(N - 1) \overline{p}_{MM,\text{yesterday}} + p_{\text{today}}}{N} }[/math]

In short, this is an exponential moving average, with [math]\displaystyle{ \alpha = 1/N }[/math]. The only difference between EMA and SMMA/RMA/MMA is how [math]\displaystyle{ \alpha }[/math] is computed from [math]\displaystyle{ N }[/math]. For EMA the customary choice is [math]\displaystyle{ \alpha = 2/(N+1) }[/math]

Application to measuring computer performance

Some computer performance metrics, e.g. the average process queue length, or the average CPU utilization, use a form of exponential moving average.

[math]\displaystyle{ S_n = \alpha(t_n - t_{n-1}) Y_n + \left[1 - \alpha(t_n - t_{n-1})\right] S_{n-1}. }[/math]

Here α is defined as a function of time between two readings. An example of a coefficient giving bigger weight to the current reading, and smaller weight to the older readings is

[math]\displaystyle{ \alpha(t_n - t_{n-1}) = 1 - \exp\left({-\frac{t_n - t_{n-1}}{W \cdot 60}} \right) }[/math]

where exp() is the exponential function, time for readings tn is expressed in seconds, and W is the period of time in minutes over which the reading is said to be averaged (the mean lifetime of each reading in the average). Given the above definition of α, the moving average can be expressed as

[math]\displaystyle{ S_n = \left[1 - \exp\left(-{ {t_n - t_{n-1}} \over {W \cdot 60}}\right)\right] Y_n + \exp\left(-{{t_n - t_{n-1}} \over {W \cdot 60}}\right) S_{n-1} }[/math]

For example, a 15-minute average L of a process queue length Q, measured every 5 seconds (time difference is 5 seconds), is computed as

[math]\displaystyle{ \begin{align} L_n &= \left[1 - \exp\left({-\frac{5}{15 \cdot 60}}\right)\right] Q_n + e^{-\frac{5}{15 \cdot 60}} L_{n-1} \\[6pt] &= \left[1 - \exp\left({-\frac{1}{180}}\right)\right] Q_n + e^{-\frac{1}{180}} L_{n-1} \\[6pt] &= Q_n + e^{-\frac{1}{180}} \left( L_{n-1} - Q_n \right) \end{align} }[/math]

Other weightings

Other weighting systems are used occasionally – for example, in share trading a volume weighting will weight each time period in proportion to its trading volume.

A further weighting, used by actuaries, is Spencer's 15-Point Moving Average[14] (a central moving average). Its symmetric weight coefficients are [−3, −6, −5, 3, 21, 46, 67, 74, 67, 46, 21, 3, −5, −6, −3], which factors as [1, 1, 1, 1] × [1, 1, 1, 1] × [1, 1, 1, 1, 1] × [−3, 3, 4, 3, −3]/320 and leaves samples of any cubic polynomial unchanged.[15]

Outside the world of finance, weighted running means have many forms and applications. Each weighting function or "kernel" has its own characteristics. In engineering and science the frequency and phase response of the filter is often of primary importance in understanding the desired and undesired distortions that a particular filter will apply to the data.

A mean does not just "smooth" the data. A mean is a form of low-pass filter. The effects of the particular filter used should be understood in order to make an appropriate choice. On this point, the French version of this article discusses the spectral effects of 3 kinds of means (cumulative, exponential, Gaussian).

Moving median

From a statistical point of view, the moving average, when used to estimate the underlying trend in a time series, is susceptible to rare events such as rapid shocks or other anomalies. A more robust estimate of the trend is the simple moving median over n time points:

[math]\displaystyle{ \widetilde{p}_\text{SM} = \text{Median}( p_M, p_{M-1}, \ldots, p_{M-n+1} ) }[/math]

where the median is found by, for example, sorting the values inside the brackets and finding the value in the middle. For larger values of n, the median can be efficiently computed by updating an indexable skiplist.[16]

Statistically, the moving average is optimal for recovering the underlying trend of the time series when the fluctuations about the trend are normally distributed. However, the normal distribution does not place high probability on very large deviations from the trend which explains why such deviations will have a disproportionately large effect on the trend estimate. It can be shown that if the fluctuations are instead assumed to be Laplace distributed, then the moving median is statistically optimal.[17] For a given variance, the Laplace distribution places higher probability on rare events than does the normal, which explains why the moving median tolerates shocks better than the moving mean.

When the simple moving median above is central, the smoothing is identical to the median filter which has applications in, for example, image signal processing.

Moving average regression model

Main page: Moving-average modelIn a moving average regression model, a variable of interest is assumed to be a weighted moving average of unobserved independent error terms; the weights in the moving average are parameters to be estimated.

Those two concepts are often confused due to their name, but while they share many similarities, they represent distinct methods and are used in very different contexts.

See also

Notes and references

  1. Hydrologic Variability of the Cosumnes River Floodplain (Booth et al., San Francisco Estuary and Watershed Science, Volume 4, Issue 2, 2006)
  2. Statistical Analysis, Ya-lun Chou, Holt International, 1975, ISBN:0-03-089422-0, section 17.9.
  3. The derivation and properties of the simple central moving average are given in full at Savitzky–Golay filter.
  4. "Weighted Moving Averages: The Basics". Investopedia. 
  5. "Archived copy". 
  6. NIST/SEMATECH e-Handbook of Statistical Methods: Single Exponential Smoothing at the National Institute of Standards and Technology
  7. The Maclaurin Series for [math]\displaystyle{ 1 / (1-x) }[/math] is [math]\displaystyle{ 1 + x + x^2 + \cdots }[/math]
  8. It means [math]\displaystyle{ \alpha \to 0 }[/math], and the Taylor series of [math]\displaystyle{ \log(1 - \alpha) = -\alpha - \alpha^2/2 - \cdots }[/math] approaches [math]\displaystyle{ -\alpha }[/math].
  9. loge(0.001) / 2 = −3.45
  10. See the following link for a proof.
  11. The denominator on the left-hand side should be unity, and the numerator will become the right-hand side (geometric series), [math]\displaystyle{ \alpha \left[{1 - (1 - \alpha)^{N} \over 1 - (1 - \alpha)}\right] }[/math].
  12. Because (1 + x/n)n tends to the limit ex for large n.
  13. Finch, Tony. "Incremental calculation of weighted mean and variance". 
  14. Spencer's 15-Point Moving Average — from Wolfram MathWorld
  15. Rob J Hyndman. "Moving averages". 2009-11-08. Accessed 2020-08-20.
  16. "Efficient Running Median using an Indexable Skiplist « Python recipes « ActiveState Code". 
  17. G.R. Arce, "Nonlinear Signal Processing: A Statistical Approach", Wiley:New Jersey, USA, 2005.

External links