2012-11-06 8 views
7

Ich versuche, die historische Volatilität der rollenden 20 Periode zu berechnen. Ich nehme die täglichen Renditen:Rollapply für Zeitreihe

ret<-ROC(data1) 

Und ich rollapply dann mit dem 20 Tage HV für jede Spalte erhalten:

vol<-rollapply(ret,20,sd,by.column=T,fill=NA) 

Das Problem ist, dass die Beobachtungen in vol beginnt nach zehn Tagen erscheinen, was falsch ist als ich 20 angegeben hier

Zur Demonstration ist Probe der Daten:

0.000000000, 0.005277045, 0.023622047, 0.002564103,-0.002557545, -0.020512821, 
0.007853403,-0.012987013, 0.007894737, 0.015665796, 0.000000000, -0.002570694, 
0.002577320, -0.015424165, 0.002610966, 0.010416667, 0.002577320, 0.015424165, 
0.000000000, -0.002531646, -0.002538071, 0.030534351, 0.014814815, -0.007299270, 
-0.009803922, -0., 0.002506266, -0.015000000,-0.002538071, 0.002544529 

sei angenommen, über die Daten in x gespeichert ist, dann gilt:

rollapply(x,20,sd,fill=NA) 

eine erste Beobachtung am 10. Reihe ergibt statt 20 Auch ist die SD zu falsch.

Ich sollte hier etwas fehlt ...

Antwort

18

Sie müssen align='right' verwenden, anstatt die Standardeinstellung zu verwenden, die align='center' ist, oder stattdessen rollapply verwenden, verwenden Sie die rollapplyr Wrapper, der align='right' als Standard hat.

Von ?rollapply:

align specifyies ob der Index des Ergebnisses sollte links- oder rechtsbündig oder zentriert sein (default) im Vergleich zu dem Rollfenster von Beobachtungen. Dieses Argument wird nur verwendet, wenn die Breite die Breite darstellt.

Obwohl für diese, ich persönlich runSD vom TTR Paket verwenden würde, weil es kompilierten Code verwendet und wird schneller sein.

Beide sollten tun, was Sie erwarten, aber die zweite wird schneller sein.

library(zoo) 
rollapply(x, 20, sd, fill=NA, align='right') 

library(TTR) 
runSD(x, 20)