moving average function

• To: mathgroup at smc.vnet.net
• Subject: [mg126307] moving average function
• From: Robert McHugh <rtmphone09 at gmail.com>
• Date: Mon, 30 Apr 2012 04:40:57 -0400 (EDT)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com

```Below is a moving average function that has the following features:
1. returns a list with the same length as the original length
2. provides a reasonable estimate for averages on the "sides" of the
window.

Have failed to figure out how to do this with ListConvolve and
ListCorrelate, so I submit this with the hope that others can
recommend how it might be improved. Also searched this website for
alternatives but didn't find any that met the above criteria.

I was motivated to do this in order to keep my code free of handling
special cases related to the edges of the widow size.  Note that in
one particular case, I have data measured every minute and would like
to compare the results of using averaging the data over window sizes
of 61, 121, and 181.

Recommendations for how to improve the function or alternatives are
appreciated.
Bob.

movingAverageBalanced[list_List, nAvg_Integer?OddQ ] :=
Module[{nHang, middle, left, right, all},
nHang = (nAvg - 1)/2;

middle = MovingAverage[list, nAvg];

left = Total[ Take[list, 2 # - 1]] /(2 # - 1) & /@ Range[nHang];
right =
Reverse[Total[ Take[list, -( 2 # - 1)]] /(2 # - 1) & /@
Range[nHang]];
all = Join[left, middle, right] ;
Return[all];
]

Example
listTest = {a, b, c, d, e, f, g, h, i, j, k};
r = movingAverageBalanced[listTest, 5];
r // TableForm

{
{a},
{1/3 (a + b + c)},
{1/5 (a + b + c + d + e)},
{1/5 (b + c + d + e + f)},
{1/5 (c + d + e + f + g)},
{1/5 (d + e + f + g + h)},
{1/5 (e + f + g + h + i)},
{1/5 (f + g + h + i + j)},
{1/5 (g + h + i + j + k)},
{1/3 (i + j + k)},
{k}
}

```

• Prev by Date: Re: Getting only 1 of 3 curves of intersection
• Next by Date: Re: Creating 'smart' textbooks with mathematica?
• Previous by thread: Mathematica NB file to LaTeX for publication?