R 从月度回报计算年度回报,为什么会产生Nan?
我有一些不规则的数据,下面,这给了我正确的每月回报。现在我想把它转换成年度几何回报率,但出于某种原因,它会返回许多值的NaN 我怀疑这是因为xts对象中的索引值是如何排序的,但我不知道如何将它们转换为降序(在网上也找不到答案) 怎么了?如何解决呢 代码如下R 从月度回报计算年度回报,为什么会产生Nan?,r,xts,R,Xts,我有一些不规则的数据,下面,这给了我正确的每月回报。现在我想把它转换成年度几何回报率,但出于某种原因,它会返回许多值的NaN 我怀疑这是因为xts对象中的索引值是如何排序的,但我不知道如何将它们转换为降序(在网上也找不到答案) 怎么了?如何解决呢 代码如下 Browse[2]> Data.xts[,1] monthly.returns 2012-09-27 -0.02469261 2012-10-30 -0.05129329 2012-11-29
Browse[2]> Data.xts[,1]
monthly.returns
2012-09-27 -0.02469261
2012-10-30 -0.05129329
2012-11-29 0.05129329
2012-12-30 0.11778304
2013-01-30 -0.14310084
2013-02-27 -0.08004271
2013-03-28 -0.02817088
2013-04-29 -0.02898754
2013-05-30 0.16251893
2013-06-27 0.00000000
2013-07-30 0.52324814
2013-08-29 0.86927677
2013-09-29 -0.01250016
2013-10-30 0.02484600
2013-11-28 -0.06986968
2013-12-30 -0.06453852
2014-01-30 0.17055672
2014-02-27 0.22195942
2014-03-30 0.02342027
2014-04-29 -0.11258822
2014-05-29 0.03061464
2014-06-29 -0.08381867
2014-07-30 -0.06782260
2014-08-28 -0.08541775
2014-09-29 -0.10394609
2014-10-30 -0.29833937
2014-11-27 0.05556985
2014-12-30 -0.22652765
Browse[2]> annualReturn(Data.xts[, 'monthly.returns'] , type = 'log')
yearly.returns
2012-12-30 NaN
2013-12-30 NaN
2014-12-30 1.255605
我不知道
annualReturn()
函数的内部工作原理,不管它是您编写的自定义函数还是来自某个软件包,但您在多个地方看到的NaN
的一个可能解释是,您正在使用负数做对数函数
仅使用base R,我们可以看到:
> log(-2)
[1] NaN
取一个负数的日志会产生NaN,我相信这可能就是您在数据中看到的。我不知道
annualReturn()
函数的内部工作原理,不管它是您编写的自定义函数还是来自某个包,但是对于你在多个地方看到的NaN
,一个可能的解释是你在做一些负数的对数函数
仅使用base R,我们可以看到:
> log(-2)
[1] NaN
取一个负数的日志会产生NaN,我相信这可能就是你在数据中看到的。年报描述说 给定一组价格,定期返回 所以它期望价格,你给它回报,它把回报当作价格。同样,取一个负数的对数会得到NaN
您可以使用
apply.yearly
直接汇总您的回报,假设您的回报是算术回报
> apply.yearly(1+x, prod)-1
[,1]
2012-12-30 0.08731379
2013-12-30 1.16831187
2014-12-30 -0.46319006
如果它们是日志返回,则应将它们相加
> apply.yearly(x, sum)
[,1]
2012-12-30 0.09309043
2013-12-30 1.15267951
2014-12-30 -0.47633945
?年度回报
说明中说
给定一组价格,定期返回
所以它期望价格,你给它回报,它把回报当作价格。同样,取一个负数的对数会得到NaN
您可以使用
apply.yearly
直接汇总您的回报,假设您的回报是算术回报
> apply.yearly(1+x, prod)-1
[,1]
2012-12-30 0.08731379
2013-12-30 1.16831187
2014-12-30 -0.46319006
如果它们是日志返回,则应将它们相加
> apply.yearly(x, sum)
[,1]
2012-12-30 0.09309043
2013-12-30 1.15267951
2014-12-30 -0.47633945
年度回报来自quantmod软件包。我认为问题在于,我试图在给出的月度回报中使用年度回报,而不是股票的月度收盘价和开盘价。使用收盘价和开盘价可以很好地工作。@uncool这听起来是一个很好的解释。至少您验证了您正在将负数馈送到
annualReturn
。annualReturn来自quantmod包。我认为问题在于,我试图在给出的月度回报中使用年度回报,而不是股票的月度收盘价和开盘价。使用收盘价和开盘价可以很好地工作。@uncool这听起来是一个很好的解释。至少您验证了您正在向annualReturn
馈送负数。