Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2004
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Creating a Moving Average Function

  • To: mathgroup at smc.vnet.net
  • Subject: [mg51643] Re: Creating a Moving Average Function
  • From: Bill Rowe <readnewsciv at earthlink.net>
  • Date: Wed, 27 Oct 2004 23:42:57 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

On 10/27/04 at 1:54 AM, gregory.lypny at videotron.ca (Gregory Lypny)
wrote:

>I'd like to create some custom moving average functions that retain
>the same length as the original series by padding the lost
>observations with zeros.  I can get the moving average part of the
>function to work but not the padding part.

>This part without padding works:

>MA[theSeries_, theWindowSize_] = MovingAverage[theSeries,
>theWindowSize];

>But adding the padding causes it to fail:

>MA[theSeries_, theWindowSize_] = PadLeft[MovingAverage[theSeries,
>theWindowSize], 1000];

>Any suggestions would be most appreciated.

Why not use the built in functions ListConvolve or ListCorrelate to do this?

For example,

data = Table[Random[], {100}]; 
ker = Table[1/15, {15}]; (* length of the kernel specifies the window size *)

More generally, a kernel for a moving average with window size n can be created with Table[1/n, {n}]

Length[ListConvolve[ker, data]] 
86

The above uses the default settings to compute the moving average of the data with a window length of 15.

By specifying the amount of overhang, i.e.,

Length[ListConvolve[ker, data, {-1, -1}]]
100

you achieve what you want, that is a result having the same length as the original data. With the way I used ListConvolve above, the data is assumed cyclic. That is values from the left are used to pad on the right. But I can specify a specific padding

Length[ListConvolve[ker, data, {-1, -1}, 0]]
100

which pads at the right with 0

Contrast

ListPlot[ListConvolve[ker, data, {-1, -1}]];

with

ListPlot[ListConvolve[ker, data, {-1, -1}, 0]];

to see the effects of padding.
--
To reply via email subtract one hundred and four


  • Prev by Date: Re: listplot and plot of the same function display in different scale...
  • Next by Date: Re: listplot and plot of the same function display in different scale...
  • Previous by thread: Re: Creating a Moving Average Function
  • Next by thread: Help with a calculation