【问题标题】:Collision of colnames in PerformanceAnalyticsPerformanceAnalytics 中的列名冲突
【发布时间】:2013-12-20 15:05:13
【问题描述】:

我最近发现了 PerformanceAnalytics,发现它对我的研究非常有用。但是,我发现了一个奇怪的行为。我正在尝试扩展 InformationRatio() 以接受零基准回报:

InformationRatio <- function(Ra, Rb=NULL, scale=NA) {
  if (is.null(Rb)) {
    Rb <- Ra[, 1, FALSE]
    Rb[] <- 0
  }
  PerformanceAnalytics::InformationRatio(Ra, Rb, scale)
}

InformationRatio(managers[, 1:6])

返回

                        HAM1     HAM2    HAM3      HAM4      HAM5    HAM6
Information Ratio: HAM1  Inf 1.373211 1.19553 0.6592017 0.2355561 1.66417

Inf 不是我所期望的。原来(浏览源代码后),它的起源包含在Return.excess()

    coln.Rf = colnames(Rf)
    Rft = cbind(R, Rf)
    Rft = na.locf(Rft[, make.names(coln.Rf)])
    Rf = Rft[which(index(R) %in% index(Rft))]

如果资产回报 (Ra==R) 和基准回报 (Rb==Rf) 之间的列名冲突,则将 Rf 分配给 R,最终导致除以零。

这里有一个解决方法:

InformationRatio <- function(Ra, Rb=NULL, scale=NA) {
  if (is.null(Rb)) {
    Rb <- Ra[, 1, FALSE]
    Rb[] <- 0
    colnames(Rb) <- "zero"
  }
  PerformanceAnalytics::InformationRatio(Ra, Rb, scale)
}

InformationRatio(managers[, 1:6])

返回

                            HAM1     HAM2    HAM3      HAM4      HAM5    HAM6
Information Ratio: zero 1.549119 1.373211 1.19553 0.6592017 0.2355561 1.66417

这是一个错误还是我错过了什么?如果是,我该如何举报?我无法通过this page,没有任何错误跟踪器。我想写一封电子邮件,但我在这里见过开发人员,所以 SO post 可能是一个不错的选择,不是吗?

【问题讨论】:

    标签: r performanceanalytics


    【解决方案1】:

    Rb 不应该是一个标量,它应该是一个时间序列。

    Rb 在文档中被描述为

    Rb: return vector of the benchmark asset
    

    所以我认为文档可能会更清晰,我会改进它以指定时间序列。我们需要将基准收益的时间序列合并到资产收益的时间序列中进行计算。

    这是一个为 Rb 输入时间序列的工作示例:

    data(managers)
    rb<-xts( rep(0,nrow(managers)), order.by=index(managers) )
    colnames(rb)<-'zero'
    InformationRatio(managers,rb)
    

    产生:

                                HAM1     HAM2    HAM3      HAM4      HAM5    HAM6 EDHEC LS EQ  SP500 TR US 10Y TR US 3m TR
    Information Ratio: zero 1.549119 1.373211 1.19553 0.6592017 0.2355561 1.66417    1.665694 0.6448502 0.7265079 7.620057
    

    至于 Return.excess,我认为在那里不允许 colnames 冲突是有意义的,因为您正在尝试确定一个系列对另一个系列的超额回报。您在上面粘贴的代码旨在合并系列并创建与输入系列具有相同索引的输出系列。与最初编写函数时(在 xts 之前)相比,现在可以更有效地完成该操作,我也会看看。

    通常,R 包的错误报告应发送至包网站或包维护者。电子邮件会很好。 SO 应该是针对使用问题,而不是错误报告,一般来说,因为错误得到修复,而 SO 仍然保留过时的数据。

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 2015-03-21
      • 2011-07-02
      • 1970-01-01
      • 2014-10-14
      相关资源
      最近更新 更多