【问题标题】:Troubles in applying the zoo aggregate function to a time series将动物园聚合函数应用于时间序列的问题
【发布时间】:2013-03-08 15:43:01
【问题描述】:

我们有以下函数来计算每日一系列价格的月收益:

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

【问题讨论】:

  • 如果您想要每月回报,为什么不直接获取每月价格并从中计算回报?
  • 这是不可重现的。当我运行您提供的数据时,我没有得到 -0.003517301 的二月份回报。我认为这是因为您没有发布获得该值所需的所有数据。
  • 它不能依赖于日期的格式(日期或 PosixCT)?

标签: r return time-series zoo


【解决方案1】:

你的回报是错误的。 2013-01-23 的回报应该是:

> 165.2842/165.5086-1
[1] -0.001355821

但你有0.0193624621。我怀疑这是因为 Prices 是 xts 对象,而不是 zoo 对象。 lag.xts 打破了lag.tsk=1lag.zoo 中的约定,这意味着(t+1)的“滞后”对于使用k=1 来暗示(t-1)的“滞后”的更常见的约定)。

【讨论】:

    猜你喜欢
    • 2012-02-27
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2011-12-14
    • 2012-02-27
    • 2012-03-30
    • 2012-01-12
    相关资源
    最近更新 更多