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