[R-SIG-Finance] zoo: bug / feature replacing coredata - subsetting by dates

Phil Joubert philjoubert at yahoo.com
Fri Apr 24 16:52:52 CEST 2009



Bloomberg free example below:

vdPrices <- zoo(c(0.01,0.01,0.01,0.01,0.01), order.by=seq(chron("31/12/1998", format="d/m/y"), chron("04/01/1999", format="d/m/y"), by="day"))
length(vdPrices)

vdDivs <- zoo(c(100,100), as.chron(c("01/01/1999","01/02/2009")))

coredata(vdPrices[index(vdDivs+vdPrices)]) <- coredata(vdDivs+vdPrices)
length(vdPrices)

Its a little clunky, but thats because I've tried to replicate the returns from the BBG calls as closely as possible.

I also noticed a mistake in the earlier code snippet - the merge() call should not be there.

thanks
Phil


--- On Fri, 4/24/09, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:

> From: Gabor Grothendieck <ggrothendieck at gmail.com>
> Subject: Re: [R-SIG-Finance] zoo: bug / feature replacing coredata -  subsetting by dates
> To: "Phil Joubert" <philjoubert at yahoo.com>
> Date: Friday, April 24, 2009, 5:02 PM
> Can you provide a minimal self
> contained example, i.e. one that
> does not require bloomberg.
> 
> On Fri, Apr 24, 2009 at 9:49 AM, Phil Joubert <philjoubert at yahoo.com>
> wrote:
> >
> > Hi all
> >
> > I'm using RBloomberg to download some price and
> dividend data. I want to construct a time series of total
> returns, so I need to add the dividends to the price data
> before taking log returns. My problem is that I obtain very
> strange behaviour when I try to change a subset of one zoo
> object (prices) using the indices of the other (dividends).
> >
> > Any ideas, or smarter ways to achieve this?
> >
> > #   Connect Bloomberg
> > library("RBloomberg")
> > oBbgConn <- blpConnect(show.days="trading"
> >
> >
> > dtStart <- chron("31/12/1988", format="d/m/y")
> > dtEnd <- chron("31/12/2008", format="d/m/y"))
> > vdPrices <- blpGetData(oBbgConn, sTicker,
> "PX_LAST", dtStart, dtEnd)
> >
> > # BBG gives dividend data as an awkward table, convert
> it to a zoo with XD dates and dividend amounts
> > vdDividends <- unlist(blpGetData(oBbgConn, sTicker,
> "DVD_HIST", retval="raw"))
> > cnstszDivColumns <- 7
> > szDividends <- length(vdDividends) /
> cnstszDivColumns
> > dim(vdDividends) <- c(szDividends,
> cnstszDivColumns)
> > vdDividends <-
> merge(zoo(as.numeric(vdDividends[,5]),
> as.chron(vdDividends[,2])), all=FALSE)
> >
> >
> > vdPricesPlusDivs <- vdPrices
> > length(vdPricesPlusDivs)
> >
> > #This line returns the expected values
> > coredata(vdPricesPlusDivs[index(vdPrices +
> vdDividends)])
> >
> > #This should replace the coredata with the sum of the
> price + div for XD dates only
> > coredata(vdPricesPlusDivs[index(vdPrices +
> vdDividends)]) <- coredata(vdPrices + vdDividends)
> >
> > length(vdPricesPlusDivs)
> >
> > #but it does not - it adds in approximately
> length(vdPrices* vdDividends) NA's to the coredata vector
> without changing the index vector, and puts the new values
> at the end. The zoo object vdPricesPlusDivs is now
> unusable.
> >
> > I suspect this is an issue with date/index handling at
> some point - if I create dummy timeseries using integers as
> index variables I cannot replicate the problem. I'm working
> on a Windows box.
> >
> > Any help or ideas appreciated!
> > Phil
> >
> > _______________________________________________
> > 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.
> >
> 






More information about the R-SIG-Finance mailing list