2012-11-06 15 views
7

Sto provando a calcolare la volatilità storica di 20 periodi a rotazione. Prendo i rendimenti giornalieri:Rollapply per le serie temporali

ret<-ROC(data1) 

E allora io uso rollapply per ottenere la HV 20 giorni per ogni colonna:

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

Il problema è che le osservazioni in vol comincia ad apparire dopo dieci giorni che è sbagliato come specificato 20.

Per dimostrazione qui è esempio dei dati:

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 

supponga che i dati sopra è memorizzato in x, allora:

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

produrrà una prima osservazione a 10 ° fila anziché 20. Anche la deviazione standard è sbagliato troppo.

dovrei essere manca qualcosa qui ...

risposta

18

è necessario utilizzare align='right' invece di utilizzare il default, che è align='center', o invece di usare rollapply, utilizzare il rollapplyr involucro che ha align='right' come predefinito.

Da ?rollapply:

allineamento specifyies se l'indice del risultato dovrebbe essere a sinistra oa destra o centrato (default) rispetto al periodo di rotazione di osservazioni. Questo argomento è usato solo se la larghezza rappresenta le larghezze.

Anche se, per questo, personalmente, mi piacerebbe utilizzare runSD dal pacchetto TTR perché utilizza il codice compilato e sarà più veloce.

Uno di questi dovrebbe fare ciò che ci si aspetta, ma il secondo sarà più veloce.

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

library(TTR) 
runSD(x, 20) 
Problemi correlati