将动物园聚合函数应用于时间序列时遇到麻烦

时间:2013-03-08 15:43:02

标签: r return time-series zoo

我们有以下功能来计算每日价格系列的月度回报:

PricesRet = diff(Prices)/lag(Prices,k=-1)
tail(PricesRet)
# Monthly simple returns
MonRet = aggregate(PricesRet+1, as.yearmon, prod)-1
tail(MonRet)

问题是它返回错误的值,例如2013年2月的简单回报,该函数返回-0.003517301,而它应该是-0.01304773。

为什么会这样?

以下是最后的价格观察:

> tail(Prices,30)
                 Prices
2013-01-22      165.5086
2013-01-23      165.2842
2013-01-24      168.4845
2013-01-25      170.6041
2013-01-28      169.7373
2013-01-29      169.8724
2013-01-30      170.6554
2013-01-31      170.7210
2013-02-01      173.8043
2013-02-04      172.2145
2013-02-05      172.8400
2013-02-06      172.8333
2013-02-07      171.3586
2013-02-08      170.5602
2013-02-11      171.2172
2013-02-12      171.4126
2013-02-13      171.8687
2013-02-14      170.7955
2013-02-15      171.2848
2013-02-19      170.9482
2013-02-20      171.6355
2013-02-21      170.0300
2013-02-22      169.9319
2013-02-25      170.9035
2013-02-26      168.6822
2013-02-27      168.5180
2013-02-28      168.4935
2013-03-01      169.6546
2013-03-04      169.3076
2013-03-05      169.0579

以下是价格回报:

> tail(PricesRet,50)
              PricesRet
2012-12-18  0.0055865274
2012-12-19 -0.0015461900
2012-12-20 -0.0076140194
2012-12-23  0.0032656346
2012-12-26  0.0147750923
2012-12-27  0.0013482760
2012-12-30 -0.0004768131
2013-01-01  0.0128908541
2013-01-02 -0.0047646818
2013-01-03  0.0103372029
2013-01-06 -0.0024547278
2013-01-07 -0.0076920352
2013-01-08  0.0064368720
2013-01-09  0.0119663301
2013-01-10  0.0153828814
2013-01-13  0.0050590540
2013-01-14 -0.0053324785
2013-01-15 -0.0027043105
2013-01-16  0.0118840383
2013-01-17 -0.0005876459
2013-01-21 -0.0145541598
2013-01-22 -0.0013555548
2013-01-23  0.0193624621
2013-01-24  0.0125802978
2013-01-27 -0.0050807744
2013-01-28  0.0007959058
2013-01-29  0.0046096266
2013-01-30  0.0003844082
2013-01-31  0.0180603867
2013-02-03 -0.0091473127
2013-02-04  0.0036322298
2013-02-05 -0.0000390941
2013-02-06 -0.0085320734
2013-02-07 -0.0046591956
2013-02-10  0.0038517581
2013-02-11  0.0011412046
2013-02-12  0.0026607502
2013-02-13 -0.0062440496
2013-02-14  0.0028645616
2013-02-18 -0.0019651341
2013-02-19  0.0040206637
2013-02-20 -0.0093543648
2013-02-21 -0.0005764665
2013-02-24  0.0057176118
2013-02-25 -0.0129979321
2013-02-26 -0.0009730782
2013-02-27 -0.0001453191
2013-02-28  0.0068911863
2013-03-03 -0.0020455332
2013-03-04 -0.0014747845

该功能的结果是:

> tail(data.frame(MonRet))
               MonRet
ott 2012 -0.000848156
nov 2012  0.009833881
dic 2012  0.033406884
gen 2013  0.087822700
feb 2013 -0.023875638
mar 2013 -0.003517301

1 个答案:

答案 0 :(得分:1)

你的回报错了。 2013-01-23的回报应为:

> 165.2842/165.5086-1
[1] -0.001355821

但你有0.0193624621。我怀疑这是因为Prices是一个xts对象,而不是动物园对象。 lag.xts lag.tslag.zoo的{​​{1}}中的约定违反了(t + 1)的“滞后”,这是使用k=1的更常见惯例意味着(t-1)的“滞后”。