[R-SIG-Finance] aggregate an xts by factors
Joshua Ulrich
josh.m.ulrich at gmail.com
Tue Aug 4 19:06:51 CEST 2015
On Mon, Aug 3, 2015 at 6:51 PM, Aaron Goldenberg
<aaron at quantrisktrading.com> wrote:
> Alternatively, I could have two separate time series, one for each factor.
>
> On Mon, Aug 3, 2015 at 7:48 PM, Aaron Goldenberg <aaron at quantrisktrading.com
>> wrote:
>
>> This seems like a simple issue but I cannot get it to work for some
>> reason. I have a time series object that has daily returns of several
>> stocks that I would like to aggregate by qualitative factor. In my toy
>> example, for each day, I would like to have two entries, one for the sum of
>> the returns of my two computer stocks and another for my financial stock.
>> Then I would like to calculate the cumulative sum of the returns for each
>> factor. What am I not doing correctly?
>>
>> library(quantmod)
>> getSymbols("AAPL", src="yahoo", from="2015-07-01")
>> AAPL <- dailyReturn(AAPL$AAPL.Adjusted)
>> AAPL <- cbind(data.frame(AAPL), sector="Computer")
>> AAPL <- as.xts(AAPL)
>> getSymbols("GOOG", src="yahoo", from="2015-07-01")
>> GOOG <- dailyReturn(GOOG$GOOG.Adjusted)
>> GOOG <- cbind(data.frame(GOOG), sector="Computer")
>> GOOG <- as.xts(GOOG)
>> getSymbols("GS", src="yahoo", from="2015-07-01")
>> GS <- dailyReturn(GS$GS.Adjusted)
>> GS <- cbind(data.frame(GS), sector="Financial")
>> GS <- as.xts(GS)
>> combined <- rbind(AAPL, GOOG, GS)
>> #combined <- period.sum(combined$daily.returns, endpoints(combined,
>> on="days"))
>> combined <- aggregate(combined, by=combined$sector, sum)
>>
The problem is that you're trying to mix types in the xts data. xts
extends zoo, which is simply a matrix with an index attribute, and you
can't mix types in a matrix.
There are many different ways to do this. Here's one way that should
be easily extensible to more sectors.
library(quantmod)
Computer <- new.env()
Financial <- new.env()
getSymbols("AAPL;GOOG", from="2015-07-01", env=Computer)
getSymbols("GS", from="2015-07-01", env=Financial)
sectorReturnSum <- function(env) {
adj <- do.call(cbind, eapply(env, Ad))
ret <- ROC(adj, type="discrete")
xts(rowSums(ret, na.rm=TRUE), index(ret))
}
combined <- merge(Computer = sectorReturnSum(Computer),
Financial = sectorReturnSum(Financial))
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-SIG-Finance at r-project.org 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.
--
Joshua Ulrich | about.me/joshuaulrich
FOSS Trading | www.fosstrading.com
More information about the R-SIG-Finance
mailing list