Rollapply for time series

前端 未结 2 614
我寻月下人不归
我寻月下人不归 2021-02-02 01:55

I am trying to calculate the rolling 20 period historical volatility. I take the daily returns:

ret<-ROC(data1)

And then I use rollapply to

2条回答
  •  攒了一身酷
    2021-02-02 02:53

    I recommend runner function in runner package to apply any R function on rolling windows. Below runner output identical to zoo.

    library(runner)
    
    runner(
      x, 
      function(x) sd(x),
      k = 20, 
      na_pad = TRUE
    )
    
    

    runner can reproduce zoo output and also have options like handling unequally spaced data and other (for more go to documentation and vignettes for more).

    library(runner)
    library(zoo)
    
    x <- c(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.012376238,  0.002506266, -0.015000000,-0.002538071,  0.002544529)
    
    identical(
      runner(x, sd, k = 20, na_pad = TRUE),
      rollapply(x, 20, sd, fill = NA, align = "right")
    )
    
    # centered alignment
    identical(
      runner(x, sd, k = 20, lag = -10, na_pad = TRUE),
      rollapply(x, 20, sd, fill = NA, align = "center")
    )
    

提交回复
热议问题