【问题标题】:Calculating a rolling return计算滚动回报
【发布时间】:2020-09-21 18:02:56
【问题描述】:

我有一个包含 3 列的数据框。我想要做的是计算每个月的选定月份滚动期间的回报乘积(或者换句话说,每一行)(如果有的话)。这是数据的基本结构。

set.seed = 100
assets <- c("A", "B", "C", "D", "E", "F", "G", "H", "I")
FileDate <- seq(as.Date("2011-12-30"), as.Date("2019-01-31"), by="months")
df <- merge(x = assets, y = FileDate, all.x = TRUE)
df$return <- runif(774, min=0, max=1)

它应该以一个数据框结尾,其中添加了一个新列,其中包含该时间框架的选定期间累积回报。例如,我在下面显示了四个月的回报。根据数据计算 2012 年 3 月 30 日的 4 个月回报将是: ((1+0.81/100)(1+0.715/100)(1+0.27/100)*(1+0.80/100)-1)*100

这将对 X 列下的每个值重复。

【问题讨论】:

  • set.seed 重现随机数据并用样本数据显示您所说的月回报
  • 我试图增加清晰度。感谢您查看它。第一次,所以设置问题需要一些尝试。

标签: r time-series cumulative-sum


【解决方案1】:

我最终使用了 mutate 函数,您可以在那里设置滞后宽度。我想要的最终版本

    library(dplyr)
    library(zoo)

    # Create Test Dataframe
    set.seed = 100
    assets <- c("A", "B", "C", "D", "E", "F", "G", "H", "I")
    FileDate <- seq(as.Date("2011-12-30"), as.Date("2019-01-31"), by="months")
    df <- merge(x = assets, y = FileDate, all.x = TRUE)
    df$performance <- runif(774, min=0, max=1)

此特定代码以滚动方式创建 5 个月的平均值。如果您按 X 列排序,您可以在 Excel 中查看并重新创建它。

    df <- df %>% 
          group_by(x) %>% 
          mutate(x_mean = rollmean(performance, 5, fill = NA, align = 'right'))

我还找到了一种创建滞后的方法,因此我可以将 4 个先验值用于观察并计算平均值:

    df2 = df %>%
          mutate(perf.4.previous = rollapply(data = perf.1.previous, width = 4, FUN = 
    mean, align = "right", fill = NA, na.rm = T))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2019-02-12
    • 2018-06-23
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多