【问题标题】:time series rolling function per group每组时间序列滚动函数
【发布时间】:2020-02-12 18:33:59
【问题描述】:

我有以下类型的数据集:

      ID     date       RET
1  10026 20171227 -0.003768
2  10026 20171228  0.008958
3  10027 20171227 -0.001447
4  10027 20171228 -0.017454
5  10028 20171227 -0.009988
6  10028 20171228  0.013813

我需要计算 RET 的滚动标准差,每个 ID 的窗口为 252。为此,函数

roll_sd(df50[,2],252)

计算滚动 sd 的工作,但不考虑不同的 ID。我知道我可以写一个循环类型

for (i in 1:dim(list_of_all_ID_to_be_created)) {
  roll_sd(df50[i,2],252)
}

然后将此值附加到空数据框。但是,有没有办法一次完成所有操作,以便在我的原始数据框中我只得到一个新列“roll_sd”,它为每个 ID 进行计算?期望的结果如下:

      ID     date       RET  roll_sd
1  10026 20171227 -0.003768  0.18667
2  10026 20171228  0.008958  0.21667
3  10027 20171227 -0.001447  0.18668
4  10027 20171228 -0.017454  0.32542
5  10028 20171227 -0.009988  0.87763
6  10028 20171228  0.013813  0.11221

【问题讨论】:

    标签: r grouping rolling-computation


    【解决方案1】:

    使用窗口大小为 252 的 roll_sd 将使每个组中的前 252 个值成为 NA - 它不会给出您在问题中建议的结果。但是,在您可以实现结果的几种方法中,最简单的可能是使用 tidyverse 系列软件包中的 group_bymutate。我已经使用drop_na从最终数据框中删除了结果NA

    library(tidyverse)
    library(roll)
    
    df <- data.frame(ID = rep(letters[1:5], 500), RET = rnorm(2500))
    
    df %>% 
      group_by(ID) %>% 
      mutate(roll_sd = roll_sd(RET, 252)) %>% 
      drop_na(roll_sd)
    #> # A tibble: 1,245 x 3
    #> # Groups:   ID [5]
    #>    ID       RET roll_sd
    #>    <fct>  <dbl>   <dbl>
    #>  1 a     -0.538   1.02 
    #>  2 b     -0.669   1.08 
    #>  3 c     -0.438   0.990
    #>  4 d     -0.511   1.06 
    #>  5 e      0.953   1.04 
    #>  6 a     -1.68    1.02 
    #>  7 b     -0.806   1.08 
    #>  8 c     -1.86    0.995
    #>  9 d      3.49    1.08 
    #> 10 e     -1.36    1.05 
    #> # ... with 1,235 more rows
    

    【讨论】:

    • 效果很好!关于 NaN 这不是问题,它以这种方式工作是正常的。在我的“真实”数据框中,我花了一年多的数据才能以这种方式计算完整的滚动 sd 时间序列。
    • @Matteo 我对 NA 问题感到高​​兴 - 我想知道我是否误解了这个问题!
    猜你喜欢
    • 1970-01-01
    • 2019-08-17
    • 2017-06-07
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2021-04-25
    • 1970-01-01
    相关资源
    最近更新 更多