[R-SIG-Finance] PerformanceAnalytics apply.rolling with NAs

Gabor Grothendieck ggrothendieck at gmail.com
Fri Sep 2 14:32:51 CEST 2011


On Fri, Sep 2, 2011 at 7:15 AM, Brian G. Peterson <brian at braverock.com> wrote:
> On Fri, 2011-09-02 at 13:00 +0200, Dean Marks wrote:
>> I'm having the following issue:
>>
>> require( PerformanceAnalytics )
>> data( managers )
>>
>> #This works fine:
>> x <- managers[ , "SP500 TR"]
>> apply.rolling( x , width = 6 )
>>
>> #This produces an error (presumably due to indexes being empty)
>> x[] <- NA
>> apply.rolling( x , width = 6 )
>> ###  Error in xts(, order.by = time(R)) :
>> ###  order.by requires an appropriate time-based object
>>
>> Is this the expected behavior? How would I avoid the error without
>> having to check for the special case(s)?
>
> Well, the xts error says it all in this case.  You don't have a time
> series to roll *on*.  This is a time series function, so without a time
> series, it simply won't work.
>
> There is the newer function rollapply.xts, but I don't recall offhand
> whether it has been exported yet, or rollapply (in zoo) which is less
> fussy about the 'time series' part, though it does of course assume the
> ordered observations from which zoo takes its name.

The default method of zoo's rollapply works with ordinary R vectors
and matrices too,
not just zoo and ts objects.

> library(zoo)
> x <- 1:10
> rollapply(x, 3, sum)
[1]  6  9 12 15 18 21 24 27
>
> # rollapplyr is same as rollapply(..., align = "right")
>
> rollapplyr(x, 3, sum, fill = NA)
 [1] NA NA  6  9 12 15 18 21 24 27

> x[] <- NA
> rollapplyr(x, 3, sum, fill = NA)
 [1] NA NA NA NA NA NA NA NA NA NA
> rollapplyr(x, 3, sum, na.rm = TRUE, fill = NA)
 [1] NA NA  0  0  0  0  0  0  0  0


-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-SIG-Finance mailing list