首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用R计算三年滚动收益

如何利用R计算三年滚动收益
EN

Stack Overflow用户
提问于 2022-03-27 13:56:09
回答 1查看 92关注 0票数 1

我需要得到一个3年滚动返回工作(每个身份证3年的回报,每年)。

我尝试过使用PerformanceAnalytics包,但我一直收到一个错误,即我的数据不是时间序列。

当我使用这个函数时,它说的是对的,所以我完全不知道如何让3年的滚动回归工作。所以,我只需要有人提供给我的R代码,将产生3年的回报。

这是一个样本数据集

代码语言:javascript
复制
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

这里是数据集的链接

这是我的密码

代码语言:javascript
复制
library(smooth)
library(readr)
pensionreturns <- read_csv("pensionreturns.csv")
sma(pensionreturns, h=
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-27 14:22:20

假设:

  • 我们从注释末尾的数据帧DF2开始,这是一个重复的数据,这样就有2个id
  • 第三列表示回报,因此3年回报是最后3个值(当前值和前3个值)中每一个加一个的乘积,所有减1,即(1 + r0) * (1 + r1) * (1 + r2) -1,其中r0是当年的回报,r1是前一年的回报,r2是前一年的回报。

将数据转换为宽格式的动物园系列z,然后使用rollapplyr。如果在开始时不需要NA,则省略fill=参数。结果将是一个动物园系列的回报。(我们可以使用fortify.zoo (参见?fortify.zoo )将其转换为数据框架,但如果将其作为时间序列,则执行进一步的时间序列操作将更容易。)

代码语言:javascript
复制
library(zoo)

z <- read.zoo(DF2, index = 2, split = 1, FUN = c)
rollapplyr(z + 1, 3, prod, fill = NA) - 1

给这个动物园系列赛:

代码语言:javascript
复制
                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

备注

代码语言:javascript
复制
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))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71636970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档