[R] Avoiding for Loop for moving average

Patrick Burns pburns at pburns.seanet.com
Fri Sep 2 20:37:51 CEST 2011


The 'filter' function should be able
to do what you want efficiently.

On 02/09/2011 18:06, Noah Silverman wrote:
> Joshua,
>
> Thanks for the tip.
>
> I need to "roll my own" code on this.  But perhaps I can borrow some code from the package you mentioned.
>
> Is the package just performing the loop, but in a faster language?
>
>
> --
> Noah Silverman
> UCLA Department of Statistics
> 8117 Math Sciences Building #8208
> Los Angeles, CA 90095
>
> On Sep 2, 2011, at 9:58 AM, Joshua Ulrich wrote:
>
>> On Fri, Sep 2, 2011 at 11:47 AM, R. Michael Weylandt
>> <michael.weylandt at gmail.com>  wrote:
>>> Have you looked at SMA/EMA from the TTR package? That's a pretty quick
>>> implementation.
>>>
>>> runmean from caTools is even better for the SMA but I don't think there's an
>>> easy way to turn that into an EWMA.
>>>
>> SMA still calls Fortran code, so that's why it's slower than
>> caTools::runmean.  I've moved the EMA code to C, so it's about as fast
>> as it can be.
>>
>> Noah, use EMA's ratio argument to replicate your for loop.
>>
>>> Hope this helps,
>>>
>>> Michael Weylandt
>>>
>>
>> Best,
>> --
>> Joshua Ulrich  |  FOSS Trading: www.fosstrading.com
>>
>>
>>
>>> On Fri, Sep 2, 2011 at 12:43 PM, Noah Silverman<noahsilverman at ucla.edu>wrote:
>>>
>>>> Hello,
>>>>
>>>> I need to calculate a moving average and an exponentially weighted moving
>>>> average over a fairly large data set (500K rows).
>>>>
>>>> Doing this in a for loop works nicely, but is slow.
>>>>
>>>> ewma<- data$col[1]
>>>> N<- dim(data)[1]
>>>> for(i in 2:N){
>>>>         data$ewma<- alpha * data$ewma[i-1] + (1-alpha) * data$value[i]
>>>> }
>>>>
>>>>
>>>> Since the moving average "accumulates" as we move through the data, I'm not
>>>> sure on the best/fastest way to do this.
>>>>
>>>> Does anyone have any suggestions on how to avoid a loop doing this?
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Noah Silverman
>>>> UCLA Department of Statistics
>>>> 8117 Math Sciences Building #8208
>>>> Los Angeles, CA 90095
>>>>
>>>>
>>>>         [[alternative HTML version deleted]]
>>>>
>>>> ______________________________________________
>>>> R-help at r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>> PLEASE do read the posting guide
>>>> http://www.R-project.org/posting-guide.html
>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>
>>>
>>>         [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

-- 
Patrick Burns
pburns at pburns.seanet.com
twitter: @portfolioprobe
http://www.portfolioprobe.com/blog
http://www.burns-stat.com
(home of 'Some hints for the R beginner'
and 'The R Inferno')



More information about the R-help mailing list