2012-12-21 30 views
5

Weź pod uwagę, że mamy dzienne szeregi czasowe kursów akcji (powiedzmy indeks FTSE). Chcemy obliczyć dzienne, miesięczne i roczne zwroty.Agregacja szeregów czasowych do danych rocznych

Aby obliczyć miesięczne i roczne zwroty, musimy agregować dane szeregów czasowych na miesiące i lata. W pakiecie "zoo" mamy funkcję agregującą, która może nam pomóc w agregowaniu danych do częstotliwości miesięcznych. Poniżej linii kodu przy użyciu klasę as.yearmon:

# Computing simple returns 
FTSERet = diff(FTSE)/lag(FTSE,k=-1) 

# Monthly simple returns 
MonRet <- aggregate(FTSERet+1, as.yearmon, prod)-1 

# Quarterly simple returns 
QuartRet <- aggregate(FTSERet+1, as.yearqtr, prod)-1 

nie znalazłem równoważne klasy jako as.yearmon dla danych miesięcznych lub kwartalnych danych dla as.yearqtr do agregowania danych rocznie. Czy masz jakieś wskazówki na ten temat?

Odpowiedz

4

"yearmon" i "yearqtr" klasy reprezentują daty jako rok + frakcji tak:

as.year <- function(x) as.integer(as.yearmon(x)) 

Należy również pamiętać ten konstrukt: diff(x, arithmetic = FALSE) - 1

0

Sprawdź pakiet szeregów czasowych here i poszukaj opcji "sezonowości" gdzieś w dokumentacji. Chyba dla danych kwartalnych szukasz w szeregu czasowego z sezonowością 4, jeśli spojrzeć na dane miesięczne - szukasz w szeregu czasowego z sezonowością 12.

0

może chcesz przyjrzeć się funkcji w pakiecie quantmod allReturns.

library(quantmod) 
getSymbols("^FTSE") 
allRet <- allReturns(FTSE) 

Aby obliczyć roczne zyski za pomocą aggregate.zoo, wystarczy wyodrębnić rok z indeksu.

YearRet <- aggregate(FTSERet+1, as.integer(format(index(FTSERet),"%Y")), prod)-1 
+0

Funkcja periodReturn wymaga "obiektu ceny stanu lub obiektu typu OHLC", jak przekonwertować obiekt zoo na wymaganą klasę obiektu? –

+0

@LorenzoRigamonti: możesz użyć 'allReturns (as.xts (zoo_object))'. –