计算每月回报的年回报率,为什么会产生楠?

时间:2016-07-18 14:14:39

标签: r xts

我在下面有一些不规则的数据,这给了我正确的每月回报。现在我希望将其转换为年度几何回归,但由于某种原因,它会返回NaN以获得许多值。

我怀疑这是因为xts objet中的索引值是如何排序的,但我不知道如何将它们变为降序(无法在线找到答案)。

有什么问题?它怎么解决?

以下代码

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

2 个答案:

答案 0 :(得分:3)

我不知道annualReturn()函数的内部工作原理,它是您编写的自定义函数还是来自某个包,但可能解释您所看到的内容NaN在多个地方,你正在做一些带负数的对数函数。

只需使用基数R,我们就可以看到:

> log(-2)
[1] NaN

记录负数会产生NaN,我相信这可能与您的数据有关。

答案 1 :(得分:1)

?annualReturn 说明表示,

  

给定一组价格,返回定期退货。

所以它期望价格和你给它的回报,它被视为价格。而作为Beta test of interactive serial port is available:,取负数的对数会导致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