如何使用 R 计算三年滚动 return
How to calculate three year rolling return using R
我需要滚动 return 工作 3 年(每个 ID 3 年 return,每年)。
我尝试使用 PerformanceAnalytics
包,但我一直收到错误消息,提示我的数据不是时间序列。
当我使用该函数时,它显示为 TRUE,所以我完全不知道如何让 3 年滚动 return 起作用。所以我只需要有人向我提供将生成 3 年 returns.
的 R 代码
这是一个示例数据集
ppd_id FY TF_1YR
1 2001 -0.0636
1 2002 -0.0929
1 2003 0.1648
1 2004 0.1006
1 2005 0.1098
1 2006 0.0837
1 2007 0.1792
1 2008 -0.1521
1 2009 -0.1003
1 2010 0.0847
1 2011 0.0221
1 2012 0.1801
1 2013 0.146
1 2014 0.1202
1 2015 0.0105
1 2016 0.1022
1 2017 0.1286
1 2018 0.0929
这是我的代码
library(smooth)
library(readr)
pensionreturns <- read_csv("pensionreturns.csv")
sma(pensionreturns, h=
假设:
- 我们从末尾注释中的数据框
DF2
开始,这是有问题的重复数据,因此有 2 个 ID
- 第三列代表 returns 所以 3 年 returns 是 1 加上最后 3 个值(当前值和之前的 2)中的每一个的乘积都减 1,即( 1 + r0) * (1 + r1) * (1 + r2) - 1 其中 r0 是当年的 return,r1 是前一年的 return,r2 是 return在那之前的一年。
将数据转换为广角形式的动物园系列 z,然后使用 rollapplyr
。如果不需要开头的 NA,则省略 fill=
参数。结果将是 return 的动物园系列。 (我们可以使用 fortify.zoo
,参见 ?fortify.zoo
,将其转换为数据框,但如果将其保留为时间序列,执行进一步的时间序列操作会更容易。)
library(zoo)
z <- read.zoo(DF2, index = 2, split = 1, FUN = c)
rollapplyr(z + 1, 3, prod, fill = NA) - 1
给出这个动物园系列:
1 2
2001 NA NA
2002 NA NA
2003 -0.010609049 -0.010609049
2004 0.162883042 0.162883042
2005 0.422740161 0.422740161
2006 0.323680900 0.323680900
2007 0.418212355 0.418212355
2008 0.083530596 0.083530596
2009 -0.100440641 -0.100440641
2010 -0.172530498 -0.172530498
2011 -0.002527919 -0.002527919
2012 0.308343674 0.308343674
2013 0.382282521 0.382282521
2014 0.514952431 0.514952431
2015 0.297228567 0.297228567
2016 0.247648627 0.247648627
2017 0.257004321 0.257004321
2018 0.359505217 0.359505217
备注
DF <- structure(list(ppd_id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), FY = 2001:2018, TF_1YR = c(-0.0636,
-0.0929, 0.1648, 0.1006, 0.1098, 0.0837, 0.1792, -0.1521, -0.1003,
0.0847, 0.0221, 0.1801, 0.146, 0.1202, 0.0105, 0.1022, 0.1286,
0.0929)), class = "data.frame", row.names = c(NA, -18L))
DF2 <- rbind(DF, transform(DF, ppd_id = 2))
我需要滚动 return 工作 3 年(每个 ID 3 年 return,每年)。
我尝试使用 PerformanceAnalytics
包,但我一直收到错误消息,提示我的数据不是时间序列。
当我使用该函数时,它显示为 TRUE,所以我完全不知道如何让 3 年滚动 return 起作用。所以我只需要有人向我提供将生成 3 年 returns.
的 R 代码这是一个示例数据集
ppd_id FY TF_1YR
1 2001 -0.0636
1 2002 -0.0929
1 2003 0.1648
1 2004 0.1006
1 2005 0.1098
1 2006 0.0837
1 2007 0.1792
1 2008 -0.1521
1 2009 -0.1003
1 2010 0.0847
1 2011 0.0221
1 2012 0.1801
1 2013 0.146
1 2014 0.1202
1 2015 0.0105
1 2016 0.1022
1 2017 0.1286
1 2018 0.0929
这是我的代码
library(smooth)
library(readr)
pensionreturns <- read_csv("pensionreturns.csv")
sma(pensionreturns, h=
假设:
- 我们从末尾注释中的数据框
DF2
开始,这是有问题的重复数据,因此有 2 个 ID - 第三列代表 returns 所以 3 年 returns 是 1 加上最后 3 个值(当前值和之前的 2)中的每一个的乘积都减 1,即( 1 + r0) * (1 + r1) * (1 + r2) - 1 其中 r0 是当年的 return,r1 是前一年的 return,r2 是 return在那之前的一年。
将数据转换为广角形式的动物园系列 z,然后使用 rollapplyr
。如果不需要开头的 NA,则省略 fill=
参数。结果将是 return 的动物园系列。 (我们可以使用 fortify.zoo
,参见 ?fortify.zoo
,将其转换为数据框,但如果将其保留为时间序列,执行进一步的时间序列操作会更容易。)
library(zoo)
z <- read.zoo(DF2, index = 2, split = 1, FUN = c)
rollapplyr(z + 1, 3, prod, fill = NA) - 1
给出这个动物园系列:
1 2
2001 NA NA
2002 NA NA
2003 -0.010609049 -0.010609049
2004 0.162883042 0.162883042
2005 0.422740161 0.422740161
2006 0.323680900 0.323680900
2007 0.418212355 0.418212355
2008 0.083530596 0.083530596
2009 -0.100440641 -0.100440641
2010 -0.172530498 -0.172530498
2011 -0.002527919 -0.002527919
2012 0.308343674 0.308343674
2013 0.382282521 0.382282521
2014 0.514952431 0.514952431
2015 0.297228567 0.297228567
2016 0.247648627 0.247648627
2017 0.257004321 0.257004321
2018 0.359505217 0.359505217
备注
DF <- structure(list(ppd_id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), FY = 2001:2018, TF_1YR = c(-0.0636,
-0.0929, 0.1648, 0.1006, 0.1098, 0.0837, 0.1792, -0.1521, -0.1003,
0.0847, 0.0221, 0.1801, 0.146, 0.1202, 0.0105, 0.1022, 0.1286,
0.0929)), class = "data.frame", row.names = c(NA, -18L))
DF2 <- rbind(DF, transform(DF, ppd_id = 2))