[R-SIG-Finance] efficient yearly return on a monthly basis
Jeff Ryan
jeff.a.ryan at gmail.com
Mon Mar 22 15:45:17 CET 2010
Forgetting 'coding' efficiency, I don't see how this is slow:
> s=xts(1:15000,as.Date(0:14999)) > system.time(yret_by_month <- diff(s,lag=365)/lag(s,k=365)[endpoints(s,on="months")])
user system elapsed
0.008 0.000 0.007
> str(yret_by_month)
An ‘xts’ object from 1970-01-31 to 2011-01-25 containing:
Data: num [1:493, 1] NA NA NA NA NA NA NA NA NA NA ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr "e1"
Indexed by objects of class: [Date] TZ: America/Chicago
xts Attributes:
NULL
That is 40 years of daily data, in 7 MILLISECONDS on a laptop.
Where is the problem?
Additionally lag/diff in xts are memcpy at the C level, so you won't
really be able to beat this in many languages (any!... maybe someone
can post a Kx comparison for kicks ;-) ) without some assembly in the
mix.
HTH
Jeff
On Mon, Mar 22, 2010 at 9:41 AM, Brian G. Peterson <brian at braverock.com> wrote:
> Fabrizio Pollastri wrote:
>>
>> The following code computes yearly returns every month on the xts seqence
>> s.
>>
>> s=xts(1:1000,as.Date(0:999))
>> yret_by_month = diff(s,lag=365)/lag(s,k=365)[endpoints(s,on="months")]
>>
>> There is a more efficient way to avoid diff and lag to perform
>> computations over the whole sequence? Thanks in advance for any help.
>
> It is of course unlikely that you have daily returns for 365 days of the
> year, but thanks for providing a reproducible example.
>
> The first issue I see with your code is that you are calculating for every
> day, but only care about "extracting" the monthly endpoints. So you're
> doing (in this example) ~30x more calculation than required (and ~22x more
> than required on likely real data).
>
> diff and Lag are pretty efficient, but I suspect that you can calculate log
> (or simple) returns on the daily or monthly series, then use runSum on a
> x-days or 12-month window to get your rolling annual return.
>
> - Brian
>
> --
> Brian G. Peterson
> http://braverock.com/brian/
> Ph: 773-459-4973
> IM: bgpbraverock
>
> _______________________________________________
> R-SIG-Finance at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only. If you want to post, subscribe first.
> -- Also note that this is not the r-help list where general R questions
> should go.
>
--
Jeffrey Ryan
jeffrey.ryan at insightalgo.com
ia: insight algorithmics
www.insightalgo.com
More information about the R-SIG-Finance
mailing list