2012-11-06 10 views
7

Próbuję obliczyć zmienność historyczną w okresie 20 lat. Biorę codzienne powroty:Rollapply dla serii czasowych

ret<-ROC(data1) 

I wtedy użyć rollapply uzyskać HV 20 dni dla każdej kolumny:

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

Problem polega na tym, że obserwacje w Tomie zaczyna pojawiać po dziesięciu dni, co jest nie tak jak określono 20.

do demonstracji tutaj jest próbka danych:

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 

Przyjmuje się, że powyższe dane są przechowywane w X, wówczas:

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

przyniesie pierwszej obserwacji w rzędzie 10 zamiast 20. Również SD jest za niewłaściwy.

Byłbym czegoś brakuje tutaj ...

Odpowiedz

18

Trzeba użyć align='right' zamiast używania domyślnego, który jest align='center', albo zamiast korzystania rollapply, korzystania z rollapplyr owijkę, która ma align='right' jako domyślny.

Od ?rollapply:

align specifyies czy indeks wyniku powinny być lewo lub w prawo wyrównane lub wyśrodkowany (domyślnie) w porównaniu do toczenia okna obserwacji. Ten argument jest używany tylko wtedy, gdy szerokość oznacza szerokość.

Mimo, bo to osobiście bym użyć runSD z pakietu TTR ponieważ wykorzystuje kod skompilowany i będzie szybciej.

Każdy z nich powinien zrobić to, czego oczekujesz, ale drugi będzie szybszy.

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

library(TTR) 
runSD(x, 20) 
Powiązane problemy