Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从月度回报计算年度回报,为什么会产生Nan?_R_Xts - Fatal编程技术网

R 从月度回报计算年度回报,为什么会产生Nan?

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

我有一些不规则的数据,下面,这给了我正确的每月回报。现在我想把它转换成年度几何回报率,但出于某种原因,它会返回许多值的NaN

我怀疑这是因为xts对象中的索引值是如何排序的,但我不知道如何将它们转换为降序(在网上也找不到答案)

怎么了?如何解决呢

代码如下

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
馈送负数。